<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Desmond Rivet - Blog</title>
  
  <subtitle>My old school blog</subtitle>
  
  <icon>https://desmondrivet.com/static/img/me03.jpg</icon>
  <link href="https://desmondrivet.com/posts/feed_articles.xml" rel="self"/>
  <link href="https://desmondrivet.com/posts/articles/"/>
  <updated>2026-07-28T12:41:36Z</updated>
  <id>https://desmondrivet.com/posts/articles/</id>
  <author>
    <name>Desmond Rivet</name>
    <email>desmond.rivet@gmail.com</email>
  </author>
  
  <entry>
    <title>Thoughts on Nolan&#39;s Odyssey</title>
    <link href="https://desmondrivet.com/2026/07/28/odyssey-nolan"/>
    <updated>2026-07-28T12:41:36Z</updated>
    <id>https://desmondrivet.com/2026/07/28/odyssey-nolan</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;I recently saw &lt;a href=&quot;https://en.wikipedia.org/wiki/Christopher_Nolan&quot;&gt;Christopher Nolan&lt;/a&gt;&#39;s &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Odyssey_(2026_film)&quot;&gt;The Odyssey&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ignoring the advice I often dispense in situations like these, I decided to
read the &lt;a href=&quot;https://en.wikipedia.org/wiki/Odyssey&quot;&gt;poem&lt;/a&gt; beforehand.  I originally bought a cheap, used, prose
translation by &lt;a href=&quot;https://en.wikipedia.org/wiki/W._H._D._Rouse&quot;&gt;W. H. D. Rouse&lt;/a&gt; that I found difficult to get through, so
I pivoted early on to &lt;a href=&quot;https://en.wikipedia.org/wiki/Emily_Wilson_(classicist)&quot;&gt;Emily Wilson&lt;/a&gt;&#39;s &lt;a href=&quot;https://en.wikipedia.org/wiki/Odyssey_(Emily_Wilson_translation)&quot;&gt;version&lt;/a&gt; and found it &lt;em&gt;much&lt;/em&gt;
more accessible.  I&#39;ll likely have much more to say about the experience of
reading the Odyssey, particularly since I was in the unusual position, for
an amateur, of having two translations at my fingertips at the same time,
but that is a discussion for another day.  Suffice it to say that I read the
poem before seeing the movie and it unsurprisingly coloured my experience of
the whole thing.&lt;/p&gt;
&lt;h2&gt;The Short of It&lt;/h2&gt;
&lt;p&gt;Let&#39;s get this out of the way first.  I &lt;em&gt;liked&lt;/em&gt; the movie, but I didn&#39;t
&lt;em&gt;love&lt;/em&gt; it.  I thought it looked amazing and found myself genuinely on the
edge of my seat during certain sequences (the scenes with &lt;a href=&quot;https://en.wikipedia.org/wiki/Circe&quot;&gt;Circe&lt;/a&gt; come to
mind).  The &lt;a href=&quot;https://en.wikipedia.org/wiki/Siren_(mythology)&quot;&gt;Sirens&lt;/a&gt; were handled (almost) perfectly.  I loved how
&lt;a href=&quot;https://en.wikipedia.org/wiki/Siren_(mythology)&quot;&gt;Agamemnon&lt;/a&gt; was portrayed as a sort of towering, larger than life, yet
mysterious figure who casts a long shadow over the whole movie (Nolan&#39;s
decision to show only glimpses of his face was a good one.  He&#39;s like the
ancient Greek version of Darth Vader).  And the &lt;a href=&quot;https://en.wikipedia.org/wiki/Trojan_Horse&quot;&gt;Trojan Horse&lt;/a&gt; itself
felt - I never thought I would say this - &lt;em&gt;fresh&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;The Long of It&lt;/h2&gt;
&lt;p&gt;With all that said, I did have some problems with the movie, most of them
sourced, as you might expect, in differences from the poem.  This
is why I usually advise people to watch a movie before reading the source
material on which it&#39;s based - you won&#39;t have any preconceived notions
muddying your experience.&lt;/p&gt;
&lt;p&gt;The first problem is that book Odysseus is supposed to be clever and wily.
Film Odysseus is neither; he&#39;s basically a tortured soldier with PTSD.  In
the Emily Wilson translation, Odysseus is famously described as
&amp;quot;complicated&amp;quot;; in the film, he is very much not.&lt;/p&gt;
&lt;p&gt;This &lt;em&gt;mostly&lt;/em&gt; works, but not always.  Nolan restructures enough of the plot
so that Odysseus&#39; cleverness isn&#39;t actually required, in &lt;em&gt;most&lt;/em&gt; cases, to
move it forward. The movie barely mentions that he&#39;s the one that came up
with the idea for the Trojan Horse.  It omits the memorable scene with
Odysseus and his men clinging to the undersides of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Cyclopes&quot;&gt;Cyclops&lt;/a&gt;&#39; sheep.
It omits the famous &amp;quot;Nobody&amp;quot; ruse.  Your mileage may vary, but I found it
genuinely disappointing.&lt;/p&gt;
&lt;p&gt;Please don&#39;t misunderstand me.  I don&#39;t think that faithfulness to source
material is the metric by which we should judge an adaptation - particularly
not the adaptation of a 3000 year poem, itself likely an amalgamation of
different versions of the mythology.  It&#39;s kind of crazy to talk about
narrative purity in this context.  Book Odysseus and film Odysseus are two
different characters and that is not, in itself, a bad thing.&lt;/p&gt;
&lt;p&gt;Except, of course, that certain story beats only make sense when we&#39;re
talking about one version of the character over the other.  Film Odysseus is
apparently the kind of guy who plucks his bow to give the animal he&#39;s
hunting a fighting chance.  It seems strange that a guy like that would fire
a random arrow at a retreating Cyclops, &lt;em&gt;just to be mean&lt;/em&gt;.  This happens in
the poem, but it tracks because poem Odysseus &lt;em&gt;can be kind of a dick&lt;/em&gt;.  It
felt out of character for film Odysseus and I&#39;m not sure why Nolan bothered
to keep it in at all.&lt;/p&gt;
&lt;p&gt;Even the Sirens felt a little out of place.  I loved the sequence itself,
but the logic behind it didn&#39;t make much sense.  Odysseus avoids putting wax
in his ears because he wants to be the first one to hear the Siren song and
live?  That&#39;s something &lt;em&gt;poem&lt;/em&gt; Odysseus would want.  I saw literally nothing
to make me believe that &lt;em&gt;film&lt;/em&gt; Odysseus would want the same thing.&lt;/p&gt;
&lt;h2&gt;Omitting Phaeacia&lt;/h2&gt;
&lt;p&gt;All in all, Nolan seemed to be aiming for a more grounded approach to the
source material.  The Greek pantheon forms a major part of the poem -
Athena, Zeus, Hermes and Poseidon all figure quite heavily in the plot.
Nolan more or less leaches them all out of the film, except for Athena - and
even she was a bit of a psych (if you know, you know).  Zeus and Poseidon
have cameos as bad weather.&lt;/p&gt;
&lt;p&gt;Which makes it all the more odd that Nolan decided to omit the whole
&lt;a href=&quot;https://en.wikipedia.org/wiki/Scheria&quot;&gt;Phaeacia&lt;/a&gt; episode of the story.  In the book, after leaving
&lt;a href=&quot;https://en.wikipedia.org/wiki/Calypso_(mythology)&quot;&gt;Calypso&lt;/a&gt; but before returning to Ithaca, Odysseus crash lands on an
island of seafarers (the aforementioned Phaeacia), where he&#39;s forced to be
their guest while waiting for a chance to leave.  Some of the most famous
elements of the story, like the Cyclops and Circe and the Sirens,
essentially unfold as a flashback at this point - a tale spun by Odysseus to
entertain his hosts.  It&#39;s ambiguous as to how much of it is real.&lt;/p&gt;
&lt;p&gt;Nolan got rid of this section entirely, and instead folded it into Odysseus&#39;
time with Calypso, now retooled so that Odysseus suffers from lotus flower
induced amnesia.  The flashback, where we meet the Cyclops and the rest, is
reimagined as Odysseus regaining his lost memories.&lt;/p&gt;
&lt;p&gt;This undermines the whole idea of &amp;quot;grounding&amp;quot; the narrative.  The
fantastical elements of the story are effectively portrayed as real memories
in the film.  It&#39;s frustrating because if you were looking for a way to
ground the story, the poem&#39;s &amp;quot;story within a story&amp;quot; mechanism, with its
inherent ambiguity, already seemed like a perfectly good way to do it.  It
was frankly baffling that Nolan would choose to turn the gods and goddesses
of the poem into psychological trauma and thunderstorms - but then choose to
keep the Cyclops, Sirens, and witches as something &lt;em&gt;tangible&lt;/em&gt; in a way that
the source material does not.&lt;/p&gt;
&lt;h2&gt;Unimportant Details&lt;/h2&gt;
&lt;p&gt;Much has been made of Nolan&#39;s other choices for the film, like casting a
black actress as Helen of Troy, and his use of modern language.  I debated
even mentioning them, for fear of giving undeserved oxygen to assholes who
think that &amp;quot;historical accuracy&amp;quot; applies to a fucking &lt;em&gt;myth&lt;/em&gt;, but I finally
concluded that either a) no one is going is to read this anyway or b) people
&lt;em&gt;will&lt;/em&gt; read it and it&#39;s an oppourtunity to call these people out.&lt;/p&gt;
&lt;p&gt;With respect to the use of modern words like &amp;quot;dad&amp;quot;, you get used to it
really quickly.  I always marvel at people who complain about this.
Anything other than ancient Greek is going to be &amp;quot;wrong&amp;quot; so if you&#39;re doing
the film in English anyway, you might as well use words that seem
appropriate and modern to your ears.&lt;/p&gt;
&lt;p&gt;And once you accept that the Nolan is going for a more modern take on this
story, the diversity of the cast doesn&#39;t feel out of place in the slightest.
I would take it even further: the scenes with Helen and Clytemnestra are
just &lt;em&gt;really good&lt;/em&gt; - probably some of the best scenes of the entire film.
I&#39;ll credit those scenes with making me actually want to read the
&lt;a href=&quot;https://en.wikipedia.org/wiki/Oresteia&quot;&gt;Oresteia&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And that&#39;s all I&#39;m going to say on this subject.&lt;/p&gt;
&lt;h2&gt;Bottom Line&lt;/h2&gt;
&lt;p&gt;If you want my unvarnished advice, it&#39;s this: watch the movie and &lt;em&gt;then&lt;/em&gt;
read the poem.  The film is genuinely entertaining, and as far as spectacles
go, it&#39;s &lt;em&gt;masterful&lt;/em&gt;.  But knowing anything more than the basic outlines of
the myths won&#39;t increase your enjoyment of it.&lt;/p&gt;
&lt;p&gt;After you watch the movie, you should read the poem!  The film leaves a lot
out, despite the three hour length.  There are lots of versions to choose
from.  I choose Emily Wilson&#39;s, and I liked it, but I hear good things about
&lt;a href=&quot;https://en.wikipedia.org/wiki/Robert_Fagles&quot;&gt;Robert Fagles&lt;/a&gt;&#39; &lt;a href=&quot;https://en.wikipedia.org/wiki/Odyssey_(Robert_Fagles_translation)&quot;&gt;translation&lt;/a&gt; as well.&lt;/p&gt;
&lt;p&gt;Maybe the whole experience will make you want to explore this corner of the
literary world.  These things are classics for a reason, right?&lt;/p&gt;
&lt;p&gt;When I finally get around to reading the &lt;a href=&quot;https://desmondrivet.com/2026/07/28/%5Dhttps://en.wikipedia.org/wiki/Iliad&quot;&gt;Iliad&lt;/a&gt;, I&#39;ll let you know what
I think!&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>Linus Torvalds on being &#39;woke&#39;</title>
    <link href="https://desmondrivet.com/2026/06/03/linus-woke"/>
    <updated>2026-06-04T01:02:15Z</updated>
    <id>https://desmondrivet.com/2026/06/03/linus-woke</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;&amp;quot;I&#39;m a card-carrying atheist, I think a woman&#39;s right to choose is very
important, I think that &#39;well regulated militia&#39; means that guns should be
carefully licensed and not just randomly given to any moron with a pulse,
and I couldn&#39;t care less if you decided to dress up in the &#39;wrong&#39; clothes
or decided you&#39;d rather live your life without feeling tied to whatever
plumbing you were born with. And dammit, if that all makes me &#39;woke&#39;, then I
think anybody who uses that word as a pejorative is a f*cking disgrace to
the human race.&amp;quot;&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>The Soapbox and the Display Case</title>
    <link href="https://desmondrivet.com/2026/03/28/indieweb-albums"/>
    <updated>2026-03-28T13:04:40Z</updated>
    <id>https://desmondrivet.com/2026/03/28/indieweb-albums</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;As a participant in the &lt;a href=&quot;https://indieweb.org/&quot;&gt;IndieWeb&lt;/a&gt;, I post the occasional photo on my
blog.  These photos tend to be unedited and off-the-cuff, often taken from
my phone and posted with Quill via my &lt;a href=&quot;https://indieweb.org/Micropub&quot;&gt;Micropub&lt;/a&gt; server.&lt;/p&gt;
&lt;p&gt;In addition to these spur-of-the-moment photos, I also take a fair number of
more deliberate shots, often when I&#39;m visiting someplace new.  These will
usually be taken with my standalone camera as opposed to my phone, and it&#39;s
not uncommon for me to try and clean them up a bit with an image editor
before publication.  These photos are almost always organized into albums.&lt;/p&gt;
&lt;p&gt;I&#39;ve made a significant number of these albums over the years, and they
house a significant number of photos - over 1000 at some point.  This number
obviously goes up as I add more albums, but it can also go down as I&#39;ll
sometimes remove photos from albums if I feel they&#39;re not really pulling
their weight.  The number is closer to 700 photos now - still not small.&lt;/p&gt;
&lt;p&gt;If I&#39;m being honest, my relationship to my photos albums feels different
than my relationship to my blog.  My blog is like a chronicle of life, and
my personal soapbox.  It&#39;s designed to be updated frequently (even if I
don&#39;t update it as frequently as I should).  My photo albums are more like a
display case, aimed at family, friends, and the world, showing off a heavily
curated subset of my life in visual form.  I&#39;m lucky if I update them more
than a couple of times a year.&lt;/p&gt;
&lt;p&gt;I think it&#39;s this difference that informs how seamlessly - or not - photo
albums are represented on the IndieWeb.&lt;/p&gt;
&lt;h2&gt;Photo Albums and the IndieWeb&lt;/h2&gt;
&lt;p&gt;The IndieWeb revolves around the notion of a &lt;a href=&quot;https://indieweb.org/post&quot;&gt;post&lt;/a&gt;, i.e. a
&lt;a href=&quot;https://indieweb.org/permalink&quot;&gt;permalinked&lt;/a&gt;, timestamped bit of content that usually ends up on a
reverse chronological &lt;a href=&quot;https://indieweb.org/feed&quot;&gt;feed&lt;/a&gt; somewhere.  Since the IndieWeb supports the
concept of &lt;a href=&quot;https://indieweb.org/photo&quot;&gt;photo posts&lt;/a&gt;, in particular &lt;a href=&quot;https://indieweb.org/multi-photo&quot;&gt;multi-photo&lt;/a&gt; posts which
house more than one photo, one might wonder how &lt;a href=&quot;https://indieweb.org/photo-album&quot;&gt;photo &lt;em&gt;albums&lt;/em&gt;&lt;/a&gt; differ
in this regard.&lt;/p&gt;
&lt;p&gt;The short answer is that a (multi-)photo post is an indivisible unit.  Even
when the post contains multiple photos, those photos don&#39;t have a separate
identity on the web; the only permalink is the post itself.  The photos in
an album, on the other hand, have their own identities (i.e. their own
permalinks) and the album post simply collects these individual photos onto
one (also permalinked) page.&lt;/p&gt;
&lt;p&gt;I personally find this relationship between an album post and its individual
photos leads to awkwardness when you try to map it onto the IndieWeb
framework.  It makes sense to treat an album as a post - it has a date,
title, permalink, and intuitively feels like it belongs on a feed.  On the
other hand, the album photos themselves are &lt;em&gt;sort of&lt;/em&gt; posts, in that they
have permalinks, but also sort of not in that we usually want to exclude
them from feeds to avoid clutter.  And you also need a way of expressing the
connection between the photos and the album to which they belong.&lt;/p&gt;
&lt;p&gt;The IndieWeb community, to be fair, has ways of supporting these features.
Though it&#39;s standard practice, nothing explicitly forces you to include a
post on a feed, for example.  And the IndieWeb does (sort of) have a notion
of a &lt;a href=&quot;https://indieweb.org/collection&quot;&gt;collection post&lt;/a&gt; which exists to house other posts in a kind of
parent/child relationship.&lt;/p&gt;
&lt;p&gt;But these are not what I would call &amp;quot;typical&amp;quot; features.  If you use
Micropub, for example, excluding posts from a feed isn&#39;t part of the
standard protocol; it requires the &lt;a href=&quot;https://indieweb.org/Micropub-extensions#Visibility&quot;&gt;visibility extension&lt;/a&gt; to be enabled.
Publishing an album via Micropub also requires the client and server to
support collections, which also isn&#39;t standard.  Collections, in general,
seem to be a bit of a half-baked feature of the IndieWeb ecosystem.&lt;/p&gt;
&lt;p&gt;The issues become clearer when you try to use &lt;a href=&quot;https://photo.postrchild.com/&quot;&gt;PhotoPostr&lt;/a&gt;, an
application which actually implements a Micropub-based album posting client.
To my knowledge it&#39;s the only app of its kind - and it only works with
Micropub servers that implement the features I described above - a small
number at best.&lt;/p&gt;
&lt;p&gt;Here&#39;s the thing.  One of the reasons one would use Micropub for posting at
all at all is interoperability - a Micropub server is supposed to work with
an array of Micropub clients, and a Micropub client is supposed to work with
a variety of Micropub servers.  If there&#39;s only one Micropub based album
posting client for you to use, and it only works with a small fraction of
Micropub servers, then I&#39;m not sure what Micropub is doing in this equation
at all.  In the end, PhotoPostr feels like a bespoke piece of software,
built by and for the author - which is fair enough, but it does say
something about how photo albums fit into the&lt;/p&gt;
&lt;p&gt;Add to this: I like grouping whole albums into collections as well.  I&#39;ll
often create a handful of photo albums after a vacation, for example, and
file them all under one &amp;quot;album group&amp;quot; for the whole trip.  How do we
implement that?  A collection of albums makes sense here but do any Micropub
frameworks support that?  What about tags?  Do the album group tags get
mixed in with the tags you may have defined for your photos?  Do the
individual albums that make up the album group show up on a feed somewhere
or are they hidden like the photos, to avoid clutter?&lt;/p&gt;
&lt;p&gt;That&#39;s a lot of questions and they are not, in my opinion, so trivial to
answer.  Basically, I find that my album preferences do not map cleanly onto
standard IndieWeb and Micropub concepts.&lt;/p&gt;
&lt;h2&gt;Photo Albums and Eleventy&lt;/h2&gt;
&lt;p&gt;Also problematic is the fact that the Micropub protocol is based around the
idea of publishing a single post.  Publishing a whole album of photos via
Micropub therefore involves publishing each photo one at a time.  This
doesn&#39;t work well when you use a static site generator like &lt;a href=&quot;https://www.11ty.dev/&quot;&gt;Eleventy&lt;/a&gt; -
at least not the way I use it.&lt;/p&gt;
&lt;p&gt;My blog is currently hosted on Github.  Publishing a new post involves
committing it to the main branch, followed by a rebuild of the site.  My
Micropub server will do this for you when it receives a create POST.&lt;/p&gt;
&lt;p&gt;So, each post is published via a single commit which triggers a new build -
which can sometimes take a minute or two.  Publishing a whole album of 30
photos one at a time using this method (as PhotoPostr does) is, as you might
imagine, a pretty awful user experience.&lt;/p&gt;
&lt;p&gt;Not to mention, the sheer number of photos can be a problem.  Before I added
albums to my blog, it built in under 10 seconds.  Adding all my photo albums
nearly doubled the build time, even when the images were already
pre-processed and cached.  And if they weren&#39;t?  Well then you better get a
cup of coffee because it might take a while.&lt;/p&gt;
&lt;p&gt;It got so bad that my VPS was killing the build process because it was
taking too long.  Something had to be done.&lt;/p&gt;
&lt;h2&gt;Moving my Albums&lt;/h2&gt;
&lt;p&gt;There&#39;s no clever solution here.  I ended up moving my albums from my blog
to a &lt;a href=&quot;https://gallery.desmondrivet.com/&quot;&gt;dedicated website&lt;/a&gt; that I build and deploy from my home computer -
no automated publishing.&lt;/p&gt;
&lt;p&gt;It&#39;s not ideal, but it&#39;s also not so bad.  For one thing, my home computer
is much faster than my VPS so the build doesn&#39;t take as long.  And the way I
have historically interacted with my photo albums was always different than
my blog.  I was always a lot more deliberate and manual with my albums, and
I never really took advantage of the Micropub protocol here, for the reasons
above.  And my blog, sans albums, builds much quicker now, for obvious
reasons, so that&#39;s a plus.&lt;/p&gt;
&lt;p&gt;Generally speaking, I don&#39;t like spreading my content across different
sites.  At some point, my website sported not only my blog but also recipes,
bookmarks and photo albums.  But the thing is, these features don&#39;t really
overlap, and it adds complexity to an already complicated build process.
I&#39;ll admit that it does feel cleaner to split these things out.  I had
already moved my &lt;a href=&quot;https://garden.desmondrivet.com/20250218202000-recipes.html&quot;&gt;recipes&lt;/a&gt; out to my &lt;a href=&quot;https://garden.desmondrivet.com/&quot;&gt;garden&lt;/a&gt;, so my albums we&#39;re
bound to be next.&lt;/p&gt;
&lt;p&gt;I guess we&#39;ll see how this goes!&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>Moving My Bookmarks to My Garden</title>
    <link href="https://desmondrivet.com/2026/01/10/moving-bookmarks"/>
    <updated>2026-01-11T02:20:53Z</updated>
    <id>https://desmondrivet.com/2026/01/10/moving-bookmarks</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;I&#39;ve previously written about the &lt;a href=&quot;https://desmondrivet.com/2022/03/01/bookmark-thoughts.html&quot;&gt;idiosyncrasies of IndieWeb bookmarks&lt;/a&gt;,
and how I consider them to be qualitatively different from other
&lt;a href=&quot;https://indieweb.org/&quot;&gt;IndieWeb&lt;/a&gt; posts.  The differences boil down to my relationship with
them.  For me, they are primarily a collection of references, not a way I
interact with the world.  Unlike notes or articles, sharing them isn&#39;t a
priority; I don&#39;t particularly care about shouting my bookmarks from the
digital soapbox that is my blog.&lt;/p&gt;
&lt;p&gt;Other people obviously differ here, and I&#39;m vaguely aware of the notion of
social bookmarking, and now defunct services like &lt;a href=&quot;https://indieweb.org/Delicious&quot;&gt;delicious&lt;/a&gt;, but that&#39;s
just not how I use them.  My bookmark posts always felt a bit out of place
on my website, much more subject to whims of deletion and reorganization
than other forms of content.&lt;/p&gt;
&lt;p&gt;I&#39;ve been wanting to revamp them for a while.  But how?&lt;/p&gt;
&lt;h2&gt;Emacs...Again&lt;/h2&gt;
&lt;p&gt;In the end I decided, unsurprisingly (if you know me), to leverage Emacs,
Org mode and my &lt;a href=&quot;https://garden.desmondrivet.com/&quot;&gt;digital garden&lt;/a&gt; to manage my bookmarks, much as I did
with my &lt;a href=&quot;https://garden.desmondrivet.com/books.html&quot;&gt;reading list&lt;/a&gt;.  It turns out that using Org mode to maintain a
pile of links is quite common and there are a number of articles on the
subject.&lt;/p&gt;
&lt;p&gt;Most of the information seems to revolve around &lt;a href=&quot;https://github.com/rexim/org-cliplink&quot;&gt;org-cliplink&lt;/a&gt;, a useful
little package that takes a URL on the clipboard, parses out the HTML to
extract the title, and inserts it as an org hyperlink into your current
buffer.  It&#39;s actually quite straightforward to build a simple Org mode
based bookmarking system around this functionality, taking advantage of Org
mode&#39;s built-in tagging functionality to organize them.&lt;/p&gt;
&lt;p&gt;One thing that I gave up in the name of expediency is &lt;a href=&quot;https://desmondrivet.com/2022/04/04/eleventy-previews.html&quot;&gt;unfurling the shared
link, as I do on my blog&lt;/a&gt;.  My unfurling system uses a bespoke cocktail
of Open Graph data, favicons and Microformats that I feel works pretty well
across a spectrum of IndieWeb and non-IndieWeb sites.  For whatever reason,
I wasn&#39;t able to find any Emacs packages for extracting this metadata and
since I wasn&#39;t willing to write any of it myself at this time, I simply did
without.&lt;/p&gt;
&lt;p&gt;One approach that I briefly considered was extracting my unfurling code into
a standalone REST service and using an Emacs JSON package to interact with
it, but while I haven&#39;t completely dismissed that possibility for the
future, it felt like too much work for what I was trying to accomplish,
which was a simple replacement for managing my bookmarks.  In any case,
integrating icons and images into an Org mode file in a way that looks
reasonable while editing the text but which &lt;em&gt;also&lt;/em&gt; exports to HTML that
doesn&#39;t look like garbage is no picnic, as &lt;a href=&quot;https://desmondrivet.com/2025/09/28/reading-list-in-emacs&quot;&gt;creating my reading list&lt;/a&gt;
taught me.&lt;/p&gt;
&lt;p&gt;All this to say is that, in the end, I created a &lt;a href=&quot;https://garden.desmondrivet.com/links.html&quot;&gt;very simple bookmarks
page&lt;/a&gt; on my digital garden, and removed the corresponding links on my
blog.  I &lt;em&gt;also&lt;/em&gt; removed the Lifestream feed since I felt it was becoming a
bit redundant and I &lt;em&gt;also&lt;/em&gt; felt a better argument could be made for
including all my posts by default once the bookmarks were gone.&lt;/p&gt;
&lt;p&gt;Will this last?  Who can say?  To be fair, it&#39;s not like I was making much
use of the bookmarks on my blog when they were there.  Maybe this will teach
me to be more aware of what I record.  Time will tell, I suppose.&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>Implementing a Reading List in Org Mode</title>
    <link href="https://desmondrivet.com/2025/09/28/reading-list-in-emacs"/>
    <updated>2025-09-29T00:20:15Z</updated>
    <id>https://desmondrivet.com/2025/09/28/reading-list-in-emacs</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;I joined Goodreads in 2012, at roughly the same time I joined Twitter, in
what might be called a more innocent age of social networking.  The idea of
a social network for book readers appealed to me at the time.&lt;/p&gt;
&lt;p&gt;Fast forward to 2025, and the world looks different.  Twitter/X has turned
into a hellscape run by a super villain, and Goodreads, though not quite a
hellscape, is slow, dated and run by a company with dubious ethics.&lt;/p&gt;
&lt;p&gt;I ended up deactivating my Twitter account - not that difficult given that I
never really gained a following.  As it turns out, my use of Goodreads as a
&lt;em&gt;social network&lt;/em&gt; never really took off either - I don&#39;t think my friend list
ever exceeded 20 people.  I used it much more as a log of my reading habits,
a record of every book I ever read or wanted to read.  That made it easier
to think about finding a replacement.&lt;/p&gt;
&lt;h2&gt;Alternatives to Goodreads&lt;/h2&gt;
&lt;p&gt;There are several viable alternatives to Goodreads particularly if, like
me, you aren&#39;t that invested in the social aspect of maintaining a reading
list.  In 2025, the contenders seem to include, but are not necessarily
limited to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://thestorygraph.com/&quot;&gt;The StoryGraph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.librarything.com/&quot;&gt;LibraryThing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://openlibrary.org/&quot;&gt;OpenLibrary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bookwyrm.social/&quot;&gt;BookWyrm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;BookWyrm, in particular, is interesting as it&#39;s part of the Fediverse and
uses the ActivityPub protocol. It&#39;s therefore truly decentralized service,
like &lt;a href=&quot;https://joinmastodon.org/&quot;&gt;Mastodon&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here&#39;s the thing, though.  Ever since I began participating in the
&lt;a href=&quot;https://indieweb.org/&quot;&gt;IndieWeb&lt;/a&gt; back in 2019, I&#39;ve been been trying to live up to its
principles - in particular the part about owning your data.  And while all
these services may have the best of intentions, there&#39;s no predicting the
future.  Any one of them might go out of business, or might simply evolve to
the point where you want to leave - like Twitter did.&lt;/p&gt;
&lt;p&gt;So what can you do?&lt;/p&gt;
&lt;h2&gt;Settling on Emacs and Org Mode&lt;/h2&gt;
&lt;p&gt;If you read my blog, you might know that I&#39;m a fan of &lt;a href=&quot;https://desmondrivet.com/2023/09/14/plain-text&quot;&gt;keeping my data in
plain text&lt;/a&gt;.  You might also know that I&#39;m an &lt;a href=&quot;https://www.gnu.org/software/emacs/&quot;&gt;Emacs&lt;/a&gt; enthusiast who
&lt;a href=&quot;https://desmondrivet.com/2023/12/05/gtd-org-mode&quot;&gt;cobbled together a vaguely GTD like system&lt;/a&gt; using &lt;a href=&quot;https://orgmode.org/&quot;&gt;Org Mode&lt;/a&gt;.  Given
that a reading list is, fundamentally, nothing more than a specialized TODO
list, it makes sense to try and do something similar here.&lt;/p&gt;
&lt;p&gt;Please note that, as usual, this will not be an Emacs or Org Mode tutorial.
If you want to learn more about these tools, please consult the fine
documentation.&lt;/p&gt;
&lt;p&gt;So how do we go about doing this?  Plain vanilla Org mode itself gets us
about 80% of the way there.  Here&#39;s a small example file:&lt;/p&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;#+TODO: TOREAD READING | READ DNF

* READ The Neverending Story  :fantasy:youngadult:translation:
CLOSED: [2025-03-06]
:PROPERTIES:
:Author:   Michael Ende, Ralph Manheim
:Added:    [2015-07-24]
:Rating:   :star::star::star:
:END:

* TOREAD The Language Instinct: How the Mind Creates Language     :linguistics:
:PROPERTIES:
:Author:   Steven Pinker
:Added:    [2025-01-12]
:END:
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There&#39;s nothing fancy here. The first line defines the TODO states that
apply to this file.  Since this file is a reading list, we have two
&lt;em&gt;actionable&lt;/em&gt; states: TOREAD, READING and two &lt;em&gt;terminal&lt;/em&gt; or DONE states: READ
and DNF (for Did Not Finish).  Org mode automatically puts in a CLOSED line
(as seen above) when the state of a headline moves from an actionable one to
a terminal one.  You can use this to record when you finished (or did not
finish) a book.&lt;/p&gt;
&lt;p&gt;Each title is entered as a headline with a TODO state.  Extra information
like Author and Added date is recorded via org mode&#39;s &lt;a href=&quot;https://orgmode.org/manual/Properties-and-Columns.html&quot;&gt;properties&lt;/a&gt;
feature.  I&#39;ve also leveraged org mode&#39;s built in tagging system to define a
basic taxonomy for the reading list.&lt;/p&gt;
&lt;p&gt;To display your books using org-agenda, you can add this section in your
&lt;code&gt;org-agenda-custom-commands&lt;/code&gt; block:&lt;/p&gt;
&lt;pre class=&quot;language-emacs-lisp&quot;&gt;&lt;code class=&quot;language-emacs-lisp&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;r&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;All Books&quot;&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;todo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;READING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;todo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;TOREAD&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;todo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;READ&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;todo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;DNF&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;org-agenda-files&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;file-expand-wildcards&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;~/org-roam-garden/books.org&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
 &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;org-overriding-columns-format&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;%&lt;span class=&quot;token argument&quot;&gt;TODO&lt;/span&gt; %50ITEM(TITLE) %30&lt;span class=&quot;token argument&quot;&gt;AUTHOR&lt;/span&gt; %30RATING&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now you can type &amp;quot;r&amp;quot; when calling up an org agenda and you&#39;ll get a basic,
compact reading list.  Even better, you can leverage org mode&#39;s &lt;a href=&quot;https://orgmode.org/manual/Agenda-Column-View.html&quot;&gt;agenda
column view&lt;/a&gt; by typing &lt;code&gt;C-c C-x C-c&lt;/code&gt; to get a nice tabular format.&lt;/p&gt;
&lt;h2&gt;Leveraging org-books&lt;/h2&gt;
&lt;p&gt;You can type out the books in your reading list manually, but since this is
Emacs, it would be weird if there weren&#39;t a way to automate the process.&lt;/p&gt;
&lt;p&gt;Help exists in the form of a Emacs package called &lt;a href=&quot;https://github.com/lepisma/org-books&quot;&gt;org-books&lt;/a&gt; which
advertises itself simply as &amp;quot;Reading list management using org-mode&amp;quot;.
Mostly, that means it provides a collection of elisp functions to quickly
add a book to your reading list via a URL (&lt;code&gt;org-books-add-url&lt;/code&gt;) or ISBN
(&lt;code&gt;org-books-add-isbn&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;org-books-add-url&lt;/code&gt; function, in particular, claims to support Amazon,
Goodreads and Open Library as sources.  What this means is that you can
interactively call &lt;code&gt;org-books-add-url&lt;/code&gt; and paste in, for example, an &lt;a href=&quot;https://www.amazon.ca/Piranesi-Susanna-Clarke/dp/1635577802&quot;&gt;Amazon
book URL&lt;/a&gt; when prompted.  Press enter and voila - a new entry will be
added to your book file.  It looks like this:&lt;/p&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;* TOREAD Piranesi                                                       :fantasy:
:PROPERTIES:
:AUTHOR:   Susanna Clarke 
:ADDED:    [2015-07-31]
:AMAZON:   https://www.amazon.ca/Piranesi-Susanna-Clarke/dp/1635577802
:END:&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Formatting with an Eye Towards Export&lt;/h2&gt;
&lt;p&gt;To be honest, I found &lt;code&gt;org-books&lt;/code&gt; a bit rough around the edges. While Amazon
and Goodreads URLs seemed to work, Open Library URLs would only work with
the book&#39;s JSON API endpoint, not the actual web page, which I found
annoying.&lt;/p&gt;
&lt;p&gt;In addition, I wasn&#39;t totally happy with the way the package formatted the
book entries.  Informing my opinion was my desire to be able to easily
export my reading to HTML, for publication on my garden.&lt;/p&gt;
&lt;p&gt;Org mode isn&#39;t primarily a CMS and while it does support HTML export out of
the box, it doesn&#39;t really come with what I would describe as an easy to use
templating system.  What this means in practice is that, without some fairly
major configuration, org-mode HTML export will result in HTML that more or
less mirrors the original content in terms of structure and semantics.&lt;/p&gt;
&lt;p&gt;What I&#39;m trying to say is that if you want your exported HTML to be structured
a certain way, it&#39;s often easiest to arrange for your org-mode source to be structured
in a similar way.&lt;/p&gt;
&lt;p&gt;Related to this is the fact that org-books, seemingly as a matter of policy,
formats all of its book entries exclusively as &amp;quot;headlines + properties&amp;quot;,
presumably reserving the content area for extra comments about work itself.&lt;/p&gt;
&lt;p&gt;This can be a problem when it comes time to export the entry to HTML,
because properties are treated as special in org-mode&#39;s export system -
they are rendered as plain text by default, not HTML.  So
that URL in the AMAZON property you see above?  Because it&#39;s a property,
it&#39;s rendered in HTML as a plain, unclickable URL.  After some amount of research,
I came to the conclusion that the easiest way to get an actual link in
the output was to embed the Amazon URL as a real org-mode link, in
the &lt;em&gt;content&lt;/em&gt; of the entry, not the properties - since proper org-mode
links &lt;em&gt;do&lt;/em&gt; get turned into HTML links during export, as you might expect.&lt;/p&gt;
&lt;p&gt;I also thought it would be nice to have display cover image for each book
entry, particularly in the exported HTML, and Open Library does have a
public &lt;a href=&quot;https://openlibrary.org/dev/docs/api/covers&quot;&gt;covers API&lt;/a&gt; that I suspected I could leverage.  Org-books, so
far as I could tell, doesn&#39;t insert any cover images at all.  In any case,
the right place for it, assuming we wanted it to appear in the exported
HTML, would be as an image in the content, not as a property.&lt;/p&gt;
&lt;p&gt;All this to say, org-books wasn&#39;t totally cutting it.  So what to do?&lt;/p&gt;
&lt;h2&gt;Hacking org-books&lt;/h2&gt;
&lt;p&gt;In the end I decided to fork org-books and make &lt;a href=&quot;https://github.com/drivet/org-books/compare/master...drivet:org-books:customizations&quot;&gt;some changes&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I capitalized the data properties, but I didn&#39;t make them all uppercase
like they were originally.  The property names appear in the HTML as is
so I wanted something less &amp;quot;in-your-face&amp;quot;.&lt;/li&gt;
&lt;li&gt;I embedded the source URLs as proper links in the entry&#39;s content, rather
than as properties.&lt;/li&gt;
&lt;li&gt;When adding a book via Open Library, I also inserted a link in the
entry&#39;s content to the cover via their covers API.&lt;/li&gt;
&lt;li&gt;I added a function, &lt;code&gt;org-books-add-olb&lt;/code&gt;, that accepts an Open Library web
page URL as a data source, in a similar manner to Amazon or Goodreads.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I made sure that the entries were formatted in a way that made it easier to
later produce the layout I wanted via CSS.  In the end, a typical entry
looked like this:&lt;/p&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;* READ Redshirts                   :scifi:
CLOSED: [2025-01-28]
:PROPERTIES:
:Author:   John Scalzi
:Added:    [2015-07-31]
:ISBN:     9780765316998
:Rating:   :star::star::star::star:
:END:

#+BEGIN_aside
#+ATTR_HTML: :loading lazy
[[https://covers.openlibrary.org/b/ISBN/9780765316998-M.jpg]]

[[https://openlibrary.org/books/OL25253043M/Redshirts][Open Library]] &#92;&#92;
[[https://openlibrary.org/api/books?bibkeys=ISBN:9780765316998&amp;jscmd=data&amp;format=json][Open Library Data]]
#+END_aside

I expected this book to be funny, and it was.  What I was *not* expecting
was that this book would make me emotional.  I nearly cried.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The content has a preamble that I wrapped in a #+BEGIN_aside/#+END_aside
pair; when exported to HTML, this results in the enclosed content being
wrapped in an &lt;code&gt;aside&lt;/code&gt; tag that can be easily styled by CSS.&lt;/p&gt;
&lt;p&gt;The formatting of the cover image is worth noting.  It looks like this:&lt;/p&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;#+ATTR_HTML: :loading lazy
[[https://covers.openlibrary.org/b/ISBN/9780765316998-M.jpg]]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This results in a &lt;code&gt;loading=&amp;quot;lazy&amp;quot;&lt;/code&gt; attribute added to the cover &lt;code&gt;img&lt;/code&gt; tag in
the exported HTML:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;img&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://covers.openlibrary.org/b/ISBN/9780765316998-M.jpg&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;alt&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;9780765316998-M.jpg&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;loading&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;lazy&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The effect is to only load the image when it&#39;s scrolled
into view.  Given that I have hundreds of books in my reading list, the
exported page loads &lt;em&gt;much&lt;/em&gt; faster as a result.&lt;/p&gt;
&lt;h2&gt;Example and Final Thoughts&lt;/h2&gt;
&lt;p&gt;I publish my &lt;a href=&quot;https://garden.desmondrivet.com/books&quot;&gt;reading list&lt;/a&gt; to my garden.  You can peruse it there.&lt;/p&gt;
&lt;p&gt;Is this thing a Goodreads killer?  Will it replace a real book tracking app
for the average person?  Good God, no.  I&#39;m the first to admit the whole
process is clunky as hell.&lt;/p&gt;
&lt;p&gt;But apps comes with trade offs, as any IndeWeb enthusiast is aware, and one
of the things you give up when you use one is full control over your data.
The one big advantage of all this trouble is that my reading list is mine
and mine alone.  I consider that important.&lt;/p&gt;
&lt;p&gt;Important enough to always resist the siren son of a dedicated service for
years to come?  Maybe not - that&#39;s why the IndeWeb has a prescribed way for
sharing your data with the rest of the world: &lt;a href=&quot;https://indieweb.org/POSSE&quot;&gt;POSSE&lt;/a&gt;.  This is the
practice of publishing to your own site first and then deciding how you tell
the world about it.  It&#39;s something I do on my blog - all posts are
automatically shared to Mastodon once published.&lt;/p&gt;
&lt;p&gt;To be honest I&#39;m not sure how POSSE would look in this case; I&#39;m not even
sure what service I&#39;d share to, or how I&#39;d figure out what to share.  Still,
it&#39;s an interesting idea worth exploring.&lt;/p&gt;
&lt;p&gt;In the meantime, this serves my needs, and it was fun to do.&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>It&#39;s Not Nostalgia, Exactly</title>
    <link href="https://desmondrivet.com/2025/01/30/when-visiting-toronto"/>
    <updated>2025-01-31T02:36:57Z</updated>
    <id>https://desmondrivet.com/2025/01/30/when-visiting-toronto</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;I have spent most of my life in Montreal but there was a decent sized chunk
in the middle, spanning high school and university, when I lived in Toronto.&lt;/p&gt;
&lt;p&gt;I still visit Toronto not infrequently.  I have a soft spot for it; at the
very least, I don&#39;t harbour quite the same level visceral hatred a lot of
people seem to lob at the city.&lt;/p&gt;
&lt;p&gt;But I haven&#39;t lived there for over 20 years.  Obviously, a lot has changed
in that time.  I&#39;m not sure I could live there now.  I mean, I guess I
&lt;em&gt;could&lt;/em&gt; but my life would look very different.  The place is so huge, and
the housing so expensive, that I&#39;m not sure it would be a good trade.&lt;/p&gt;
&lt;p&gt;Going back, even just to visit, feels strange.  I don&#39;t think it&#39;s
nostalgia, exactly.  My old haunts, such as they were, are long gone, so it
never feels like I&#39;m going home.  I liked my time there well enough, and I
have a tendency to jump to its defence when people start getting snarky
about it, but I&#39;m not like Woody Allen in Manhattan, &amp;quot;romanticizing it all
out of proportion.&amp;quot;&lt;/p&gt;
&lt;p&gt;Actually, I think I know what it is.  It&#39;s not nostalgia, a longing for a
past that may or may not have existed.  It&#39;s more like irrational
indignation that the city had the audacity to move on without me.&lt;/p&gt;
&lt;p&gt;I mean, how narcissistic can you get, right?  To believe, in your heart of
hearts, that a city should stop moving when you&#39;re not there?  I never
realized I had such a big ego.&lt;/p&gt;
&lt;p&gt;Maybe the right thing to do is just acknowledge that the Toronto where I
spent a good portion of my formative years just doesn&#39;t exist anymore.  You
can never go home again, as they say.  Maybe I should just lean into the
tourist thing when I visit.  There is, after all, a lot to see and do.&lt;/p&gt;
&lt;p&gt;And maybe it would help to finally internalize the notion, so abstractly
obvious but still sometimes a tough pill to swallow, that the city in which
you once lived doesn&#39;t know you exist.  It&#39;s a freeing idea, all things
considered.&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>I Never Considered Myself Naive</title>
    <link href="https://desmondrivet.com/2025/01/19/being-rich"/>
    <updated>2025-01-20T00:35:39Z</updated>
    <id>https://desmondrivet.com/2025/01/19/being-rich</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;I never thought that the law applied equally to rich people and poor people.
I never considered myself that naive.  I had always understood that rich
people could break the law in ways that poor people simply couldn&#39;t.&lt;/p&gt;
&lt;p&gt;But I had always assumed that the way this worked in practice was that being
rich just came with a heightened ability to cover your tracks.  I had always
assumed that, rich or poor, it was of supreme importance &lt;em&gt;not to get
caught&lt;/em&gt;, and that being rich simply bought you more options in that regard.
Maybe you could bribe a police officer, or a judge, and make the charges go
away.  Maybe you could afford to hire someone to do the dirty work for you,
or take the fall for you if it came to that.&lt;/p&gt;
&lt;p&gt;But, and here&#39;s where I was a profoundly naive, I had always assumed that
if, for whatever reason, you &lt;em&gt;were&lt;/em&gt; caught, and it was blindingly clear,
from a legal standpoint, that you did the thing of which you were accused,
then, rich or poor, you&#39;d be charged and convicted.  Like...I had always
assumed, for example, that if you committed a murder and it was caught on
camera then, rich or poor, it was game over for you.&lt;/p&gt;
&lt;p&gt;What&#39;s that expression about assuming things?&lt;/p&gt;
&lt;p&gt;What the past few years have taught me, of course, is that this is bullshit.
Once you reach a certain level of wealth, you don&#39;t even have to cover your
tracks.  You can brazenly commit your crimes in broad daylight, and you just
have to convince the right people not to care.  To ignore the evidence of
their eyes and ears.  And, of course, it doesn&#39;t hurt that the highest court
in the land says that the law just...doesn&#39;t apply to you.&lt;/p&gt;
&lt;p&gt;I&#39;m not trying to sound dramatic, but the last few years have broken
whatever paltry sense of justice I used to have.  Laws only matter if people
are willing to enforce them, and I don&#39;t believe there&#39;s anyone left in
power to do so.&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>Anatomy of a Post</title>
    <link href="https://desmondrivet.com/2024/12/07/anatomy-of-post"/>
    <updated>2024-12-07T17:07:47Z</updated>
    <id>https://desmondrivet.com/2024/12/07/anatomy-of-post</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;My blog is based around Eleventy, which means I write my entries in plain
text, using Markdown and YAML front matter, a combo which I&#39;m sure is
familiar to most users of static site generators.&lt;/p&gt;
&lt;p&gt;I also participate in the IndieWeb, which means I post many different kinds
of content other than your standard blog posts - notes, likes, photos, etc.&lt;/p&gt;
&lt;p&gt;I find it useful to divide my content in two main types: original content,
where the focus is on my own published material, and derivative content,
which only makes sense in the context of another, external URL.&lt;/p&gt;
&lt;p&gt;The main original content posts are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Articles&lt;/li&gt;
&lt;li&gt;Notes&lt;/li&gt;
&lt;li&gt;Photos&lt;/li&gt;
&lt;li&gt;Multi-Photo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I would include albums and album collections here as well, but we&#39;ll deal
with those in a bit.&lt;/p&gt;
&lt;p&gt;I&#39;ve written a bit before about how I format my posts, but for the sake of
reference, an article looks like this:&lt;/p&gt;
&lt;pre class=&quot;language-markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token front-matter-block&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;token front-matter yaml language-yaml&quot;&gt;date: 2022-03-01T13:57:07-05:00
title: &#39;Much Ado About (Indieweb) Bookmarks&#39;
blurb: &#39;The ins and outs of owning your bookmarks on the #indieweb&#39;
tags:
- indieweb
mp-syndicate-to:
- twitter&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;---&lt;/span&gt;&lt;/span&gt;

Like many Indieweb participants, I post...&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And a note looks like:&lt;/p&gt;
&lt;pre class=&quot;language-markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token front-matter-block&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;token front-matter yaml language-yaml&quot;&gt;date: 2022-02-24T01:27:35Z&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;---&lt;/span&gt;&lt;/span&gt;

I am grateful that Wordle exists if for no other reason...&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here&#39;s a photo post with multiple photos in it - a multi-photo, in other
words:&lt;/p&gt;
&lt;pre class=&quot;language-markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token front-matter-block&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;token front-matter yaml language-yaml&quot;&gt;date: &#39;2023-01-15T21:09:31-05:00&#39;
mp-syndicate-to:
- twitter
photo:
- alt: Book nook contents
  value: https://media.desmondrivet.com/84/b3/2d/b8/e8de337b847a14ebac309f113fe28f1a572692c05795ca41caf435b0.jpg
- alt: Book nook started, partially built
  value: https://media.desmondrivet.com/04/5e/62/95/632d1dff8038533ba4114c0dadce31784f1a2746323e7c1b7af84c86.jpg
- alt: Miniature bookcase
  value: https://media.desmondrivet.com/2b/2a/50/dc/d18b6e980e029b94757a3e9ff500594d7ab218da940ab4f7885c5743.jpg
- alt: Book nook halfway finished
  value: https://media.desmondrivet.com/fb/c4/7c/3e/ff27aafb08dcbb24c3d08dd82ee879acbb642a968acd85f853bbb96f.jpg
- alt: Miniature book
  value: https://media.desmondrivet.com/70/a8/d8/80/25e8a621770fbe49354001c0a70e614afc9a21ecd75bb4b87e0f9c73.jpg
- alt: Miniature book with pages
  value: https://media.desmondrivet.com/26/69/87/7f/ca703fd7f6d2a8c5fa60bf69d5d0dd82b657e97a6e1141d2018c01a4.jpg
- alt: Miniature wall bookcase with many books 
  value: https://media.desmondrivet.com/e5/54/84/1a/9f396871304906351237e67c2cd5dd20b4e543a0398729cdd0a33ef8.jpg
- alt: Completed book nook on shelf with books
  value: https://media.desmondrivet.com/0c/7c/3f/a7/681cbb1930b6b6367f35ebeceeb61e16a1c620bfd73c62af76d75f67.jpg&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;---&lt;/span&gt;&lt;/span&gt;

I got a &quot;book nook&quot; for Christmas - kind of like a book end, but more elaborate.  Super fun, I want them all.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So how do I render these posts?  One very simple and direct way is create a
separate template for each type, but would result in a significant amount of
repetition.  A photo post and multi-photo post are virtually the same, for
example, and both of them share a lot in common with a note, in that they&#39;re
basically just notes with photos added.  An article could be considered a
longer note with a title added.&lt;/p&gt;
&lt;p&gt;Deciding how to render them all on my blog in a relatively DRY way i.e. a
way that doesn&#39;t require me to sprinkle the same snippets of HTML among a
batch of templates of varying degrees of similarity is actually, in my
opinion, a non-trivial problem, which is worth recording here for posterity.
Most of what I write will be very specific to my workflow, but it&#39;s not
entirely inconceivable that someone might gain some inspiration for their
own blog&lt;/p&gt;
&lt;p&gt;In any case, my main strategy for dealing with these posts is to treat them
all as variations on the same theme and hence to create a single generic
post template which captures them all.  To start with, it includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;an optional title (mandatory for articles)&lt;/li&gt;
&lt;li&gt;optional content (mandatory for notes and articles but photos may not have
any text) and&lt;/li&gt;
&lt;li&gt;optional photos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If we&#39;re dealing with a multi-photo, then one more piece of content is
implied: a line telling you how many photos are in the post, if there&#39;s more
than 1 (I don&#39;t put any extra line at all if I just have one photo).  A good
place to put that would be after the title, but before the content, so you
would get something like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Title&lt;/li&gt;
&lt;li&gt;Photo count (for multi-photos)&lt;/li&gt;
&lt;li&gt;Content&lt;/li&gt;
&lt;li&gt;Photos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Although these are all optional, there is an implicit understanding that at
least some of these pieces have to be present in some combination, otherwise
you have no post at all, right?  And some parts come as a pair; you would
never have a line that said &amp;quot;3 photos&amp;quot; without showing any photos at the
end.&lt;/p&gt;
&lt;h2&gt;Derived Posts&lt;/h2&gt;
&lt;p&gt;The other form of content I post are &amp;quot;derivative&amp;quot; posts.  The main
derivative post types are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Likes&lt;/li&gt;
&lt;li&gt;Reposts&lt;/li&gt;
&lt;li&gt;Replies&lt;/li&gt;
&lt;li&gt;Bookmarks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are all posts that are &amp;quot;about&amp;quot; another URL, which I call a &lt;em&gt;referenced
URL&lt;/em&gt;.  The posts make no sense without it, so it needs to be included in the
post somehow.  With the exception of a reply, these types are often without
content, though there&#39;s nothing stopping you from adding some.  In addition,
these posts should all show an unfurled &amp;quot;link preview&amp;quot; or &amp;quot;reply context&amp;quot;
(the IndieWeb wiki distinguishes between these two things, but I don&#39;t find
the distinction useful, so I don&#39;t make one) for the referenced URL.&lt;/p&gt;
&lt;p&gt;To give you some context, here&#39;s a &amp;quot;like&amp;quot; post:&lt;/p&gt;
&lt;pre class=&quot;language-markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token front-matter-block&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;token front-matter yaml language-yaml&quot;&gt;date: &#39;2024-11-09T12:53:58-05:00&#39;
like-of: https://adactio.com/journal/21548&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Super simple right?  Here&#39;s a reply post:&lt;/p&gt;
&lt;pre class=&quot;language-markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token front-matter-block&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;token front-matter yaml language-yaml&quot;&gt;date: &#39;2023-09-15T06:41:24-04:00&#39;
in-reply-to: https://nerdculture.de/@titaniumbiscuit/111067559683462120
mp-syndicate-to:
- mastodon&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;---&lt;/span&gt;&lt;/span&gt;

Yeah I may have judged too quickly with regard to Obsidian. Do you use or recommend it? &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The difference in format between the derivative posts is quite superficial.
They all have a referenced URL, tagged with their respective identifiers
(&amp;quot;like-of&amp;quot; for likes, &amp;quot;in-reply-to&amp;quot; for replies, etc.), and optional
content.&lt;/p&gt;
&lt;p&gt;The template for these posts would seem correspondingly obvious.  They would
include an optional referenced URL, and optional content, followed by an
unfurled link preview.&lt;/p&gt;
&lt;p&gt;Does it make sense to have a separate template for these kinds of posts?  My
first instinct was yes, since the only overlap with the &amp;quot;original content&amp;quot;
template appeared to be the content.  Upon further reflection, I realized
that notes sometimes have article links in them that would benefit from a
link preview as well.  And, though it might be unusual for a like or a reply
to have a title, there&#39;s no particular reason to enforce this as a rule.&lt;/p&gt;
&lt;p&gt;The bottom line is that a &amp;quot;derivative&amp;quot; template can pretty much take
advantage of the &amp;quot;original content&amp;quot; template and just add the things that
are unique to these kinds of posts: the referenced URL and the unfurled
link.  A good place to show them is after the title, and before the content.
With that, we have a new unified template with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Title&lt;/li&gt;
&lt;li&gt;Referenced URL&lt;/li&gt;
&lt;li&gt;Photo count&lt;/li&gt;
&lt;li&gt;Content&lt;/li&gt;
&lt;li&gt;Photos&lt;/li&gt;
&lt;li&gt;Link preview&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As before, all of these elements are optional, but at least some of them must
be present at any one time, and not all combinations are really valid (I&#39;m
having a hard time imagining how a link preview would work with a photo
post, for example).&lt;/p&gt;
&lt;h2&gt;List Context Versus Full Context&lt;/h2&gt;
&lt;p&gt;Blogs tend to have two main contexts in which posts are rendered: a &lt;em&gt;full
post&lt;/em&gt;, shown on its own page, located at a permalink, and something which for
lack of a better name we shall call a &lt;em&gt;post entry&lt;/em&gt;, shown in contexts where
it&#39;s part of a list, such as on a timeline or a feed.&lt;/p&gt;
&lt;p&gt;There are some differences in how full posts are rendered versus post
entries:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Articles are shown truncated in a post entry, with a &amp;quot;Read more&amp;quot; link to
take you to the full article&lt;/li&gt;
&lt;li&gt;A multi-photo post would show thumbnails in the post entry, and the
larger photos in the full post.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, this discussion now implies &lt;em&gt;two&lt;/em&gt; templates - one for posts in a list
context, aka as post entries, and one for posts in a full context.&lt;/p&gt;
&lt;p&gt;A post entry template looks like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Title&lt;/li&gt;
&lt;li&gt;Referenced link&lt;/li&gt;
&lt;li&gt;Photo count&lt;/li&gt;
&lt;li&gt;Truncated content (with Read more link)&lt;/li&gt;
&lt;li&gt;if multi-photo show thumbnails, otherwise show one large photo&lt;/li&gt;
&lt;li&gt;Link preview&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a full post template we have this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Title&lt;/li&gt;
&lt;li&gt;Referenced link&lt;/li&gt;
&lt;li&gt;Photo count&lt;/li&gt;
&lt;li&gt;Content&lt;/li&gt;
&lt;li&gt;Large photos&lt;/li&gt;
&lt;li&gt;Link preview&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Open Graph Versus Featured Images&lt;/h2&gt;
&lt;p&gt;Open Graph is a standard created by Meta (Facebook) for annotating URLs with
metadata that can used in the unfurling of said URLs in other contexts.  One
of these bits of metadata is the image associated with the post that is
displayed in such contexts.&lt;/p&gt;
&lt;p&gt;Wordpress reportedly has a similar concept called the &amp;quot;featured image&amp;quot;,
which has been copied by the IndieWeb community in the form of a u-featured
microformat.  A featured image, like Open Graph&#39;s image metadata, can be
displayed in a link preview context.&lt;/p&gt;
&lt;p&gt;The two concepts work differently.  The Open Graph image URL is true
metadata; it&#39;s configured in a meta tag of a post&#39;s HTML.  As such, you
never see the image in the rendered post unless you explicitly put it in
there.  The IndieWeb featured image concept, on the other hand, is designed
to be embedded in the post itself, so that you have something to which you
can add the u-featured microformat.  You can, of course, turn the image off
with a good, old-fashioned &amp;quot;display: none&amp;quot; but those kinds of shenanigans,
while sometimes unavoidable, are generally frowned upon.&lt;/p&gt;
&lt;p&gt;The featured image is easy to add to an IndieWeb post if you&#39;re dealing with
one that incorporates such an image organically, such as a photo post, or an
article with some images embedded.  In such a case, the featured image can
also be used as the Open Graph image for maximum unfurling capabilities.&lt;/p&gt;
&lt;p&gt;I&#39;ll usually pick the first photo as the featured image in a multi-photo
post.&lt;/p&gt;
&lt;p&gt;On the other hand, if you have an article with no natural image to display,
then the situation becomes more complicated.  Some people will actually
incorporate a featured image into their content and display it in their
posts but that feels somewhat forced and artificial to me, so I don&#39;t bother
to do it.  I do certainly add an Open Graph image if I remember to.&lt;/p&gt;
&lt;h2&gt;Photo Album Format&lt;/h2&gt;
&lt;p&gt;I also post photo albums.  Photo albums are similar to multi-photo posts in
that they both house multiple photos, but an album differs from a
multi-photo post in the following ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each photo in an album post has its own permalink&lt;/li&gt;
&lt;li&gt;An album is more curated and less spontaneous than a photo post.  The
photos are more processed and I&#39;m more selective with them&lt;/li&gt;
&lt;li&gt;An album tends to have more photos than a photo post, so that showing all
the thumbnails in a list context isn&#39;t always feasible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Under the hood, as far as the post format is concerned, the two are nearly
indistinguishable, except for the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A multi-photo post tends to have no title, although there&#39;s nothing
really enforcing that.&lt;/li&gt;
&lt;li&gt;More importantly, an album post has an explicit flag, &lt;strong&gt;album: true&lt;/strong&gt;,
that concretely identifies the post as an album&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token front-matter-block&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;token front-matter yaml language-yaml&quot;&gt;date: &#39;2024-10-05T20:30:30-04:00&#39;
title: Plaza De Espana
featured:
  alt: &#39;&#39;
  value: &gt;-
    https://media.desmondrivet.com/27/82/0a/cd/c834418f3eb97df08ead1fc9ee4839e43218bef19c42c728aab27fde.jpg
album: true
excludeFromPosts: true
parent: &#39;2024-spain&#39;
photo:
  - alt: &#39;&#39;
    value: &gt;-
      https://media.desmondrivet.com/3a/41/39/00/6a65b1d3b2cea7a36d7c4b5e97deddbaea74bb3004ce61c46b93cb97.jpg
  - alt: &#39;&#39;
    value: &gt;-
      https://media.desmondrivet.com/66/f0/05/c5/db2ed1d9fb53d937883170044fd37ce4a49e3b8ac6f6d0cddf4b3205.jpg
  - alt: &#39;&#39;
    value: &gt;-
      https://media.desmondrivet.com/a8/49/b6/5e/0e5b9dd0d44f6602045dbc2b29a478c8abfed3b6ec26799f6ce8871f.jpg
  - alt: &#39;&#39;
    value: &gt;-
      https://media.desmondrivet.com/9b/ce/73/e9/f001794447336d239fa507a1a57db357fef181d1dcc79375b8e50980.jpg
  - alt: &#39;&#39;
    value: &gt;-
      https://media.desmondrivet.com/0c/57/30/34/902a01992fb105db4009d923ec25c582dcf13a63bdc8776e736d0ff6.jpg
  - alt: &#39;&#39;
    value: &gt;-
      https://media.desmondrivet.com/0b/6a/12/4b/283a2e598bf020e67474cee6baa83826f2b640472a252d70eb514830.jpg
  - alt: &#39;&#39;
    value: &gt;-
      https://media.desmondrivet.com/f2/c2/49/48/19b7a46adf598e35d82b35ca8572dcb31c81397913422bda35ef3ac3.jpg
  - alt: &#39;&#39;
    value: &gt;-
      https://media.desmondrivet.com/0d/9f/fd/c8/68dc185b232fa7a466a2eb440b3b2d733ae6bb911b7e34349541bcef.jpg
  - alt: &#39;&#39;
    value: &gt;-
      https://media.desmondrivet.com/d0/65/70/97/fac5397a015dc4a1f37b78b716df7c5b0cd75cfadbac0eab619836e5.jpg
  - alt: &#39;&#39;
    value: &gt;-
      https://media.desmondrivet.com/f3/0e/15/77/f312e468e2776b055f04bd795bf0989e8dc0f505a4e44439ec08307d.jpg
  - alt: &#39;&#39;
    value: &gt;-
      https://media.desmondrivet.com/27/82/0a/cd/c834418f3eb97df08ead1fc9ee4839e43218bef19c42c728aab27fde.jpg&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;---&lt;/span&gt;&lt;/span&gt;

Plaza de Espana is one of Seville&#39;s main postcard shots.  A huge, colourful building, it&#39;s hard to get it all in one photo.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Some things to note:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;As mentioned, I have an explicit album flag defined.&lt;/li&gt;
&lt;li&gt;I&#39;ve explicitly defined a featured photo here, because the first one
won&#39;t do.  I should probably move the featured flag into the photo list,
but I was lazy.&lt;/li&gt;
&lt;li&gt;I have a flag called &amp;quot;excludeFromPosts&amp;quot; which will remove this album from
direct feeds.  I only want the album to appear as the child of my &amp;quot;Spain&amp;quot;
album collection (see below), defined by the parent key.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Rendering Photo Albums&lt;/h3&gt;
&lt;p&gt;I could, in theory, choose to render the photo album in a similar way to a
multi-photo post, but I&#39;ve opted instead to do it a bit differently:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Because a photo album is meant to be more &amp;quot;curated&amp;quot;, and may have many
photos in it, I want to show just the featured image when it appears in a
list context, instead of the thumbnails.&lt;/li&gt;
&lt;li&gt;Since each photo has its own URL, when showing the full album post, I
want to show just the thumbnails and let the user navigate to the photo
URL when they click on it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This means that my post entry template now looks like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Title&lt;/li&gt;
&lt;li&gt;Referenced link&lt;/li&gt;
&lt;li&gt;Photo count (shown for multi-photos and albums)&lt;/li&gt;
&lt;li&gt;Truncated content&lt;/li&gt;
&lt;li&gt;If album, featured image.  If multi-photo, thumbnails.  If one photo, just the photo.&lt;/li&gt;
&lt;li&gt;Link preview&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For full posts we have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Title&lt;/li&gt;
&lt;li&gt;Referenced link&lt;/li&gt;
&lt;li&gt;Photo count (shown for multi-photos or albums)&lt;/li&gt;
&lt;li&gt;Content&lt;/li&gt;
&lt;li&gt;If album, thumbnails.  If not, a stack of full photos.&lt;/li&gt;
&lt;li&gt;Link preview&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One idiosyncrasy of an album post, when compared with a multi-photo post, is
that while we have conceptually defined a featured photo for the album, we
won&#39;t show it in the rendered post.  The reason is that all we&#39;re showing on
the post is thumbnails, and none of these are suitable for a featured image.
This is one major downside to using microformats to define a featured
image - you need to have the actual image in the post so that the
microformat has something to grab on to.&lt;/p&gt;
&lt;p&gt;You &lt;em&gt;can&lt;/em&gt; of course continue set the Open Graph image metadata to whatever
you want, and we do, in fact, set it here to the featured image so that the
permalink will unfurl correctly in most situations.&lt;/p&gt;
&lt;h2&gt;Album Collections with Explicit Featured Images&lt;/h2&gt;
&lt;p&gt;A photo album collection, as you might guess, is a collection of photo
albums, i.e. a post that houses other photo albums.  It can also house other
album collections.  Such a post houses no photos &lt;em&gt;directly&lt;/em&gt;, but it is still
is photo oriented, so it makes sense, in my opinion, to explicitly define a
conceptual featured image here, even if it&#39;s not &amp;quot;organically&amp;quot; part of the
post.&lt;/p&gt;
&lt;p&gt;Format-wise, an album collection looks a lot like a really, really short
blog entry - it has a title, and a line or two of content, describing the
collection.  But there are some things which set it apart:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The metadata will have an eleventyNavigation key, which child photo
albums point to as their &amp;quot;parent&amp;quot;.  In theory this feature doesn&#39;t have
to be restricted to photo albums, but that&#39;s all I&#39;m using it for at the
moment.&lt;/li&gt;
&lt;li&gt;Crucially, the metadata will have an &lt;strong&gt;album: true&lt;/strong&gt; flag, which firmly
identifies this as an album collection - and notably &lt;em&gt;not&lt;/em&gt; an album,
since there are &lt;em&gt;also&lt;/em&gt; no photos defined in the post directly.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An album collection will have an explicit featured image defined in the top
level metadata.&lt;/p&gt;
&lt;h3&gt;Rendering Album Collections&lt;/h3&gt;
&lt;p&gt;When rendering an album collection in a list context, it makes sense to me
to show its featured image, like a proper photo album.  In addition, I want
to display the number of albums in the collection.  This means I enhance my
post entry template so that it looks like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Title&lt;/li&gt;
&lt;li&gt;Referenced link&lt;/li&gt;
&lt;li&gt;Photo count (for multi-photos or albums)&lt;/li&gt;
&lt;li&gt;Album count&lt;/li&gt;
&lt;li&gt;Truncated content&lt;/li&gt;
&lt;li&gt;If one photo, just the photo.  If multi-photo, thumbnails.  If album or
album collection, featured image.&lt;/li&gt;
&lt;li&gt;Link preview&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The full post for album collections will render, in some fashion, the list
of albums for that collection.  Our template is therefore augmented to
include albums, like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Title&lt;/li&gt;
&lt;li&gt;Referenced link&lt;/li&gt;
&lt;li&gt;Photo count (for multi-photos or albums)&lt;/li&gt;
&lt;li&gt;Album count&lt;/li&gt;
&lt;li&gt;Content&lt;/li&gt;
&lt;li&gt;If album, thumbnails.  If not, a stack of full photos.&lt;/li&gt;
&lt;li&gt;Children of the album collection, either albums or more album
collections.  Either way, each child should have a featured image to
display.&lt;/li&gt;
&lt;li&gt;Link preview&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Like a regular photo album post, we don&#39;t render a featured photo for full
album collection posts, since the photo is not really shown organically in
the post.  And again, like the photo album post, we &lt;em&gt;will&lt;/em&gt; continue to
define the Open Graph image from the &lt;em&gt;defined&lt;/em&gt; featured photo in the raw
source post, so the URL can continue to unfurl correctly.&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>Madrid Is the Toronto of Spain, and That&#39;s Okay</title>
    <link href="https://desmondrivet.com/2024/11/25/madrid-exit"/>
    <updated>2024-11-26T00:58:42Z</updated>
    <id>https://desmondrivet.com/2024/11/25/madrid-exit</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;Madrid marked the end of our trip to Spain.  Our plane home flew out of
there and so we decided to spend the evening before exploring what we could
of the city.  We boarded a train from Seville and arrived at our hotel
around 4pm that day.&lt;/p&gt;
&lt;p&gt;I would argue Madrid is the Toronto of Spain from the point of view of
visiting Canadians because, like Toronto, it&#39;s the largest city in the
country as well as its economic hub and &lt;em&gt;also&lt;/em&gt; the city that everyone loves
to hate.&lt;/p&gt;
&lt;p&gt;I&#39;ve said this before but I&#39;ll say it again - everyone loves Barcelona.  No
one loves Madrid.  Madrid, by all popular accounts, is mediocre at best.&lt;/p&gt;
&lt;p&gt;Side note: if Madrid is the Toronto of Spain, does this mean that Barcelona
is the Montreal of Spain?  I don&#39;t think the comparison is crazy - everyone
&lt;em&gt;loves&lt;/em&gt; Montreal.&lt;/p&gt;
&lt;p&gt;Having visited Madrid, I can now say that, like Toronto, I feel its
reputation is somewhat undeserved - at least from the little I saw of it.
It appears to be a clean, attractive, organized city, marred only by the
confusing public transit system.  The buildings seem newer and less
distinctive, which I imagine puts some people off, but I thought they looked
pretty decent.  It&#39;s definitely not as dynamic as Barcelona or as colourful
as Seville but I honestly found the calm, almost placid vibe rather
refreshing after 10 days of hustle and bustle.&lt;/p&gt;
&lt;p&gt;Like Barcelona, it feels like there&#39;s a real city here, with a life of its
own beyond the tourists.  I could certainly see myself visiting again.&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>A Distinct Lack of Barbers</title>
    <link href="https://desmondrivet.com/2024/11/25/seville"/>
    <updated>2024-11-26T00:10:38Z</updated>
    <id>https://desmondrivet.com/2024/11/25/seville</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;I&#39;m 47 years old, and most of the people I work with are much younger than I
am - often in their 20&#39;s and 30&#39;s.  Cultural references that I think are
universal sometimes turn out to be pretty specific to my age group in ways
that surprise me.&lt;/p&gt;
&lt;p&gt;Take something like Bugs Bunny.  Most people, young and old, have of course
&lt;em&gt;heard&lt;/em&gt; of Bugs Bunny but it turns out that not a lot of young people grew
up watching it.  I have, and it is &lt;a href=&quot;https://www.youtube.com/watch?v=iiYW2d7RWw4&quot;&gt;because of this cartoon&lt;/a&gt; that I
happen to vaguely know some of the music to &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Barber_of_Seville&quot;&gt;The Barber of Seville&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So when I told some of my workmates that I was visiting Seville, and that I
would be visiting all the famous sites &lt;em&gt;as well as a barber&lt;/em&gt;, no one got the
joke.  They took one look at my shaved head and with genuine confusion would
proceed to inform me that I have no hair and hence would not need the
services of a barber.&lt;/p&gt;
&lt;p&gt;Growing old is &lt;em&gt;awful&lt;/em&gt;, y&#39;all.&lt;/p&gt;
&lt;p&gt;Anyway! After &lt;a href=&quot;https://desmondrivet.com/2024/10/25/barcelona&quot;&gt;Barcelona&lt;/a&gt;, Evelyn and I hopped on a high-speed train and
headed to Seville.  We had booked 3 nights.  It&#39;s not a destination you
often hear about in connection with a trip to Spain, but I had heard that it
was beautiful, and well worth the visit.&lt;/p&gt;
&lt;p&gt;I had &lt;em&gt;also&lt;/em&gt; heard that it was &amp;quot;underrated&amp;quot; and so I had assumed that it
would be less crowded than Barcelona.  Was I right?  Let&#39;s find out!&lt;/p&gt;
&lt;h2&gt;Arrival&lt;/h2&gt;
&lt;p&gt;Our apartment was located across from &lt;a href=&quot;https://en.wikipedia.org/wiki/Metropol_Parasol&quot;&gt;Las Setas&lt;/a&gt;, an odd, mushroom
shaped structure a short walk from the Old Town.  The accommodations were a
cross between an Airbnb and a hotel - it was a full apartment with fridge
and stove, but we didn&#39;t have to share the place with anyone.  Nice enough
digs, and a damn sight quieter than Barcelona.&lt;/p&gt;
&lt;p&gt;In terms of location, we were about a half hour walk from the Plaza de
Espana, which I was desperate to see right away.  &lt;a href=&quot;https://en.wikipedia.org/wiki/Plaza_de_Espa%C3%B1a,_Seville&quot;&gt;Plaza de Espana&lt;/a&gt; is
the &amp;quot;postcard&amp;quot; attraction of Seville - it&#39;s what shows up when you search
for &amp;quot;Seville&amp;quot; in a search engine and choose &amp;quot;images&amp;quot;.  Try it and you&#39;ll see
what I mean, and you&#39;ll also understand why I wanted to see this thing so
bad.&lt;/p&gt;
&lt;p&gt;The best way to get to the Plaza de Espana is to go through the &lt;a href=&quot;https://en.wikipedia.org/wiki/Santa_Cruz,_Seville&quot;&gt;Barrio de
Santa Cruz&lt;/a&gt;, otherwise known as the Old Town, or Jewish Quarter, a
gorgeously colourful collection of narrow streets, alleyways and squares.
It reminded me a bit of El Born in Barcelona but way less gritty and better
maintained - so well maintained, in fact, that Evelyn thought the whole
thing looked a bit unreal, like a theme park.  I could see where she was
coming from and I didn&#39;t entirely disagree, but I still found myself
enjoying the neighbourhood&#39;s twists and turns, even if I was sharing the
experience with thousands of other tourists.&lt;/p&gt;
&lt;p&gt;So...Seville is definitely &lt;em&gt;not&lt;/em&gt; some kinda of underrated &amp;quot;secret&amp;quot;.  It was
definitely crowded, though the tourist demographic may have skewed a little
bit older than Barcelona.&lt;/p&gt;
&lt;p&gt;Santa Cruz is home to some of the most popular tourist attractions in the
city, like the Cathedral and the Royal Alcazar and though these were
definitely on my list of things to see - I had already bought tickets for
both of them for the following day - at the moment I had my sights set on
the Plaza.  From the direction we were going, we approached it from behind,
turned a corner and...voila.&lt;/p&gt;
&lt;p&gt;It&#39;s hard to describe what hits your eyes when you turn the corner.
It&#39;s...immense, certainly, and your breath catches, but that&#39;s not quite the
whole story.  The entire package just sort of catches your eye, from the
square in front of the building, to the colourful, tiled mosaics, to the
symmetrical twin towers on either end, to the little stream running through
it all.  It&#39;s just...stunning, in a quite literal way - I was speechless for
a few seconds when I saw it.&lt;/p&gt;
&lt;p&gt;I was surprised to learn that the Plaza de Espana isn&#39;t actually very old;
it was built in 1929 for the Seville World Fair.  It was designed to
impress, and accomplishes the goal effortlessly.  I was more disappointed to
learn that the building now houses mostly government offices but I guess you
got to do &lt;em&gt;something&lt;/em&gt; with all that space.&lt;/p&gt;
&lt;p&gt;Also: not that I was looking very hard, but I did not find a barber this
day.  I &lt;em&gt;did&lt;/em&gt; however, find &lt;a href=&quot;https://desmondrivet.com/2024/10/05/sevile-misc/9957c8b1e5ed91&quot;&gt;Rosina&#39;s Balcony&lt;/a&gt;, by all accounts the
inspiration for the opera.&lt;/p&gt;
&lt;h2&gt;Second Day&lt;/h2&gt;
&lt;p&gt;The next day was reserved for our two main paid attractions in Seville: the
&lt;a href=&quot;https://en.wikipedia.org/wiki/Alc%C3%A1zar_of_Seville&quot;&gt;Royal Alcazar&lt;/a&gt; and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Seville_Cathedral&quot;&gt;Seville Cathedral&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;First up was the Royal Alcazar, the Spanish royal family&#39;s official
residence when they stay in Seville.  It looks like something out of
Morocco.  At first I thought it was actually built by Moorish invaders but,
alas, the truth is a bit more mundane.  Though originally the site of a 10th
century Islamic citadel, progressive conquests and reconstructions have led
to current palace, a Mudéjar-style estate dating back to the 14th century,
near the end of Islamic rule in Spain.  It &lt;em&gt;looks&lt;/em&gt; like something
&lt;a href=&quot;https://en.wikipedia.org/wiki/Scheherazade&quot;&gt;Scheherazade&lt;/a&gt; may have cooked up but it was actually built by European
Christians as a Christian residence, though very much in the style of the
conquering Moors.&lt;/p&gt;
&lt;p&gt;The place is mind-blowing.  To some extent, I suppose, it must have been the
novelty of the whole thing - I&#39;d never seen anything quite it.  When you
visit Europe, you&#39;re used to seeing a lot of churches and castles and
palaces of a certain look and feel, and the Alcazar just doesn&#39;t fit that
mould.&lt;/p&gt;
&lt;p&gt;When the tour was over, we had lunch, walked a bit and then stood in line
for the Seville Cathedral.  Like the Alcazar, the church has Islamic origins
and was originally the site of a large mosque.  Nothing remains of the
original structure except, notably, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Giralda&quot;&gt;Giralda tower&lt;/a&gt;, which totally
looks the part.&lt;/p&gt;
&lt;p&gt;I usually don&#39;t bother with church tours when I visit Europe, but this one
came highly recommended, for reasons I didn&#39;t fully grasp until I saw it.
The Seville Cathedral is the largest Gothic cathedral in the world and
although I understand what that means &lt;em&gt;abstractly&lt;/em&gt; it&#39;s still a big hit to
the brain when you go inside and see just what that means in practice.&lt;/p&gt;
&lt;p&gt;I could say that it&#39;s huge, but what does that even mean?  Legend has it
that the architects wanted to build a church so big the world thought they
were crazy.  Mission accomplished - the size is impossible to convey in
words, and difficult in photos (I &lt;a href=&quot;https://desmondrivet.com/2024/10/05/seville-cathedral.html&quot;&gt;tried&lt;/a&gt;, and mostly failed, I think).
Let&#39;s just say that when you go inside you feel very, very, very small.  My
first reaction was to wonder how on earth they keep the ceilings clean.&lt;/p&gt;
&lt;p&gt;There are, reportedly, over 80 chapels (distinct altars or areas where
people can kneel and pray) inside but, again, I&#39;m not exactly sure what I&#39;m
supposed to do with that information.  How many chapels does a church
usually have?  I have no idea.&lt;/p&gt;
&lt;p&gt;What I &lt;em&gt;do&lt;/em&gt; know is that the main chapel is called, unsurprisingly, the Main
Chapel, and that it houses one of the most breathtaking works of art I&#39;ve
ever seen in my life: the &lt;a href=&quot;https://yatrikaone.com/spain-seville-cathedral-altarpiece-at-the-main-chapel/&quot;&gt;Ritablo Mayor&lt;/a&gt;, or Main Altarpiece, an
unassuming name for something so incredibly &lt;em&gt;extra&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The Ritablo Mayor stands roughly 60 feet tall and consists of matrix or grid
of Bible scenes, all carved out of wood and gilded to the hilt.  In a time
when most people couldn&#39;t read, this was meant to familiarize them with
selected Bible stories, the way a comic book might today.&lt;/p&gt;
&lt;p&gt;Oh! And the Cathedral is also the final resting place of one Christopher
Columbus.  An asshole, to be sure, but the history is deep here.&lt;/p&gt;
&lt;p&gt;Side note: on this second day, I still did not find a barber.  Is there just
one barber in Seville, the one the opera&#39;s about?  It feels like it.  Anyway
I didn&#39;t find him.&lt;/p&gt;
&lt;h2&gt;Third Day&lt;/h2&gt;
&lt;p&gt;The third day in Seville was mostly just exploration and if you&#39;re going to
do that, one neighbourhood stands out: &lt;a href=&quot;https://en.wikipedia.org/wiki/Triana,_Seville&quot;&gt;Triana&lt;/a&gt;.  At least, that&#39;s what
the Internet and guidebooks say, which means that it&#39;s still just as
touristy as the rest of town.&lt;/p&gt;
&lt;p&gt;I&#39;m being a bit unfair.  Triana definitely had a lot of tourists but it also
had a lot of stretches that just seemed...uninteresting.  Therein lies rub
when it comes to the dichotomy between &amp;quot;authentic&amp;quot; and &amp;quot;touristy&amp;quot;.
Generally speaking, touristy places are like that for a reason - and, by
contrast, the non-touristy, authentic spots are &lt;em&gt;also&lt;/em&gt; like that for a
reason.&lt;/p&gt;
&lt;p&gt;When we first crossed the bridge to Trina, for example, after a bit of
wandering, we settled on a bar that felt pretty local.  It wasn&#39;t a bad
spot, and the food was okay, but...it was definitely not catering to us.  I
think people sometimes don&#39;t realize that &amp;quot;real&amp;quot; Spaniards drink local beer
and eat fries and pizza like the rest of us.  I honestly think the place
could have become better over upon multiple visits but we never got the
chance.&lt;/p&gt;
&lt;p&gt;It turns out that we actually crossed the wrong bridge.  We meant to cross
the Puente de Isabel II, which was supposed to take us directly into the
main part of the neighbourhood, with all the popular restaurants and bars,
but instead we crossed a bridge or two earlier and ended up in a part of
town that was much more residential and local - as represented by the bar we
settled on.  We didn&#39;t quite know where we were, and we couldn&#39;t quite
figure out why there wasn&#39;t anything interesting around us.  Again, it all
comes back to be authentic versus touristy, and being careful what you wish
for.&lt;/p&gt;
&lt;p&gt;Anyway, Trina as a whole definitely had a totally different vibe from the
Old Town.  While the Old Town felt a bit like a theme park, Trina felt like
a real neighbourhood, like people actually lived there.  It probably
deserves more exploration.&lt;/p&gt;
&lt;p&gt;(Seriously, where are all the barbers?  I couldn&#39;t even find one in Triana,
and &lt;em&gt;this&lt;/em&gt; time I was actually looking.  I guess tourists don&#39;t really need
their hair cut)&lt;/p&gt;
&lt;h2&gt;Comparison with Barcelona&lt;/h2&gt;
&lt;p&gt;Inevitably, when I tell people that I went to both Seville and Barcelona,
people will ask me which I prefer.&lt;/p&gt;
&lt;p&gt;It&#39;s a tough question to answer, because I genuinely liked both cities.  I
&lt;em&gt;will&lt;/em&gt; say, however, that while I think Seville is a prettier town than
Barcelona, I felt that there was more going on in the latter.  Seville felt
like a town of tourist attractions, and you begin to think that there&#39;s
maybe not much going on beyond that.  Barcelona &lt;em&gt;also&lt;/em&gt; has a ton of tourist
attractions, but one gets the impression that there&#39;s an honest-to-goodness
city to be explored once you move past them.&lt;/p&gt;
&lt;p&gt;So on the whole I guess Barcelona has a slight edge here, though I would
gladly revisit both.&lt;/p&gt;
&lt;p&gt;(Ironically, on the train &lt;em&gt;out&lt;/em&gt; of Seville to Madrid...we finally caught
sight of a barber shop.  I think Seville is missing out on a lucrative
opportunity here)&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>Looking for Paella in All the Wrong Places</title>
    <link href="https://desmondrivet.com/2024/10/25/barcelona"/>
    <updated>2024-10-26T00:38:02Z</updated>
    <id>https://desmondrivet.com/2024/10/25/barcelona</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;The COVID-19 pandemic put a cramp in my travel habits, as it did with
everyone.  The last overseas trip that Evelyn and I went on was &lt;a href=&quot;https://desmondrivet.com/2016/06/29/poland&quot;&gt;to
Poland&lt;/a&gt; in 2016 for a wedding and the last one that we actually &lt;em&gt;planned&lt;/em&gt;
was &lt;a href=&quot;https://desmondrivet.com/2015/07/11/trip-greece&quot;&gt;to Greece&lt;/a&gt; in 2015 (and, my God, it&#39;s hard for me to accept that
Greece &lt;em&gt;9 years ago&lt;/em&gt;).  We&#39;ve been to a handful of relatively local
destinations in the interim (Vancouver, New York, PEI) but nothing
particularly foreign.&lt;/p&gt;
&lt;p&gt;And while I do remain part of an increasingly small minority of people who
still thinks about the pandemic in the present tense, I &lt;em&gt;also&lt;/em&gt; wanted to
finally visit someplace a bit more exotic.&lt;/p&gt;
&lt;p&gt;So...with our vaccines topped up, we choose Spain. Or rather I choose it,
and I dragged Evelyn along.&lt;/p&gt;
&lt;p&gt;I wanted to avoid a repeat of the madness of Greece.  We managed to pack a
lot into 10 days for that trip, and it was all great, but the trade off was
that we were constantly on the move, never staying more than a couple of
days in one spot.  I wanted something a bit more stable this time so we
settled on 6 nights in Barcelona, 3 nights in Seville and 1 night in Madrid
since we were flying out of there the next day.&lt;/p&gt;
&lt;p&gt;The trip was planned just as locals started protesting mass tourism in Spain
and other parts of Europe, and while I&#39;d hoped that travelling in September
would spare us the worst of it, I also got some advice on how to blend
in...or at least on how to avoid walking around with a giant neon arrow
pointed at my head flashing &amp;quot;tourist&amp;quot;.  Mostly this involved dressing
plainly and not being obnoxious.&lt;/p&gt;
&lt;p&gt;I started making inquiries.  What was Spain like?  What was worth seeing?
What wasn&#39;t?  From the very few people I talked to, the consensus seemed to
be that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Barcelona was amazing&lt;/li&gt;
&lt;li&gt;Seville was amazing&lt;/li&gt;
&lt;li&gt;The food was amazing&lt;/li&gt;
&lt;li&gt;Madrid was...not amazing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Were we attacked with water guns?  Was the food indeed amazing?  Exactly how
disappointing was Madrid?  Read on to find out!&lt;/p&gt;
&lt;p&gt;(Or rather, read on to find out more about Barcelona!  Seville and Madrid
will be dealt with in a future blog entry since this one is getting quite
long).&lt;/p&gt;
&lt;h2&gt;There is No Barcelona Syndrome&lt;/h2&gt;
&lt;p&gt;Our first stop was Barcelona, our home for the next few days.  Before we get
into it though, I want to take a small detour and talk about another famous
and tourist-laden European city: Paris.  In particular, I want to talk about
something called &lt;a href=&quot;https://en.wikipedia.org/wiki/Paris_syndrome&quot;&gt;Paris Syndrome&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Paris Syndrome is the cognitive dissonance felt by many tourists when they
visit a legendary city like Paris.  It&#39;s the contrast between knowing in
your heart of hearts that Paris is the very epitome of European high-culture
and the fact that, when you visit, there are rude people and &lt;a href=&quot;https://www.npr.org/2013/01/26/170321680/not-just-a-fashion-hot-spot-paris-is-also-the-capital-of-dog-mess&quot;&gt;dog shit&lt;/a&gt;
&lt;em&gt;everywhere&lt;/em&gt;.  It&#39;s particularly common among Japanese tourists, who tend to
put the city on a pedestal and who tend to come from places where, I can
only assume, people are more polite and tend to pick up after their pets.&lt;/p&gt;
&lt;p&gt;One interesting twist to all of this is that I didn&#39;t actually experience
Paris Syndrome when I first visited the city 20 odd years ago.  I wasn&#39;t
very well-travelled, and Europe was still so new to me back then, that every
street, every back alley, no matter how mundane, took on an air of the
exotic for the simple reason that it &lt;em&gt;wasn&#39;t home&lt;/em&gt;.  It&#39;s not that I didn&#39;t
notice the dog shit - I most definitely noticed it - but rather that it lent
an &amp;quot;interesting&amp;quot; texture to a place that was already bearing down on me with
the weight of its history.&lt;/p&gt;
&lt;p&gt;Or maybe part of it is that I come from Montreal, a city with its share of
grime.  The dog shit didn&#39;t faze me as much as some people.  Who knows?&lt;/p&gt;
&lt;p&gt;So, with that in mind, I would like to point out that there doesn&#39;t appear
to be such a thing as Barcelona Syndrome - at least, not according to
Wikipedia.  Everyone I&#39;ve talked to raves about the place.  Madrid?  You can
skip it.  Barcelona?  Don&#39;t you fucking &lt;em&gt;dare&lt;/em&gt;.  The food, the architecture,
the beaches - by all accounts Barcelona walks on water in a way that Paris
does not.&lt;/p&gt;
&lt;p&gt;Why is this?  Is Barcelona that amazing?  Or is it that it doesn&#39;t have
quite the same lofty reputation as Paris, and so people&#39;s expectations are
lower?  I don&#39;t know, but I&#39;ll say this.  When I was discussing with Evelyn
how long we would stay, she expressed concern that 5 days would too much.
She was genuinely concerned that we would be bored after day 3.&lt;/p&gt;
&lt;p&gt;Since Paris, of course, I&#39;ve been back to Europe several times and while
many parts of it are indeed achingly beautiful, I&#39;ve now &amp;quot;been there&amp;quot; and
&amp;quot;done that&amp;quot;, so to speak.  I&#39;m no longer impressed by something just because
it&#39;s different or &amp;quot;exotic&amp;quot; and I can safely say that it takes more than just
a slightly foreign looking alleyway to engage my sense of wonder.  And dog
shit, no two ways about it, is a blight on society.&lt;/p&gt;
&lt;p&gt;So, given that this isn&#39;t my first rodeo, but &lt;em&gt;also&lt;/em&gt; that everyone really,
&lt;em&gt;really&lt;/em&gt; seems to love Barcelona...how was it?&lt;/p&gt;
&lt;h2&gt;Less Vibes, More Sights, and Gaudi All Around&lt;/h2&gt;
&lt;p&gt;Let&#39;s start with the Airbnb.  It was located in the Barcelona Sans district,
right near the train station, and only a 5 minute walk from the metro.
While our accommodations were modest, our hostess was legitimately one of
the friendliest people I&#39;ve ever met in my life.&lt;/p&gt;
&lt;p&gt;Here&#39;s where I learned that Duo Lingo is a lie.  Our hostess spoke Ukrainian
and Spanish - but not much English.  No problem, I think to myself - I&#39;ve
been Duo Lingo-ing Spanish for a over a year and we should be fine, right?
Right?&lt;/p&gt;
&lt;p&gt;Hahahahaha!  I don&#39;t know if I&#39;m just bad at this but my Spanish was
&lt;em&gt;rough&lt;/em&gt;, y&#39;all.  As in, non-existent.  We desperately ended up relying on
Google Translate here.  This linguistic problem actually cropped up more
than you might imagine given that we were tourists in one of the most
heavily visited cities in the world.  You see, our attempts to blend in
&lt;em&gt;actually worked&lt;/em&gt; - kind of.  Random people would stop us to ask for
directions, in Spanish, only to be met with a laughably broken &amp;quot;No hablo
espanol&amp;quot;.  Devastating.&lt;/p&gt;
&lt;p&gt;Still, our room was decent enough and very well situated, so it was hard to
complain.  And while no part of Barcelona is completely tourist-free, this
area wasn&#39;t completely overrun with them, so that was a win.  The
neighbourhood felt...lived in.  Pleasant enough, but I didn&#39;t get the
impression that everything was there &lt;em&gt;for us&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Our first touristy thing to do was booked for the night we flew in - a tour
of &lt;a href=&quot;https://en.wikipedia.org/wiki/Casa_Batll%C3%B3&quot;&gt;Casa Batllo&lt;/a&gt;, by all accounts a &amp;quot;must see&amp;quot;, and so we decided we &amp;quot;had
to&amp;quot; see it.  It&#39;s a building designed by &lt;a href=&quot;https://en.wikipedia.org/wiki/Antoni_Gaud%C3%AD&quot;&gt;Antoni Gaudi&lt;/a&gt;, a name that
comes up again and again in connection to Barcelona - it sometimes feels
like he designed half the city.  For what it&#39;s worth, it&#39;s an impressive
structure - the thing looked like it was made from bones; indeed, I later
discovered that the locals sometimes call it the House of Bones.&lt;/p&gt;
&lt;p&gt;This feels like a good spot to point out something that immediately sets
Barcelona apart from Paris in my mind, either because I&#39;m less of a
wide-eyed traveller nowadays or because of something intrinsically different
between the two cities.  Paris, to me at least, is the type of city where
you can just kind of...soak up the vibe.  Obviously, there are a ton of
specific things to see and do, but it&#39;s &lt;em&gt;also&lt;/em&gt; possible to just amble along
aimlessly and still feel like you&#39;re experiencing something special and
unique.  There&#39;s less of that in Barcelona.  The city feels grittier, and
lazily strolling around is a less interesting experience.  Don&#39;t get me
wrong, there&#39;s a ton of cool things to see and do, but it&#39;s less vibe and
more sights, if that makes sense.&lt;/p&gt;
&lt;p&gt;Despite being so crowded, there isn&#39;t much dog shit or trash in Barcelona
and that night, in bed, we discovered why.  It&#39;s because the city empties
out the garbage bins &lt;em&gt;every single night&lt;/em&gt;.  We were woken up to the sounds
of glass bottles being crushed in a garbage truck around 2 am.  Good thing
we brought earplugs.  I was prepared the next night.&lt;/p&gt;
&lt;p&gt;(Interesting philosophical question: if this had happened while I was in
Paris, would I have chalked it up to the &amp;quot;texture&amp;quot; of the city?  I don&#39;t
know but I can tell you that I was certainly not impressed this time
around).&lt;/p&gt;
&lt;p&gt;The next day we toured the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sagrada_Fam%C3%ADlia&quot;&gt;Sagrada Familia&lt;/a&gt;, another Gaudi special.
Nominally a Catholic Basilica, I can safely say that the Sagrada Familia was
one of the top things I&#39;ll forever remember about Barcelona.  As one starts
to experience more of Gaudi&#39;s work, you begin to notice similar themes.  The
guy was really into making his creations look organic - &lt;em&gt;grown&lt;/em&gt; rather than
&lt;em&gt;designed&lt;/em&gt;.  Sometimes that meant making them look like they were built from
bones, and sometimes it meant making them look like they were crystals
jutting out of the ground.  In the case of the Sagrada Familia, it looked
like &lt;em&gt;both&lt;/em&gt;.  I was surprised to learn that it&#39;s not the official Cathedral
of Barcelona (that title goes to the much more aptly name &lt;a href=&quot;https://en.wikipedia.org/wiki/Barcelona_Cathedral&quot;&gt;Barcelona
Cathedral&lt;/a&gt; - by all accounts a much less impressive structure) but given
that, due to Gaudi&#39;s untimely death, it&#39;s still not finished after 150
years, I suppose it&#39;s not surprising.&lt;/p&gt;
&lt;p&gt;Later that day we visited &lt;a href=&quot;https://en.wikipedia.org/wiki/Park_G%C3%BCell&quot;&gt;Park Guell&lt;/a&gt;, yet another Gaudi creation (this
guy is &lt;em&gt;everywhere&lt;/em&gt; in Barcelona).  Not quite the jaw dropping spectacle of
the Sagrada Familia, Park Guell still looks like something out of
Dr. Seuss.&lt;/p&gt;
&lt;h2&gt;A Brief Culinary Detour&lt;/h2&gt;
&lt;p&gt;We obviously had to eat that night and so now might be good time to talk
about the food.  It&#39;s definitely one of things people tend to comment on
when they talk about Spain.  People seem to love it.  When questioned on the
subject, a friend of mine remarked: &amp;quot;Two words: &lt;a href=&quot;https://en.wikipedia.org/wiki/Jam%C3%B3n_ib%C3%A9rico&quot;&gt;jamón ibérico&lt;/a&gt;&amp;quot;.
Another friend won&#39;t stop talking about the &lt;a href=&quot;https://en.wikipedia.org/wiki/Paella&quot;&gt;paella&lt;/a&gt; and yet another
friend raves about the tapas, which is weird because tapas aren&#39;t really a
&lt;em&gt;recipe&lt;/em&gt;, right?  More of a...portion size?&lt;/p&gt;
&lt;p&gt;So I&#39;ll get this out of the way: the food was...fine.  Tasty, but not mind
blowing.  Just okay.&lt;/p&gt;
&lt;p&gt;Maybe it&#39;s because I&#39;ve visited France and Italy where the food was, indeed,
mind blowing, but I found the food in Spain a bit lackluster.  I&#39;m honestly
not sure what the big deal is about paella; I tried it three times and it
was certainly &lt;em&gt;good&lt;/em&gt; each time but people treat this dish like it&#39;s some
kind of religious experience it just...was not that for me.  To be fair,
it&#39;s possible that we simply picked the wrong spots - I&#39;m pretty sure at
least of them was a tourist trap - but it&#39;s hard for me to imagine even a
professionally prepared paella changing my life.  I&#39;m willing to be
corrected here!&lt;/p&gt;
&lt;p&gt;And the jamón ibérico?  People will yell at you if you call it prosciutto,
so I won&#39;t call it prosciutto, but it&#39;s definitely prosciutto &lt;em&gt;adjacent&lt;/em&gt;,
you know?  It&#39;s delicious, but I&#39;ve had similar stuff before.&lt;/p&gt;
&lt;p&gt;One Spanish culinary item that did, in fact, stand out for me might not be
what you expect: it was the vermouth.  Vermerterias, bars that specialize in
vermouth, are &lt;em&gt;everywhere&lt;/em&gt; in Spain, many of them with their own house
blends.  Vermouth gets a bad rap in North America - it&#39;s the stuff you
&lt;em&gt;grudgingly&lt;/em&gt; mix into a Martini or a Manhattan - but &lt;em&gt;good&lt;/em&gt; vermouth is
criminally underrated, and Spain is awash in the stuff.  It was great.&lt;/p&gt;
&lt;p&gt;Oh!  And the cheesecake.  I actually really, really liked the cheesecake.
It&#39;s definitely not like the firm, dense, almost crumbly cheesecake you get
here, which I also love.  Spanish cheesecake is less cake and more creamy
custard.  You almost eat it like a pudding.  It&#39;s amazing.&lt;/p&gt;
&lt;h2&gt;El Born and the Gothic Quarter&lt;/h2&gt;
&lt;p&gt;On the advice of a friend, we booked a free (sort of - these people work on
donations) walking tour for the next day.  While the walking tour was
extremely informative, and our tour guide was very knowledgeable and very
nice, I know that years from now the only thing I&#39;m going to really remember
about it is that the tour took us through the Old Town of Barcelona.&lt;/p&gt;
&lt;p&gt;The Old Town, consisting of two areas called &lt;a href=&quot;https://en.wikipedia.org/wiki/La_Ribera&quot;&gt;El Born&lt;/a&gt; and the &lt;a href=&quot;https://en.wikipedia.org/wiki/Gothic_Quarter,_Barcelona&quot;&gt;Gothic
Quarter&lt;/a&gt;, effectively constitutes a giant exception to my idea that
Barcelona doesn&#39;t have much of a &amp;quot;vibe&amp;quot;.  The Old Town is &lt;em&gt;all vibe&lt;/em&gt;.  The
entire neighbourhood is bursting with charming little cafes, restaurants,
side streets and alleyways, many of which date back to the medieval era, but
I can&#39;t think of a single thing that stuck out more than the neighbourhood
as a whole.  It&#39;s very easy to get lost here, and it&#39;s very easy not to
care.&lt;/p&gt;
&lt;p&gt;And there&#39;s a whole set of Roman ruins underneath!  You can buy a ticket to
see them at the local History Museum.  They were discovered relatively
recently; there&#39;s a black and white photograph of it in the museum.
Fascinating stuff.  Evelyn and I spent way longer looking at old &lt;a href=&quot;https://en.wikipedia.org/wiki/Garum&quot;&gt;garum&lt;/a&gt;
factories than I thought was humanly possible.&lt;/p&gt;
&lt;h2&gt;How To Visit a Beach in Barcelona&lt;/h2&gt;
&lt;p&gt;Barcelona actually has a city beach, in the &lt;a href=&quot;https://en.wikipedia.org/wiki/La_Barceloneta,_Barcelona&quot;&gt;Barceloneta&lt;/a&gt; district, that
dates back to 1992, when the city hosted the Olympics.  It&#39;s serviceable but
is nonetheless not the one many people think of when they want to take a
dip.  No, the town that crosses everyone&#39;s minds when they think of
&amp;quot;Barcelona&amp;quot; and &amp;quot;beaches&amp;quot; is &lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/La_Barceloneta,_Barcelona&quot;&gt;Sitges&lt;/a&gt;&lt;/em&gt;, which isn&#39;t actually in
Barcelona.&lt;/p&gt;
&lt;p&gt;In theory, getting there should have been easy for us.  We were right near
the train station.  It&#39;s only a 45 minute ride.  This should have been a
cake walk.&lt;/p&gt;
&lt;p&gt;Alas, we...did not fully understand how the train ticketing system worked,
and ended buying a ticket to someplace completely different.  Luckily,
Evelyn discovered our mistake before we got too far.  Still...28 Euros down
the drain and we only got to Sitges around 4pm.&lt;/p&gt;
&lt;p&gt;It was worth it, though.  The town itself is pretty, sports 17 beaches, none
of which were crowded at that time of year and all of which were beautiful.
The Mediterranean waters were choppy but warm, and became much less choppy
the more you swam out.  I can only imagine how pleasant the excursion would
have been if we had, you know, actually gotten on the right train.&lt;/p&gt;
&lt;p&gt;So that&#39;s the lesson I took from that day.  Take it from someone who&#39;s been
there: make sure you get on the right train!  Words to live by.&lt;/p&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;Barcelona definitely feels like a place that would reward repeated visits.
I can imagine spending months or even years looking for that one hole in the
wall that serves up the best paella you&#39;ve ever had, or that one underground
cavern with the secret vermouth barrel that will become the gold standard by
which you will judge all other vermouths.&lt;/p&gt;
&lt;p&gt;And it feels more real than Paris, like people actually work and live there.
I think the city isn&#39;t burdened by the weight of expectations, and it lets
you have more fun.  I definitely want to go back.&lt;/p&gt;
&lt;p&gt;Maybe with, you know, some actual Spanish under my belt this time.&lt;/p&gt;
&lt;p&gt;As I mentioned, Barcelona was the first part of a longer trip to Spain.
Stay tuned for my thoughts on Seville and Madrid.&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>Yes, I Know That Chai Means Tea</title>
    <link href="https://desmondrivet.com/2024/06/28/chai-tea"/>
    <updated>2024-06-28T14:21:26Z</updated>
    <id>https://desmondrivet.com/2024/06/28/chai-tea</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;Yes, I know that the word &amp;quot;chai&amp;quot; literally just means &amp;quot;tea&amp;quot; in Hindi (and
other languages) and that the term &amp;quot;chai tea&amp;quot; is therefore technically
redundant.  I don&#39;t care.  I will still occasionally say &amp;quot;chai tea&amp;quot; and I
don&#39;t feel like I&#39;m committing some kind of linguistic sin by doing so.&lt;/p&gt;
&lt;p&gt;The English translation of &amp;quot;chai&amp;quot; is, of course, &amp;quot;tea&amp;quot; and it refers to a
very generic category of usually hot and often caffeinated beverages made
from steeping various kinds of leaves.  On the other hand, the word &amp;quot;chai&amp;quot;
&lt;em&gt;in English&lt;/em&gt; usually refers to a very specific kind of spiced tea, often
taken with milk, that Westerners typically associate with the culinary
tradition of South Asia.  One would not normally use the word &amp;quot;chai&amp;quot; &lt;em&gt;in
English&lt;/em&gt; to refer to the bog standard Orange Pekoe that one might drink for
a caffeine fix in the morning before work.&lt;/p&gt;
&lt;p&gt;I &lt;em&gt;could&lt;/em&gt; just use the word &amp;quot;chai&amp;quot; on its own to refer to this spiced
beverage and leave it at that, but if I&#39;m comparing it to other kinds of
tea, like Earl Grey or Irish Breakfast, then I might add the word &amp;quot;tea&amp;quot;
after each item to stress the unifying concept.  So I might say &amp;quot;Earl Grey
tea&amp;quot;, &amp;quot;Irish Breakfast tea&amp;quot; or (the horror!) &amp;quot;chai tea&amp;quot;.&lt;/p&gt;
&lt;p&gt;My point is that the word &amp;quot;chai&amp;quot; &lt;em&gt;in English&lt;/em&gt; doesn&#39;t mean the same thing as
it does in other languages, despite being borrowed from those languages.
Sometimes chai is used as more of an adjective than a noun, and that&#39;s just
how languages work.  They borrow words and they change them.&lt;/p&gt;
&lt;p&gt;It&#39;s exactly the same battle with a word like &amp;quot;naan&amp;quot;.  I know it just means
&amp;quot;bread&amp;quot; in Persian but that&#39;s simply not how the word is used in English.
In English it refers to a specific kind of flat bread, usually made in a
specific kind of oven.  I mean, a French baguette is just &amp;quot;bread&amp;quot; as well,
but I suspect you wouldn&#39;t use the word &amp;quot;naan&amp;quot; to describe it.&lt;/p&gt;
&lt;p&gt;And yes, I &lt;em&gt;would&lt;/em&gt; use the (technically redundant) combination &amp;quot;naan bread&amp;quot;
if, like the tea example above, I was trying to differentiate naan from
various other kinds of bread, like sourdough or pita, and I wanted to
emphasize the unifying characteristic of all the things I was talking about.&lt;/p&gt;
&lt;p&gt;So stop with the sanctimonious word policing, already!  Languages evolve and
trade, and this is just one example in a very long line of examples.&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>Five Years on the IndieWeb</title>
    <link href="https://desmondrivet.com/2024/06/07/five-years-indieweb"/>
    <updated>2024-06-08T01:33:22Z</updated>
    <id>https://desmondrivet.com/2024/06/07/five-years-indieweb</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;About five years ago, in early 2019, I stumbled upon the &lt;a href=&quot;https://indieweb.org/IndieWeb&quot;&gt;IndieWeb&lt;/a&gt;, a
movement and community dedicated to modernizing the personal website.  I
quickly became enamoured with its ideas and spent the next year revamping my
website and blog to make it more compliant with their standards.&lt;/p&gt;
&lt;p&gt;I&#39;ve &lt;a href=&quot;https://desmondrivet.com/posts/articles/tags/indieweb&quot;&gt;written about the IndieWeb&lt;/a&gt; before but if you&#39;re just tuning in,
there are several dimensions to it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There&#39;s an emphasis on owning your own domain and on integrating
&lt;a href=&quot;https://indieweb.org/IndieAuth&quot;&gt;IndieAuth&lt;/a&gt;, a way of using your domain as a form of authentication -
something of a spiritual successor to &lt;a href=&quot;https://indieweb.org/OpenID&quot;&gt;OpenID&lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;There&#39;s the formalization of the notion of a &lt;a href=&quot;https://indieweb.org/post&quot;&gt;post&lt;/a&gt; (via a technology
called &lt;a href=&quot;https://indieweb.org/microformats&quot;&gt;microformats&lt;/a&gt;) and a relatively sophisticated taxonomy system
and algorithm for &lt;a href=&quot;https://indieweb.org/post-type-discovery&quot;&gt;identifying different kinds of posts&lt;/a&gt; &amp;quot;in the
wild&amp;quot;, so to speak.&lt;/li&gt;
&lt;li&gt;There are &lt;a href=&quot;https://indieweb.org/Webmention&quot;&gt;webmentions&lt;/a&gt;, a way for websites to talk to each other,
after a fashion, allowing a kind of decentralized social network to
emerge out of the cacophony of standalone blogs.&lt;/li&gt;
&lt;li&gt;There&#39;s a &lt;a href=&quot;https://indieweb.org/POSSE&quot;&gt;conceptual framework for cross posting your content to third
party applications&lt;/a&gt; and for &lt;a href=&quot;https://indieweb.org/backfeed&quot;&gt;harvesting interactions on said applications
to your own site&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;There&#39;s a standard, known as &lt;a href=&quot;https://indieweb.org/Micropub&quot;&gt;Micropub&lt;/a&gt;, for publishing new posts on
your website.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I pretty much went whole hog here; my website and publishing workflow
supports all of the above, and &lt;a href=&quot;https://indieweb.org/link-preview&quot;&gt;link previews&lt;/a&gt; to boot.  Not
particularly &lt;em&gt;well&lt;/em&gt;, mind you, but that&#39;s a different conversation.&lt;/p&gt;
&lt;p&gt;Owning your own data, and collecting it in one place, just felt right to me,
as I&#39;ve always been a bit uneasy with the idea of leaving my online presence
spread out among a handful of third party applications.  The nerd in me also
appreciated the way the IndieWeb both generalized the notion of a post, and
classified individual posts into specific types, like &lt;a href=&quot;https://indieweb.org/article&quot;&gt;articles&lt;/a&gt; or
&lt;a href=&quot;https://indieweb.org/note&quot;&gt;notes&lt;/a&gt;; I&#39;d often mulled over rudimentary versions of this kind of
scheme in the past, but never really had the wherewithal to implement it.&lt;/p&gt;
&lt;p&gt;(To be fair, the IndieWeb post classification scheme is not perfect.  In
particular, I don&#39;t find it particularly useful to distinguish between
certain types of posts, like notes or photos or &lt;a href=&quot;https://indieweb.org/video&quot;&gt;videos&lt;/a&gt;; to me, these
are all just different variations of a note.  In general, I think it&#39;s more
useful to firmly distinguish between original content, such as articles or
notes, which have their roots in traditional blogging, and derivative
content, such as &lt;a href=&quot;https://indieweb.org/like&quot;&gt;likes&lt;/a&gt;, &lt;a href=&quot;https://indieweb.org/repost&quot;&gt;reposts&lt;/a&gt; and &lt;a href=&quot;https://indieweb.org/reply&quot;&gt;replies&lt;/a&gt;, which seem to
have come about as a response to the emergence of social networking.  This
personal preference surfaces in my blog via my &lt;a href=&quot;https://desmondrivet.com/posts/lifestream/&quot;&gt;&amp;quot;Lifestream&amp;quot;&lt;/a&gt; feed which
houses all my original content into one feed)&lt;/p&gt;
&lt;p&gt;My blog never had a lot of readers, and I never had a ton of followers on
social media, so while the social networking aspects of the IndieWeb,
particularly the webmentions, certainly intrigued me, they were never what
sold me.  I wrote this a few years ago, for example, in my inaugural post
introducing myself to the IndieWeb at large:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Even if the entire IndieWeb consisted of a single personal website, it
would still &amp;quot;work&amp;quot;, in the sense that the owner of the website would be in
control of their own content and would still be able to share that content
with their friends on (say) Twitter.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This reveals something of my mindset at the time, I think.  The IndieWeb,
for me at least, was mainly about owning and organizing your content in one
place, under your control.  It was about curating your online presence and
identity.  It was about an efficient publication flow.  It &lt;em&gt;wasn&#39;t&lt;/em&gt; really
about talking to other people.&lt;/p&gt;
&lt;p&gt;A good thing too, because while the IndieWeb is a &lt;em&gt;very&lt;/em&gt; cool idea, I can&#39;t
honestly say that it ever really took off.  It remains, five years after I
joined, a niche concept, for various reasons that others have explored.  So
if you made your website IndieWeb compliant with the express purpose of
connecting with other people &lt;em&gt;on the IndieWeb&lt;/em&gt;...well, I&#39;m not saying that
you&#39;ll find a ghost town, but you certainly won&#39;t find the bustling
metropolis that is Facebook or Twitter (I will never call it X).&lt;/p&gt;
&lt;p&gt;Don&#39;t get me wrong - after the Musk takeover of Twitter, decentralized
social networking is certainly having a moment, but it&#39;s mostly in the form
of &lt;a href=&quot;https://www.w3.org/TR/activitypub/&quot;&gt;ActivityPub&lt;/a&gt;, the protocol that powers &lt;a href=&quot;https://joinmastodon.org/&quot;&gt;Mastodon&lt;/a&gt; and a host of
other applications specializing in different things, such as &lt;a href=&quot;https://pixelfed.org/&quot;&gt;photo&lt;/a&gt; or
&lt;a href=&quot;https://bookwyrm.social/&quot;&gt;book&lt;/a&gt; sharing.  And while these applications are certainly a step up
from the standard crop of corporate backed &lt;a href=&quot;https://indieweb.org/silo&quot;&gt;silos&lt;/a&gt;, they aren&#39;t a
replacement for a personal website; your online presence and content, while
nominally under your control, is still spread out across different
platforms - platforms which come with a certain amount of lock-in.  As I&#39;ve
mentioned before, it&#39;s not something that really appeals to me.  One of the
main advantages of using something like microformats instead is that your
posts remain plain, vanilla HTML.  It&#39;s basically the old school web - with
some extra metadata for the sake of interoperability.  This &lt;em&gt;does&lt;/em&gt; appeal to
me.&lt;/p&gt;
&lt;p&gt;Still, if you joined the IndieWeb in the hopes of being part of a
conversation and have been disappointed, these ActivityPub based
applications might do the trick.  You can even self-host them, if you&#39;ve got
the time and inclination.&lt;/p&gt;
&lt;p&gt;But while I do use these applications, they will never be my main presence
online.  And I think, at the end of the day, this is what the IndieWeb has
&lt;em&gt;truly&lt;/em&gt; offered me - a framework for me to have a discoverable online
presence in a way that doesn&#39;t put me at the mercy of companies or
applications that may disappear at a moment&#39;s notice.  Even if I&#39;m just one
voice shouting into a silent void, there is value in that.&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>Breaking The Wheel</title>
    <link href="https://desmondrivet.com/2024/03/16/wheel-of-time"/>
    <updated>2024-03-16T18:33:22Z</updated>
    <id>https://desmondrivet.com/2024/03/16/wheel-of-time</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;It&#39;s safe to say that &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Wheel_of_Time_(TV_series)&quot;&gt;&lt;em&gt;The Wheel of Time&lt;/em&gt;&lt;/a&gt; TV series, streaming on
Amazon Prime, has divided fans of the source material, namely &lt;a href=&quot;https://en.wikipedia.org/wiki/Robert_Jordan&quot;&gt;Robert
Jordan&lt;/a&gt;&#39;s enormous, sprawling, epic &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Wheel_of_Time&quot;&gt;book series of the same name&lt;/a&gt;,
spanning 14 door-stopping volumes published over a period of 24 years
(1989-2013).&lt;/p&gt;
&lt;p&gt;I would not call myself a great connoisseur of fantasy, but I do know
something about these particular books, having been introduced to them as a
teenager by a high school friend in the early nineties.  I have warm
memories of the series, and less warm memories of the tense, multi-year
waits in between installments.&lt;/p&gt;
&lt;p&gt;Their publication also coincided with the birth of the Web and the
popularization of the Internet that came with that.  It&#39;s impossible for me
to separate my memories of these books from my memories of scouring &lt;em&gt;Wheel
of Time&lt;/em&gt; themed newsgroups and fan sites, often over dial-up, looking for
plausible answers to the various plot mysteries that had maddeningly
accumulated over the years.  I even had a fan page at one point, now lost to
the mists of time.&lt;/p&gt;
&lt;p&gt;I lasted until book nine, after which I gave up.  The infamous slog had
begun, and I was knee deep in it.  Sometime after book six, it became clear
to me that Robert Jordan didn&#39;t know what to do with all the loose narrative
threads he had created, and I despaired of them ever being resolved in a
satisfactory manner.  He eventually died without finishing his life&#39;s work.
I know &lt;a href=&quot;https://en.wikipedia.org/wiki/Brandon_Sanderson&quot;&gt;Brandon Sanderson&lt;/a&gt; picked up the baton after Jordan died, but I
never finished reading the series.&lt;/p&gt;
&lt;p&gt;I say all this to give you some sense of my relationship to these books - my
credentials, if you will.  I&#39;m a fan, but I&#39;m not an &lt;em&gt;uber&lt;/em&gt; fan.  I haven&#39;t
even read the whole series &lt;em&gt;once&lt;/em&gt;, let alone multiple times.  I liked the
books a lot, and they definitely left an impression on my teenage mind, but
I can&#39;t say that I &lt;em&gt;loved&lt;/em&gt; them - especially the later ones.  I am (or at
least was) an &lt;em&gt;enthusiastic&lt;/em&gt; fan but not an &lt;em&gt;obsessive&lt;/em&gt; one.  Keep that in
mind for what follows.&lt;/p&gt;
&lt;h2&gt;The Difficulty of Adapting &lt;em&gt;The Wheel Of Time&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;When I heard that Amazon was adapting &lt;em&gt;The Wheel of Time&lt;/em&gt;, my primary
emotion was surprise followed by...curiosity?  I wanted to see how (or if)
they would pull it off.&lt;/p&gt;
&lt;p&gt;Adapting such a well-known and well-loved series has to be a
difficult and thankless job at the best of times, but it must be
&lt;em&gt;particularly&lt;/em&gt; hard in the case of &lt;em&gt;The Wheel of Time&lt;/em&gt;, with
thousands of characters, and hundreds of locations.  Amazon didn&#39;t do
itself any favours by restricting the seasons to eight episodes each.&lt;/p&gt;
&lt;p&gt;But it&#39;s not just the size of it.  The simple truth is that this is no
ordinary book series.  Its structure doesn&#39;t really
translate well to a traditional season-based TV narrative format. It&#39;s
been deemed unfilmable more than once and it&#39;s not just because of its
length.&lt;/p&gt;
&lt;p&gt;So much of the series is &lt;em&gt;invisible&lt;/em&gt;.  Aes Sedai in the books are famously
composed - almost Vulcan-like.  Warders are famously stoic.  A lot of the
plot consists of people thinking to themselves, something that is nearly
impossible to portray compellingly in a visual medium.  And don&#39;t get even
me started on the background material.  Half of the story takes place in the
insanely comprehensive glossary at the back of each book, before you even
read the first page.&lt;/p&gt;
&lt;p&gt;Add to this: the books are full of characters and artifacts that often
appear in one or two chapters in one book, and then don&#39;t reappear until
several (long) books later - if, indeed, they ever do at all.  This might be
workable in a printed medium (barely) but it becomes a real problem when you
have to hire real actors, and you&#39;re at risk of losing them to different
projects in between seasons.&lt;/p&gt;
&lt;p&gt;It doesn&#39;t help matters that Robert Jordan originally intended &lt;em&gt;The Wheel of
Time&lt;/em&gt; to be a trilogy - and it shows painfully in the story structure.  The
first three books have a drastically different feel to them than the rest of
the series.  He basically recycled the same ending three times - it&#39;s the
same sword fight between the same two characters.  In some cases, major
characters were almost completely rewritten later on; fan favourite Mat, for
example, might as well be a different character in book four.&lt;/p&gt;
&lt;p&gt;In fact, it&#39;s generally agreed that it&#39;s only around book four that the
series really starts to come into its own.  That might not matter to patient
readers, but it makes life infinitely more difficult for people trying to
adapt it into a episodic, season based visual format.  I mean, what exactly
are you supposed to do?  I don&#39;t know, but I&#39;ll tell you what you &lt;em&gt;can&#39;t&lt;/em&gt;
do - you can&#39;t really do a straightforward &amp;quot;one book = one season&amp;quot; kind of
adaptation.  You need to adapt the whole series at once, and that&#39;s &lt;em&gt;hard&lt;/em&gt;.
I don&#39;t envy the people who&#39;ve been given this task.&lt;/p&gt;
&lt;h2&gt;Separating the Wheat From the Chaff&lt;/h2&gt;
&lt;p&gt;Okay, so with all that in mind...was &lt;em&gt;The Wheel of Time&lt;/em&gt; show any good?&lt;/p&gt;
&lt;p&gt;Before I express any concrete opinions, there are a few things I need to get
out of the way.  The first is that, as a general rule, I don&#39;t consider
&amp;quot;faithfulness to source material&amp;quot; to be the yardstick by which I measure the
quality of an adaptation.  We&#39;re talking about fiction, not historical
documents and writers are allowed to take some liberties.  Changes, in and
of themselves, don&#39;t bother me unless they make the story demonstrably
worse - and this goes double for something like &lt;em&gt;The Wheel of Time&lt;/em&gt;.  There
is a kind of fan who won&#39;t be happy with anything other than a scene for
scene adaptation but this is something that is simply not possible with this
franchise, and hence I&#39;m not going to devote too much time to this pipe
dream.  I wish these people good luck.&lt;/p&gt;
&lt;p&gt;Other fans veer into legitimately racist territory, focusing on the skin
colour of the cast.  For obvious reasons, I won&#39;t devote any time to these
people either except to say that while the show has a lot of flaws, the cast
is not one of them.&lt;/p&gt;
&lt;p&gt;This leaves us with the fans who, for whatever reason, criticize &lt;em&gt;the actual
show&lt;/em&gt; and it&#39;s here that we can have an actual discussion.  We&#39;re obviously
headed into major spoiler territory, so be warned.  I&#39;ll also point that
that if you&#39;re not already familiar with either the books or the show, then
literally nothing I say here will make any sense whatsoever - but if that&#39;s
the case, then why are you even reading? :-)&lt;/p&gt;
&lt;p&gt;Alright.  Here we go.&lt;/p&gt;
&lt;p&gt;On the whole, I &lt;em&gt;liked&lt;/em&gt; the show, but I didn&#39;t &lt;em&gt;love&lt;/em&gt; it.  I &lt;em&gt;wanted&lt;/em&gt; to,
and there were moments when I thought I &lt;em&gt;could&lt;/em&gt;, but I never quite got
there.&lt;/p&gt;
&lt;p&gt;There were &lt;em&gt;definitely&lt;/em&gt; a lot of changes, and they were definitely a mixed
bag.  Some of them made the story flow better, some of them were utterly
baffling and some of them just...&lt;em&gt;were&lt;/em&gt;.  To say that the quality of the
show was uneven is to put it mildly.&lt;/p&gt;
&lt;p&gt;The show was at its best when it made changes that expanded on
underdeveloped aspects of the books.  &lt;a href=&quot;https://www.imdb.com/title/tt11316280/&quot;&gt;Season one, episode four (&amp;quot;The Dragon
Reborn&amp;quot;)&lt;/a&gt; is a good example, A Logain-centric episode depicting events
that happened &amp;quot;off screen&amp;quot; in the books, it was, in my opinion, the best
episode of the season and one of the best of the show.  I say &amp;quot;one of&amp;quot;
because the title of &amp;quot;best episode&amp;quot; has to go to &lt;a href=&quot;https://www.imdb.com/title/tt11316280/&quot;&gt;season two, episode six
(&amp;quot;Eyes Without Pity&amp;quot;)&lt;/a&gt;, an emotionally intense Egwene-centric episode
that explicitly portrays certain events that were, at best, only hinted at
in &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Great_Hunt&quot;&gt;&lt;em&gt;The Great Hunt&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Moiraine and Siuan&#39;s romantic pairing on the show is another example.  The
books hint that these two characters may have been more than friends at some
point in their past, but it&#39;s never made explicit and it&#39;s open to
interpretation.  The show makes it explicit, and it adds to the drama.  I
liked the change.&lt;/p&gt;
&lt;p&gt;In some cases, the show added depth to characters who sorely needed it.
&lt;a href=&quot;https://wot.fandom.com/wiki/Liandrin_Guirale&quot;&gt;Liandrin&lt;/a&gt; comes to mind in this regard; introduced in The Great Hunt,
she exists as little more than an evil foil for Nynaeve and Egwene, but the
show turns her into a complete three dimensional powerhouse without
fundamentally altering her role.  I love it.&lt;/p&gt;
&lt;p&gt;Sometimes, the writers made significant alterations to the lore in order to
simplify the narrative mechanics.  One of the best examples is in how they
streamlined a Forsaken&#39;s relationship to death.  The Forsaken, if you
recall, are the Dark One&#39;s main lieutenants - &lt;em&gt;The Wheel of Time&lt;/em&gt;&#39;s
&lt;a href=&quot;https://lotr.fandom.com/wiki/Nazg%C3%BBl&quot;&gt;Nazgûl&lt;/a&gt;, if you will - and, in the books, their deaths were always
complicated affairs.  A Forsaken could be killed, like anyone, but they
could also be resurrected at the Dark One&#39;s whim in a different body later
on.  Robert Jordan did this quite a bit - the only Forsaken, killed by
conventional means, who &lt;em&gt;doesn&#39;t&lt;/em&gt; get resurrected at some point is, to my
knowledge, Asmodean.&lt;/p&gt;
&lt;p&gt;This kind of works in print, but it&#39;s confusing in a visual medium.  You&#39;d
have to hire a different actor to play the same character, several seasons
later.  So, on the show, they simply make the Forsaken straight up
unkillable - at one point, Moiraine slits Lanfear&#39;s throat and Lanfear just
magically heals up and continues along as if nothing happened.  I like the
change; the result is more or less the same as the novels, but less messy.
If you look closely, Lanfear&#39;s eyes have small specks floating in them as
she comes back to life, indicating that the Dark One is connected to this
regeneration ability via the &lt;a href=&quot;https://wot.fandom.com/wiki/True_Power&quot;&gt;True Power&lt;/a&gt;, a little nod to the lore that
I very much appreciated.&lt;/p&gt;
&lt;p&gt;In the books, the only way to permanently kill a Forsaken is to use balefire
and though it obviously remains to be seen, I suspect that show will do the
same.&lt;/p&gt;
&lt;p&gt;Sometimes, the writers made changes...just because.  My opinion on these
tends to be neutral.  Many people, for example, disliked the way Mat gained
his extra memories on the show, by sounding the Horn of Valere and suddenly
remembering his past lives.  In the books, it&#39;s a bargain struck with some
weird, otherworldly creature in the Aiel waste.  I don&#39;t really care either
way - the end result is a character with new memories that will become,
presumably, more useful later on.  When I say I&#39;m not overly concerned about
faithfulness to source material, this is partly what I mean.&lt;/p&gt;
&lt;p&gt;Of course, not all the changes were positive or neutral, and I would be
remiss if I didn&#39;t mention the ones that rubbed me the wrong way. I hated
everything related to the Rand-Egwene-Perrin love triangle - it came out of
nowhere and added nothing.  I also didn&#39;t care for how they gave Perrin a
wife just to kill her off and give him an edge - &lt;a href=&quot;https://tvtropes.org/pmwiki/pmwiki.php/Main/WomenInRefrigerators&quot;&gt;fridging&lt;/a&gt; at its most
blatant.&lt;/p&gt;
&lt;p&gt;I &lt;em&gt;especially&lt;/em&gt; didn&#39;t like how the ending of season one robbed Rand of his
big power moment against the Trolloc army in order to give it to Nynaeve who
had, by that point in the show, already had several big power moments of her
own.  The show does this in season two as well; despite Egwene having a
&lt;em&gt;major&lt;/em&gt; character arc, culminating in a final confrontation with one of the
more despicable characters in the show, the showrunners still, apparently,
found it necessary to insert her into Rand&#39;s final confrontation with
Ishamael.  It&#39;s almost as if the writers hate Rand, which is awkward given
that he&#39;s supposed to be the protagonist.  At this point I&#39;m not sure why
we&#39;re supposed to be invested in him at all.&lt;/p&gt;
&lt;p&gt;Some of the problems with the show are more systemic.  The writers don&#39;t go
out of their way to explain how the magic system works and indeed, go to
some length to de-emphasize certain crucial aspects that I suppose were
deemed &amp;quot;problematic&amp;quot;.  The fact that there&#39;s a male and female half of the
One Power, for example, isn&#39;t specifically stated on the show, which is
puzzling because this aspect of the magic system is so deeply entrenched in
the books that you can&#39;t really get away from it and still have the same
story.  It permeates every aspect of the plot and trying to pretend
otherwise makes for some very confusing TV.&lt;/p&gt;
&lt;p&gt;Why is it that only women can use the One Power safely?  Why do men
eventually go mad when they try?  The answer is an essential part of the
written lore - the Dark One tainted the male half of the One Power, and left
the female half untouched - but the show downplays the gender split so much
that I suspect a lot of non-readers don&#39;t understand that there&#39;s a
difference in the way men and woman channel at all.  It certainly doesn&#39;t
help that the show implies that people can switch genders when they&#39;re
reborn (Nynaeve as the Dragon Reborn?), or that it&#39;s possible for women to
give men channelling lessons (something that&#39;s simply impossible given how
the One Power works in this world).  It&#39;s frustrating because Robert
Jordan&#39;s magic system and history are probably some of the most meticulously
crafted aspects of series.&lt;/p&gt;
&lt;p&gt;The show&#39;s treatment of written lore is a general sore spot for me.  I
&lt;em&gt;liked&lt;/em&gt; learning about the history of that world in the books.  I &lt;em&gt;liked&lt;/em&gt;
learning about the &lt;a href=&quot;https://wot.fandom.com/wiki/Dragon&quot;&gt;Dragon&lt;/a&gt; and the &lt;a href=&quot;https://wot.fandom.com/wiki/Age_of_Legends&quot;&gt;Age of Legends&lt;/a&gt; and the &lt;a href=&quot;https://wot.fandom.com/wiki/War_of_Power&quot;&gt;War of
Power&lt;/a&gt; and the origins of the &lt;a href=&quot;https://wot.fandom.com/wiki/Forsaken&quot;&gt;Forsaken&lt;/a&gt;.  I &lt;em&gt;liked&lt;/em&gt; learning about
&lt;a href=&quot;https://wot.fandom.com/wiki/Artur_Hawkwing&quot;&gt;Artur Hawkwing&lt;/a&gt; and his relationship with Aes Sedai.  None of this is
in the show, and its absence is deeply felt.  How are we supposed to know
who the &lt;a href=&quot;https://wot.fandom.com/wiki/Seanchan&quot;&gt;Seachan&lt;/a&gt; are without knowing about Artur Hawkwing?  The show
mentions &lt;em&gt;once&lt;/em&gt;, in passing, that the Dragon tried to &amp;quot;cage darkness&amp;quot;, but
what does that even mean and why would he do that?  Who exactly is the Dark
One and why would a bunch of channelers go over to his side?  Is it even
clear that the Forsaken are channelers?  So much is missing.&lt;/p&gt;
&lt;p&gt;It might be a deliberate ploy.  The writers might be planning to trickle the
history out bit by bit in later seasons.  That &lt;em&gt;might&lt;/em&gt; be their plan but...I
wouldn&#39;t hold my breath.  It makes me sad.&lt;/p&gt;
&lt;h2&gt;Closing Thoughts&lt;/h2&gt;
&lt;p&gt;I guess you could summarize my feelings on the show as &amp;quot;mixed&amp;quot;.  The good
parts are good enough for me to say I liked it and I will eagerly watch
season 3 when it comes out.  And the bad parts aren&#39;t enough to turn me off
completely.&lt;/p&gt;
&lt;p&gt;But it&#39;s frustrating.  The overall quality is uneven.  You&#39;ll see a great
episode, with amazing acting, followed by one that makes little sense at
all.  You sometimes get the impression that, because this is a fantasy show,
the writers believe that they can get away with non-sequiturs and
inconsistencies if they paper them over with dramatic lines containing
little of substance.&lt;/p&gt;
&lt;p&gt;The show appears to be setting up an ensemble cast, but it&#39;s done at the
expense of making Rand completely uninteresting.  I can only hope that
season three is better in this regard.  I know it&#39;s supposed to be adapting
&lt;em&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/The_Shadow_Rising&quot;&gt;The Shadow Rising&lt;/a&gt;&lt;/em&gt;, which is reason for optimism; that book is one of
the best in the series, and Rand features quite prominently in it, so it&#39;s
chance to make the show version of the character more engaging.  The Shadow
Rising is also where the series finally starts breaking out of the
repetition of the earlier novels and starts becoming more straightforwardly
adaptable.&lt;/p&gt;
&lt;p&gt;I guess what I&#39;m saying is that, despite everything, I&#39;m looking forward to
the third season.  I hope they make it to their planned eight.&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>The Problem With Saying That Free Will Is an Illusion</title>
    <link href="https://desmondrivet.com/2024/01/07/free-will-illusion"/>
    <updated>2024-01-08T02:49:57Z</updated>
    <id>https://desmondrivet.com/2024/01/07/free-will-illusion</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;I recently finished watching Bodies on Netflix and the concept of free will
comes up a fair bit given that the show involves a &lt;a href=&quot;https://backtothefuture.fandom.com/wiki/Predestination_paradox&quot;&gt;predestination
paradox&lt;/a&gt;.  One of the characters voices the opinion that &amp;quot;free will is an
illusion&amp;quot; (his words) because human choices are ultimately the result of
physics and biology.  Human choices, in other words, are predetermined, and
that means that free will doesn&#39;t exist.&lt;/p&gt;
&lt;p&gt;The character in question is acting as a mouthpiece for the notion of
&lt;a href=&quot;https://en.wikipedia.org/wiki/Incompatibilism&quot;&gt;incompatibilism&lt;/a&gt;, the idea that free will and &lt;a href=&quot;https://en.wikipedia.org/wiki/Determinism&quot;&gt;determinism&lt;/a&gt; are
mutually exclusive concepts.  It&#39;s the most common way that the free will
debate is framed.  If you accept the idea of incompatibilism, then you can
either believe in determinism (usually considered the rational choice) or
you can believe in free will (usually considered the irrational or emotional
choice).  But you can&#39;t believe in both.  The character, being a scientist,
believes in determinism, hence his assertion that free will is an illusion.&lt;/p&gt;
&lt;p&gt;But the problem with saying that free will is an illusion, or that it isn&#39;t
real, is that for this to make sense, one first has to have a rough idea of
what &lt;em&gt;real&lt;/em&gt; free will is supposed to look like, and I suspect most
incompatibilists would have trouble answering this.  It is, nonetheless,
something they have to grapple with, because otherwise how do they know that
human beings don&#39;t have it?&lt;/p&gt;
&lt;p&gt;If I assert that unicorns don&#39;t exist, you would know, roughly speaking,
what it would take to prove me wrong.  All you&#39;d have to do is find a real
unicorn and show it to me.  Case closed.  It&#39;s easy enough to imagine
because we all know, more or less, what a horse with a horn on its head
looks like.&lt;/p&gt;
&lt;p&gt;&amp;quot;Unicorns don&#39;t exist&amp;quot;, in other words, is a falsifiable statement, because
we have some idea of what a real unicorn is meant to be.  &amp;quot;Free will doesn&#39;t
exist&amp;quot;, I would argue, is &lt;em&gt;not&lt;/em&gt; a falsifiable statement because no one
knows, in this context, what &amp;quot;real&amp;quot; free will is supposed to look like.&lt;/p&gt;
&lt;p&gt;Let me put it another way.  We&#39;ve all seen those optical illusions that look
like spinning circles, right?  Here&#39;s one:&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;width: 100%&quot; src=&quot;https://desmondrivet.com/static/img/optical-illusion-spinning-circles.jpg&quot; alt=&quot;Spinning circle illusions&quot; class=&quot;entry__photo image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;It makes sense to call these spinning circles &amp;quot;illusions&amp;quot;.  Why?  Because we
all know what an actual spinning object looks like, and we can tell that
this picture isn&#39;t it.  You could tap your face on the picture with no fear
at all - something, I suspect, you&#39;d be reluctant to do with, say, a
propeller or a ceiling fan.&lt;/p&gt;
&lt;p&gt;So if someone asserts that free will is an illusion, the very first question
that needs to be answered is: &amp;quot;an illusion of what?&amp;quot;  And that is, I think,
a very tough question to answer - an impossible question to answer, I would
argue, if you&#39;re an incompatibilist.&lt;/p&gt;
&lt;p&gt;But it&#39;s actually pretty easy if you&#39;re a &lt;a href=&quot;https://en.wikipedia.org/wiki/Compatibilism&quot;&gt;comptatibilist&lt;/a&gt; - if you
believe that free will is not only possible in a mathematical, deterministic
universe, but actually &lt;em&gt;requires&lt;/em&gt; it, like any natural phenomenon.  If
you&#39;re a comptatibilist, then free will is simply the human capacity for
choice - no more and no less.  It&#39;s almost a self-evident truth, something
you witness every day.  You might as well try and prove that gravity doesn&#39;t
exist.&lt;/p&gt;
&lt;p&gt;It doesn&#39;t matter if a choice is determined, or if it has a natural
mechanism, or if it&#39;s explainable by physics or biology.  Explaining how
something works isn&#39;t the same as showing it doesn&#39;t exist.&lt;/p&gt;
&lt;p&gt;Free will is just the ability to act freely in accordance with one&#39;s own
character.  It&#39;s the only definition that really makes sense.  It is, of
course, entirely possibly to take away someone&#39;s free will, but that usually
involves purposeful action, like tying someone down or drugging them.  It&#39;s
not a metaphysical feature of reality.&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>Implementing GTD in Emacs With Org Mode</title>
    <link href="https://desmondrivet.com/2023/12/05/gtd-org-mode"/>
    <updated>2023-12-06T02:42:19Z</updated>
    <id>https://desmondrivet.com/2023/12/05/gtd-org-mode</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;I have an on-again, off-again relationship with productivity systems.  I
usually don&#39;t bother with them but on those infrequent occasions when my
life gets a bit hectic, I will sometimes make use of one.  When that happens
I always fall back to David Allen&#39;s &lt;a href=&quot;https://en.wikipedia.org/wiki/Getting_Things_Done&quot;&gt;Getting Things Done (GTD)&lt;/a&gt;.  I read
his book a long time ago and, at the time, found myself impressed.&lt;/p&gt;
&lt;p&gt;The fundamental feature of the system is that it downplays the classic,
detailed, prioritized to-do list in favour of the so-called &lt;em&gt;next action&lt;/em&gt;
list.  When considering a particular goal, instead of allowing yourself to
become overwhelmed with all the myriad things you know you need to do in
service of that goal, you instead focus only on the &lt;em&gt;very next thing&lt;/em&gt; you
can do to move closer to your goal.  The end result is an unsorted list of
things you can do &amp;quot;in the moment&amp;quot;, across all the various goals in your life
at the moment.&lt;/p&gt;
&lt;p&gt;The result can be &lt;em&gt;also&lt;/em&gt; be, as you might imagine, a very long list of next
actions.  To manage this, Allen recommends the use of &lt;em&gt;contexts&lt;/em&gt; - keywords
that describe when or where it&#39;s possible to do a next action.  The idea is
that when you find yourself in one of these contexts, you&#39;re supposed to be
able to pull up all the next actions attached to it and pick one off the
list.&lt;/p&gt;
&lt;p&gt;In the 90&#39;s, before cellphones were widespread, a classic context would have
been &amp;quot;phone&amp;quot;, to which you&#39;d attach any next action involving a phone call.
When you found yourself near a phone, you&#39;d pull up all your phone-related
next actions and start cranking through them one by one.  Another classic
one would have been the &amp;quot;computer&amp;quot; context, back in the days when a
&amp;quot;computer&amp;quot; meant a machine sitting on a desk somewhere.  You&#39;d often attach
that one to a next action involving an email, for example,&lt;/p&gt;
&lt;p&gt;These days everyone has a smartphone, so the &amp;quot;phone&amp;quot; and &amp;quot;computer&amp;quot; contexts
are less important than they used to be (though I personally still use the
computer context for writing blog entries, since I hate doing that kind of
thing on my phone).  That doesn&#39;t mean contexts are useless as a concept,
but it does mean that you need to think a bit more about how to use them.
The key thing is to remember is that they&#39;re meant to be &lt;em&gt;opportunistic&lt;/em&gt;.
You&#39;re meant to be able to pull up a particular context once you find
yourself in the corresponding situation and immediately be presented with a
series of next actions that you can do &amp;quot;in the moment&amp;quot;.  My contexts these
days are often people or place oriented.  If I have a Tupperware or a book
that I need to return to my Mom, for example, I&#39;ll attach the &amp;quot;mom&amp;quot; context
to those next actions and remember to consult it before visiting her
(spoiler: I often don&#39;t remember to consult it).&lt;/p&gt;
&lt;p&gt;In addition to a next action list, GTD also has a notion of a &lt;em&gt;project&lt;/em&gt;
list.  The word &amp;quot;project&amp;quot; can mean a lot of things but when we talk of GTD,
it means nothing more than a goal that requires more than one &amp;quot;next action&amp;quot;
to accomplish.  The metaphor that often gets used in the GTD community is
that a project is a &amp;quot;stake in the ground&amp;quot;, a reminder that there is a
specific, somewhat abstract goal in your life that needs addressing.
Effectively, your project list defines the &amp;quot;hard landscape&amp;quot; of your life,
around which your next actions revolve.&lt;/p&gt;
&lt;p&gt;GTD defines two more lists:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Waiting&lt;/li&gt;
&lt;li&gt;Someday/Maybe&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Waiting list is for things that are &amp;quot;outsourced or &amp;quot;delegated&amp;quot; - things
that you can&#39;t or won&#39;t do yourself.  Waiting for someone to respond to an
email, for example, is a classic Waiting list item.&lt;/p&gt;
&lt;p&gt;The Someday/Maybe list is meant to provide a haven for any vague and hazy
to-do item that you don&#39;t really want to work on &amp;quot;right now&amp;quot;.  These could
be aspirational (&amp;quot;Learn photography&amp;quot;) or just stuff that you might want to
get to later on in life (&amp;quot;Replace ceiling fan&amp;quot;).&lt;/p&gt;
&lt;h2&gt;Implementing GTD in Emacs with Org Mode&lt;/h2&gt;
&lt;p&gt;As you might imagine, there are lots of ways to implement GTD, both analog
and digital.  For a while, in the early 2000&#39;s, it was fashionable in
certain circles to implement it with a notebook that you carried around with
you.  Most people, nowadays, use some kind of software.&lt;/p&gt;
&lt;p&gt;I&#39;m an &lt;a href=&quot;https://www.gnu.org/software/emacs/&quot;&gt;Emacs&lt;/a&gt; user, or at least I try to be, and so it makes sense for
me to try and implement GTD with Emacs.  The package one usually hears about
in this regard is &lt;a href=&quot;https://orgmode.org/&quot;&gt;Org&lt;/a&gt;, a note keeping and text outlining tool that has
evolved over the years to include task management and scheduling
functionality.&lt;/p&gt;
&lt;p&gt;Both Emacs and Org are huge and I&#39;m not about to give a full-fledged
tutorial on either of them (I&#39;m a perpetual novice myself) so instead I&#39;ll
focus on what I want out of my GTD system and how I can get Org to do it.&lt;/p&gt;
&lt;p&gt;Roughly speaking, I want my GTD system to do the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add new items easily, probably via a templating system&lt;/li&gt;
&lt;li&gt;Separately view, at a glance, my next actions, waiting, projects, and
someday items.&lt;/li&gt;
&lt;li&gt;Attach a next action to a context and be able to view each of my contexts
separately, with the next actions attached to it.&lt;/li&gt;
&lt;li&gt;Be able to easily move items from one list to another (for example, turn
a Someday item to a Project or vice versa)&lt;/li&gt;
&lt;li&gt;Be able to archive &amp;quot;done&amp;quot; items easily, so they don&#39;t clog up my lists.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Adding new items is easily accomplished with &lt;a href=&quot;https://orgmode.org/manual/Capture.html&quot;&gt;org-capture&lt;/a&gt;.  Viewing my
next actions, waiting, projects and someday lists is easily accomplished
with &lt;a href=&quot;https://orgmode.org/manual/Agenda-Views.html&quot;&gt;org-agenda&lt;/a&gt;.  Contexts, and viewing the next actions attached to
them, are easily implemented with Org tags and the &lt;a href=&quot;https://orgmode.org/manual/Filtering_002flimiting-agenda-items.html&quot;&gt;narrowing function&lt;/a&gt;
functionality of org-agenda.&lt;/p&gt;
&lt;p&gt;Moving and archiving items are similar tasks, and Org has built in
functionality to do them.&lt;/p&gt;
&lt;p&gt;So, with all that in mind, let&#39;s consider different approaches to
implementing GTD in Org.&lt;/p&gt;
&lt;h2&gt;The Literal Approach&lt;/h2&gt;
&lt;p&gt;TL;DR: I don&#39;t actually use this method, because I think the cons outweigh
the pros, but I find it useful nonetheless to ferret out what works and what
doesn&#39;t.&lt;/p&gt;
&lt;p&gt;One very obvious way to implement GTD is to maintain a separate file for
each list, in roughly the same manner that one would implement with paper.
Your Next Actions, for example, could live in an &lt;code&gt;actions.org&lt;/code&gt; file that
looks like this:&lt;/p&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;* TODO do this thing
* TODO do this other thing&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And a &lt;code&gt;projects.org&lt;/code&gt; file that looks pretty much the same:&lt;/p&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;* TODO project 1
* TODO project 2&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The waiting and someday lists would look almost exactly the same, in their
own respective files.&lt;/p&gt;
&lt;p&gt;GTD contexts can be represented with Org tags, tacked onto the end of the
item, like so:&lt;/p&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;* TODO do this thing :mom:
* TODO do this other thing :plumber:&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Org has built-in ways of filtering the agenda view based on the tags you add
to each item.&lt;/p&gt;
&lt;p&gt;This approach has one huge, underrated advantage: it&#39;s dead simple to
implement, explain and understand.  The fact that all items have the same
TODO state and are all at the same outlining &amp;quot;level&amp;quot; means that adding new
items, moving items one list to another, and archiving items are all dead
simple as well.&lt;/p&gt;
&lt;p&gt;What about viewing your individual lists?  It turns out this is pretty
simple as well.  Org TODO items have a property called a &lt;em&gt;category&lt;/em&gt;.  If you
don&#39;t do anything special, the category is just the file from which the item
originates.  So any item in the &lt;code&gt;actions.org&lt;/code&gt; file has an &lt;em&gt;action&lt;/em&gt;
category and the same goes for items in your other files.  Defining an
agenda view based on a category is trivial in Org, so it&#39;s very
straightforward to create separate views for your next actions, projects,
and someday items.&lt;/p&gt;
&lt;h2&gt;Linking Projects and Next Actions&lt;/h2&gt;
&lt;p&gt;Are there any disadvantages to this simple approach?  There is only one that
I can think of: there&#39;s no explicit relationship between Next Actions and
Projects.  In other words, you can&#39;t tell at a glance what the next actions
are for a project, or which project a next action belongs to.  And here is
where things start to get murky, because a GTD purist will probably tell you
that it doesn&#39;t matter.&lt;/p&gt;
&lt;p&gt;One thing that I find interesting about GTD is that the connection between
your next actions and your projects is a lot looser than it might seem at
first glance.  Yes, a next action can be, and often is, associated with a
project - but it doesn&#39;t have to be, and it&#39;s perfectly okay to have
&amp;quot;freestanding&amp;quot; next actions that aren&#39;t attached to anything at all.  In the
same vein, a project will often have at least one next action linked to it -
but it might not, if you haven&#39;t figured out what that next action is.
Allen even has a name for projects that have no next actions - they&#39;re
called &amp;quot;stuck projects&amp;quot; and it&#39;s rather revealing that it seemingly happens
often enough that he labelled the concept.&lt;/p&gt;
&lt;p&gt;The GTD community sometimes takes this disconnect even further - they often
suggest &lt;em&gt;no&lt;/em&gt; explicit connection between next actions and projects at all.
Projects, in this formulation, simply act as a reminder that a next action
might have to be created, but once that next action is in your system you
don&#39;t (so the theory goes) actually need to know which project spawned it.&lt;/p&gt;
&lt;p&gt;It helps to remember, at this point, that GTD was conceived in the 90&#39;s as a
paper based task management system.  Next actions were often slips of paper,
or literal items penned in a list.  In a system like that, you have to
choose where to park your next action - and it can only go in &lt;em&gt;one&lt;/em&gt; place.
The common wisdom at the time dictated that you should park your next action
on the context list where it would be the most useful and that meant that it
was &lt;em&gt;not&lt;/em&gt; parked under the project with which it was associated.&lt;/p&gt;
&lt;p&gt;A paper based GTD system almost &lt;em&gt;has&lt;/em&gt; to work this way and so I think, over
time, that the GTD purists ended up making a virtue of necessity and
convincing themselves that it really wasn&#39;t very useful to know the project
associated with a next action, or to know all the next actions attached to a
project.&lt;/p&gt;
&lt;p&gt;I&#39;m not convinced.  I think, all things being equal, it&#39;s obviously useful
to know which project a next action belongs to.  And the thing is,
software today often makes it &lt;em&gt;trivial&lt;/em&gt; to park a next action on different
lists - in both a project and a context for example.  You don&#39;t have to
choose one over the other.&lt;/p&gt;
&lt;p&gt;So how can we do this with the very, very simple system I outlined above?
It&#39;s surprisingly difficult, though one can, of course, come up with scheme.
For example, Org has a feature called &lt;a href=&quot;https://orgmode.org/manual/Drawers.html&quot;&gt;drawers&lt;/a&gt; that let you add
arbitrary properties to TODO items.  Add a Project ID to each project item,
and a Project ID to each Next Action that belongs to a project and you have
a theoretical way of connecting the two lists.  Roughly speaking, it would
look like this:&lt;/p&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;* TODO Project 1
:PROPERTIES:
:PROJECT_ID: proj1
:END:&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Unfortunately, theoretical is not the same as practical.  Ideally we&#39;d like
to see a Next Action&#39;s project in the agenda view but this isn&#39;t possible
here without some special configuration - which is of course entirely
possible but annoying.  More problematic is the reverse - seeing all Next
Actions associated with a project.  There&#39;s no view (that I know of) built
into Org that&#39;ll let you do that out of the box.  You&#39;d have to design a new
view and write the code to produce it - not the easiest of tasks.&lt;/p&gt;
&lt;p&gt;And if you ever want to archive an entire project, or move it to the Someday
list, it would make sense to move all the associated Next Actions along with
it.  In the scheme designed above, Org certainly wouldn&#39;t do this out of the
box, and honestly I&#39;m having trouble imagining what that feature would even
look like.&lt;/p&gt;
&lt;p&gt;Let&#39;s see what else we can come up with.&lt;/p&gt;
&lt;h2&gt;Projects as Hierarchy&lt;/h2&gt;
&lt;p&gt;Another, arguably more natural, approach, involves putting all of a
project&#39;s Next Actions under the project&#39;s heading, like this:&lt;/p&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;* TODO Project 1
** TODO item 1
** TODO item 2
* TODO Project 2
** TODO item 3
** TODO item 4&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This seems entirely natural. Org &lt;em&gt;is&lt;/em&gt; an outlining tool, after all.
Hierarchy is its bread and butter.&lt;/p&gt;
&lt;p&gt;We can also maintain a separate list for those next actions that are not
connected to any particular project, and it would furthermore make sense to
combine everything into one file, so all your next actions and projects are
located in just one place:&lt;/p&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;* TODO item 5
* TODO item 6
* TODO Project 1
** TODO item 1
** TODO item 2
* TODO Project 2
** TODO item 3
** TODO item 4&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;What do we do with the waiting items?  These could remain in their own
&lt;code&gt;waiting.org&lt;/code&gt; file, but it&#39;s entirely possible for a particular waiting
item to be associated with a project (or not - they&#39;re like next actions
that way).  We could nestle the waiting items among the next actions in our
file but that leads to a problem: how do we distinguish next actions from
waiting items?&lt;/p&gt;
&lt;p&gt;The answer here is to add a new TODO state, called WAIT, something Org
allows you to do:&lt;/p&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;* TODO item 5
* TODO item 6
* TODO Project 1
** TODO item 1
** TODO item 2
** WAIT another item
* TODO Project 2
** TODO item 3
** WAIT email response
** TODO item 4&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To make things even more explicit, you could use a special TODO state for
your projects as well:&lt;/p&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;* TODO item 5
* TODO item 6
* PROJ Project 1
** TODO item 1
** TODO item 2
** WAIT another item
* PROJ Project 2
** TODO item 3
** WAIT email response
** TODO item 4&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;One nifty feature of Org is that it allows you to override an heading&#39;s
category using the drawer feature, meaning you can give projects their own
category, like this:&lt;/p&gt;
&lt;pre class=&quot;language-text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;* TODO item 5
* TODO item 6
* PROJ Project 1
 :PROPERTIES:
 :CATEGORY: proj1
 :END:
** TODO item 1
** TODO item 2
** WAIT another item
* PROJ Project 2
 :PROPERTIES:
 :CATEGORY: proj2
 :END:
** TODO item 3
** WAIT email response
** TODO item 4&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Another&lt;/em&gt; nifty feature of Org is that categories are inherited, so that
TODO items under a project will inherit that projects category.  All this to
say, if you make your project&#39;s category name roughly match your project&#39;s
name, then the category can act as a suitable stand-in when viewing Next
Actions on the agenda (since categories are shown by default on the agenda
view).  This means you can easily see, at a glance, which project your Next
Action belongs to, or if it stands on its own.&lt;/p&gt;
&lt;p&gt;Seeing all the next actions associated with a project doesn&#39;t involve using
org-agenda - you just have to look at the project section itself, and
examine the next actions under the project heading.&lt;/p&gt;
&lt;p&gt;You could integrate your someday list into this file, but I actually like
having it in a separate file, since it can get long and rambling, and I
usually interact with it on a different cadence than my main list.  Keeping
it in its own file makes sense.&lt;/p&gt;
&lt;p&gt;Moving top level items between the main file and the someday file is trivial
with &lt;a href=&quot;https://orgmode.org/manual/Refile-and-Copy.html&quot;&gt;org-refile&lt;/a&gt;.  Archiving is also trivial, as long as one sticks to
the top level items, i.e. as long as one doesn&#39;t try to archive unfinished
projects.&lt;/p&gt;
&lt;h2&gt;The Implementation&lt;/h2&gt;
&lt;p&gt;Here is my complete org configuration:&lt;/p&gt;
&lt;pre class=&quot;language-emacs-lisp&quot;&gt;&lt;code class=&quot;language-emacs-lisp&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;setq&lt;/span&gt; org-todo-keywords
      &lt;span class=&quot;token punctuation&quot;&gt;&#39;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;sequence&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;TODO(t)&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;WAIT(w)&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;PROJ(p)&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;|&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;DONE(d)&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;CANC(c)&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;setq&lt;/span&gt; org-agenda-span &lt;span class=&quot;token number&quot;&gt;90&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;setq&lt;/span&gt; org-agenda-files &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;file-expand-wildcards&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;~/pim/gtd/main.org&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;setq&lt;/span&gt; org-agenda-custom-commands
      &lt;span class=&quot;token punctuation&quot;&gt;&#39;(&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;i&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Inbox&quot;&lt;/span&gt; tags-todo &lt;span class=&quot;token string&quot;&gt;&quot;+TODO=&#92;&quot;TODO&#92;&quot;&quot;&lt;/span&gt;
         &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;org-agenda-files&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;file-expand-wildcards&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;~/pim/gtd/inbox.org&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;n&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Next actions&quot;&lt;/span&gt; tags-todo &lt;span class=&quot;token string&quot;&gt;&quot;+TODO=&#92;&quot;TODO&#92;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;p&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Projects&quot;&lt;/span&gt; tags-todo &lt;span class=&quot;token string&quot;&gt;&quot;+TODO=&#92;&quot;PROJ&#92;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;w&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Waiting&quot;&lt;/span&gt; tags-todo &lt;span class=&quot;token string&quot;&gt;&quot;+TODO=&#92;&quot;WAIT&#92;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;s&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Someday&quot;&lt;/span&gt; tags-todo &lt;span class=&quot;token string&quot;&gt;&quot;+TODO=&#92;&quot;TODO&#92;&quot;|TODO=&#92;&quot;PROJ&#92;&quot;&quot;&lt;/span&gt;
         &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;org-agenda-files&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;file-expand-wildcards&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;~/pim/gtd/someday.org&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;o&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Actions and Projects&quot;&lt;/span&gt; tags-todo &lt;span class=&quot;token string&quot;&gt;&quot;+TODO=&#92;&quot;TODO&#92;&quot;|TODO=&#92;&quot;PROJ&#92;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;setq&lt;/span&gt; org-agenda-prefix-format &lt;span class=&quot;token punctuation&quot;&gt;&#39;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;agenda&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;  %-25:c%?-12t% s&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				 &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;timeline&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;  % s&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				 &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;todo&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;  %-12:c&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				 &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;tags&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;  %-25:c&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
				 &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;search&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;  %-12:c&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;setq&lt;/span&gt; org-agenda-tags-column &lt;span class=&quot;token number&quot;&gt;-120&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;setq&lt;/span&gt; org-tags-column &lt;span class=&quot;token number&quot;&gt;-80&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;setq&lt;/span&gt; org-agenda-sorting-strategy
      &lt;span class=&quot;token punctuation&quot;&gt;&#39;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;agenda&lt;/span&gt; habit-down time-up priority-down category-keep&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;todo&lt;/span&gt; priority-down todo-state-up category-keep&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;tags&lt;/span&gt; priority-down todo-state-up category-keep&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;search&lt;/span&gt; category-keep&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;;; M-x org-agenda # to show the stuck projects&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;setq&lt;/span&gt; org-stuck-projects
      &lt;span class=&quot;token punctuation&quot;&gt;&#39;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;+TODO=&#92;&quot;PROJ&#92;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;TODO&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;setq&lt;/span&gt; org-refile-use-outline-path &lt;span class=&quot;token quoted-symbol variable symbol&quot;&gt;&#39;file&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;setq&lt;/span&gt; org-outline-path-complete-in-steps &lt;span class=&quot;token quoted-symbol variable symbol&quot;&gt;&#39;nil&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;setq&lt;/span&gt; refile-targets &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;file-expand-wildcards&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;~/pim/gtd/*.org&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;setq&lt;/span&gt; org-refile-targets &lt;span class=&quot;token punctuation&quot;&gt;&#39;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; refile-targets &lt;span class=&quot;token lisp-property property&quot;&gt;:todo&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;PROJ&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;setq&lt;/span&gt; org-capture-templates
      &lt;span class=&quot;token punctuation&quot;&gt;&#39;(&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;i&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Inbox&quot;&lt;/span&gt; entry
         &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;~/pim/gtd/inbox.org&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
         &lt;span class=&quot;token string&quot;&gt;&quot;* &lt;span class=&quot;token argument&quot;&gt;TODO&lt;/span&gt; %^{Brief Description}&#92;nAdded: %U&#92;n%?&quot;&lt;/span&gt; &lt;span class=&quot;token lisp-property property&quot;&gt;:empty-lines&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token lisp-property property&quot;&gt;:prepend&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
          
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;n&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Next action&quot;&lt;/span&gt; entry
         &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;~/pim/gtd/main.org&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
         &lt;span class=&quot;token string&quot;&gt;&quot;** &lt;span class=&quot;token argument&quot;&gt;TODO&lt;/span&gt; %^{Brief Description}&#92;nAdded: %U&#92;n%?&quot;&lt;/span&gt; &lt;span class=&quot;token lisp-property property&quot;&gt;:empty-lines&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token lisp-property property&quot;&gt;:prepend&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;w&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Waiting&quot;&lt;/span&gt; entry
         &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;~/pim/gtd/main.org&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
         &lt;span class=&quot;token string&quot;&gt;&quot;** &lt;span class=&quot;token argument&quot;&gt;WAIT&lt;/span&gt; %^{Brief Description}&#92;nAdded: %U&#92;n%?&quot;&lt;/span&gt; &lt;span class=&quot;token lisp-property property&quot;&gt;:empty-lines&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token lisp-property property&quot;&gt;:prepend&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;p&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Project&quot;&lt;/span&gt; entry
         &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;~/pim/gtd/main.org&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
         &lt;span class=&quot;token string&quot;&gt;&quot;* &lt;span class=&quot;token argument&quot;&gt;PROJ&lt;/span&gt; %^{Brief Description}&#92;n:PROPERTIES:&#92;n:CATEGORY: %^{Id}&#92;n:END:&#92;nAdded: %U&#92;n%?&quot;&lt;/span&gt; &lt;span class=&quot;token lisp-property property&quot;&gt;:empty-lines&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token lisp-property property&quot;&gt;:prepend&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        
         &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;s&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Someday&quot;&lt;/span&gt; entry
         &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;~/pim/gtd/someday.org&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
         &lt;span class=&quot;token string&quot;&gt;&quot;* &lt;span class=&quot;token argument&quot;&gt;TODO&lt;/span&gt; %^{Brief Description}&#92;nAdded: %U&#92;n%?&quot;&lt;/span&gt; &lt;span class=&quot;token lisp-property property&quot;&gt;:empty-lines&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token lisp-property property&quot;&gt;:prepend&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token car&quot;&gt;define-key&lt;/span&gt; global-map &lt;span class=&quot;token string&quot;&gt;&quot;&#92;C-cc&quot;&lt;/span&gt; &lt;span class=&quot;token quoted-symbol variable symbol&quot;&gt;&#39;org-capture&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>On the Durability of Plain Text</title>
    <link href="https://desmondrivet.com/2023/09/14/plain-text"/>
    <updated>2023-09-15T00:11:18Z</updated>
    <id>https://desmondrivet.com/2023/09/14/plain-text</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;My blog is 16 years old.  I&#39;ve rotated through several blogging engines in
that time (&lt;a href=&quot;https://blosxom.sourceforge.net/&quot;&gt;Bloxsom&lt;/a&gt;, YAWT 1.0/2.0, &lt;a href=&quot;https://getpelican.com/&quot;&gt;Pelican&lt;/a&gt; and finally
&lt;a href=&quot;https://www.11ty.dev/&quot;&gt;Eleventy&lt;/a&gt;) but they all have one thing in common: they all process blog
entries stored as plain text files.&lt;/p&gt;
&lt;p&gt;The fact that all my blog entries are stored as plain text files on my
computer is, I believe, one of the main reasons my blog has lasted this
long.  Text files are trivial to back up.  Text files don&#39;t really crash and
rarely get corrupted.  Text files are readable and writable on any computer
manufactured since the 1980&#39;s - hell, the &lt;em&gt;1960&#39;s&lt;/em&gt; if I let punch cards into
this conversation.  When you contrast this simple durability with, for
example, a &lt;a href=&quot;https://www.mysql.com/&quot;&gt;MySQL&lt;/a&gt; data store (used by several blogging engines,
including one of the most popular ones, &lt;a href=&quot;https://wordpress.com/&quot;&gt;WordPress&lt;/a&gt;), with all of its
attendant version compatibility and data corruption issues, the superiority
of plain text becomes undeniable if you&#39;re trying to write something that
&lt;em&gt;lasts&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I&#39;ve &lt;a href=&quot;https://desmondrivet.com/2023/08/28/world-library&quot;&gt;written before&lt;/a&gt; about the longevity of paper over e-books.  Real
books obviously don&#39;t use software.  They don&#39;t have bugs (well...maybe
literal ones).  They don&#39;t require updates and they don&#39;t have a &lt;em&gt;file
format&lt;/em&gt;.  You&#39;ll be able to read a paper book 100 years from now, something
I&#39;m pretty sure you&#39;d be hard pressed to do with a Kindle.&lt;/p&gt;
&lt;p&gt;Plain text isn&#39;t paper, but it&#39;s as close as you&#39;re going to get to it in a
digital format.  The &lt;a href=&quot;https://en.wikipedia.org/wiki/ASCII&quot;&gt;standard&lt;/a&gt; is over 60 years old and odds are good it
will still be around 100 years from now.  You obviously need software to
read it, but it&#39;s standard, simple, ubiquitous software, available on every
computer platform imaginable.  The tools to read it and, perhaps more
importantly, manipulate it, are universal.&lt;/p&gt;
&lt;p&gt;I&#39;m mentioning the manipulation aspect of text files because that &lt;em&gt;also&lt;/em&gt;
plays a role in their longevity.  Yes, text files are easier to back up and
harder to lose then abstract rows in a database, but they are &lt;em&gt;also&lt;/em&gt; very
easy to convert between one kind of text format and another.  My blog
entries are all written in &lt;a href=&quot;https://daringfireball.net/projects/markdown/&quot;&gt;Markdown&lt;/a&gt; but there&#39;s nothing stopping me
from converting them to &lt;a href=&quot;https://asciidoc.org/&quot;&gt;AsciDoc&lt;/a&gt; or &lt;a href=&quot;https://docutils.sourceforge.io/rst.html&quot;&gt;Restructured Text&lt;/a&gt; or even
&lt;a href=&quot;https://orgmode.org/&quot;&gt;org-mode&lt;/a&gt; if I wanted to double down on my &lt;a href=&quot;https://www.gnu.org/software/emacs/&quot;&gt;Emacs&lt;/a&gt; use.&lt;/p&gt;
&lt;p&gt;Longevity is also the reason I avoid solutions like &lt;a href=&quot;https://obsidian.md/&quot;&gt;Obsidian&lt;/a&gt; or &lt;a href=&quot;https://roamresearch.com/&quot;&gt;Roam
Research&lt;/a&gt; for my notes or my GTD lists.  I don&#39;t know how these pieces
of software store your notes behind the scenes, but I do know that if they
suddenly up and disappeared, I&#39;d be in a bind.  At the risk of beating a
dead horse, it&#39;s safer, in my mind, to have actual text files that I can
back up and move around.  For what it&#39;s worth, if anyone&#39;s curious, I&#39;ve so
far settled on an &lt;a href=&quot;https://www.orgroam.com/&quot;&gt;org-mode based solution&lt;/a&gt; in this regard.&lt;/p&gt;
&lt;p&gt;It&#39;s really a matter of how long I want my writing to last.  Do I use plain
text for literally everything?  Of course not, but the likelihood of me
using something else is directly proportional to how disposable I consider
my writing to be.  I&#39;ll use &lt;a href=&quot;https://desmondrivet.com/2023/09/14/1https://keep.google.com/&quot;&gt;Google Keep&lt;/a&gt; or &lt;a href=&quot;https://todoist.com/&quot;&gt;Todoist&lt;/a&gt; for things
like grocery lists, for example, but I won&#39;t use them for my blog entries,
or my GTD lists or anything meant to last longer than a week.&lt;/p&gt;
&lt;p&gt;At the end of the day, I struggle too much with writing to lose it to
ravages of changing fashions.&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>A Library of the World</title>
    <link href="https://desmondrivet.com/2023/08/28/world-library"/>
    <updated>2023-08-29T02:33:32Z</updated>
    <id>https://desmondrivet.com/2023/08/28/world-library</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;I recently saw &lt;a href=&quot;https://www.imdb.com/title/tt26242614/&quot;&gt;Umberto Eco: A Library of the World&lt;/a&gt;, a documentary about
Umberto Eco&#39;s extensive book collection.  At first blush this doesn&#39;t sound
like the sort of topic that would make for an interesting documentary but
with something like 50000 books spread over two libraries, a significant
number of them dating from the medieval era, there&#39;s actually a surprising
amount of stuff to unpack here.  If you like books, you&#39;ll like the film.  I
thought it was great.&lt;/p&gt;
&lt;p&gt;In my case, I found myself thinking less about the books themselves and more
about the subtext surrounding them.  Eco was unsurprisingly disdainful of
e-books and valued the physical durability of paper.  It&#39;s an opinion with
which it&#39;s easy to sympathize given how e-books are often saddled today with
restrictive DRM and competing formats.  Ink on paper doesn&#39;t have a &amp;quot;format&amp;quot;
problem and often lasts centuries.  Do you think you&#39;ll be able to read your
Kindle 100 years from now?&lt;/p&gt;
&lt;p&gt;And physical books are just &lt;em&gt;nicer&lt;/em&gt;, right?  The cover art, the paper, the
smell, the ability to see how much you have left to read at a glance - it
all adds up to an &lt;em&gt;experience&lt;/em&gt;.  And I still say that a real, paper book
remains the easiest way to read something.&lt;/p&gt;
&lt;p&gt;That being said, paper books &lt;em&gt;also&lt;/em&gt; take up a significant amount of space
and that&#39;s where it all breaks down, of course.  Eco had &lt;em&gt;two&lt;/em&gt; houses and
his book collection took up a significant amount of space in &lt;em&gt;both&lt;/em&gt; of them.
Meanwhile, many young people today, especially in large cities, have trouble
buying even a modest house and they are often lucky to have room for just
one bookcase.&lt;/p&gt;
&lt;p&gt;So while I get the appeal of paper, and I have a bunch of paper books
myself, I find myself less dismissive of e-books than some people my age
(I&#39;m in my 40&#39;s).  Their promise - thousands of books in one small device -
is hard to ignore.  The disdain of some people comes off as self-righteous
and clueless.  The amount of privilege required to have a library worth
exploring is considerable and I know I&#39;m lucky to have one, paltry as it is.&lt;/p&gt;
&lt;p&gt;So, nowadays, my format of choice for a book tends to be electronic until
it&#39;s proven to have an impact on my life.  Often I don&#39;t &lt;em&gt;know&lt;/em&gt; it&#39;s made an
impact until some time after I&#39;ve read it.  If I find myself describing the
book to random people at parties, that&#39;s usually a hint.  At that point,
I&#39;ll carve out a place on my bookshelf and buy the real thing.  It feels
like a decent compromise.&lt;/p&gt;
&lt;p&gt;And I&#39;m pretty good about getting rid of books, too.  Gone are the days when
I hoard them for show.  My library is slowly turning into just the books
that are meaningful to me, which is as it should be.&lt;/p&gt;
&lt;p&gt;Still, though, Umberto Eco&#39;s library is thing of beauty :-)&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>I Enjoy Writing Software</title>
    <link href="https://desmondrivet.com/2023/05/30/enjoy-coding"/>
    <updated>2023-05-31T00:30:13Z</updated>
    <id>https://desmondrivet.com/2023/05/30/enjoy-coding</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;I enjoy &lt;em&gt;writing&lt;/em&gt; software more than I enjoy &lt;em&gt;using&lt;/em&gt; software.  I&#39;m not
berating myself over this, nor am I proud of it.  It&#39;s just how I am.&lt;/p&gt;
&lt;p&gt;What this means in practice is that I will often write a whole &lt;em&gt;bunch&lt;/em&gt; of
code before I even start trying to debug it.  Writing code tickles what I
imagine is the creative part of my brain, and it feels good.  Running and
debugging code tickles the &amp;quot;chore&amp;quot; part of my brain and it doesn&#39;t feel as
good.&lt;/p&gt;
&lt;p&gt;(Yes, programming is &lt;em&gt;creative&lt;/em&gt;.  It&#39;s an act of creation.  I&#39;m emphasizing
this point because there is a tendency in non-technical circles to view
programming as something sterile or clinical, like accounting.  I would
imagine, however, that there are very few accountants who do accounting in
their spare time, whereas you can easily find tons of programmers who do
coding in their spare time, myself included).&lt;/p&gt;
&lt;p&gt;Writing huge swaths of code that don&#39;t run is obviously not ideal.  Since
part of my job is, in fact, to produce working code, I obviously know how to
debug, and I do.  It&#39;s just that I could probably be more productive if I
took a breath, stepped back and started trying things out earlier in the
process than I usually do.&lt;/p&gt;
&lt;p&gt;This is especially true in my hobby projects.  Those are meant to be purely
for fun, and so I tend to put an emphasis on the parts I enjoy, which is
creating the software.  I obviously do get some enjoyment from seeing it
work, so I do of course eventually get it running (err...sometimes...) but
much later than I should.&lt;/p&gt;
&lt;p&gt;I think this is part of the reason I will often spend days setting up
elaborate todo systems with &lt;a href=&quot;https://orgmode.org/&quot;&gt;org mode&lt;/a&gt; and &lt;a href=&quot;https://www.gnu.org/software/emacs/&quot;&gt;Emacs&lt;/a&gt;, and then never
follow through with using them.  I&#39;m surely beating a dead horse by now, but
writing software is fun; using software, particularly my own, is another
matter entirely.&lt;/p&gt;
&lt;p&gt;What do I do about this?  I have no idea.  I&#39;m not even sure there&#39;s
anything &lt;em&gt;to&lt;/em&gt; do.  I mean, I&#39;m mostly productive.  I do, for the most part,
produce stuff that, on some level, works.  Eventually.&lt;/p&gt;
&lt;p&gt;I&#39;m not even sure what I want to get out of this blog entry.  I think I
just wanted to get it off my chest.&lt;/p&gt;
&lt;p&gt;Still, self-improvement is a good thing and as I get older I find myself
wanting to be a little more practical so maybe I should look into improving
this.&lt;/p&gt;
&lt;p&gt;Maybe more unit testing?  That seems plausible - combine programming with
testing.  It could work.&lt;/p&gt;
&lt;p&gt;Then again, I&#39;m not a young man and retirement is...well, it&#39;s not &lt;em&gt;close&lt;/em&gt;
but it&#39;s no longer unfathomably far away.  So maybe life is short and I
don&#39;t bother.&lt;/p&gt;
&lt;p&gt;I&#39;d be curious to see which side of me wins out.&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>The Popular Vote as a Psychological Coping Mechanism</title>
    <link href="https://desmondrivet.com/2023/02/19/popular-vote"/>
    <updated>2023-02-19T22:11:29Z</updated>
    <id>https://desmondrivet.com/2023/02/19/popular-vote</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;In 1931, a book was published in German under the title &amp;quot;100 Authors Against
Einstein&amp;quot;, attempting to refute the Theory of Relativity.  By some accounts,
when Einstein was confronted with this book, he is reported to have said
something along the lines of:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Why a hundred?  If I were wrong, one would have been enough.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I have no idea if this is for real.  Still, though, it&#39;s pretty good, right?&lt;/p&gt;
&lt;p&gt;To be clear, Einstein was talking about physics, not politics or philosophy,
but even in the social sciences I find myself sympathetic to the spirit of
this quote, fake or not, especially when faced with people who harp on an
idea like &lt;em&gt;the popular vote&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;You know the type.  These are the people who like to emphasize that Donald
Trump, despite winning the US presidency in 2016, did not win more than 50%
of the votes (due to idiosyncrasies in the American electoral system).  This
is, of course, completely true but also, I suspect, not &lt;em&gt;quite&lt;/em&gt; the crushing
argument they think it is, given that they would have been, I imagine,
strangely silent on the subject if the opposite had been true - if Hillary
Clinton had won the presidency with less than 50% of the votes.&lt;/p&gt;
&lt;p&gt;No, if &lt;em&gt;that&lt;/em&gt; had happened, I suspect they&#39;d be thinking the exact same
thing that &lt;em&gt;I&#39;m&lt;/em&gt; thinking, which is that the popular vote, while
interesting, doesn&#39;t matter very much at all.&lt;/p&gt;
&lt;p&gt;The same kind of arguments occasionally surface in Canadian politics as
well.  Stephen Harper, a somewhat reviled Conservative Prime Minister in
some circles, never won more than 40% of the popular vote in Canada, despite
winning the election 3 times, once with a majority government.  Some people
like to point this out, while at the same time failing to point out that his
rival Justin Trudeau, of the Liberal party, &lt;em&gt;also&lt;/em&gt; never won the popular
vote.&lt;/p&gt;
&lt;p&gt;Because of the way the electoral system works in Canada, it&#39;s actually quite
common that a party&#39;s popular vote doesn&#39;t translate into a corresponding
number of seats (and hence a corresponding amount of political power).  If I
were playing devil&#39;s advocate, I &lt;em&gt;could&lt;/em&gt; point out that Stephen Harper, at
the very least, always won his elections with a &lt;em&gt;plurality&lt;/em&gt; if not a
majority of the popular vote (i.e. the Conservative party under Stephen
Harper always won with the most votes, just not more than 50% of them) -
something I &lt;em&gt;cannot&lt;/em&gt; say about Justin Trudeau (the Liberals won the election
in 2021 with 33.1% of the popular vote, to the Conservatives&#39; 34.4%).&lt;/p&gt;
&lt;p&gt;To be clear, I am not defending the Conservative Party. I&#39;ve never voted for
them in my life.  I am merely pointing out that the popular vote, as a
measure of anything, is stupid.  A leadership mandate doesn&#39;t suddenly
become more or less acceptable because you managed to convince just one more
person.  To be fair, I&#39;m not totally sure what &lt;em&gt;would&lt;/em&gt; count as a convincing
moral justification for one policy over another - ethics is hard! - but I&#39;m
pretty sure that &amp;quot;number of people who agree with it&amp;quot; isn&#39;t one of them.&lt;/p&gt;
&lt;p&gt;In the case of Donald Trump, I think the reason why people focus on the
popular vote so much is because they can&#39;t stand the idea of living in a
country where most people are Trump supporters - an attitude to which I&#39;m
entirely sympathetic.  In that situation, focusing on the popular vote, and
the fact that Donald Trump didn&#39;t win it, functions as a kind of
psychological coping mechanism.  It means that the country is still worth
saving.  I &lt;em&gt;do&lt;/em&gt; get it, believe it or not.&lt;/p&gt;
&lt;p&gt;But let&#39;s not delude ourselves. When push comes to shove, if the cause is
judged to be important enough, no one, progressive or conservative, really
believes that the notion of the &amp;quot;popular vote&amp;quot; means much of anything at
all - and this is, frankly, as it should be.&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>Amaro Showdown at Casa Di Desmond</title>
    <link href="https://desmondrivet.com/2022/07/23/amaro-tasting"/>
    <updated>2022-07-23T12:34:14Z</updated>
    <id>https://desmondrivet.com/2022/07/23/amaro-tasting</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;A while back I started going through a phase where I would buy any
reasonably well-reviewed bottle of Italian &lt;a href=&quot;https://en.wikipedia.org/wiki/Amaro_(liqueur)&quot;&gt;amaro&lt;/a&gt; I could find at my
local liquor store, in a halfhearted and somewhat misguided attempt to
reconnect with my Italian roots (my mother is from Sicily).  I can&#39;t
honestly say that it worked (what would that even look like?  I already talk
with my hands, I don&#39;t need to do it more) but it &lt;em&gt;did&lt;/em&gt; result, as you might
expect, in a small collection of Italian amari being added to my home bar.&lt;/p&gt;
&lt;p&gt;(The plural of &amp;quot;amaro&amp;quot;, as I learned, is &amp;quot;amari&amp;quot;, not &amp;quot;amaros&amp;quot; so, hey,
maybe it did kind of work after all)&lt;/p&gt;
&lt;p&gt;The word &amp;quot;amaro&amp;quot; means &amp;quot;bitter&amp;quot; in Italian and, accordingly, amari are a
class of Italian herbal liqueurs characterized by a syrupy, bittersweet
flavour, often described as &amp;quot;medicinal&amp;quot;.  They are usually consumed after a
heavy meal as a digestif and they vary in strength from &amp;quot;strong wine&amp;quot; (15%)
to &amp;quot;out-and-out hard liquor&amp;quot; (40%).&lt;/p&gt;
&lt;p&gt;I can testify that they do work, in the sense of settling your stomach after
a large meal.  I&#39;m not sure how, but one theory is that our brains associate
bitter tastes with poison and so, when confronted with such, will stimulate
the production of digestive juices.&lt;/p&gt;
&lt;p&gt;You can think of them as Italy&#39;s answer to a product like
&lt;a href=&quot;https://en.wikipedia.org/wiki/J%C3%A4germeister&quot;&gt;Jaggermeister&lt;/a&gt;, a German digestif, though I realize as I write this that
the comparison would probably be considered unfavourable, as Jaggermeister
has a bad reputation (stemming, I suspect, more from teenage antics than
because of any inherently bad qualities).  They can also be compared to
something like &lt;a href=&quot;https://en.wikipedia.org/wiki/Chartreuse_(liqueur)&quot;&gt;Chartreuse&lt;/a&gt;, a similar French herbal digestif about which
I have &lt;a href=&quot;https://desmondrivet.com/2016/12/31/chartreuse&quot;&gt;written before&lt;/a&gt;, and I suspect the comparison there is a bit more
flattering.&lt;/p&gt;
&lt;p&gt;The flavour profile of a typical amaro is a balance between sweet and
bitter, herbal and citrus, spicy and floral.  Depending on the brand, some
of these qualities are more prominent than others.  So, in that spirit
(ha!), I have decided to taste test all the amari I have in my bar, side by
side, to see how they compare.  Here they are, lined up for your viewing
pleasure:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://desmondrivet.com/static/img/amari.jpg&quot; alt=&quot;My amaro collection&quot; class=&quot;u-featured entry__photo image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I&#39;ll give away some of the ending right now: they do differ quite
significantly in flavour, and some are definitely more of an acquired taste
than others (I&#39;m looking at &lt;em&gt;you&lt;/em&gt;, Fernet Branca).&lt;/p&gt;
&lt;p&gt;I don&#39;t really have any consistent strategy for describing the flavours here
and to be honest a lot of this is for my benefit as much as anyone&#39;s but,
still, if you&#39;ve never tried this kind of tipple, you may find this
useful to some extent.  Here we go!&lt;/p&gt;
&lt;h2&gt;The Tastings&lt;/h2&gt;
&lt;h3&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Amaro_Averna&quot;&gt;Amaro Averna&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Colour&lt;/strong&gt;: Dark, maybe even black, like Cola.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alcohol&lt;/strong&gt;: 29%&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Taste&lt;/strong&gt;: sweet, medical, syrupy, caramel.&lt;/p&gt;
&lt;p&gt;This one dates back to 1868 and hails from Caltanissetta, Sicily.  It&#39;s
apparently quite famous in that region.  The bottle is annoyingly tall,
which sounds petty, I know, but it&#39;s hard to fit on my bar cart and that&#39;s
irritating!&lt;/p&gt;
&lt;p&gt;Like almost all amari, the recipe here is a closely guarded secret but is
supposed to include things like orange peel.  I have to admit, I didn&#39;t
really detect any citrus.&lt;/p&gt;
&lt;p&gt;All in all, I found that this one tasted vaguely of cough medicine.  It was
sickly sweet, medical, syrupy, with some caramel notes.  There was some
bitterness, as always in an amaro, but it&#39;s not the most prominent flavour.&lt;/p&gt;
&lt;p&gt;I got to say, not my favourite.  A little too on the syrupy side.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Zucca_(aperitif)&quot;&gt;Zucca Rabarbaro&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Colour&lt;/strong&gt;: Dark, like the Averna.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alcohol&lt;/strong&gt;: 30%&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Taste&lt;/strong&gt;: Bitter, vegetal.&lt;/p&gt;
&lt;p&gt;Although Zucca is Italian for &amp;quot;squash&amp;quot; or &amp;quot;pumpkin&amp;quot;, the name actually comes
from Caffè Zucca in Milan, where it&#39;s a featured drink.  The main gimmick
here would be the inclusion of Chinese rhubarb as an ingredient, though I&#39;m
not sure I detected it specifically as anything more than a vague vegetal
aftertaste.&lt;/p&gt;
&lt;p&gt;In any case, this one was quite intensely bitter, more so than the other
amari I tried, with a lingering, almost harsh aftertaste.  It was borderline
unpleasant.  I would not call this drink approachable.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Cynar&quot;&gt;Cynar&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Colour&lt;/strong&gt;: Dark, like Cola.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alcohol&lt;/strong&gt;: 16.5%&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Taste&lt;/strong&gt;: Bitter, syrupy, vegetal.&lt;/p&gt;
&lt;p&gt;On the bitter side, though not as bitter as the Zucca; it was smoother and a
bit sweeter and more syrupy.&lt;/p&gt;
&lt;p&gt;The gimmick here is the inclusion of artichoke as an ingredient (Cynara
scolymus), hence the name.  That being said, I don&#39;t really detect any
artichoke in the flavour, beyond perhaps a vague kind of vegetal aftertaste.&lt;/p&gt;
&lt;p&gt;Better than the Zucca, and if I wanted a bitter tasting digestif, I&#39;d
probably go for this one. but I still would not call this vary approachable.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Amaro_Montenegro&quot;&gt;Amaro Montenegro&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Colour&lt;/strong&gt;: Amber, perhaps the colour of a sweet vermouth or an aged whisky.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alcohol&lt;/strong&gt;: 23%&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Taste&lt;/strong&gt;: Sweet, perfumed, floral, spicy.&lt;/p&gt;
&lt;p&gt;This one hails from Bologna. Very sweet, perfumed and floral.  Some
bitterness, obviously, but it&#39;s in the background and isn&#39;t the main focus
of the drink.  Much more obviously spiced than the other amari.&lt;/p&gt;
&lt;p&gt;All in all, quite delicious and approachable.  Maybe my favourite of the
bunch.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;https://www.saq.com/en/10999073&quot;&gt;Amaro Nonino&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Colour&lt;/strong&gt;: Amber, like the Montenegro.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alcohol&lt;/strong&gt;: 35%&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Taste&lt;/strong&gt;: Sweet, citrus.&lt;/p&gt;
&lt;p&gt;This one is a stronger amaro, based on grappa, hailing from Friuli, Italy.
The bitterness here is more pronounced than the Montenegro, but less so
than, for example, the Zucca or Cynar.  I find the citrus is more obvious
here, almost like a Triple Sec.&lt;/p&gt;
&lt;p&gt;I liked it, but maybe not as much as the Montenegro.  Still quite
approachable.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;https://www.vecchioamarodelcapo.com/en/&quot;&gt;Vecchio Amaro Del Capo&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Colour&lt;/strong&gt;: Dark amber&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alcohol&lt;/strong&gt;: 35%&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Taste&lt;/strong&gt;: Sweet, herbal.&lt;/p&gt;
&lt;p&gt;This one comes from Calabria.  It&#39;s rather sweet, and not as intensely
bitter as the Zucca or Cynar.&lt;/p&gt;
&lt;p&gt;The flavour is hard to pin down.  There&#39;s anise, some citrus, and some mint.
Like all amari, there&#39;s bitterness there, but it doesn&#39;t hit you over the
head.&lt;/p&gt;
&lt;p&gt;I would say that the anise is a bit more noticeable than the other amari on
this list, which would make this one comparable to something like
Jaggermeister or Chartreuse, though a bit more complex.&lt;/p&gt;
&lt;p&gt;I like this one a lot, to be honest.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Amaro_Lucano&quot;&gt;Amaro Lucano&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Colour&lt;/strong&gt;: Dark&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alcohol&lt;/strong&gt;: 28%&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Taste&lt;/strong&gt;: Sweet, citrus with notes of anise&lt;/p&gt;
&lt;p&gt;This one dates back to 1894 and was apparently created by a pastry chef.&lt;/p&gt;
&lt;p&gt;There&#39;s anise and citrus here.  Bitterness, as always, and it&#39;s more
pronounced that the Montenegro.  Less harsh than the Zucca, but still
comparable: black, syrupy, bitter, medicinal.&lt;/p&gt;
&lt;p&gt;I actually quite liked this one, maybe more than the Cynar, but perhaps not
as much as the Vecchio.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Fernet-Branca&quot;&gt;Fernet-Branca&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Colour&lt;/strong&gt;: Dark&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alcohol&lt;/strong&gt;: 39%&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Taste&lt;/strong&gt;:  Bitter, minty, lacking in sweetness&lt;/p&gt;
&lt;p&gt;My goodness, how to describe Fernet-Branca?  It&#39;s completely unlike anything
else in this collection, to the point where I was debating whether I should
write about it at all.  Wikipedia calls it an amaro, though, so I decided,
somewhat grudgingly, to include it.&lt;/p&gt;
&lt;p&gt;There is very little sweetness here, and a big hit of mint, with a lingering
bitter finish.  More than anything else on this list, the taste can best be
described as &amp;quot;medicinal&amp;quot;.  I mean that literally; Fernet-Branca really does
taste like medicine, and not necessarily in a good way.&lt;/p&gt;
&lt;p&gt;There are, apparently, some people who actually like the taste, but I
haven&#39;t met any of them.  Calling it an &amp;quot;acquired taste&amp;quot; might be
considered diplomatic.&lt;/p&gt;
&lt;p&gt;Drink it to calm your stomach, and hope for the best.&lt;/p&gt;
&lt;h2&gt;Where to Go From Here?&lt;/h2&gt;
&lt;p&gt;Amari are part of a wider class of herbal liqueurs that are often drunk as
apertifs or digestifs.  I&#39;ve already mentioned Jaggermeister and Chartreuse,
but &lt;a href=&quot;https://en.wikipedia.org/wiki/Campari&quot;&gt;Campari&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Aperol&quot;&gt;Aperol&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Suze_(drink)&quot;&gt;Suze&lt;/a&gt; and others also fall into this
category.  I&#39;m not including them in this post more for technical reasons
than anything else; several are not Italian and hence not &amp;quot;amari&amp;quot; and a few,
though Italian, are not considered amari for reasons that remain mysterious
to me (have you tasted Campari?  It&#39;s nothing if not bitter).&lt;/p&gt;
&lt;p&gt;At some point I&#39;ll likely do a taste test of these bottles, and maybe even
try out some cocktails, but for the moment this post will have to do.
Enjoy, everyone!&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>Fifteen Years of Blogging</title>
    <link href="https://desmondrivet.com/2022/06/01/fifteen-years"/>
    <updated>2022-06-01T12:44:30Z</updated>
    <id>https://desmondrivet.com/2022/06/01/fifteen-years</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;Fifteen years ago today, I published my &lt;a href=&quot;https://desmondrivet.com/2007/06/01/blogging&quot;&gt;first blog post&lt;/a&gt; and I wanted to
mark the occasion with - you guessed it! - a blog post.  I didn&#39;t really
have a strong sense of what I wanted to say but, anniversaries being a
chance to reminisce, I found myself revisiting what I&#39;ve written over the
years.&lt;/p&gt;
&lt;p&gt;It&#39;s definitely a mixed bag.  The tone and content vary quite a bit.  For
this reason, when people ask me what this blog is &amp;quot;about&amp;quot;, I don&#39;t usually
have a ready answer, and this sometimes catches them off guard because
common wisdom states that blogs typically have themes.  People will manage a
cooking blog, for example, or a programming blog, or a reading blog.  Among
other things, it&#39;s a way to collect followers - people seem to place greater
trust in a blog when it focuses on one subject.&lt;/p&gt;
&lt;p&gt;I&#39;m not so precious as to claim that I don&#39;t care about readership &lt;em&gt;at
all&lt;/em&gt; - I do enjoy it when people read my posts, believe it or not - but I
&lt;em&gt;will&lt;/em&gt; say, being completely honest, that it&#39;s not a huge concern, and
gaining a following has very little do with why this blog exists.  I&#39;ve
tried, over the years, to keep track of visitors (first with piwik and then
with google analytics) but I inevitably end up abandoning the effort as not
worth my time.&lt;/p&gt;
&lt;p&gt;In any case, I&#39;ve always resisted the temptation to limit this project with
labels.  My blog, like me, is a bit all over the place.  It doesn&#39;t have a
theme other than &amp;quot;stuff Desmond finds interesting&amp;quot;.  It&#39;s a purely selfish
creative outlet, a dim extension of myself, and sticking to one subject
would run counter to that purpose.&lt;/p&gt;
&lt;p&gt;All that being said, I did notice, poring over the years, that certain
patterns stand out.  And, even though my blog isn&#39;t about anything in
particular, individual posts generally &lt;em&gt;are&lt;/em&gt;, so I suppose it makes some
amount of sense to turn this anniversary post into a trip down memory lane.
Not the most elegant of segues but hey, let&#39;s see what shakes loose!&lt;/p&gt;
&lt;h2&gt;The Diary - Part 1&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://desmondrivet.com/2007/&quot;&gt;first year&lt;/a&gt; of my blog tended to be somewhat diary oriented.
There&#39;s a post in there about &lt;a href=&quot;https://desmondrivet.com/2007/08/04/bachelor&quot;&gt;attending my friend Neil&#39;s bachelor
party&lt;/a&gt;.  There&#39;s another post about nothing more than the fact that &lt;a href=&quot;https://desmondrivet.com/2007/12/17/snow&quot;&gt;it&#39;s
snowing outside&lt;/a&gt;.  There&#39;s a brief one on &lt;a href=&quot;https://desmondrivet.com/2008/04/22/montreal-looting&quot;&gt;hockey riots&lt;/a&gt; and another
about my &lt;a href=&quot;https://desmondrivet.com/2007/06/12/gliding&quot;&gt;trip on a glider&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This kind of content pretty much stopped after the first year, except for
the occasional vacation post (see, for example, my post about my &lt;a href=&quot;https://desmondrivet.com/2015/07/11/trip-greece&quot;&gt;trip to
Greece&lt;/a&gt;, the one about my &lt;a href=&quot;https://desmondrivet.com/2016/06/29/poland&quot;&gt;trip to Poland&lt;/a&gt;, and the one where I
&lt;a href=&quot;https://desmondrivet.com/2018/11/10/new-york-chicago&quot;&gt;visited Chicago and New York&lt;/a&gt;).  These are actually a lot of fun to
write and I should probably should have written more of them.&lt;/p&gt;
&lt;p&gt;Thinking about it now, I joined Facebook the same year that I started my
blog, and I would imagine it&#39;s not a coincidence that these kinds of diary
entries began to dry up as I became more active on social media.  Facebook
effectively became my diary, I suppose.  It makes me a bit sad to think
about it.&lt;/p&gt;
&lt;p&gt;One obvious reason for the change is that Facebook is easier to write for
than a blog, particularly &lt;em&gt;my&lt;/em&gt; blog.  I use a static site generator without
a dedicated interface but it&#39;s not just about the UI - sites like Facebook
and Twitter make it easy to post small, titleless snippets of content that
are by nature easier to craft than a blog entry.&lt;/p&gt;
&lt;p&gt;Joining the &lt;a href=&quot;https://indieweb.org/&quot;&gt;IndieWeb&lt;/a&gt; in 2018, though, helped me take back that kind of
content.&lt;/p&gt;
&lt;h2&gt;The Gap and Nothing Personal&lt;/h2&gt;
&lt;p&gt;There&#39;s a three year gap from 2008-2011, ostensibly because my &lt;a href=&quot;https://desmondrivet.com/2008/09/08/no-comments&quot;&gt;blog got
overrun with spam&lt;/a&gt;.  A number of life events happened in that gap - my
dad died, for one, and I also bought a 100 year old apartment.  It&#39;s a shame
that I don&#39;t have any posts about that.&lt;/p&gt;
&lt;p&gt;But this, in fact, appears to be a pattern with me.  I don&#39;t really have a
lot of personal articles on my blog.  As I mentioned, &amp;quot;diary&amp;quot; content more
or less stopped after the first year.  I do share a lot of opinions, which
are obviously personal, but I don&#39;t really share what&#39;s going on in my
life - at least, not on my blog.&lt;/p&gt;
&lt;p&gt;Some exceptions do exist.  I published a relatively personal &lt;a href=&quot;https://desmondrivet.com/2016/04/02/on-escaping-your-past&quot;&gt;post&lt;/a&gt;
about religion back in 2016.  I published a fairly introspective &lt;a href=&quot;https://desmondrivet.com/2013/07/31/canada-malting&quot;&gt;post&lt;/a&gt;
about the Canada Malting silos way back in 2013.  But day-to-day stuff?  Not
so much.&lt;/p&gt;
&lt;p&gt;Again, this changes somewhat when I started participating in the IndieWeb,
which made it easier, from a conceptual standpoint, to post one-off status
updates of what&#39;s happening in my life.&lt;/p&gt;
&lt;h2&gt;On Being Meta&lt;/h2&gt;
&lt;p&gt;One thing that hasn&#39;t changed is that I tend to blog a lot about blogging,
particularly about the technology or workflow I&#39;m using at the time.  In
fact, &lt;a href=&quot;https://desmondrivet.com/posts/tags/blogging&quot;&gt;&amp;quot;blogging&amp;quot;&lt;/a&gt; is the single biggest entry on my tag page.  I&#39;m not
sure what to make of that, except that I suppose I tend to fall into the
common nerd trap of getting caught up in the tools I use.&lt;/p&gt;
&lt;p&gt;What can I say?  Blogging software (and web publishing software in general)
is a topic that fascinates me. I&#39;m old enough to still be amazed at the idea
that a random person can put a random web page on a random web server and
have it be instantly accessible to anyone in the world with an Internet
connection.&lt;/p&gt;
&lt;p&gt;I started this blog with an obscure little Perl program called
&lt;a href=&quot;http://blosxom.sourceforge.net/&quot;&gt;Blosxom&lt;/a&gt;, moved on fairly quickly to my own homegrown engine called
&lt;a href=&quot;https://github.com/drivet/yawt&quot;&gt;YAWT&lt;/a&gt; (first written in Perl, then in Python) and I eventually started
using &lt;a href=&quot;https://blog.getpelican.com/&quot;&gt;Pelican&lt;/a&gt; when I got tired of fixing bugs in my own code.  I&#39;ve
recently switched to using &lt;a href=&quot;https://www.11ty.dev/&quot;&gt;Eleventy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you&#39;re at all familiar with blogging software, you may have noticed that
certain popular programs like &lt;a href=&quot;https://wordpress.com/&quot;&gt;Wordpress&lt;/a&gt; are not on the list.  That&#39;s
because I like writing all my blog entries in a plain text editor (usually
&lt;a href=&quot;https://www.gnu.org/software/emacs/&quot;&gt;Emacs&lt;/a&gt;) and saving them as vanilla text files on disk, a personal
idiosyncrasy which informs my choice of publishing software.  The longevity
of my blog can be at least partially attributed to the fact that my content
is stored this way, and can be processed by relatively low-tech digital
tools (i.e. any text editor, on any platform).  This is a topic that
probably deserves its own post.&lt;/p&gt;
&lt;h2&gt;On Being a Geek&lt;/h2&gt;
&lt;p&gt;I also appear write a lot about programming, which is not entirely
unexpected given what I do for a living (spoiler: I&#39;m a software developer).
It &lt;em&gt;is&lt;/em&gt; kind of interesting to see how these articles change over time.  I
wrote a &lt;a href=&quot;https://desmondrivet.com/2008/02/13/perl-scoping&quot;&gt;couple&lt;/a&gt; of Perl &lt;a href=&quot;https://desmondrivet.com/2008/07/06/perl-error-handling&quot;&gt;articles&lt;/a&gt; in 2007, when I was still using
Blosxom.  I started writing about &lt;a href=&quot;https://desmondrivet.com/posts/articles/tags/python&quot;&gt;Python&lt;/a&gt; in 2012, a couple of years
after I attended OOPSLA, and I decided that I wanted to learn a dynamic
language that wasn&#39;t Perl.  I eventually moved on to &lt;a href=&quot;https://desmondrivet.com/posts/articles/tags/typescript&quot;&gt;Typescript&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mixed with all of that are a handful of articles on &lt;a href=&quot;https://desmondrivet.com/posts/articles/tags/emacs&quot;&gt;Emacs&lt;/a&gt;, which in
terms of subject matter tend to blur the line between blogging and
programming.  Emacs has traditionally been my text editor of choice over the
years, which implicitly involves writing a fair amount of Lisp (specifically
Emacs Lisp), a fascinating language that can occasionally beguile a person
with mathematical inclinations (like me).&lt;/p&gt;
&lt;h2&gt;The Diary - Part 2&lt;/h2&gt;
&lt;p&gt;I joined the IndieWeb sometime in 2018 and immediately became consumed by
it, as attested by the fact that &lt;a href=&quot;https://desmondrivet.com/posts/articles/tags/indieweb&quot;&gt;&amp;quot;indieweb&amp;quot;&lt;/a&gt; is the second most
frequently used tag on my blog after &amp;quot;blogging&amp;quot;.&lt;/p&gt;
&lt;p&gt;The IndieWeb is a loose community of people trying to re-popularize the
personal website and, by extension, the personal blog.  So I guess you could
say that my interest in this subject is just an extension of my interest in
blogging.&lt;/p&gt;
&lt;p&gt;Joining the IndieWeb has had a profound effect on the format and structure
of my blog.  The most prominent changes, from a reader&#39;s perspective, would
probably be the introduction of &lt;a href=&quot;https://desmondrivet.com/posts/notes/&quot;&gt;notes&lt;/a&gt; and &lt;a href=&quot;https://indieweb.org/Webmention&quot;&gt;webmentions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The ability to publish short, quick notes on my blog basically means that I
can more easily use this platform for purposes that hitherto had been mostly
the purview of Facebook and Twitter - namely day-to-day, diary-oriented
musings.  The introduction of webmentions have added a sense of community.&lt;/p&gt;
&lt;p&gt;Effectively, participating in the IndieWeb has resulted in a kind of
renaissance of the diary aspects of my blog, and a lessening of the
reliance on Facebook and Twitter, which is nice.&lt;/p&gt;
&lt;h2&gt;Apparently I Like To Drink&lt;/h2&gt;
&lt;p&gt;A number of posts involve &lt;a href=&quot;https://desmondrivet.com/posts/articles/tags/cooking&quot;&gt;cooking&lt;/a&gt; and &lt;a href=&quot;https://desmondrivet.com/posts/articles/tags/cocktails&quot;&gt;cocktails&lt;/a&gt;.  More cocktails
than cooking if I&#39;m honest.&lt;/p&gt;
&lt;p&gt;I enjoy mixing drinks.  I&#39;m not entirely sure why.  It&#39;s not to get drunk; I
almost always stop at one or two.  I think it has something to do with my
childhood fascination with chemistry.  Mixing a drink feels like a chemistry
experiment.&lt;/p&gt;
&lt;p&gt;For a while I was really into crafting my own mixers.  I have a couple of
articles on &lt;a href=&quot;https://desmondrivet.com/posts/articles/tags/tonic&quot;&gt;making my own tonic water&lt;/a&gt;, and one that mentions how I
&lt;a href=&quot;https://desmondrivet.com/2014/12/22/more-sour-cocktails&quot;&gt;make my own grenadine&lt;/a&gt;.  I have a series of posts on how I use what are
traditionally labelled as &amp;quot;mixing liqueurs&amp;quot;, like vermouth or Chartreuse.&lt;/p&gt;
&lt;h2&gt;And Finally...Just a Lot of Soapboxing&lt;/h2&gt;
&lt;p&gt;This blog doesn&#39;t really have title but, if it did, &amp;quot;Desmond&#39;s Soapbox&amp;quot;
wouldn&#39;t be entirely off the mark.  I often use this blog to bleat opinions
into the void.&lt;/p&gt;
&lt;p&gt;So, one occasionally runs into posts about &lt;a href=&quot;https://desmondrivet.com/posts/articles/tags/quebec&quot;&gt;life in Quebec&lt;/a&gt;, or posts
about &lt;a href=&quot;https://desmondrivet.com/posts/articles/tags/philosophy&quot;&gt;philosophy&lt;/a&gt;, or posts about &lt;a href=&quot;https://desmondrivet.com/posts/articles/tags/religion&quot;&gt;religion&lt;/a&gt;.  There&#39;s no rhyme or
reason to most of it.  It&#39;s just stuff about which I felt was important to
write at the time.&lt;/p&gt;
&lt;p&gt;Given that I&#39;m not really writing for anyone other than myself, my blog is
peppered with this kind of thing.&lt;/p&gt;
&lt;h2&gt;Thoughts On The Future&lt;/h2&gt;
&lt;p&gt;I sometimes wonder why I do any of this.  I even have a &lt;a href=&quot;https://desmondrivet.com/2020/04/28/writing-reasons&quot;&gt;blog entry about
it&lt;/a&gt;.  The essential conclusion reached in that article - that blogging
is just &lt;em&gt;fun&lt;/em&gt; - is as true as it ever was.&lt;/p&gt;
&lt;p&gt;Still, though, in the midst of giant platforms like Facebook and Twitter,
there are times when it feels like the whole exercise is pointless.&lt;/p&gt;
&lt;p&gt;And then I read about how Elon Musk is buying Twitter, with the attendant
fuss over what that might mean, and I&#39;m suddenly more grateful than ever for
having my own space on the Web.  Because even if Twitter or Facebook
suddenly disappear, or become unbearable, I&#39;ll still have this space.&lt;/p&gt;
&lt;p&gt;This space is important, if for no other reason than that.&lt;/p&gt;
&lt;p&gt;And I guess I feel grateful that I have a certain amount of technical
experience, and that I&#39;m capable of maintaining a project like this, however
imperfectly.  Not everyone is, which is exactly the reason things like
Facebook and Twitter exist.&lt;/p&gt;
&lt;p&gt;So what does the future look like for this vanity project I call my home on
the web?  Probably much like it does now, I suspect, aside from the
occasional (amateurish) face lift.  I imagine I&#39;ll be posting random stuff
online for as long as there&#39;s a web to post to.&lt;/p&gt;
&lt;p&gt;Call it pride, but this space will likely always be around in some form or
another.  At this point, it&#39;s become a part of my identity - part of how I
see myself.  I suppose there are worse things.&lt;/p&gt;
&lt;p&gt;I wonder what the thirtieth anniversary post will look like?&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>Prohibition Was a Constitutional Amendment</title>
    <link href="https://desmondrivet.com/2022/05/04/constitutional-amendment"/>
    <updated>2022-05-05T01:23:30Z</updated>
    <id>https://desmondrivet.com/2022/05/04/constitutional-amendment</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;It always amazes me to think that Prohibition in the U.S. was implemented
via a Constitutional amendment, as was its repeal.&lt;/p&gt;
&lt;p&gt;In my head I think of a Constitution as a country&#39;s legal axioms - the
foundation of its law system.  From this perspective it makes sense that the
prohibition of alcohol, having no Constitutional basis, had to be passed by
adding another axiom.  And when people realized that this was just a bad
idea, it makes sense that getting rid of it required adding yet another
axiom.  It&#39;s funny, when you think about it, like a big legal &amp;quot;oops!&amp;quot; that
you can&#39;t erase.&lt;/p&gt;
&lt;p&gt;But it&#39;s also intensely disquieting, because it means that you can pass what
amounts to an unconstitutional law just changing the definition of
&amp;quot;constitutional&amp;quot;.  Is banning alcohol unconstitutional?  No problem!  Amend
your constitution to allow it.  Oh wait, was that a bad idea?  Also no
problem!  Amend your constitution and erase your mistake!&lt;/p&gt;
&lt;p&gt;My greatest fear when Trump became President was that he would find a way
around the two-term limit.  The two-term limit is, after all, a
constitutional amendment.  If you can repeal Prohibition, you can repeal
that.&lt;/p&gt;
&lt;p&gt;And this is part of the reason I&#39;m afraid that the days of legal abortion in
the U.S. may be numbered.  Maybe the Supreme Court will strike down Roe
vs. Wade, and maybe that will render the legality of abortion a question to
be decided by individual states.  But that won&#39;t be good enough for a lot of
pro-lifers.  For them, presumable, nothing short of a nationwide ban will be
enough.&lt;/p&gt;
&lt;p&gt;And if you can ban alcohol nationwide, you can ban abortions nationwide.&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>Receiving and Displaying Webmentions in Eleventy</title>
    <link href="https://desmondrivet.com/2022/04/25/receiving-webmentions"/>
    <updated>2022-04-25T12:37:06Z</updated>
    <id>https://desmondrivet.com/2022/04/25/receiving-webmentions</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;Webmentions are the way &lt;a href=&quot;https://desmondrivet.com/2020/04/04/indieweb-conversation&quot;&gt;people have conversations on the Indieweb&lt;/a&gt;, but
integrating them - or, indeed, any kind of dynamic content - into a static
site can be a little tricky.  Luckily, many people have run into this issue
before and so there wasn&#39;t much for me to do but steal.&lt;/p&gt;
&lt;p&gt;To be clear, I&#39;m talking about &lt;em&gt;receiving&lt;/em&gt; and &lt;em&gt;displaying&lt;/em&gt; webmentions
here, not &lt;em&gt;sending&lt;/em&gt; them.  How I ended up sending them will be a separate
topic, as it is tied into how I manage &lt;a href=&quot;https://indieweb.org/POSSE&quot;&gt;POSSE&lt;/a&gt; and &lt;a href=&quot;https://indieweb.org/backfeed&quot;&gt;backfeeding&lt;/a&gt; on
my site.&lt;/p&gt;
&lt;p&gt;The previous, pelican-based incarnation of my blog used a &lt;a href=&quot;https://github.com/drivet/webmention-git-server&quot;&gt;homegrown
system&lt;/a&gt; involving a webmention listener that handed off data to a
&lt;a href=&quot;https://redis.io/&quot;&gt;redis&lt;/a&gt; server and ultimately resulted in a new webmention being
committed to my site&#39;s repo, causing the whole thing to be rebuilt.  It
certainly worked, but it required a fair bit of maintenance.  It also failed
to take into account certain edge cases that I hadn&#39;t previously considered
(like a commentator&#39;s avatar image going missing).&lt;/p&gt;
&lt;p&gt;This prompted me to follow &lt;a href=&quot;https://mxb.dev/&quot;&gt;Max Bock&#39;s&lt;/a&gt; &lt;a href=&quot;https://mxb.dev/blog/using-webmentions-on-static-sites/&quot;&gt;lead&lt;/a&gt; and use
&lt;a href=&quot;https://webmention.io/&quot;&gt;webmention.io&lt;/a&gt; to host all my webmentions.  This has a couple of
advantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The service is easy to use.  You just need to sign up with IndieAuth,
point your webmention endpoint at the site and you&#39;re good to go.&lt;/li&gt;
&lt;li&gt;By default it will cache images from the webmention so that they won&#39;t
break, a feature that I didn&#39;t fully understand I needed when I stated
integrating webmentions into my site.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My webmention integration scheme is effectively almost a complete copy of
Max Bock&#39;s, so it doesn&#39;t make sense to go into too much detail here - just
read his &lt;a href=&quot;https://mxb.dev/blog/using-webmentions-on-static-sites/&quot;&gt;article on the subject&lt;/a&gt;.  I&#39;m basically doing the same thing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I load a webmention cache using &lt;a href=&quot;https://www.11ty.dev/docs/data-global/&quot;&gt;Eleventy&#39;s global data feature&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I read all new webmentions from &lt;a href=&quot;http://webmention.io/&quot;&gt;webmention.io&lt;/a&gt; and merge them into the now
in memory cache.&lt;/li&gt;
&lt;li&gt;I save the cache to disk, but keep a copy in memory.&lt;/li&gt;
&lt;li&gt;I use this cache to display webmentions for the posts of my blog.&lt;/li&gt;
&lt;li&gt;I &lt;a href=&quot;https://mxb.dev/blog/persistent-build-folders-netlify/&quot;&gt;persist the cache&lt;/a&gt; between Netlify builds&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are a couple of things that I still have to do, if I ever get around
to it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Relationships between webmentions are not clear.  For example, if one
webmention is a reply to another one in the context of one of my blog
posts, they both get displayed as independent mentions, with no
indication that there&#39;s a connection between the two.&lt;/li&gt;
&lt;li&gt;If I mention one of my own blog posts, I&#39;ll end up displaying a
webmention for it.  Probably not a great idea.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Displaying Webmentions&lt;/h2&gt;
&lt;p&gt;How one displays webmentions on one&#39;s site is probably a whole topic unto
itself.&lt;/p&gt;
&lt;p&gt;Some people don&#39;t bother differentiating and lump all types of webmentions
into one big bucket.  Others divide it up into different types.&lt;/p&gt;
&lt;p&gt;I mostly fall into the latter category, though from a UI perspective I
haven&#39;t fully settled on how to convey the information.  In any case, for
now, I&#39;ve chosen to group my webmentions into:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Likes&lt;/li&gt;
&lt;li&gt;Reposts&lt;/li&gt;
&lt;li&gt;Bookmarks&lt;/li&gt;
&lt;li&gt;Leftover mentions, which includes replies but also arbitrary mentions
that aren&#39;t so easily classified.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;More To Come&lt;/h2&gt;
&lt;p&gt;I mentioned before that receiving webmentions and sending webmentions were
effectively two different problems, and there are some subtleties to the
latter that really deserve their own article.  I suspect that&#39;s going to be
the next article in this series.  Stay tuned.&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
  
  <entry>
    <title>The Philosophy of TypeScript Enums</title>
    <link href="https://desmondrivet.com/2022/04/11/typescript-enums"/>
    <updated>2022-04-12T00:13:11Z</updated>
    <id>https://desmondrivet.com/2022/04/11/typescript-enums</id>
    <content type="html">
        <![CDATA[ 
        


        ]]>

        &lt;p&gt;I&#39;m a pretty big fan of &lt;a href=&quot;https://www.typescriptlang.org/&quot;&gt;TypeScript&lt;/a&gt;, probably best described as a
statically typed language that transpiles to standard JavaScript.  I&#39;ve
&lt;a href=&quot;https://desmondrivet.com/2018/01/18/static-typing&quot;&gt;written about it&lt;/a&gt; before.&lt;/p&gt;
&lt;p&gt;People who have worked with me in the past may be surprised at my
admiration, given the rancour I occasionally direct at something like the
&lt;a href=&quot;http://www.gwtproject.org/&quot;&gt;Google Web Toolkit (GWT)&lt;/a&gt;, a Java-to-JavaScript transpiler, which to the
casual eye seems to be in a similar vein.&lt;/p&gt;
&lt;p&gt;The similarities, however, are superficial; TypeScript and GWT are quite
different beasts.  Something like GWT is used in web development in order to
&lt;em&gt;avoid&lt;/em&gt; writing JavaScript.  TypeScript, on the other hand, is best viewed
as JavaScript extended with an optional static typing system.  The optional
part is key; in theory, any JavaScript program is also a valid TypeScript
program.  In other words, TypeScript doesn&#39;t try to hide the fact that it&#39;s
merely an enhanced version of JavaScript.&lt;/p&gt;
&lt;p&gt;To put it another way, GWT adopts the attitude that JavaScript is
fundamentally broken and should be avoided in shame, while TypeScript adopts
the attitude that JavaScript is elegant and should be used with pride.&lt;/p&gt;
&lt;p&gt;Granted, the latter attitude is much easier to adopt with the advent of
&lt;a href=&quot;https://en.wikipedia.org/wiki/ECMAScript#6th_Edition_%E2%80%93_ECMAScript_2015&quot;&gt;EcmaScript 6 (ES6)&lt;/a&gt;, the official name of the latest version of
JavaScript.  ES6 fixes most of the shortcomings of previous versions of
JavaScript, many of which are the reasons that GWT became a thing in the
first place.&lt;/p&gt;
&lt;p&gt;Because Java and JavaScript are so different, using GWT comes at the expense
of an &amp;quot;impedance mismatch&amp;quot;.  Although JavaScript comes with arrays,
dictionaries and something resembling classes, these features are nothing
like the analogous features in Java.  Implementing a Java-to-JavaScript
transpiler like GWT means implementing basic constructs like Java-style
classes and specific implementations of things like ArrayLists and
HashMaps - all in JavaScript.&lt;/p&gt;
&lt;p&gt;You don&#39;t have to pull these kinds of shenanigans with a TypeScript
transpiler because TypeScript isn&#39;t pretending to be anything other than a
somewhat safer version of JavaScript.  TypeScript doesn&#39;t provide a
specialized list implementation, for example, because JavaScript (especially
ES6) already gives you perfectly good arrays.  TypeScript&#39;s class construct
maps directly to ES6&#39;s class construct which is, itself, little more than
syntactic sugar over the somewhat more cumbersome ES5 class construct.&lt;/p&gt;
&lt;p&gt;What I&#39;m trying to say is that TypeScript really is just &amp;quot;JavaScript with
types&amp;quot; which is why my hackles go up every time I hear someone describe it
as an attempt to make JavaScript more &amp;quot;Java-like&amp;quot;.  This is criminally
misleading, and misses the point entirely.&lt;/p&gt;
&lt;p&gt;It also cuts right to the core of why I dislike TypeScript enums.&lt;/p&gt;
&lt;h2&gt;Enums in TypeScript&lt;/h2&gt;
&lt;p&gt;TypeScript enums are similar in concept to enums from other languages, but
if all you&#39;ve ever used is JavaScript, the idea might be foreign.  They
provide a convenient, type-safe way to describe a variable who&#39;s value can
only be taken from a constrained list - think of a variable to represent the
day of the week, or the month of the year.&lt;/p&gt;
&lt;p&gt;You define an enum in TypeScript like this:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;enum&lt;/span&gt; DayOfWeek &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    Sunday&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Monday&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Tuesday&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Wednesday&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Thursday&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Friday&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Saturday
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is what&#39;s called a &lt;em&gt;numeric enum&lt;/em&gt;; despite the lack of any visible
numbers, the values of Sunday through Saturday are literally represented by
the numbers 0 through 6.&lt;/p&gt;
&lt;p&gt;The DayOfWeek enum label is usually used as a type, like this:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;doSomethingWithDay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;day&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; DayOfWeek&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
   &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This allows to call the function like this:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token function&quot;&gt;doSomethingWithDay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;DayOfWeek&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Monday&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Writing code like this makes two things clear.  For one thing, while
DayOfWeek is an enum type, it&#39;s really little more than an alias for
&lt;code&gt;number&lt;/code&gt;.  For example, you can call the function like this:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token function&quot;&gt;doSomethingWithDay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And the compiler won&#39;t complain.  Secondly, the values of an enum have a
real, tangible existence in the transiled JavaScript code, and you can
access them like this:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; m &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; DayOfWeek&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Monday&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In other words, an enum is more than just a type; it&#39;s an actual runtime
object that can be manipulated in actual code.  In the above example, the
type of &lt;code&gt;m&lt;/code&gt; would be number (and value of &lt;code&gt;m&lt;/code&gt; would be 1).&lt;/p&gt;
&lt;p&gt;Enums also come in string variants like this:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;enum&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;D&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
   Stuff &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Blah&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
   Foo &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Hello&#39;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is used in basically the same as the numeric variant, except that in a
statement like this:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; m &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Stuff&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The type of &lt;code&gt;m&lt;/code&gt; would be string (and the value of &lt;code&gt;m&lt;/code&gt; would be &#39;Blah&#39;).&lt;/p&gt;
&lt;h2&gt;Philosophical Discomfort&lt;/h2&gt;
&lt;p&gt;Okay, so what&#39;s the problem, exactly?  Why are TypeScript enums weird?  I
mean, it&#39;s kind of hard to imagine that JavaScript developers are unfamiliar
with the idea of a variable that can only hold one of a finite list of
values, so why does this blog entry even exist?&lt;/p&gt;
&lt;p&gt;The objection is more philosophical than anything else, I suppose.  The
fundamental design strategy behind TypeScript is to re-use existing
JavaScript concepts wherever possible.  TypeScript Constructs like imports,
classes, Arrays, Maps, Sets will all be perfectly familiar to any ES6
developer - because they are exactly the same as their JavaScript
counterparts.&lt;/p&gt;
&lt;p&gt;Enums, on the other hand, do not explicitly exist in any version of
JavaScript; they are pure TypeScript constructs.  In that sense they&#39;re a
bit like &lt;a href=&quot;https://www.typescriptlang.org/docs/handbook/interfaces.html&quot;&gt;interfaces&lt;/a&gt;, which also exist purely in the TypeScript realm,
the difference being that, unlike interfaces, which get completely compiled
away from the final, resulting JavaScript, enums very much stay behind.  And
that makes them, in my opinion, somewhat anathema to the entire idea of
TypeScript.  One of the main perks of TypeScript development is that it is
not entirely dissimilar to JavaScript development, and the use of TypeScript
enums undermines that advantage.&lt;/p&gt;
&lt;h2&gt;Practical Considerations&lt;/h2&gt;
&lt;p&gt;Another problem is that enums are awkward for certain use cases that would
&lt;em&gt;seem&lt;/em&gt; to be a natural fit.  Consider the case of a dictionary with a
limited set of strings for keys.  For example, imagine you had a JavaScript
object to represent a number of widgets for each day of the week:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; widgetsPerDay &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Sunday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Monday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Tuesday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Wednesday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Thursday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Friday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Saturday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You&#39;d like to define a type to represent the keys of this object, and you
might think that a vanilla (numeric) enum would do the trick:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;enum&lt;/span&gt; DayOfWeek &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    Sunday&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Monday&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Tuesday&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Wednesday&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Thursday&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Friday&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Saturday
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And you&#39;d be right, but not without some fairly significant syntactic
acrobatics.  For one thing, the enum values are numbers, not strings, so
this doesn&#39;t work the way you might think:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; totalForMonday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; widgetsPerDay&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;DayOfWeek&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Monday&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token builtin&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;totalForMonday&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will print undefined, because we&#39;re actually looking up the total with
a key value of 1, i.e. the value of DayOfWeek.Monday, and there is obviously
no value attached to that key in the widgetsPerDay object.  Making this work
requires looking up the name from the enum object itself, like this:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; mondayKey &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; DayOfWeek&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;DayOfWeek&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Monday&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// mondayKey = &#39;Monday&#39;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; totalForMonday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; widgetsPerDay&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;mondayKey&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token builtin&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;totalForMonday&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This prints the expected 10, but I don&#39;t believe I&#39;m the only one to find
the need to lookup up the value of the key in the enum object somewhat
distasteful.&lt;/p&gt;
&lt;p&gt;You can make all this work somewhat more naturally with a string enum:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;enum&lt;/span&gt; DayOfWeek &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    Sunday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Sunday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Monday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Monday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Tuesday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Tuesday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Wednesday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Wednesday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Thursday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Thursday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Friday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Friday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Saturday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Saturday&#39;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;in which case this statement&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; totalForMonday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; widgetsPerDay&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;DayOfWeek&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Monday&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token builtin&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;totalForMonday&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;will print out the expected 10.  This is, in fact, pretty close to how you&#39;d
write this in a language like, say, Java.  You&#39;d probably define static
string constants in a class somewhere like this:&lt;/p&gt;
&lt;pre class=&quot;language-java&quot;&gt;&lt;code class=&quot;language-java&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DayOfWeek&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Sunday&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Sunday&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Monday&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Monday&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// ...and the rest&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is also probably pretty close to how you would do this in pure
JavaScript.  In ES6, we&#39;d probably just define a file with the key labels
defined as such:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; Sunday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Sunday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; Monday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Monday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// ...and the rest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But...it&#39;s all a bit verbose and redundant, isn&#39;t it?  You&#39;re repeating the
name of the day in the variable and its value.  One might ask why we&#39;re
bothering with this at all.  It&#39;s almost enough to make me want to skip the
enum construct entirely and just do this:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; totalForMonday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; widgetsPerDay&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Monday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;totalForMonday&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Easier, yeah?  And maybe even good enough for this particular case, where
the keys are very constrained and very well-known.  That being said, if the
values of the keys were to suddenly change, you&#39;d be in trouble.  If the
widgetsPerDay object were to suddenly look like this, for example:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; widgetsPerDay &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Sun&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Mon&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Tue&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Wed&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Thu&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Fri&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Sat&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;then this code will fail:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; totalForMonday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; widgetsPerDay&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Monday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;totalForMonday&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You would have to go and change every instance of &#39;Monday&#39; (that was being
used as a key to widgetsPerDay) to &#39;Mon&#39; (and then do the same for all the
other days of the week).  This may or may not be a big deal depending on how
often you&#39;re using the key.  The desire to avoid this and to protect
yourself from such a possibility is what leads us to the apparent verbosity
of the other solutions.  If you were to use a string enum, all you would
have to do is redefine the values like this:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;enum&lt;/span&gt; DayOfWeek &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    Sunday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Sun&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Monday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Mon&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Tuesday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Tue&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Wednesday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Wed&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Thursday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Thu&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Friday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Fri&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Saturday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Sat&#39;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And nothing else needs to change, as long as the keys are always referenced
via the enum.  The apparent redundancy, as it turns out, buys us a certain
amount of future-proofing.&lt;/p&gt;
&lt;h2&gt;Alternatives to Enums&lt;/h2&gt;
&lt;p&gt;A lot of people associate the concept of &amp;quot;static typing&amp;quot; with Java or C++
and that is a shame because the static typing in those languages is pretty
toothless compared to TypeScript (or, really, any modern, statically typed
language).  So it may surprise you to discover that you can actually reap a
lot of the benefits of enums in a language like TypeScript without ever
typing the word &amp;quot;enum&amp;quot; - albeit, sometimes with the help of a halfway decent
IDE.&lt;/p&gt;
&lt;p&gt;For example, let&#39;s revisit the widgetsPerDay object:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; widgetsPerDay &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Sunday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Monday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Tuesday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Wednesday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Thursday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Friday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Saturday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On a very general level, widgetsPerDay is a dictionary where the keys are
strings and the values are integers.  This is readily represented as a type
in TypeScript:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;WidgetsPerDay&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;day&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We can do better, though.  The type, as defined, allows any string as a key,
which isn&#39;t technically correct; we know that only certain strings are
allowed.  So we can restrict the keys to certain strings by making a type to
represent the keys:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DaysOfWeek&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; 
    &lt;span class=&quot;token string&quot;&gt;&#39;Sunday&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; 
    &lt;span class=&quot;token string&quot;&gt;&#39;Monday&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; 
    &lt;span class=&quot;token string&quot;&gt;&#39;Tuesday&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; 
    &lt;span class=&quot;token string&quot;&gt;&#39;Wednesday&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; 
    &lt;span class=&quot;token string&quot;&gt;&#39;Thursday&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; 
    &lt;span class=&quot;token string&quot;&gt;&#39;Friday&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; 
    &lt;span class=&quot;token string&quot;&gt;&#39;Saturday&#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;DaysOfWeek isn&#39;t an enum.  It&#39;s still a string type, but of a special kind;
a string that can only take on very specific values.  We can use it to
define our WidgetsPerDay type:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;WidgetsPerDay&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;day&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; DaysOfWeek&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can then write code like this:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; widgetsOnTuesday &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; widgetsPerDay&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Tuesday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and if you have a relatively modern IDE like IntelliJ or VS Code, you&#39;ll get
code completion when you start typing &#39;Tuesday&#39; as the key.  Generally,
these editors are smart enough to know when they&#39;re dealing with a
TypeScript type and act accordingly.&lt;/p&gt;
&lt;p&gt;In addition, if you try and do something silly like this:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; widgetsPerDay&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; WidgetsPerDay &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Sunday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Monday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Tuesday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Wednesday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Thursday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Friday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string-property property&quot;&gt;&#39;Saturday&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; widgetsOnBlatherDay &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; widgetPerDay&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;Blather&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;the compiler will bark at you as well.&lt;/p&gt;
&lt;p&gt;To me, at least, this feels a lot more organic than an artificial,
TypeScript-only enum construct.  The type statements will get compiled out
of the resulting JavaScript, and all that&#39;s left is code that probably looks
similar to code you would have written in JavaScript anyway.&lt;/p&gt;
&lt;p&gt;TypeScript even lets us do clever things like defining a type from the
values in an array:&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; daysOfWeek &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&#39;Sunday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&#39;Monday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&#39;Tuesday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&#39;Wednesday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
    &lt;span class=&quot;token string&quot;&gt;&#39;Thursday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&#39;Friday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&#39;Saturday&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DaysOfWeek&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt; daysOfWeek&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Of course, you still technically have a problem if you want to change the
values of the keys.  If you want the days of the week to look like this
instead, for example&lt;/p&gt;
&lt;pre class=&quot;language-typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;DaysOfWeek&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; 
    &lt;span class=&quot;token string&quot;&gt;&#39;Sun&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; 
    &lt;span class=&quot;token string&quot;&gt;&#39;Mon&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; 
    &lt;span class=&quot;token string&quot;&gt;&#39;Tue&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; 
    &lt;span class=&quot;token string&quot;&gt;&#39;Wed&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; 
    &lt;span class=&quot;token string&quot;&gt;&#39;Thu&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; 
    &lt;span class=&quot;token string&quot;&gt;&#39;Fri&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; 
    &lt;span class=&quot;token string&quot;&gt;&#39;Sat&#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;then you&#39;re still stuck with changing every instance of &amp;quot;Tuesday&amp;quot; to &amp;quot;Tue&amp;quot; -
&lt;em&gt;unless&lt;/em&gt;, of course, you are using one of the aforementioned modern,
TypeScript-aware IDEs, which can do it for you.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Part of the reason I like TypeScript is that, for the most part, it doesn&#39;t
add an extra layer on top of JavaScript, except for the typing.  So when I
see something like enums being added to the language as a completely new
&lt;em&gt;runtime&lt;/em&gt; concept, I get suspicious.&lt;/p&gt;
&lt;p&gt;Instead, you can create something that acts very much like an enum using
nothing but static typing tricks, and if you use a halfway decent IDE,
you&#39;ll get all of the benefits without any of the weird residual, runtime
artifacts.&lt;/p&gt;
&lt;p&gt;I guess the moral of the story is that you should use an IDE? Especially if
you&#39;re using a statically typed language.  I have &lt;a href=&quot;https://desmondrivet.com/2018/01/18/static-typing&quot;&gt;written about&lt;/a&gt; that
subject before, but enums, for me, just drives home the point.  I know a lot
of software developers are too young to remember the static versus dynamic
typing debates, but static typing really does seem to have the edge here.&lt;/p&gt;
&lt;p&gt;For me, at least. Your mileage may vary.  I&#39;m not one to tell you can&#39;t put
pineapple on your pizza :-)&lt;/p&gt;


        <![CDATA[
        

        

        
        ]]>
    </content>
  </entry>
</feed>
