summaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorRuss Allbery <rra@cpan.org>2021-09-09 21:51:10 -0700
committerRuss Allbery <rra@cpan.org>2021-09-09 21:58:08 -0700
commit5ef33789b16f7f0a8049394d348f19377358da67 (patch)
treeb76444284d708ebb8c6aa8460e28d4a2524b9a8c /t
parentf10136446102ccd9159ee3d40168ea99dca97301 (diff)
Rework spin-rss as a module
Rename spin-rss to App::DocKnot::Spin::RSS, add an API, and update the documentation accordingly. Call App::DocKnot::Spin::Thread instead of running spin. Add a basic test for RSS and thread generation from .rss files. Call the new module instead of spin-rss from App::DocKnot::Spin. This has a few horrible hacks to deal with the working directory of thread spinning that will need a better solution later.
Diffstat (limited to 't')
-rwxr-xr-xt/cli/spin.t28
-rw-r--r--t/data/generate/docknot/output/thread2
-rw-r--r--t/data/perl.conf12
-rw-r--r--t/data/spin/input/.rss474
-rw-r--r--t/data/spin/input/journal/.navbar212
-rw-r--r--t/data/spin/input/journal/.rss39
-rw-r--r--t/data/spin/output/changes.html558
-rw-r--r--t/data/spin/output/changes.rss161
-rw-r--r--t/data/spin/output/journal/debian.rss381
-rw-r--r--t/data/spin/output/journal/index.html807
-rw-r--r--t/data/spin/output/journal/index.rss520
-rw-r--r--t/data/spin/output/journal/reviews.rss154
-rw-r--r--t/lib/Test/DocKnot/Spin.pm5
-rwxr-xr-xt/spin/tree.t74
14 files changed, 3388 insertions, 39 deletions
diff --git a/t/cli/spin.t b/t/cli/spin.t
index 00e2458..2f46d62 100755
--- a/t/cli/spin.t
+++ b/t/cli/spin.t
@@ -13,8 +13,10 @@ use warnings;
use lib 't/lib';
use Capture::Tiny qw(capture_stdout);
-use File::Temp;
-use File::Spec;
+use Cwd qw(getcwd);
+use File::Copy::Recursive qw(dircopy);
+use File::Spec ();
+use File::Temp ();
use Test::RRA qw(is_file_contents);
use Test::DocKnot::Spin qw(is_spin_output is_spin_output_tree);
@@ -47,11 +49,29 @@ print {$output_fh} $stdout or BAIL_OUT("Cannot write to $output: $!");
close($output_fh);
is_spin_output($output, $expected, 'spin-thread (standard output)');
+# Copy the input tree to a new temporary directory since .rss files generate
+# additional thread files. Replace the rpod pointer since it points to a
+# relative path in the source tree.
+my $indir = File::Temp->newdir();
+$input = File::Spec->catfile($datadir, 'input');
+dircopy($input, $indir->dirname)
+ or die "Cannot copy $input to $indir: $!\n";
+my $rpod_source = File::Spec->catfile(getcwd(), 'lib', 'App', 'DocKnot.pm');
+my $rpod_path = File::Spec->catfile(
+ $indir->dirname, 'software', 'docknot', 'api',
+ 'app-docknot.rpod',
+);
+open(my $fh, '>', $rpod_path);
+print {$fh} "$rpod_source\n" or die "Cannot write to $rpod_path: $!\n";
+close($fh);
+
# Spin a tree of files.
-$input = File::Spec->catfile($datadir, 'input');
$expected = File::Spec->catfile($datadir, 'output');
capture_stdout {
- $docknot->run('spin', '-s', '/~eagle/styles', $input, $tempdir->dirname);
+ $docknot->run(
+ 'spin', '-s', '/~eagle/styles', $indir->dirname,
+ $tempdir->dirname,
+ );
};
my $count = is_spin_output_tree($tempdir->dirname, $expected, 'spin');
diff --git a/t/data/generate/docknot/output/thread b/t/data/generate/docknot/output/thread
index cb8c5d0..839d688 100644
--- a/t/data/generate/docknot/output/thread
+++ b/t/data/generate/docknot/output/thread
@@ -191,7 +191,7 @@ license:
\block[
- Copyright 1999-2011, 2013-2021
+ Copyright 1999-2021
Russ Allbery <rra@cpan.org>
Permission is hereby granted, free of charge, to any person obtaining
diff --git a/t/data/perl.conf b/t/data/perl.conf
index 3c4adcc..d46848e 100644
--- a/t/data/perl.conf
+++ b/t/data/perl.conf
@@ -5,10 +5,20 @@
# SPDX-License-Identifier: MIT
# The level of coverage achieved by the test suite.
-$COVERAGE_LEVEL = 85;
+$COVERAGE_LEVEL = 75;
# Default minimum version requirement.
$MINIMUM_VERSION = '5.024';
+# Ignore App::DocKnot::Spin:RSS for now.
+@CRITIC_IGNORE = qw(blib/lib/App/DocKnot/Spin/RSS.pm);
+
+# Additional regexes that match methods that should be considered private and
+# therefore don't have to be documented in POD coverage.
+@POD_COVERAGE_EXCLUDE = (
+ qr{ \A ( intersect | absolute_url | relative_url | parse_changes ) \z }xms,
+ qr{ \A ( xml_escape | rss_ .* | thread_output | index_ .* ) \z }xms,
+);
+
# File must end with this line.
1;
diff --git a/t/data/spin/input/.rss b/t/data/spin/input/.rss
new file mode 100644
index 0000000..c304c7a
--- /dev/null
+++ b/t/data/spin/input/.rss
@@ -0,0 +1,474 @@
+Base: https://www.eyrie.org/~eagle/
+RSS-Base: https://www.eyrie.org/~eagle/
+Title: Changes to Russ Allbery's Web Pages
+Description: Recent changes to Russ Allbery's web pages.
+Language: en-us
+Output: *:thread:changes.th *:rss:changes.rss
+Thread-Prefix:
+ \rss[changes.rss][Changes to Russ Allbery's Web Pages]
+ .
+ \heading[Recent Changes][indent]
+ .
+ \h1[Recent Changes]
+ .
+ \quote(broken)[
+ Put up in a place
+ where it's easy to see
+ the cryptic admonishment
+ T.T.T.
+ When you feel how depressingly
+ slowly you climb,
+ it's well to remember that
+ Things Take Time.
+ ][Piet Hein][]
+ .
+ This page lists all recent changes to my web site except for new
+ \link[journal/][journal entries], along with a brief description. Some
+ of this information will be repeated in my journal, but more minor
+ changes will only be noted here. An \class(feed)[\link[changes.rss]
+ [\image[journal/feed.png][]] \link[changes.rss][RSS feed]] of this
+ information is also available.
+ .
+ Also see changes from \link[changes/2020.html][2020],
+ \link[changes/2019.html][2019], \link[changes/2018.html][2018],
+ \link[changes/2017.html][2017], \link[changes/2016.html][2016],
+ \link[changes/2015.html][2015], \link[changes/2014.html][2014],
+ \link[changes/2013.html][2013], \link[changes/2012.html][2012],
+ \link[changes/2011.html][2011], \link[changes/2010.html][2010],
+ \link[changes/2009.html][2009], and \link[changes/2008.html][2008].
+
+Date: 2021-08-30 21:25
+Title: kstart 4.3
+Link: software/kstart/
+Description:
+ Add support for kafs by continuing with -t behavior if kafs is present.
+ Use libkeyutils if available to isolate a command's keyring from the
+ invoking program if running a specific command with -t. Use a better
+ exit status when a command is killed with a signal. Use explicit_bzero
+ to clear the password for k5start -s. Other portability fixes and
+ updates.
+
+Date: 2021-08-18 21:30
+Title: Review: The Past is Red
+Link: reviews/books/1-250-30112-2.html
+Description: Review of The Past is Red by Catherynne M. Valente.
+
+Date: 2021-08-16 20:58
+Title: Review: Black Sun
+Link: reviews/books/1-5344-3769-X.html
+Description: Review of Black Sun by Rebecca Roanhorse.
+
+Date: 2021-08-15 19:21
+Title: Review: The Galaxy, and the Ground Within
+Link: reviews/books/0-06-293605-0.html
+Description: Review of The Galaxy, and the Ground Within by Becky Chambers.
+
+Date: 2021-08-08 19:39
+Title: Review: The Last Battle
+Link: reviews/books/0-02-044210-6.html
+Description: Review of The Last Battle by C.S. Lewis.
+
+Date: 2021-08-07 17:24
+Title: Broken link cleanup
+Link: /
+Description:
+ Another periodic cleanup of broken links.
+
+Date: 2021-08-01 21:12
+Title: Review: Piranesi
+Link: reviews/books/1-63557-564-8.html
+Description: Review of Piranesi by Susanna Clarke.
+
+Date: 2021-07-31 21:26
+Title: Review: Fugitive Telemetry
+Link: reviews/books/1-250-76538-2.html
+Description: Review of Fugitive Telemetry by Martha Wells.
+
+Date: 2021-07-24 08:23
+Title: Add finalists for the World Fantasy Award
+Link: reviews/awards.html
+Description:
+ Add the finalists for the 2021 World Fantasy Award for best novel.
+
+Date: 2021-07-24 08:22
+Title: Broken link cleanup
+Link: /
+Description:
+ Another periodic cleanup of broken links.
+
+Date: 2021-07-03 17:21
+Title: Add Clarke Award nominees and Locus Award Winners
+Link: reviews/awards.html
+Description:
+ Add the nominees for the 2021 Arthur C. Clarke Award, and the winners of
+ the 2021 Locus Awards (Network Effect by Martha Wells for best SF novel,
+ The City We Became by N.K. Jemisin for best fantasy novel, and Elatsoe by
+ Darcie Little Badger for best first novel).
+
+Date: 2021-06-27 19:55
+Title: control-archive 1.9.1
+Link: software/control-archive/
+Description:
+ A data-only release that updates the Big Eight control signing key and
+ removes some obsolete information about net.*.
+
+Date: 2021-06-27 15:23
+Title: Added web page for Big Eight control information
+Link: big-8/
+Description:
+ New web page summarizing control information for the Big Eight
+ hierarchies with links to the control message signing keys and the PGP
+ Moose key.
+
+Date: 2021-06-20 20:57
+Title: Review: Demon Lord of Karanda
+Link: reviews/books/0-345-36331-0.html
+Description: Review of Demon Lord of Karanda by David Eddings.
+
+Date: 2021-06-19 21:03
+Title: Review: The Magician's Nephew
+Link: reviews/books/0-02-044230-0.html
+Description: Review of The Magician's Nephew by C.S. Lewis.
+
+Date: 2021-06-06 21:56
+Title: Review: Stoneskin
+Link: reviews/books/stoneskin.html
+Description: Review of Stoneskin by K.B. Spangler.
+
+Date: 2021-06-05 20:18
+Title: Add winner of 2021 Nebula Award for best novel
+Link: reviews/awards.html
+Description:
+ Add the winner of the 2021 Nebula Award for best novel (Network Effect by
+ Martha Wells).
+
+Date: 2021-06-05 19:37
+Title: Broken link cleanup
+Link: /
+Description:
+ Another periodic cleanup of broken links.
+
+Date: 2021-05-31 21:14
+Title: Review: The Horse and His Boy
+Link: reviews/books/0-02-044200-9.html
+Description: Review of The Horse and His Boy by C.S. Lewis.
+
+Date: 2021-05-30 22:40
+Title: Review: The Relentless Moon
+Link: reviews/books/1-250-23648-7.html
+Description: Review of The Relentless Moon by Mary Robinette Kowal.
+
+Date: 2021-05-29 22:53
+Title: Review: The Silver Chair
+Link: reviews/books/0-02-044250-5.html
+Description: Review of The Silver Chair by C.S. Lewis.
+
+Date: 2021-05-29 20:51
+Title: Broken link cleanup
+Link: /
+Description:
+ Another periodic cleanup of broken links.
+
+Date: 2021-05-15 21:16
+Title: Review: A Desolation Called Peace
+Link: reviews/books/1-250-18648-X.html
+Description: Review of A Desolation Called Peace by Arkady Martine.
+
+Date: 2021-05-02 20:03
+Title: Review: The Voyage of the Dawn Treader
+Link: reviews/books/0-02-044260-2.html
+Description: Review of The Voyage of the Dawn Treader by C.S. Lewis.
+
+Date: 2021-04-27 20:10
+Title: Review: Beyond Shame
+Link: reviews/books/beyond-shame.html
+Description: Review of Beyond Shame by Kit Rocha.
+
+Date: 2021-04-24 22:15
+Title: Review: Learning React
+Link: reviews/books/1-4920-5172-1.html
+Description: Review of Learning React by Alex Banks & Eve Porcello.
+
+Date: 2021-04-24 22:12
+Title: Add nominees for the 2021 Hugo Award
+Link: reviews/awards.html
+Description:
+ Add the nominees for the 2021 Hugo Award for best novel.
+
+Date: 2021-04-10 19:24
+Title: Broken link cleanup
+Link: /
+Description:
+ Another periodic cleanup of broken links.
+
+Date: 2021-04-05 18:59
+Title: Add 2021 winner of the BSFA award
+Link: reviews/awards.html
+Description:
+ Add 2021 winner of the BSFA award for best novel (The City We Became, by
+ N.K. Jemisin).
+
+Date: 2021-04-05 18:56
+Title: Add 2021 winner of the Philip K. Dick Award
+Link: reviews/awards.html
+Description:
+ Add 2021 winner of the Philip K. Dick Award for best novel (The Road out
+ of Winter, by Alison Stine).
+
+Date: 2021-04-03 19:21
+Title: Review: Prince Caspian
+Link: reviews/books/0-02-044240-8.html
+Description: Review of Prince Caspian by C.S. Lewis.
+
+Date: 2021-03-30 22:53
+Title: Review: Paladin's Strength
+Link: reviews/books/paladins-strength.html
+Description: Review of Paladin's Strength by T. Kingfisher.
+
+Date: 2021-03-29 10:11
+Title: Add series information to Paladin's Grace
+Link: reviews/books/paladins-grace.html
+Description:
+ Paladin's Grace by T. Kingfisher is the first of a series. Add the
+ series information and a mention of the sequel.
+
+Date: 2021-03-28 21:55
+Title: Review: JavaScript: The Definitive Guide
+Link: reviews/books/1-4919-5202-4.html
+Description: Review of JavaScript: The Definitive Guide by David Flanagan.
+
+Date: 2021-03-28 17:07
+Title: Add sample INN init script and systemd unit file
+Link: software/inn/
+Description:
+ In the documentation pages for INN CURRENT, 2.6, and 2.5, add the sample
+ init script and systemd unit.
+
+Date: 2021-03-28 09:21
+Title: Pod::Thread 2.00
+Link: software/pod-thread/
+Description:
+ Handle the navbar and table of contents internally in the module rather
+ than via a pre-scanning pass. Honor CVS Id strings found anywhere in the
+ document. Don't title-case words in section titles in the navbar that
+ contain an underscore.
+
+Date: 2021-03-21 19:58
+Title: cvs2xhtml 1.15
+Link: software/web/
+Description:
+ Convert to Python 3. Update my email address.
+
+Date: 2021-03-21 19:57
+Title: cl2xhtml 1.12
+Link: software/web/
+Description:
+ Convert to Python 3. Update my email address.
+
+Date: 2021-03-21 19:56
+Title: faq2html 1.36
+Link: software/web/
+Description:
+ Support formatting of dense bullet lists with line continuations but no
+ blank lines between bullets. Update my email address.
+
+Date: 2021-03-21 19:03
+Title: Remove DocKnot from my personal Debian repository list
+Link: software/debian.html
+Description: DocKnot has now been uploaded to Debian proper.
+
+Date: 2021-03-21 18:57
+Title: Add separate web pages for Pod::Thread
+Link: software/pod-thread/
+Description:
+ As the first step in cleaning up my static site generator pages, and in
+ prepration for uploading it to CPAN in its own right, move Pod::Thread to
+ its own separate web pages.
+
+Date: 2021-03-20 13:35
+Title: pam-krb5 4.10
+Link: software/pam-krb5/
+Description:
+ Fix use-after-free if krb5_cc_get_principal fails on the newly-created
+ ticket cache.
+
+Date: 2021-03-20 13:16
+Title: rra-c-util 9.0
+Link: software/rra-c-util/
+Description:
+ Rename SQLite Autoconf macros and their outputs from SQLITE to SQLITE3.
+ Fix support for optional libraries. Rename KRB5_CPPFLAGS_GCC to
+ KRB5_CPPFLAGS_WARNINGS. Stop defining AM_CONDITIONAL in Autoconf
+ macros. Check for working Kerberos headers as well as libraries. Add C
+ stubs for sd_notify and sd_notifyf and a preprocessor stub for
+ sd_is_socket. Fix portable/sd-daemon.h to include prerequisite headers.
+ Fix RRA_PROG_PYTHON with Python 3.0 and older Python 2.x versions. Fix
+ problems with the util/fdflag test. Use AS_ECHO where possible. Fix
+ perlcritic with YAML::XS.
+
+Date: 2021-03-20 11:38
+Title: Clean GnuPG key
+Link: personal/contact.html
+Description:
+ Refresh the expiration on my signing key and re-export my key with the
+ export-clean flag, which cleans up a bunch of duplicate and expired
+ signatures.
+
+Date: 2021-03-20 09:36
+Title: Add nominees for 2021 Nebula Award for best novel
+Link: reviews/awards.html
+Description:
+ Add the nominees for the 2021 Nebula Award for best novel.
+
+Date: 2021-03-14 11:03
+Title: New experimental Big Eight control message signing key
+Link: journal/2021-03/001.html
+Description:
+ Published a new experimental signing key for Big Eight control messages
+ that was generated with a modern GnuPG.
+
+Date: 2021-03-13 09:17
+Title: Add 2020 British Fantasy Award winner
+Link: reviews/awards.html
+Description:
+ Add winner of the 2020 British Fantasy Robert Holdstock Award for best
+ fantasy novel (The Bone Ships, by RJ Barker).
+
+Date: 2021-03-01 19:36
+Title: Review: The Lion, the Witch and the Wardrobe
+Link: reviews/books/0-02-044220-3.html
+Description: Review of The Lion, the Witch and the Wardrobe by C.S. Lewis.
+
+Date: 2021-02-28 19:29
+Title: Review: Architects of Memory
+Link: reviews/books/1-250-21546-3.html
+Description: Review of Architects of Memory by Karen Osborne.
+
+Date: 2021-02-27 13:11
+Title: DocKnot 4.01
+Link: software/docknot/
+Description:
+ Add support for a global user configuration file. Allow the distribution
+ directory to be specified in it. Add support for GnuPG signing of
+ generated tarballs. Fix docknot --help. Remove the obsolete
+ load_appdata_json helper. Fix some documentation bugs left over from the
+ 4.00 release.
+
+Date: 2021-02-21 20:06
+Title: Review: Finder
+Link: reviews/books/0-7564-1511-X.html
+Description: Review of Finder by Suzanne Palmer.
+
+Date: 2021-02-20 20:43
+Title: Review: The Fated Sky
+Link: reviews/books/0-7653-9893-1.html
+Description: Review of The Fated Sky by Mary Robinette Kowal.
+
+Date: 2021-02-17 21:19
+Title: Review: Solutions and Other Problems
+Link: reviews/books/1-9821-5694-5.html
+Description: Review of Solutions and Other Problems by Allie Brosh.
+
+Date: 2021-02-14 20:35
+Title: Review: Spheres of Influence
+Link: reviews/books/1-4516-3937-6.html
+Description: Review of Spheres of Influence by Ryk E. Spoor.
+
+Date: 2021-02-14 19:20
+Title: Add winner of 2020 Mythopoeic Award
+Link: reviews/mythopoeic.html
+Description:
+ Add the winner of the (delayed) 2020 Mythopoeic Fantasy Award for Adult
+ Literature (Snow White Learns Witchcraft, by Theodora Goss).
+
+Date: 2021-02-13 09:53
+Title: Broken link cleanup
+Link: /
+Description:
+ Another periodic cleanup of broken links.
+
+Date: 2021-02-07 19:31
+Title: Review: The Future of Another Timeline
+Link: reviews/books/0-7653-9212-7.html
+Description: Review of The Future of Another Timeline by Annalee Newitz.
+
+Date: 2021-02-01 20:57
+Title: Remove changes from December 2020
+Link: changes.html
+Description: Remove the changes from December 2020 from the recent changes
+ page.
+
+Date: 2021-01-30 15:12
+Title: Broken link cleanup
+Link: /
+Description:
+ Another periodic cleanup of broken links.
+
+Date: 2021-01-28 22:23
+Title: INN 2.6.4
+Link: software/inn/
+Description:
+ Added support for systemd notifications and socket activation. Adapt the
+ length of the DH parameter during DHE key exchanges in nnrpd. Return
+ information about retired CNFS buffers from cnfsstat. Externalize the
+ CSS information from generated innreport reports. Support storing wire
+ format articles with sm. Add a flag to rnews to disallow additional
+ unpackers, a flag to save rejected articles, and a flag to log the
+ message ID of duplicate articles. Add a compile-time option to enable
+ hardening flags.
+
+Date: 2021-01-26 20:12
+Title: Review: A Deadly Education
+Link: reviews/books/0-593-12849-4.html
+Description: Review of A Deadly Education by Naomi Novik.
+
+Date: 2021-01-25 20:11
+Title: Review: The City We Became
+Link: reviews/books/0-316-50985-X.html
+Description: Review of The City We Became by N.K. Jemisin.
+
+Date: 2021-01-24 21:00
+Title: Review: Laziness Does Not Exist
+Link: reviews/books/1-9821-4013-5.html
+Description: Review of Laziness Does Not Exist by Devon Price.
+
+Date: 2021-01-18 20:00
+Title: Review: The Secret Barrister
+Link: reviews/books/1-5098-4115-6.html
+Description: Review of The Secret Barrister by The Secret Barrister.
+
+Date: 2021-01-04 22:13
+Title: Update some blog roll links
+Link: journal/
+Description:
+ Update URL to Nicola Griffith's blog, and switch Karl Schroeder's blog to
+ https.
+
+Date: 2021-01-03 18:49
+Title: Review: The Once and Future Witches
+Link: reviews/books/0-316-42202-9.html
+Description: Review of The Once and Future Witches by Alix E. Harrow.
+
+Date: 2021-01-01 19:01
+Title: Update award winners
+Link: reviews/awards.html
+Description:
+ Add links to all award pages that have good award web sites. Add notes
+ where the 2020 award was canceled or delayed. Add the winner of the 2020
+ Prix Aurora Award for best adult novel (The Gossamer Mage by Julie
+ E. Czerneda) and the Sunburst award for adults (Gods of Jade and Shadow
+ by Silvia Moreno-Garcia).
+
+Date: 2021-01-01 13:53
+Title: Rotate 2020 changes
+Link: changes/2020.html
+Description:
+ Move all web site changes from 2020 to a separate page and remove all
+ entries older than December of 2020 from the current changes page.
+
+Date: 2021-01-01 11:12
+Title: 2020 reading in review
+Link: reviews/year/2020.html
+Description:
+ Add an overview of my 2020 reading, main book recommendations, and
+ reading statistics.
diff --git a/t/data/spin/input/journal/.navbar b/t/data/spin/input/journal/.navbar
new file mode 100644
index 0000000..7f1b7ee
--- /dev/null
+++ b/t/data/spin/input/journal/.navbar
@@ -0,0 +1,212 @@
+\==[archive] [2] [\link[/~eagle/journal/\1][\2]]
+\==[feed] [2]
+ [\class(feed)[\link[/~eagle/journal/\1]
+ [\image[/~eagle/journal/feed.png][RSS]]
+ \link[/~eagle/journal/\1][\2]\break]]
+
+\div(sidebar)[
+ \h2[Syndication]
+
+ \feed[index.rss] [All posts]
+ \feed[reviews.rss] [Only reviews]
+ \feed[software.rss] [Only software releases]
+ \feed[debian.rss] [Debian-focused]
+ \feed[../changes.rss] [Web site changes]
+ \class(feed)[DW:
+ \link[https://eaglespath-feed.dreamwidth.org/]
+ [\image[/~eagle/journal/feed.png][]]
+ \link[https://eaglespath-feed.dreamwidth.org/][eaglespath_feed]] \break
+
+ \h2[Comments]
+
+ This journal does not support comments.
+ \link[/~eagle/faqs/comments.html][Read why].
+
+ \h2[Archives]
+
+ \div(archives)[
+ \class(text)[
+ Book and magazine reviews are not included in the journal
+ archives. For older book reviews, see
+ \link[/~eagle/reviews/date.html][all book reviews sorted by
+ date] and \link[/~eagle/reviews/magazines.html][all magazine
+ reviews].
+ ]
+
+ 2021:
+ \archive[2021-01/][01] \archive[2021-02/][02] \archive[2021-03/][03]
+ \archive[2021-04/][04] \archive[2021-05/][05] \archive[2021-06/][06]
+ \archive[2021-07/][07] \archive[2021-08/][08]
+
+ 2020:
+ \archive[2020-01/][01] \archive[2020-02/][02] \archive[2020-03/][03]
+ \archive[2020-04/][04] \archive[2020-05/][05] \archive[2020-06/][06]
+ \archive[2020-07/][07] \archive[2020-08/][08] \archive[2020-09/][09]
+ \archive[2020-10/][10] \archive[2020-11/][11] \archive[2020-12/][12]
+
+ 2019:
+ \archive[2019-01/][01] \archive[2019-02/][02] \archive[2019-03/][03]
+ \archive[2019-04/][04] \archive[2019-05/][05] \archive[2019-06/][06]
+ \archive[2019-07/][07] \archive[2019-08/][08] \archive[2019-09/][09]
+ \archive[2019-10/][10] \archive[2019-11/][11] \archive[2019-12/][12]
+
+ 2018:
+ \archive[2018-01/][01] \archive[2018-02/][02] \archive[2018-03/][03]
+ \archive[2018-04/][04] \archive[2018-05/][05] \archive[2018-06/][06]
+ \archive[2018-07/][07] \archive[2018-08/][08] \archive[2018-09/][09]
+ \archive[2018-10/][10] 11 \archive[2018-12/][12]
+
+ 2017:
+ \archive[2017-01/][01] \archive[2017-02/][02] \archive[2017-03/][03]
+ \archive[2017-04/][04] \archive[2017-05/][05] \archive[2017-06/][06]
+ \archive[2017-07/][07] 08 \archive[2017-09/][09]
+ \archive[2017-10/][10] \archive[2017-11/][11] \archive[2017-12/][12]
+
+ 2016:
+ \archive[2016-01/][01] \archive[2016-02/][02] \archive[2016-03/][03]
+ \archive[2016-04/][04] \archive[2016-05/][05] 06
+ \archive[2016-07/][07] \archive[2016-08/][08] \archive[2016-09/][09]
+ \archive[2016-10/][10] \archive[2016-11/][11] \archive[2016-12/][12]
+
+ 2015:
+ \archive[2015-01/][01] 02 \archive[2015-03/][03]
+ \archive[2015-04/][04] \archive[2015-05/][05] 06
+ \archive[2015-07/][07] \archive[2015-08/][08] \archive[2015-09/][09]
+ \archive[2015-10/][10] \archive[2015-11/][11] \archive[2015-12/][12]
+
+ 2014:
+ \archive[2014-01/][01] \archive[2014-02/][02] \archive[2014-03/][03]
+ \archive[2014-04/][04] \archive[2014-05/][05] \archive[2014-06/][06]
+ \archive[2014-07/][07] \archive[2014-08/][08] \archive[2014-09/][09]
+ \archive[2014-10/][10] \archive[2014-11/][11] \archive[2014-12/][12]
+
+ 2013:
+ \archive[2013-01/][01] \archive[2013-02/][02] \archive[2013-03/][03]
+ \archive[2013-04/][04] \archive[2013-05/][05] \archive[2013-06/][06]
+ \archive[2013-07/][07] \archive[2013-08/][08] \archive[2013-09/][09]
+ \archive[2013-10/][10] \archive[2013-11/][11] \archive[2013-12/][12]
+
+ 2012:
+ \archive[2012-01/][01] \archive[2012-02/][02] \archive[2012-03/][03]
+ \archive[2012-04/][04] \archive[2012-05/][05] \archive[2012-06/][06]
+ \archive[2012-07/][07] \archive[2012-08/][08] \archive[2012-09/][09]
+ \archive[2012-10/][10] \archive[2012-11/][11] \archive[2012-12/][12]
+
+ 2011:
+ \archive[2011-01/][01] \archive[2011-02/][02] \archive[2011-03/][03]
+ \archive[2011-04/][04] \archive[2011-05/][05] \archive[2011-06/][06]
+ \archive[2011-07/][07] \archive[2011-08/][08] \archive[2011-09/][09]
+ \archive[2011-10/][10] 11 \archive[2011-12/][12]
+
+ 2010:
+ \archive[2010-01/][01] \archive[2010-02/][02] \archive[2010-03/][03]
+ \archive[2010-04/][04] \archive[2010-05/][05] \archive[2010-06/][06]
+ \archive[2010-07/][07] \archive[2010-08/][08] \archive[2010-09/][09]
+ \archive[2010-10/][10] \archive[2010-11/][11] \archive[2010-12/][12]
+
+ 2009:
+ \archive[2009-01/][01] \archive[2009-02/][02] \archive[2009-03/][03]
+ \archive[2009-04/][04] \archive[2009-05/][05] \archive[2009-06/][06]
+ \archive[2009-07/][07] \archive[2009-08/][08] \archive[2009-09/][09]
+ \archive[2009-10/][10] \archive[2009-11/][11] \archive[2009-12/][12]
+
+ 2008:
+ \archive[2008-01/][01] \archive[2008-02/][02] \archive[2008-03/][03]
+ \archive[2008-04/][04] \archive[2008-05/][05] \archive[2008-06/][06]
+ \archive[2008-07/][07] \archive[2008-08/][08] \archive[2008-09/][09]
+ \archive[2008-10/][10] \archive[2008-11/][11] \archive[2008-12/][12]
+
+ 2007:
+ \archive[2007-01/][01] \archive[2007-02/][02] \archive[2007-03/][03]
+ \archive[2007-04/][04] \archive[2007-05/][05] \archive[2007-06/][06]
+ \archive[2007-07/][07] \archive[2007-08/][08] \archive[2007-09/][09]
+ \archive[2007-10/][10] \archive[2007-11/][11] \archive[2007-12/][12]
+
+ 2006:
+ \archive[2006-01/][01] \archive[2006-02/][02] \archive[2006-03/][03]
+ \archive[2006-04/][04] \archive[2006-05/][05] \archive[2006-06/][06]
+ \archive[2006-07/][07] \archive[2006-08/][08] \archive[2006-09/][09]
+ \archive[2006-10/][10] \archive[2006-11/][11] \archive[2006-12/][12]
+
+ 2005:
+ \archive[2005-01/][01] \archive[2005-02/][02] \archive[2005-03/][03]
+ \archive[2005-04/][04] \archive[2005-05/][05] \archive[2005-06/][06]
+ \archive[2005-07/][07] \archive[2005-08/][08] \archive[2005-09/][09]
+ \archive[2005-10/][10] \archive[2005-11/][11] \archive[2005-12/][12]
+
+ 2004:
+ \archive[2004-01/][01] \archive[2004-02/][02] \archive[2004-03/][03]
+ \archive[2004-04/][04] \archive[2004-05/][05] \archive[2004-06/][06]
+ \archive[2004-07/][07] \archive[2004-08/][08] \archive[2004-09/][09]
+ \archive[2004-10/][10] \archive[2004-11/][11] \archive[2004-12/][12]
+
+ 2003:
+ \archive[2003-03/][03]
+ \archive[2003-04/][04] \archive[2003-05/][05] \archive[2003-06/][06]
+ \archive[2003-07/][07] \archive[2003-08/][08] \archive[2003-09/][09]
+ \archive[2003-10/][10] \archive[2003-11/][11] \archive[2003-12/][12]
+ ]
+
+ \h2[Other Book Reviews]
+
+ \link[https://lightreads.dreamwidth.org/][lightreads] \break
+ \link[https://stevereads.com/][Stephen Laniel] \break
+ \link[https://jamesdavisnicoll.com/][James Davis Nicoll] \break
+ \link[http://cloggie.org/books2/][Martin's Booklog] \break
+ \link[https://steelypips.org/weblog/][Outside of a Dog] \break
+ \link[https://rushthatspeaks.dreamwidth.org/][rushthatspeaks] \break
+ \link[http://sff180.com/][SFF180] \break
+ \link[https://www-users.cs.york.ac.uk/~susan/books/pages/]
+ [Susan Stepney] \break
+ \link[https://www.tor.com/][Tor.com] \break
+ \link[http://booklog.klio.org/][Weasel Words]
+
+ \h2[Fiction Authors]
+
+ \link[https://matociquala.dreamwidth.org/][Elizabeth Bear] \break
+ \link[https://dreamcafe.com/][Steven Brust] \break
+ \link[https://nicolagriffith.com/blog/][Nicola Griffith] \break
+ \link[https://ansible.uk/][David Langford] \break
+ \link[https://yhlee.dreamwidth.org/][Yoon Ha Lee] \break
+ \link[https://nkjemisin.com/blog/][N.K. Jemisin] \break
+ \link[https://www.rosemarykirstein.com/][Rosemary Kirstein] \break
+ \link[https://seanan-mcguire.dreamwidth.org/][Seanan MacGuire] \break
+ \link[https://kenmacleod.blogspot.com/][Ken MacLeod] \break
+ \link[https://truepenny.dreamwidth.org/][Sarah Monette] \break
+ \link[http://elizabethmoon.com/blog/][Elizabeth Moon] \break
+ \link[https://lydamorehouse.dreamwidth.org/][Lyda Morehouse] \break
+ \link[https://whatever.scalzi.com/][John Scalzi] \break
+ \link[https://www.kschroeder.com/weblog][Karl Schroeder] \break
+ \link[https://tkingfisher.dreamwidth.org/][Ursula Vernon] \break
+ \link[http://www.jowaltonbooks.com/blog-2/][Jo Walton]
+
+ \h2[Social Commentary]
+
+ \link[https://www.askamanager.org/][Ask A Manager] \break
+ \link[https://www.badscience.net/][Bad Science] \break
+ \link[https://captainawkward.com/][Captain Awkward] \break
+ \link[https://www.theatlantic.com/author/ta-nehisi-coates/]
+ [Ta-Nehisi Coates] \break
+ \link[https://www.patheos.com/blogs/daylightatheism/]
+ [Daylight Atheism] \break
+ \link[https://www.nytimes.com/column/paul-krugman][Paul Krugman] \break
+ \link[https://loweringthebar.net/][Lowering the Bar] \break
+ \link[https://nielsenhayden.com/makinglight/][Making Light] \break
+ \link[https://james-davis-nicoll.dreamwidth.org/][James Nicoll] \break
+ \link[https://www.schneier.com/blog/][Bruce Schneier] \break
+ \link[https://www.patheos.com/blogs/slacktivist/]
+ [Slacktivist (Fred Clark)]
+
+ \h2[Gaming]
+
+ \link[https://majornelson.com/][Major Nelson (Xbox Live)] \break
+ \link[https://www.penny-arcade.com/][Penny Arcade] \break
+ \link[https://www.trueachievements.com/][TrueAchievements]
+
+ \h2[Other]
+
+ \link[https://www.dnalounge.com/backstage/log/][DNA Lounge] \break
+ \link[https://xkcd.com/][XKCD] \break
+ \link[https://what-if.xkcd.com/][XKCD What If?] \break
+ \link[https://www.jwz.org/blog/][Jamie Zawinski]
+]
diff --git a/t/data/spin/input/journal/.rss b/t/data/spin/input/journal/.rss
new file mode 100644
index 0000000..62f7c63
--- /dev/null
+++ b/t/data/spin/input/journal/.rss
@@ -0,0 +1,39 @@
+Base: https://www.eyrie.org/~eagle/
+Index-Base: https://www.eyrie.org/~eagle/journal/
+RSS-Base: https://www.eyrie.org/~eagle/journal/
+Title: Eagle's Path
+Description: "Passion and dispassion. Choose two." -- Larry Wall
+Language: en-us
+Output: *:index:index.th *:rss:index.rss debian:rss:debian.rss
+ review:rss:reviews.rss
+Index-Prefix:
+ \rss[index.rss][Eagle's Path]
+ \rss[debian.rss][Eagle's Path (Debian focused)]
+ \rss[reviews.rss][Eagle's Path (reviews only)]
+ .
+ \==[date][1][\class(date)[\1]]
+ .
+ \heading[Eagle's Path][journal-set]
+ .
+ \h1[Eagle's Path]
+ .
+ \quote(short)[
+ Passion and dispassion. Choose two.
+ ][Larry Wall][]
+ .
+ \include[.navbar]
+ .
+ \div(journal)[
+Index-Suffix:
+ ]
+
+Date: 2011-08-13 00:09
+Title: NPR Top 100 SFF meme
+Link: journal/2011-08/006.html
+Journal: journal/2011-08/006.th
+Tags: debian
+
+Date: 2007-01-14 21:30
+Title: Review: Fermat's Enigma
+Link: reviews/books/1-250-30112-2.html
+Review: reviews/books/0-385-49362-2.th
diff --git a/t/data/spin/output/changes.html b/t/data/spin/output/changes.html
new file mode 100644
index 0000000..77947a4
--- /dev/null
+++ b/t/data/spin/output/changes.html
@@ -0,0 +1,558 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Recent Changes</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <link rel="stylesheet" href="/~eagle/styles/indent.css" type="text/css" />
+ <link rel="alternate" type="application/rss+xml" href="changes.rss"
+ title="Changes to Russ Allbery's Web Pages" />
+</head>
+
+<!-- Spun from changes.th by spin %VERSION% on %DATE% -->
+
+<body>
+
+<h1>Recent Changes</h1>
+
+<blockquote class="quote"><p class="broken">
+ Put up in a place<br />
+ where it's easy to see<br />
+ the cryptic admonishment<br />
+ T.T.T.<br />
+ When you feel how depressingly<br />
+ slowly you climb,<br />
+ it's well to remember that<br />
+ Things Take Time.
+</p><p class="attribution">
+ Piet Hein
+</p></blockquote>
+
+<p>
+This page lists all recent changes to my web site except for new
+<a href="journal/">journal entries</a>, along with a brief description. Some
+of this information will be repeated in my journal, but more minor
+changes will only be noted here. An <span class="feed"><a href="changes.rss"><img src="journal/feed.png" alt="" /></a> <a href="changes.rss">RSS feed</a></span> of this
+information is also available.
+</p>
+
+<p>
+Also see changes from <a href="changes/2020.html">2020</a>,
+<a href="changes/2019.html">2019</a>, <a href="changes/2018.html">2018</a>,
+<a href="changes/2017.html">2017</a>, <a href="changes/2016.html">2016</a>,
+<a href="changes/2015.html">2015</a>, <a href="changes/2014.html">2014</a>,
+<a href="changes/2013.html">2013</a>, <a href="changes/2012.html">2012</a>,
+<a href="changes/2011.html">2011</a>, <a href="changes/2010.html">2010</a>,
+<a href="changes/2009.html">2009</a>, and <a href="changes/2008.html">2008</a>.
+</p>
+
+<h2>August 2021</h2>
+
+<dl>
+<dt>2021-08-30 &mdash;
+ <a href="https://www.eyrie.org/~eagle/software/kstart/">kstart 4.3</a></dt>
+<dd><p>
+ Add support for kafs by continuing with -t behavior if kafs is present.
+ Use libkeyutils if available to isolate a command's keyring from the
+ invoking program if running a specific command with -t. Use a better
+ exit status when a command is killed with a signal. Use explicit_bzero
+ to clear the password for k5start -s. Other portability fixes and
+ updates.
+</p></dd>
+
+<dt>2021-08-18 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/1-250-30112-2.html">Review: The Past is Red</a></dt>
+<dd><p>
+ Review of The Past is Red by Catherynne M. Valente.
+</p></dd>
+
+<dt>2021-08-16 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/1-5344-3769-X.html">Review: Black Sun</a></dt>
+<dd><p>
+ Review of Black Sun by Rebecca Roanhorse.
+</p></dd>
+
+<dt>2021-08-15 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-06-293605-0.html">Review: The Galaxy, and the Ground Within</a></dt>
+<dd><p>
+ Review of The Galaxy, and the Ground Within by Becky Chambers.
+</p></dd>
+
+<dt>2021-08-08 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-02-044210-6.html">Review: The Last Battle</a></dt>
+<dd><p>
+ Review of The Last Battle by C.S. Lewis.
+</p></dd>
+
+<dt>2021-08-07 &mdash;
+ <a href="https://www.eyrie.org/~eagle/">Broken link cleanup</a></dt>
+<dd><p>
+ Another periodic cleanup of broken links.
+</p></dd>
+
+<dt>2021-08-01 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/1-63557-564-8.html">Review: Piranesi</a></dt>
+<dd><p>
+ Review of Piranesi by Susanna Clarke.
+</p></dd>
+</dl>
+
+<h2>July 2021</h2>
+
+<dl>
+<dt>2021-07-31 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/1-250-76538-2.html">Review: Fugitive Telemetry</a></dt>
+<dd><p>
+ Review of Fugitive Telemetry by Martha Wells.
+</p></dd>
+
+<dt>2021-07-24 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/awards.html">Add finalists for the World Fantasy Award</a></dt>
+<dd><p>
+ Add the finalists for the 2021 World Fantasy Award for best novel.
+</p></dd>
+
+<dt>2021-07-24 &mdash;
+ <a href="https://www.eyrie.org/~eagle/">Broken link cleanup</a></dt>
+<dd><p>
+ Another periodic cleanup of broken links.
+</p></dd>
+
+<dt>2021-07-03 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/awards.html">Add Clarke Award nominees and Locus Award Winners</a></dt>
+<dd><p>
+ Add the nominees for the 2021 Arthur C. Clarke Award, and the winners of
+ the 2021 Locus Awards (Network Effect by Martha Wells for best SF novel,
+ The City We Became by N.K. Jemisin for best fantasy novel, and Elatsoe by
+ Darcie Little Badger for best first novel).
+</p></dd>
+</dl>
+
+<h2>June 2021</h2>
+
+<dl>
+<dt>2021-06-27 &mdash;
+ <a href="https://www.eyrie.org/~eagle/software/control-archive/">control-archive 1.9.1</a></dt>
+<dd><p>
+ A data-only release that updates the Big Eight control signing key and
+ removes some obsolete information about net.*.
+</p></dd>
+
+<dt>2021-06-27 &mdash;
+ <a href="https://www.eyrie.org/~eagle/big-8/">Added web page for Big Eight control information</a></dt>
+<dd><p>
+ New web page summarizing control information for the Big Eight
+ hierarchies with links to the control message signing keys and the PGP
+ Moose key.
+</p></dd>
+
+<dt>2021-06-20 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-345-36331-0.html">Review: Demon Lord of Karanda</a></dt>
+<dd><p>
+ Review of Demon Lord of Karanda by David Eddings.
+</p></dd>
+
+<dt>2021-06-19 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-02-044230-0.html">Review: The Magician's Nephew</a></dt>
+<dd><p>
+ Review of The Magician's Nephew by C.S. Lewis.
+</p></dd>
+
+<dt>2021-06-06 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/stoneskin.html">Review: Stoneskin</a></dt>
+<dd><p>
+ Review of Stoneskin by K.B. Spangler.
+</p></dd>
+
+<dt>2021-06-05 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/awards.html">Add winner of 2021 Nebula Award for best novel</a></dt>
+<dd><p>
+ Add the winner of the 2021 Nebula Award for best novel (Network Effect by
+ Martha Wells).
+</p></dd>
+
+<dt>2021-06-05 &mdash;
+ <a href="https://www.eyrie.org/~eagle/">Broken link cleanup</a></dt>
+<dd><p>
+ Another periodic cleanup of broken links.
+</p></dd>
+</dl>
+
+<h2>May 2021</h2>
+
+<dl>
+<dt>2021-05-31 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-02-044200-9.html">Review: The Horse and His Boy</a></dt>
+<dd><p>
+ Review of The Horse and His Boy by C.S. Lewis.
+</p></dd>
+
+<dt>2021-05-30 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/1-250-23648-7.html">Review: The Relentless Moon</a></dt>
+<dd><p>
+ Review of The Relentless Moon by Mary Robinette Kowal.
+</p></dd>
+
+<dt>2021-05-29 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-02-044250-5.html">Review: The Silver Chair</a></dt>
+<dd><p>
+ Review of The Silver Chair by C.S. Lewis.
+</p></dd>
+
+<dt>2021-05-29 &mdash;
+ <a href="https://www.eyrie.org/~eagle/">Broken link cleanup</a></dt>
+<dd><p>
+ Another periodic cleanup of broken links.
+</p></dd>
+
+<dt>2021-05-15 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/1-250-18648-X.html">Review: A Desolation Called Peace</a></dt>
+<dd><p>
+ Review of A Desolation Called Peace by Arkady Martine.
+</p></dd>
+
+<dt>2021-05-02 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-02-044260-2.html">Review: The Voyage of the Dawn Treader</a></dt>
+<dd><p>
+ Review of The Voyage of the Dawn Treader by C.S. Lewis.
+</p></dd>
+</dl>
+
+<h2>April 2021</h2>
+
+<dl>
+<dt>2021-04-27 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/beyond-shame.html">Review: Beyond Shame</a></dt>
+<dd><p>
+ Review of Beyond Shame by Kit Rocha.
+</p></dd>
+
+<dt>2021-04-24 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/1-4920-5172-1.html">Review: Learning React</a></dt>
+<dd><p>
+ Review of Learning React by Alex Banks &amp; Eve Porcello.
+</p></dd>
+
+<dt>2021-04-24 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/awards.html">Add nominees for the 2021 Hugo Award</a></dt>
+<dd><p>
+ Add the nominees for the 2021 Hugo Award for best novel.
+</p></dd>
+
+<dt>2021-04-10 &mdash;
+ <a href="https://www.eyrie.org/~eagle/">Broken link cleanup</a></dt>
+<dd><p>
+ Another periodic cleanup of broken links.
+</p></dd>
+
+<dt>2021-04-05 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/awards.html">Add 2021 winner of the BSFA award</a></dt>
+<dd><p>
+ Add 2021 winner of the BSFA award for best novel (The City We Became, by
+ N.K. Jemisin).
+</p></dd>
+
+<dt>2021-04-05 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/awards.html">Add 2021 winner of the Philip K. Dick Award</a></dt>
+<dd><p>
+ Add 2021 winner of the Philip K. Dick Award for best novel (The Road out
+ of Winter, by Alison Stine).
+</p></dd>
+
+<dt>2021-04-03 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-02-044240-8.html">Review: Prince Caspian</a></dt>
+<dd><p>
+ Review of Prince Caspian by C.S. Lewis.
+</p></dd>
+</dl>
+
+<h2>March 2021</h2>
+
+<dl>
+<dt>2021-03-30 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/paladins-strength.html">Review: Paladin's Strength</a></dt>
+<dd><p>
+ Review of Paladin's Strength by T. Kingfisher.
+</p></dd>
+
+<dt>2021-03-29 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/paladins-grace.html">Add series information to Paladin's Grace</a></dt>
+<dd><p>
+ Paladin's Grace by T. Kingfisher is the first of a series. Add the
+ series information and a mention of the sequel.
+</p></dd>
+
+<dt>2021-03-28 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/1-4919-5202-4.html">Review: JavaScript: The Definitive Guide</a></dt>
+<dd><p>
+ Review of JavaScript: The Definitive Guide by David Flanagan.
+</p></dd>
+
+<dt>2021-03-28 &mdash;
+ <a href="https://www.eyrie.org/~eagle/software/inn/">Add sample INN init script and systemd unit file</a></dt>
+<dd><p>
+ In the documentation pages for INN CURRENT, 2.6, and 2.5, add the sample
+ init script and systemd unit.
+</p></dd>
+
+<dt>2021-03-28 &mdash;
+ <a href="https://www.eyrie.org/~eagle/software/pod-thread/">Pod::Thread 2.00</a></dt>
+<dd><p>
+ Handle the navbar and table of contents internally in the module rather
+ than via a pre-scanning pass. Honor CVS Id strings found anywhere in the
+ document. Don't title-case words in section titles in the navbar that
+ contain an underscore.
+</p></dd>
+
+<dt>2021-03-21 &mdash;
+ <a href="https://www.eyrie.org/~eagle/software/web/">cvs2xhtml 1.15</a></dt>
+<dd><p>
+ Convert to Python 3. Update my email address.
+</p></dd>
+
+<dt>2021-03-21 &mdash;
+ <a href="https://www.eyrie.org/~eagle/software/web/">cl2xhtml 1.12</a></dt>
+<dd><p>
+ Convert to Python 3. Update my email address.
+</p></dd>
+
+<dt>2021-03-21 &mdash;
+ <a href="https://www.eyrie.org/~eagle/software/web/">faq2html 1.36</a></dt>
+<dd><p>
+ Support formatting of dense bullet lists with line continuations but no
+ blank lines between bullets. Update my email address.
+</p></dd>
+
+<dt>2021-03-21 &mdash;
+ <a href="https://www.eyrie.org/~eagle/software/debian.html">Remove DocKnot from my personal Debian repository list</a></dt>
+<dd><p>
+ DocKnot has now been uploaded to Debian proper.
+</p></dd>
+
+<dt>2021-03-21 &mdash;
+ <a href="https://www.eyrie.org/~eagle/software/pod-thread/">Add separate web pages for Pod::Thread</a></dt>
+<dd><p>
+ As the first step in cleaning up my static site generator pages, and in
+ prepration for uploading it to CPAN in its own right, move Pod::Thread to
+ its own separate web pages.
+</p></dd>
+
+<dt>2021-03-20 &mdash;
+ <a href="https://www.eyrie.org/~eagle/software/pam-krb5/">pam-krb5 4.10</a></dt>
+<dd><p>
+ Fix use-after-free if krb5_cc_get_principal fails on the newly-created
+ ticket cache.
+</p></dd>
+
+<dt>2021-03-20 &mdash;
+ <a href="https://www.eyrie.org/~eagle/software/rra-c-util/">rra-c-util 9.0</a></dt>
+<dd><p>
+ Rename SQLite Autoconf macros and their outputs from SQLITE to SQLITE3.
+ Fix support for optional libraries. Rename KRB5_CPPFLAGS_GCC to
+ KRB5_CPPFLAGS_WARNINGS. Stop defining AM_CONDITIONAL in Autoconf
+ macros. Check for working Kerberos headers as well as libraries. Add C
+ stubs for sd_notify and sd_notifyf and a preprocessor stub for
+ sd_is_socket. Fix portable/sd-daemon.h to include prerequisite headers.
+ Fix RRA_PROG_PYTHON with Python 3.0 and older Python 2.x versions. Fix
+ problems with the util/fdflag test. Use AS_ECHO where possible. Fix
+ perlcritic with YAML::XS.
+</p></dd>
+
+<dt>2021-03-20 &mdash;
+ <a href="https://www.eyrie.org/~eagle/personal/contact.html">Clean GnuPG key</a></dt>
+<dd><p>
+ Refresh the expiration on my signing key and re-export my key with the
+ export-clean flag, which cleans up a bunch of duplicate and expired
+ signatures.
+</p></dd>
+
+<dt>2021-03-20 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/awards.html">Add nominees for 2021 Nebula Award for best novel</a></dt>
+<dd><p>
+ Add the nominees for the 2021 Nebula Award for best novel.
+</p></dd>
+
+<dt>2021-03-14 &mdash;
+ <a href="https://www.eyrie.org/~eagle/journal/2021-03/001.html">New experimental Big Eight control message signing key</a></dt>
+<dd><p>
+ Published a new experimental signing key for Big Eight control messages
+ that was generated with a modern GnuPG.
+</p></dd>
+
+<dt>2021-03-13 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/awards.html">Add 2020 British Fantasy Award winner</a></dt>
+<dd><p>
+ Add winner of the 2020 British Fantasy Robert Holdstock Award for best
+ fantasy novel (The Bone Ships, by RJ Barker).
+</p></dd>
+
+<dt>2021-03-01 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-02-044220-3.html">Review: The Lion, the Witch and the Wardrobe</a></dt>
+<dd><p>
+ Review of The Lion, the Witch and the Wardrobe by C.S. Lewis.
+</p></dd>
+</dl>
+
+<h2>February 2021</h2>
+
+<dl>
+<dt>2021-02-28 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/1-250-21546-3.html">Review: Architects of Memory</a></dt>
+<dd><p>
+ Review of Architects of Memory by Karen Osborne.
+</p></dd>
+
+<dt>2021-02-27 &mdash;
+ <a href="https://www.eyrie.org/~eagle/software/docknot/">DocKnot 4.01</a></dt>
+<dd><p>
+ Add support for a global user configuration file. Allow the distribution
+ directory to be specified in it. Add support for GnuPG signing of
+ generated tarballs. Fix docknot --help. Remove the obsolete
+ load_appdata_json helper. Fix some documentation bugs left over from the
+ 4.00 release.
+</p></dd>
+
+<dt>2021-02-21 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-7564-1511-X.html">Review: Finder</a></dt>
+<dd><p>
+ Review of Finder by Suzanne Palmer.
+</p></dd>
+
+<dt>2021-02-20 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-7653-9893-1.html">Review: The Fated Sky</a></dt>
+<dd><p>
+ Review of The Fated Sky by Mary Robinette Kowal.
+</p></dd>
+
+<dt>2021-02-17 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/1-9821-5694-5.html">Review: Solutions and Other Problems</a></dt>
+<dd><p>
+ Review of Solutions and Other Problems by Allie Brosh.
+</p></dd>
+
+<dt>2021-02-14 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/1-4516-3937-6.html">Review: Spheres of Influence</a></dt>
+<dd><p>
+ Review of Spheres of Influence by Ryk E. Spoor.
+</p></dd>
+
+<dt>2021-02-14 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/mythopoeic.html">Add winner of 2020 Mythopoeic Award</a></dt>
+<dd><p>
+ Add the winner of the (delayed) 2020 Mythopoeic Fantasy Award for Adult
+ Literature (Snow White Learns Witchcraft, by Theodora Goss).
+</p></dd>
+
+<dt>2021-02-13 &mdash;
+ <a href="https://www.eyrie.org/~eagle/">Broken link cleanup</a></dt>
+<dd><p>
+ Another periodic cleanup of broken links.
+</p></dd>
+
+<dt>2021-02-07 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-7653-9212-7.html">Review: The Future of Another Timeline</a></dt>
+<dd><p>
+ Review of The Future of Another Timeline by Annalee Newitz.
+</p></dd>
+
+<dt>2021-02-01 &mdash;
+ <a href="https://www.eyrie.org/~eagle/changes.html">Remove changes from December 2020</a></dt>
+<dd><p>
+ Remove the changes from December 2020 from the recent changes
+ page.
+</p></dd>
+</dl>
+
+<h2>January 2021</h2>
+
+<dl>
+<dt>2021-01-30 &mdash;
+ <a href="https://www.eyrie.org/~eagle/">Broken link cleanup</a></dt>
+<dd><p>
+ Another periodic cleanup of broken links.
+</p></dd>
+
+<dt>2021-01-28 &mdash;
+ <a href="https://www.eyrie.org/~eagle/software/inn/">INN 2.6.4</a></dt>
+<dd><p>
+ Added support for systemd notifications and socket activation. Adapt the
+ length of the DH parameter during DHE key exchanges in nnrpd. Return
+ information about retired CNFS buffers from cnfsstat. Externalize the
+ CSS information from generated innreport reports. Support storing wire
+ format articles with sm. Add a flag to rnews to disallow additional
+ unpackers, a flag to save rejected articles, and a flag to log the
+ message ID of duplicate articles. Add a compile-time option to enable
+ hardening flags.
+</p></dd>
+
+<dt>2021-01-26 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-593-12849-4.html">Review: A Deadly Education</a></dt>
+<dd><p>
+ Review of A Deadly Education by Naomi Novik.
+</p></dd>
+
+<dt>2021-01-25 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-316-50985-X.html">Review: The City We Became</a></dt>
+<dd><p>
+ Review of The City We Became by N.K. Jemisin.
+</p></dd>
+
+<dt>2021-01-24 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/1-9821-4013-5.html">Review: Laziness Does Not Exist</a></dt>
+<dd><p>
+ Review of Laziness Does Not Exist by Devon Price.
+</p></dd>
+
+<dt>2021-01-18 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/1-5098-4115-6.html">Review: The Secret Barrister</a></dt>
+<dd><p>
+ Review of The Secret Barrister by The Secret Barrister.
+</p></dd>
+
+<dt>2021-01-04 &mdash;
+ <a href="https://www.eyrie.org/~eagle/journal/">Update some blog roll links</a></dt>
+<dd><p>
+ Update URL to Nicola Griffith's blog, and switch Karl Schroeder's blog to
+ https.
+</p></dd>
+
+<dt>2021-01-03 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-316-42202-9.html">Review: The Once and Future Witches</a></dt>
+<dd><p>
+ Review of The Once and Future Witches by Alix E. Harrow.
+</p></dd>
+
+<dt>2021-01-01 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/awards.html">Update award winners</a></dt>
+<dd><p>
+ Add links to all award pages that have good award web sites. Add notes
+ where the 2020 award was canceled or delayed. Add the winner of the 2020
+ Prix Aurora Award for best adult novel (The Gossamer Mage by Julie
+ E. Czerneda) and the Sunburst award for adults (Gods of Jade and Shadow
+ by Silvia Moreno-Garcia).
+</p></dd>
+
+<dt>2021-01-01 &mdash;
+ <a href="https://www.eyrie.org/~eagle/changes/2020.html">Rotate 2020 changes</a></dt>
+<dd><p>
+ Move all web site changes from 2020 to a separate page and remove all
+ entries older than December of 2020 from the current changes page.
+</p></dd>
+
+<dt>2021-01-01 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/year/2020.html">2020 reading in review</a></dt>
+<dd><p>
+ Add an overview of my 2020 reading, main book recommendations, and
+ reading statistics.
+</p></dd>
+</dl>
+
+<address>
+ Last <a href="https://www.eyrie.org/~eagle/software/web/">spun</a>
+ %DATE% from thread modified %DATE%
+</address>
+</body>
+</html>
diff --git a/t/data/spin/output/changes.rss b/t/data/spin/output/changes.rss
new file mode 100644
index 0000000..a4fdac7
--- /dev/null
+++ b/t/data/spin/output/changes.rss
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+ <channel>
+ <title>Changes to Russ Allbery's Web Pages</title>
+ <link>https://www.eyrie.org/~eagle/</link>
+ <description>Recent changes to Russ Allbery's web pages.</description>
+ <language>en-us</language>
+ <pubDate>%DATE%</pubDate>
+ <lastBuildDate>%DATE%</lastBuildDate>
+ <generator>spin-rss 1.25</generator>
+ <atom:link href="https://www.eyrie.org/~eagle/changes.rss" rel="self"
+ type="application/rss+xml" />
+
+ <item>
+ <title>kstart 4.3</title>
+ <link>https://www.eyrie.org/~eagle/software/kstart/</link>
+ <description><![CDATA[
+ <p>Add support for kafs by continuing with -t behavior if kafs is present.
+ Use libkeyutils if available to isolate a command's keyring from the
+ invoking program if running a specific command with -t. Use a better
+ exit status when a command is killed with a signal. Use explicit_bzero
+ to clear the password for k5start -s. Other portability fixes and
+ updates.</p>
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid isPermaLink="false">1630383900</guid>
+ </item>
+ <item>
+ <title>Review: The Past is Red</title>
+ <link>https://www.eyrie.org/~eagle/reviews/books/1-250-30112-2.html</link>
+ <description><![CDATA[
+ <p>Review of The Past is Red by Catherynne M. Valente.</p>
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid isPermaLink="false">1629347400</guid>
+ </item>
+ <item>
+ <title>Review: Black Sun</title>
+ <link>https://www.eyrie.org/~eagle/reviews/books/1-5344-3769-X.html</link>
+ <description><![CDATA[
+ <p>Review of Black Sun by Rebecca Roanhorse.</p>
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid isPermaLink="false">1629172680</guid>
+ </item>
+ <item>
+ <title>Review: The Galaxy, and the Ground Within</title>
+ <link>https://www.eyrie.org/~eagle/reviews/books/0-06-293605-0.html</link>
+ <description><![CDATA[
+ <p>Review of The Galaxy, and the Ground Within by Becky Chambers.</p>
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid isPermaLink="false">1629080460</guid>
+ </item>
+ <item>
+ <title>Review: The Last Battle</title>
+ <link>https://www.eyrie.org/~eagle/reviews/books/0-02-044210-6.html</link>
+ <description><![CDATA[
+ <p>Review of The Last Battle by C.S. Lewis.</p>
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid isPermaLink="false">1628476740</guid>
+ </item>
+ <item>
+ <title>Broken link cleanup</title>
+ <link>https://www.eyrie.org/~eagle/</link>
+ <description><![CDATA[
+ <p>Another periodic cleanup of broken links.</p>
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid isPermaLink="false">1628382240</guid>
+ </item>
+ <item>
+ <title>Review: Piranesi</title>
+ <link>https://www.eyrie.org/~eagle/reviews/books/1-63557-564-8.html</link>
+ <description><![CDATA[
+ <p>Review of Piranesi by Susanna Clarke.</p>
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid isPermaLink="false">1627877520</guid>
+ </item>
+ <item>
+ <title>Review: Fugitive Telemetry</title>
+ <link>https://www.eyrie.org/~eagle/reviews/books/1-250-76538-2.html</link>
+ <description><![CDATA[
+ <p>Review of Fugitive Telemetry by Martha Wells.</p>
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid isPermaLink="false">1627791960</guid>
+ </item>
+ <item>
+ <title>Add finalists for the World Fantasy Award</title>
+ <link>https://www.eyrie.org/~eagle/reviews/awards.html</link>
+ <description><![CDATA[
+ <p>Add the finalists for the 2021 World Fantasy Award for best novel.</p>
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid isPermaLink="false">1627140180</guid>
+ </item>
+ <item>
+ <title>Broken link cleanup</title>
+ <link>https://www.eyrie.org/~eagle/</link>
+ <description><![CDATA[
+ <p>Another periodic cleanup of broken links.</p>
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid isPermaLink="false">1627140120</guid>
+ </item>
+ <item>
+ <title>Add Clarke Award nominees and Locus Award Winners</title>
+ <link>https://www.eyrie.org/~eagle/reviews/awards.html</link>
+ <description><![CDATA[
+ <p>Add the nominees for the 2021 Arthur C. Clarke Award, and the winners of
+ the 2021 Locus Awards (Network Effect by Martha Wells for best SF novel,
+ The City We Became by N.K. Jemisin for best fantasy novel, and Elatsoe by
+ Darcie Little Badger for best first novel).</p>
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid isPermaLink="false">1625358060</guid>
+ </item>
+ <item>
+ <title>control-archive 1.9.1</title>
+ <link>https://www.eyrie.org/~eagle/software/control-archive/</link>
+ <description><![CDATA[
+ <p>A data-only release that updates the Big Eight control signing key and
+ removes some obsolete information about net.*.</p>
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid isPermaLink="false">1624848900</guid>
+ </item>
+ <item>
+ <title>Added web page for Big Eight control information</title>
+ <link>https://www.eyrie.org/~eagle/big-8/</link>
+ <description><![CDATA[
+ <p>New web page summarizing control information for the Big Eight
+ hierarchies with links to the control message signing keys and the PGP
+ Moose key.</p>
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid isPermaLink="false">1624832580</guid>
+ </item>
+ <item>
+ <title>Review: Demon Lord of Karanda</title>
+ <link>https://www.eyrie.org/~eagle/reviews/books/0-345-36331-0.html</link>
+ <description><![CDATA[
+ <p>Review of Demon Lord of Karanda by David Eddings.</p>
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid isPermaLink="false">1624247820</guid>
+ </item>
+ <item>
+ <title>Review: The Magician's Nephew</title>
+ <link>https://www.eyrie.org/~eagle/reviews/books/0-02-044230-0.html</link>
+ <description><![CDATA[
+ <p>Review of The Magician's Nephew by C.S. Lewis.</p>
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid isPermaLink="false">1624161780</guid>
+ </item>
+ </channel>
+</rss>
diff --git a/t/data/spin/output/journal/debian.rss b/t/data/spin/output/journal/debian.rss
new file mode 100644
index 0000000..ad3a8d3
--- /dev/null
+++ b/t/data/spin/output/journal/debian.rss
@@ -0,0 +1,381 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+ <channel>
+ <title>Eagle's Path</title>
+ <link>https://www.eyrie.org/~eagle/</link>
+ <description>"Passion and dispassion. Choose two." -- Larry Wall</description>
+ <language>en-us</language>
+ <pubDate>%DATE%</pubDate>
+ <lastBuildDate>%DATE%</lastBuildDate>
+ <generator>spin-rss 1.25</generator>
+ <atom:link href="https://www.eyrie.org/~eagle/journal/debian.rss" rel="self"
+ type="application/rss+xml" />
+
+ <item>
+ <title>NPR Top 100 SFF meme</title>
+ <link>https://www.eyrie.org/~eagle/journal/2011-08/006.html</link>
+ <description><![CDATA[
+<p>
+By way of <a href="http://firecat.dreamwidth.org/profile"><img src="https://www.eyrie.org/~eagle/journal/dw.png" alt="" /></a><a href="http://firecat.dreamwidth.org/"><strong>firecat</strong></a>, this is the result of a public nomination process,
+panel review, and Internet voting on the NPR web site: an attempt at the
+top 100 works of science fiction or fantasy. Series are counted as single
+works for the purposes of the list.
+</p>
+
+<p>
+This list has a ton of problems, like any list of this sort will have. It
+leans rather more heavily towards white male than the actual literature,
+and certainly than my reading. The lack of non-white writers is
+particularly troubling. But it's still an interesting selection. (For
+those wondering about some obvious omissions, young adult was explicitly
+excluded.)
+</p>
+
+<p>
+The rules are to bold the works one has read in their entirety and
+italicize the ones you've read part of but not finished. I'll add
+underlining the works that I own, which provides some indication of the
+things that I've not read but that are on my to-read list.
+</p>
+
+<ol>
+<li class="packed"><strong><u>The Lord Of The Rings Trilogy, by J.R.R. Tolkien</u></strong>:
+ It's a boring winner because it always wins, but it's an amazing book
+ and I can't argue with it. I'll probably never review this one since
+ I'm not sure I have anything original to say about it.</li>
+<li class="packed"><strong><u>The Hitchhiker's Guide To The Galaxy, by Douglas Adams</u></strong>:
+ Probably the best humorous SF. I've read the entire series except for
+ <cite>The Salmon of Doubt</cite>, the unfinished book left when Adams died.
+ Will re-read them all at some point.</li>
+<li class="packed"><strong><u>Ender's Game, by Orson Scott Card</u></strong>:
+ I intensely dislike Card's politics, but this book is still very good.
+ It's on my re-read list so that I can write a proper review of it.</li>
+<li class="packed"><strong>The Dune Chronicles, by Frank Herbert</strong>:
+ I've read the whole series, but only own the first, which is by far
+ the best. I'm tempted to re-read the whole series at some point,
+ since I don't remember it well enough to analyze it, but I'll probably
+ stop after re-reading just the first.</li>
+<li class="packed"><em><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-57340-3.html">A Song Of Ice And Fire
+ Series</a>, by George R. R. Martin</em>:
+ I own the first couple and have read and reviewed the first four. I
+ think they're somewhat overrated, but will probably read the latest.
+ I'm not sure if I'll re-read the previous books to remember what the
+ heck was going on.</li>
+<li class="packed"><u>1984, by George Orwell</u>:
+ I've somehow never read this. I keep meaning to, particularly since I
+ generally love Orwell.</li>
+<li class="packed"><strong>Fahrenheit 451, by Ray Bradbury</strong>:
+ Massively overrated, or perhaps just made unoriginal by subsequent
+ history. I found it boring and uninteresting.</li>
+<li class="packed"><strong><u>The Foundation Trilogy, by Isaac Asimov</u></strong>:
+ Thoroughly enjoyed this when I was a teenager. I suspect I'll like it
+ less as an adult, but definitely on my to-read list.</li>
+<li class="packed"><u>Brave New World, by Aldous Huxley</u>: Another classic I've never read.</li>
+<li class="packed"><strong><u>American Gods, by Neil Gaiman</u></strong>:
+ Great book. Need to re-read to review.</li>
+<li class="packed"><u>The Princess Bride, by William Goldman</u>:
+ On the list to read. Apparently significantly better than the movie,
+ which I liked less than everyone else on the planet.</li>
+<li class="packed"><em>The Wheel Of Time Series, by Robert Jordan</em>:
+ I read up to book eight (<cite>The Path of Daggers</cite>) and bailed
+ halfway through it. It started as somewhat interesting fantasy with
+ deep world building and fun world surprises, but the writing got worse
+ and worse and the characters became miserably unlikeable. I'm still
+ occasionally tempted to re-read and finish it, but it's a bad
+ temptation.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/animal-farm.html">Animal Farm</a>, by George
+ Orwell</u></strong>:
+ Great book, and a political and historical classic. Best read in
+ combination with a good history.</li>
+<li class="packed"><strong><u>Neuromancer, by William Gibson</u></strong>: Meh.</li>
+<li class="packed"><strong><u>Watchmen, by Alan Moore</u></strong>: Brilliant. On my list to re-read.</li>
+<li class="packed"><strong><u>I, Robot, by Isaac Asimov</u></strong>:
+ Okay, but I generally find Asimov a bit overrated. Good for
+ intellectual puzzle stories, but not that deep of ones, and the
+ characters are essentially nonentities.</li>
+<li class="packed"><strong>Stranger In A Strange Land, by Robert Heinlein</strong>:
+ The only book that I've ever put down within fifteen pages of the end
+ and could never muster enough caring to pick up again. I should
+ re-read it at some point to review it, but I don't think it's very
+ good.</li>
+<li class="packed"><u>The Kingkiller Chronicles, by Patrick Rothfuss</u>:
+ Well, I own the first one at least.</li>
+<li class="packed">Slaughterhouse-Five, by Kurt Vonnegut: Need to read.</li>
+<li class="packed">Frankenstein, by Mary Shelley:
+ I've never actually read this, but I'm not sure there's much point in
+ reading it. I've been so thoroughly exposed to the angles and
+ interpretations of it that reading it at this point would be an odd
+ experience. I probably should for completion's sake at some point.
+ (This is the first woman on the list, and of course she's long-dead
+ and not writing in the modern SF tradition.)</li>
+<li class="packed"><u>Do Androids Dream Of Electric Sheep?, by Philip K. Dick</u>:
+ I do need to read more Dick. I don't think this is as good as its
+ placement on the list; everyone just knows <cite>Blade Runner</cite> (which
+ was based on this).</li>
+<li class="packed"><u>The Handmaid's Tale, by Margaret Atwood</u>:
+ I have a bunch of Atwood, but haven't yet read any of it.</li>
+<li class="packed">The Dark Tower Series, by Stephen King:
+ It's rare for me to find any horror I actually like, but my
+ understanding is that this is less horror than a lot of King. I may
+ give it a try someday (but probably won't).</li>
+<li class="packed"><strong>2001: A Space Odyssey, by Arthur C. Clarke</strong>:
+ Much better than the movie since it actually explained what was going
+ on, although it wasn't as atmospheric. Not actually as good as its
+ position on lists like this would indicate. Mostly it's just a book
+ everyone has heard of.</li>
+<li class="packed"><u>The Stand, by Stephen King</u>: See above about horror.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-56261-4.html">Snow Crash</a>, by Neal
+ Stephenson</u></strong>:
+ One of my favorite humorous SF books, plus features the trademark
+ Stephenson infodumping and some neat bits about building a virtual
+ world.</li>
+<li class="packed"><u>The Martian Chronicles, by Ray Bradbury</u>: On the list to read.</li>
+<li class="packed">Cat's Cradle, by Kurt Vonnegut: Need to track down and read.</li>
+<li class="packed"><strong><u>The Sandman Series, by Neil Gaiman</u></strong>:
+ Quite possibly the best comic book series ever written. Utterly
+ brilliant. The one set of graphic novels that everyone should read at
+ some point in their life.</li>
+<li class="packed">A Clockwork Orange, by Anthony Burgess:
+ Huh. Not really on my radar to read, although of course I've heard of
+ it.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-441-78358-9.html">Starship Troopers</a>, by
+ Robert Heinlein</u></strong>:
+ Also overrated, particularly since it's not much of a story. It's an
+ extended and multifaceted political essay, which isn't as simple as it
+ appears to be. The movie, quite contrary to the negative impression
+ people have of it, is a delightful parody of how the book comes across
+ on its surface reading.</li>
+<li class="packed"><u>Watership Down, by Richard Adams</u>: Yeah, yeah, I know I should read it.</li>
+<li class="packed"><strong><u>Dragonflight, by Anne McCaffrey</u></strong>:
+ I loved the Pern books as a teenager up until the point when the just
+ became retellings of the same book from a new perspective. I'm afraid
+ to re-read them.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-425-03436-4.html">The Moon Is A Harsh
+ Mistress</a>, by Robert Heinlein</u></strong>:
+ Much, much better than <cite>Starship Troopers</cite>. One of the better
+ non-juvenile Heinleins. Still not as good as people think it is.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-37926-7.html">A Canticle For
+ Leibowitz</a>, by Walter M. Miller</u></strong>:
+ I was disappointed in this given how much people like it, but it
+ deserves some credit for being foundational to post-apocalyptic SF.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-517-26188-Xa.html">The Time Machine</a>, by
+ H.G. Wells</u></strong>:
+ More interesting than you might think it would be, given when it was
+ written and the emphasis on description rather than characterization.
+ But it still suffers from a lack of characters for me. Hard to come
+ to this fresh now, since the ideas have been so used elsewhere.</li>
+<li class="packed">20,000 Leagues Under The Sea, by Jules Verne:
+ I've seen the movie take on it. I've not felt a strong urge to read
+ the book, although I probably "should."</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-27450-3.html">Flowers For Algernon</a>,
+ by Daniel Keys</u></strong>:
+ Unforgettable and very strongly affecting (and depressing).</li>
+<li class="packed"><u>The War Of The Worlds, by H.G. Wells</u>: Will read at some point.</li>
+<li class="packed"><u>The Chronicles Of Amber, by Roger Zelazny</u>: Will probably read soon.</li>
+<li class="packed"><strong><u>The Belgariad, by David Eddings</u></strong>:
+ Yeah, I read this as a teenager and quite liked it. But I have no
+ idea what it's doing on this list; it is in absolutely no way one of
+ the best 100 SFF works of all time. (Well, that's not true; I know
+ what it's doing on this list. People have heard of it and read it.
+ But it shouldn't be on this list.)</li>
+<li class="packed"><u>The Mists Of Avalon, by Marion Zimmer Bradley</u>: On the list.</li>
+<li class="packed">The Mistborn Series, by Brandon Sanderson: Want to read this.</li>
+<li class="packed"><strong><u>Ringworld, by Larry Niven</u></strong>:
+ Interesting idea fiction with a great sense of scale. Shame the
+ characters aren't as good as the background. But it's a good book,
+ worth reading.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-441-47812-3.html">The Left Hand Of
+ Darkness</a>, by Ursula K. LeGuin</u></strong>:
+ A deserved classic of anthropological SF with profound things to say
+ about how culture and friendship are constructed.</li>
+<li class="packed"><strong><u>The Silmarillion, by J.R.R. Tolkien</u></strong>:
+ I love this book, but the first section is hard going if you don't
+ like reading mythology. Skip ahead if you're struggling; the gems are
+ later.</li>
+<li class="packed"><u>The Once And Future King, by T.H. White</u>: Definitely on the list to read.</li>
+<li class="packed"><strong><u>Neverwhere, by Neil Gaiman</u></strong>:
+ I'm not sure I'd put it on this list, as there are better Gaiman (and
+ Gaiman is already overrepresented), but it's a solid "urban" fantasy
+ in the old sense of that term. Inventive, with a feel similar to some
+ of the <cite>Sandman</cite> stories.</li>
+<li class="packed"><strong><u>Childhood's End, by Arthur C. Clarke</u></strong>:
+ I read this eons ago and can barely remember it. I definitely need to
+ re-read it.</li>
+<li class="packed">Contact, by Carl Sagan:
+ Liked the movie, have never had any particular urge to read the book.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-28368-5.html">The Hyperion Cantos</a>, by
+ Dan Simmons</u></strong>:
+ Some of my favorite SF novels ever. The third book is the weakest,
+ and the fourth book has problems, but I adore it.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/1-56389-470-X.html">Stardust</a>, by Neil
+ Gaiman</u></strong>:
+ Really far too much Gaiman on this list. But also a good book.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-380-78862-4.html">Cryptonomicon</a>, by Neal
+ Stephenson</u></strong>:
+ Fantastic stuff. Not SF in any traditional sense. It's a combination
+ of secret history and contemporary thriller. But it's written in the
+ Stephenson massive entertaining infodumping style, so it feels like SF
+ and makes it onto lists like this. It's very long, but I've read it
+ twice and don't regret it.</li>
+<li class="packed">World War Z, by Max Brooks:
+ Have a hard time believing this really belongs here, but I haven't
+ read it so I couldn't say for sure.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-345-27505-5.html">The Last Unicorn</a>, by
+ Peter S. Beagle</u></strong>:
+ Eh, it's not a bad book, but I'm not sure it really belongs on this
+ list. But it does have an aesthetic that's hard to find in any other
+ book.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-380-70821-3.html">The Forever War</a>, by Joe
+ Haldeman</u></strong>:
+ A very important response to the whole sub-genre of military SF, and
+ very influential.</li>
+<li class="packed"><u>Small Gods, by Terry Pratchett</u>: Getting to it.</li>
+<li class="packed"><em><u>The Chronicles Of Thomas Covenant, The Unbeliever, by Stephen
+ R. Donaldson</u></em>:
+ Read the first book, wasn't much of a fan. I might get back to it at
+ some point, but I'm not particularly eager.</li>
+<li class="packed"><strong><a href="https://www.eyrie.org/~eagle/reviews/books/0-671-87749-6a.html">The Vorkosigan Saga</a>, by
+ Lois McMaster Bujold</strong>:
+ I don't like the early books as much as some, but I love some of the
+ later books. The last few have been disappointing, but overall very
+ much worth reading, and belongs around here on the list.</li>
+<li class="packed">Going Postal, by Terry Pratchett: Getting to it.</li>
+<li class="packed"><strong>The Mote In God's Eye, by Larry Niven &amp; Jerry Pournelle</strong>:
+ Read many years ago and barely remember it. I need to re-read it,
+ particularly since there's a new sequal by Pournelle's daughter that
+ looks well worth reading.</li>
+<li class="packed"><em>The Sword Of Truth, by Terry Goodkind</em>:
+ I read way too many books in this series. Others should not repeat my
+ mistake. Generic fantasy about incredibly stupid people that turns
+ into libertarian political ravings.</li>
+<li class="packed">The Road, by Cormac McCarthy: Not my thing.</li>
+<li class="packed"><strong><a href="https://www.eyrie.org/~eagle/reviews/books/1-58234-416-7.html">Jonathan Strange &amp; Mr
+ Norrell</a>, by Susanna Clarke</strong>:
+ A nearly unique reading experience, and the best footnoted fantasy
+ that I've ever read (and that includes Pratchett). Great stuff if you
+ don't mind the slow pace. I'm eagerly hoping for an actual sequel.</li>
+<li class="packed">I Am Legend, by Richard Matheson:
+ Having a hard time getting interested enough in a book about zombies.
+ But I've been wrong about that
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-316-12246-7.html">before</a>.</li>
+<li class="packed">The Riftwar Saga, by Raymond E. Feist:
+ Heard of it, but not enough to get it onto my want list.</li>
+<li class="packed">The Shannara Trilogy, by Terry Brooks:
+ Heard enough about it to not put it on my want list.</li>
+<li class="packed">The Conan The Barbarian Series, by R.E. Howard:
+ Something that I feel like I "should" read, but usually I'm not a big
+ fan of pulp.</li>
+<li class="packed"><u>The Farseer Trilogy, by Robin Hobb</u>:
+ Own the first, which has been on my to-read list for a very long time.
+ Someday I'll get to it. I should probably buy all of the trilogy
+ before starting it.</li>
+<li class="packed"><strong><a href="https://www.eyrie.org/~eagle/reviews/books/1-931561-64-8.html">The Time Traveler's
+ Wife</a>, by Audrey Niffenegger</strong>:
+ Surprisingly good for a literary fantasy, with some fantastic moments
+ of description.</li>
+<li class="packed">The Way Of Kings, by Brandon Sanderson: Want to read at some point.</li>
+<li class="packed">A Journey To The Center Of The Earth, by Jules Verne:
+ As above, uninspired to read Verne.</li>
+<li class="packed"><em><a href="https://www.eyrie.org/~eagle/reviews/books/0-88038-905-2.html">The Legend Of Drizzt
+ Series</a>, by R.A. Salvatore</em>:
+ Read the first one, and unless they get substantially better, I have
+ no interest in reading more. Very stock power fantasy with
+ one-dimensional characters.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-765-31524-6.html">Old Man's War</a>, by John
+ Scalzi</u></strong>:
+ The later books in the series are better than the first one. An
+ interesting take on military SF, but I'm not sure it really rises to
+ the level of this sort of list.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-57331-4.html">The Diamond Age</a>, by
+ Neil Stephenson</u></strong>:
+ One too many Stephenson for this list, plus <cite>Anathem</cite> is probably
+ more deserving of this place, but there are some neat bits about
+ computation theory.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-28789-3.html">Rendezvous With Rama</a>,
+ by Arthur C. Clarke</u></strong>:
+ Completely overrated. A bad book that just happens to be foundational
+ in a particular sub-genre of SF. Done much better by other people.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-765-34298-7.html">The Kushiel's Legacy
+ Series</a>, by Jacqueline Carey</u></strong>:
+ By far my favorite epic fantasy series. Lush, involved, very
+ creative, and with a truly unusual heroine. Wonderful stuff.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-06-105488-7.html">The Dispossessed</a>, by
+ Ursula K. LeGuin</u></strong>:
+ Great, thoughtful SF. Probably the best in the utopia genre, even
+ though it isn't a utopia.</li>
+<li class="packed">Something Wicked This Way Comes, by Ray Bradbury: Horror. Eh.</li>
+<li class="packed"><u>Wicked, by Gregory Maguire</u>:
+ On the list, but after a general Oz re-read.</li>
+<li class="packed"><u>The Malazan Book Of The Fallen Series, by Steven Erikson</u>:
+ Own the first. Completely intimidated by the length of the series.</li>
+<li class="packed"><u>The Eyre Affair, by Jasper Fforde</u>: On the list.</li>
+<li class="packed"><em><u><a href="https://www.eyrie.org/~eagle/reviews/books/1-85723-138-4.html">The Culture Series</a>, by
+ Iain M. Banks</u></em>:
+ Brilliant stuff, highly recommended. I only haven't read it all
+ because I'm slowly digesting it. Should be higher on the list than
+ this.</li>
+<li class="packed"><u>The Crystal Cave, by Mary Stewart</u>: On the list.</li>
+<li class="packed"><u>Anathem, by Neal Stephenson</u>: On the list.</li>
+<li class="packed">The Codex Alera Series, by Jim Butcher:
+ I'll read the Dresden series, or least part of it, first, and see if
+ that inspires me to read more Butcher. Dubious that this belongs on
+ this list.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-671-45070-0.html">The Book Of The New
+ Sun</a>, by Gene Wolfe</u></strong>:
+ Incredibly influential and important fantasy-flavored SF that should
+ be much higher on the list than this.</li>
+<li class="packed"><strong><u>The Thrawn Trilogy, by Timothy Zahn</u></strong>:
+ This is a <cite>Star Wars</cite> media tie-in series, and one of the few of
+ that type that I've read. I remember quite enjoying it a long time
+ ago, and it's on the list to re-read at some point.</li>
+<li class="packed">The Outlander Series, by Diana Gabaldan:
+ The only thing on this list that I've never even heard of.</li>
+<li class="packed">The Elric Saga, by Michael Moorcock:
+ Definitely want to read this at some point, once I figure out the
+ right place to start and probably after I've read some other
+ Moorcock.</li>
+<li class="packed">The Illustrated Man, by Ray Bradbury:
+ Waiting to see if I like the better-known Bradbury first.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-515-13881-9.html">Sunshine</a>, by Robin
+ McKinley</u></strong>:
+ Quite possibly the best urban fantasy (in the modern definition) that
+ I've ever read.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-812-51528-5.html">A Fire Upon The Deep</a>,
+ by Vernor Vinge</u></strong>:
+ A little overrated, but it has a fun rendition of Usenet and some
+ neat aliens.</li>
+<li class="packed"><strong>The Caves Of Steel, by Isaac Asimov</strong>:
+ Read long ago. Enjoyed it, but don't remember being grabbed by it.
+ There's a bit too much Asimov on this list.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-56073-5.html">The Mars Trilogy</a>, by
+ Kim Stanley Robinson</u></strong>:
+ The most detailed and in-depth politics that you'll find in SF, even
+ more than Le Guin, at the cost of being mind-numbingly boring. Very
+ ambitious, but just doesn't move fast enough or have enough plot.
+ Robinson is less a novelist than a political and hard science essayist
+ in the form of a novel.</li>
+<li class="packed"><strong><u>Lucifer's Hammer, by Larry Niven &amp; Jerry Pournelle</u></strong>:
+ Large-screen disaster novel with a heavy helping of libertarian
+ utopian politics. Does not belong anywhere near this list.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-56273-8.html">Doomsday Book</a>, by
+ Connie Willis</u></strong>:
+ The best of Willis's time travel novels, with fewer communication
+ failures and frantic faffing about than the other ones. Borderline
+ for this list, but probably deserves to be here.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-345-45940-7.html">Perdido Street Station</a>,
+ by China Mieville</u></strong>:
+ Revolutionary fantasy. The founding book of New Weird. I think
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-345-44438-8.html">The Scar</a> is a better
+ book, but I can't argue with this being here.</li>
+<li class="packed">The Xanth Series, by Piers Anthony: I've been warned off these.</li>
+<li class="packed"><strong><u>The Space Trilogy, by C.S. Lewis</u></strong>:
+ I need to re-read this and write long reviews of them, since I have a
+ lot to say about them. But they need to be read in the context of the
+ Christian faith to make any sense.</li>
+
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid>https://www.eyrie.org/~eagle/journal/2011-08/006.html</guid>
+ </item>
+ </channel>
+</rss>
diff --git a/t/data/spin/output/journal/index.html b/t/data/spin/output/journal/index.html
new file mode 100644
index 0000000..5db5156
--- /dev/null
+++ b/t/data/spin/output/journal/index.html
@@ -0,0 +1,807 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Eagle's Path</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <link rel="stylesheet" href="/~eagle/styles/journal-set.css" type="text/css" />
+ <link rel="alternate" type="application/rss+xml" href="index.rss"
+ title="Eagle's Path" />
+ <link rel="alternate" type="application/rss+xml" href="debian.rss"
+ title="Eagle's Path (Debian focused)" />
+ <link rel="alternate" type="application/rss+xml" href="reviews.rss"
+ title="Eagle's Path (reviews only)" />
+</head>
+
+<!-- Spun from index.th by spin %VERSION% on %DATE% -->
+
+<body>
+
+<h1>Eagle's Path</h1>
+
+<blockquote class="quote"><p class="short">
+ Passion and dispassion. Choose two.
+</p><p class="attribution">
+ Larry Wall
+</p></blockquote>
+
+<div class="sidebar">
+ <h2>Syndication</h2>
+
+<p>
+ <span class="feed"><a href="/~eagle/journal/index.rss"><img src="/~eagle/journal/feed.png" alt="RSS" /></a>
+ <a href="/~eagle/journal/index.rss">All posts</a><br /></span>
+ <span class="feed"><a href="/~eagle/journal/reviews.rss"><img src="/~eagle/journal/feed.png" alt="RSS" /></a>
+ <a href="/~eagle/journal/reviews.rss">Only reviews</a><br /></span>
+ <span class="feed"><a href="/~eagle/journal/software.rss"><img src="/~eagle/journal/feed.png" alt="RSS" /></a>
+ <a href="/~eagle/journal/software.rss">Only software releases</a><br /></span>
+ <span class="feed"><a href="/~eagle/journal/debian.rss"><img src="/~eagle/journal/feed.png" alt="RSS" /></a>
+ <a href="/~eagle/journal/debian.rss">Debian-focused</a><br /></span>
+ <span class="feed"><a href="/~eagle/journal/../changes.rss"><img src="/~eagle/journal/feed.png" alt="RSS" /></a>
+ <a href="/~eagle/journal/../changes.rss">Web site changes</a><br /></span>
+ <span class="feed">DW:
+ <a href="https://eaglespath-feed.dreamwidth.org/"><img src="/~eagle/journal/feed.png" alt="" /></a>
+ <a href="https://eaglespath-feed.dreamwidth.org/">eaglespath_feed</a></span> <br />
+</p>
+
+ <h2>Comments</h2>
+
+<p>
+ This journal does not support comments.
+ <a href="/~eagle/faqs/comments.html">Read why</a>.
+</p>
+
+ <h2>Archives</h2>
+
+ <div class="archives"> <p class="text">
+ Book and magazine reviews are not included in the journal
+ archives. For older book reviews, see
+ <a href="/~eagle/reviews/date.html">all book reviews sorted by
+ date</a> and <a href="/~eagle/reviews/magazines.html">all magazine
+ reviews</a>.
+ </p>
+
+<p>
+ 2021:
+ <a href="/~eagle/journal/2021-01/">01</a> <a href="/~eagle/journal/2021-02/">02</a> <a href="/~eagle/journal/2021-03/">03</a>
+ <a href="/~eagle/journal/2021-04/">04</a> <a href="/~eagle/journal/2021-05/">05</a> <a href="/~eagle/journal/2021-06/">06</a>
+ <a href="/~eagle/journal/2021-07/">07</a> <a href="/~eagle/journal/2021-08/">08</a>
+</p>
+
+<p>
+ 2020:
+ <a href="/~eagle/journal/2020-01/">01</a> <a href="/~eagle/journal/2020-02/">02</a> <a href="/~eagle/journal/2020-03/">03</a>
+ <a href="/~eagle/journal/2020-04/">04</a> <a href="/~eagle/journal/2020-05/">05</a> <a href="/~eagle/journal/2020-06/">06</a>
+ <a href="/~eagle/journal/2020-07/">07</a> <a href="/~eagle/journal/2020-08/">08</a> <a href="/~eagle/journal/2020-09/">09</a>
+ <a href="/~eagle/journal/2020-10/">10</a> <a href="/~eagle/journal/2020-11/">11</a> <a href="/~eagle/journal/2020-12/">12</a>
+</p>
+
+<p>
+ 2019:
+ <a href="/~eagle/journal/2019-01/">01</a> <a href="/~eagle/journal/2019-02/">02</a> <a href="/~eagle/journal/2019-03/">03</a>
+ <a href="/~eagle/journal/2019-04/">04</a> <a href="/~eagle/journal/2019-05/">05</a> <a href="/~eagle/journal/2019-06/">06</a>
+ <a href="/~eagle/journal/2019-07/">07</a> <a href="/~eagle/journal/2019-08/">08</a> <a href="/~eagle/journal/2019-09/">09</a>
+ <a href="/~eagle/journal/2019-10/">10</a> <a href="/~eagle/journal/2019-11/">11</a> <a href="/~eagle/journal/2019-12/">12</a>
+</p>
+
+<p>
+ 2018:
+ <a href="/~eagle/journal/2018-01/">01</a> <a href="/~eagle/journal/2018-02/">02</a> <a href="/~eagle/journal/2018-03/">03</a>
+ <a href="/~eagle/journal/2018-04/">04</a> <a href="/~eagle/journal/2018-05/">05</a> <a href="/~eagle/journal/2018-06/">06</a>
+ <a href="/~eagle/journal/2018-07/">07</a> <a href="/~eagle/journal/2018-08/">08</a> <a href="/~eagle/journal/2018-09/">09</a>
+ <a href="/~eagle/journal/2018-10/">10</a> 11 <a href="/~eagle/journal/2018-12/">12</a>
+</p>
+
+<p>
+ 2017:
+ <a href="/~eagle/journal/2017-01/">01</a> <a href="/~eagle/journal/2017-02/">02</a> <a href="/~eagle/journal/2017-03/">03</a>
+ <a href="/~eagle/journal/2017-04/">04</a> <a href="/~eagle/journal/2017-05/">05</a> <a href="/~eagle/journal/2017-06/">06</a>
+ <a href="/~eagle/journal/2017-07/">07</a> 08 <a href="/~eagle/journal/2017-09/">09</a>
+ <a href="/~eagle/journal/2017-10/">10</a> <a href="/~eagle/journal/2017-11/">11</a> <a href="/~eagle/journal/2017-12/">12</a>
+</p>
+
+<p>
+ 2016:
+ <a href="/~eagle/journal/2016-01/">01</a> <a href="/~eagle/journal/2016-02/">02</a> <a href="/~eagle/journal/2016-03/">03</a>
+ <a href="/~eagle/journal/2016-04/">04</a> <a href="/~eagle/journal/2016-05/">05</a> 06
+ <a href="/~eagle/journal/2016-07/">07</a> <a href="/~eagle/journal/2016-08/">08</a> <a href="/~eagle/journal/2016-09/">09</a>
+ <a href="/~eagle/journal/2016-10/">10</a> <a href="/~eagle/journal/2016-11/">11</a> <a href="/~eagle/journal/2016-12/">12</a>
+</p>
+
+<p>
+ 2015:
+ <a href="/~eagle/journal/2015-01/">01</a> 02 <a href="/~eagle/journal/2015-03/">03</a>
+ <a href="/~eagle/journal/2015-04/">04</a> <a href="/~eagle/journal/2015-05/">05</a> 06
+ <a href="/~eagle/journal/2015-07/">07</a> <a href="/~eagle/journal/2015-08/">08</a> <a href="/~eagle/journal/2015-09/">09</a>
+ <a href="/~eagle/journal/2015-10/">10</a> <a href="/~eagle/journal/2015-11/">11</a> <a href="/~eagle/journal/2015-12/">12</a>
+</p>
+
+<p>
+ 2014:
+ <a href="/~eagle/journal/2014-01/">01</a> <a href="/~eagle/journal/2014-02/">02</a> <a href="/~eagle/journal/2014-03/">03</a>
+ <a href="/~eagle/journal/2014-04/">04</a> <a href="/~eagle/journal/2014-05/">05</a> <a href="/~eagle/journal/2014-06/">06</a>
+ <a href="/~eagle/journal/2014-07/">07</a> <a href="/~eagle/journal/2014-08/">08</a> <a href="/~eagle/journal/2014-09/">09</a>
+ <a href="/~eagle/journal/2014-10/">10</a> <a href="/~eagle/journal/2014-11/">11</a> <a href="/~eagle/journal/2014-12/">12</a>
+</p>
+
+<p>
+ 2013:
+ <a href="/~eagle/journal/2013-01/">01</a> <a href="/~eagle/journal/2013-02/">02</a> <a href="/~eagle/journal/2013-03/">03</a>
+ <a href="/~eagle/journal/2013-04/">04</a> <a href="/~eagle/journal/2013-05/">05</a> <a href="/~eagle/journal/2013-06/">06</a>
+ <a href="/~eagle/journal/2013-07/">07</a> <a href="/~eagle/journal/2013-08/">08</a> <a href="/~eagle/journal/2013-09/">09</a>
+ <a href="/~eagle/journal/2013-10/">10</a> <a href="/~eagle/journal/2013-11/">11</a> <a href="/~eagle/journal/2013-12/">12</a>
+</p>
+
+<p>
+ 2012:
+ <a href="/~eagle/journal/2012-01/">01</a> <a href="/~eagle/journal/2012-02/">02</a> <a href="/~eagle/journal/2012-03/">03</a>
+ <a href="/~eagle/journal/2012-04/">04</a> <a href="/~eagle/journal/2012-05/">05</a> <a href="/~eagle/journal/2012-06/">06</a>
+ <a href="/~eagle/journal/2012-07/">07</a> <a href="/~eagle/journal/2012-08/">08</a> <a href="/~eagle/journal/2012-09/">09</a>
+ <a href="/~eagle/journal/2012-10/">10</a> <a href="/~eagle/journal/2012-11/">11</a> <a href="/~eagle/journal/2012-12/">12</a>
+</p>
+
+<p>
+ 2011:
+ <a href="/~eagle/journal/2011-01/">01</a> <a href="/~eagle/journal/2011-02/">02</a> <a href="/~eagle/journal/2011-03/">03</a>
+ <a href="/~eagle/journal/2011-04/">04</a> <a href="/~eagle/journal/2011-05/">05</a> <a href="/~eagle/journal/2011-06/">06</a>
+ <a href="/~eagle/journal/2011-07/">07</a> <a href="/~eagle/journal/2011-08/">08</a> <a href="/~eagle/journal/2011-09/">09</a>
+ <a href="/~eagle/journal/2011-10/">10</a> 11 <a href="/~eagle/journal/2011-12/">12</a>
+</p>
+
+<p>
+ 2010:
+ <a href="/~eagle/journal/2010-01/">01</a> <a href="/~eagle/journal/2010-02/">02</a> <a href="/~eagle/journal/2010-03/">03</a>
+ <a href="/~eagle/journal/2010-04/">04</a> <a href="/~eagle/journal/2010-05/">05</a> <a href="/~eagle/journal/2010-06/">06</a>
+ <a href="/~eagle/journal/2010-07/">07</a> <a href="/~eagle/journal/2010-08/">08</a> <a href="/~eagle/journal/2010-09/">09</a>
+ <a href="/~eagle/journal/2010-10/">10</a> <a href="/~eagle/journal/2010-11/">11</a> <a href="/~eagle/journal/2010-12/">12</a>
+</p>
+
+<p>
+ 2009:
+ <a href="/~eagle/journal/2009-01/">01</a> <a href="/~eagle/journal/2009-02/">02</a> <a href="/~eagle/journal/2009-03/">03</a>
+ <a href="/~eagle/journal/2009-04/">04</a> <a href="/~eagle/journal/2009-05/">05</a> <a href="/~eagle/journal/2009-06/">06</a>
+ <a href="/~eagle/journal/2009-07/">07</a> <a href="/~eagle/journal/2009-08/">08</a> <a href="/~eagle/journal/2009-09/">09</a>
+ <a href="/~eagle/journal/2009-10/">10</a> <a href="/~eagle/journal/2009-11/">11</a> <a href="/~eagle/journal/2009-12/">12</a>
+</p>
+
+<p>
+ 2008:
+ <a href="/~eagle/journal/2008-01/">01</a> <a href="/~eagle/journal/2008-02/">02</a> <a href="/~eagle/journal/2008-03/">03</a>
+ <a href="/~eagle/journal/2008-04/">04</a> <a href="/~eagle/journal/2008-05/">05</a> <a href="/~eagle/journal/2008-06/">06</a>
+ <a href="/~eagle/journal/2008-07/">07</a> <a href="/~eagle/journal/2008-08/">08</a> <a href="/~eagle/journal/2008-09/">09</a>
+ <a href="/~eagle/journal/2008-10/">10</a> <a href="/~eagle/journal/2008-11/">11</a> <a href="/~eagle/journal/2008-12/">12</a>
+</p>
+
+<p>
+ 2007:
+ <a href="/~eagle/journal/2007-01/">01</a> <a href="/~eagle/journal/2007-02/">02</a> <a href="/~eagle/journal/2007-03/">03</a>
+ <a href="/~eagle/journal/2007-04/">04</a> <a href="/~eagle/journal/2007-05/">05</a> <a href="/~eagle/journal/2007-06/">06</a>
+ <a href="/~eagle/journal/2007-07/">07</a> <a href="/~eagle/journal/2007-08/">08</a> <a href="/~eagle/journal/2007-09/">09</a>
+ <a href="/~eagle/journal/2007-10/">10</a> <a href="/~eagle/journal/2007-11/">11</a> <a href="/~eagle/journal/2007-12/">12</a>
+</p>
+
+<p>
+ 2006:
+ <a href="/~eagle/journal/2006-01/">01</a> <a href="/~eagle/journal/2006-02/">02</a> <a href="/~eagle/journal/2006-03/">03</a>
+ <a href="/~eagle/journal/2006-04/">04</a> <a href="/~eagle/journal/2006-05/">05</a> <a href="/~eagle/journal/2006-06/">06</a>
+ <a href="/~eagle/journal/2006-07/">07</a> <a href="/~eagle/journal/2006-08/">08</a> <a href="/~eagle/journal/2006-09/">09</a>
+ <a href="/~eagle/journal/2006-10/">10</a> <a href="/~eagle/journal/2006-11/">11</a> <a href="/~eagle/journal/2006-12/">12</a>
+</p>
+
+<p>
+ 2005:
+ <a href="/~eagle/journal/2005-01/">01</a> <a href="/~eagle/journal/2005-02/">02</a> <a href="/~eagle/journal/2005-03/">03</a>
+ <a href="/~eagle/journal/2005-04/">04</a> <a href="/~eagle/journal/2005-05/">05</a> <a href="/~eagle/journal/2005-06/">06</a>
+ <a href="/~eagle/journal/2005-07/">07</a> <a href="/~eagle/journal/2005-08/">08</a> <a href="/~eagle/journal/2005-09/">09</a>
+ <a href="/~eagle/journal/2005-10/">10</a> <a href="/~eagle/journal/2005-11/">11</a> <a href="/~eagle/journal/2005-12/">12</a>
+</p>
+
+<p>
+ 2004:
+ <a href="/~eagle/journal/2004-01/">01</a> <a href="/~eagle/journal/2004-02/">02</a> <a href="/~eagle/journal/2004-03/">03</a>
+ <a href="/~eagle/journal/2004-04/">04</a> <a href="/~eagle/journal/2004-05/">05</a> <a href="/~eagle/journal/2004-06/">06</a>
+ <a href="/~eagle/journal/2004-07/">07</a> <a href="/~eagle/journal/2004-08/">08</a> <a href="/~eagle/journal/2004-09/">09</a>
+ <a href="/~eagle/journal/2004-10/">10</a> <a href="/~eagle/journal/2004-11/">11</a> <a href="/~eagle/journal/2004-12/">12</a>
+</p>
+
+<p>
+ 2003:
+ <a href="/~eagle/journal/2003-03/">03</a>
+ <a href="/~eagle/journal/2003-04/">04</a> <a href="/~eagle/journal/2003-05/">05</a> <a href="/~eagle/journal/2003-06/">06</a>
+ <a href="/~eagle/journal/2003-07/">07</a> <a href="/~eagle/journal/2003-08/">08</a> <a href="/~eagle/journal/2003-09/">09</a>
+ <a href="/~eagle/journal/2003-10/">10</a> <a href="/~eagle/journal/2003-11/">11</a> <a href="/~eagle/journal/2003-12/">12</a>
+</p></div>
+
+ <h2>Other Book Reviews</h2>
+
+<p>
+ <a href="https://lightreads.dreamwidth.org/">lightreads</a> <br />
+ <a href="https://stevereads.com/">Stephen Laniel</a> <br />
+ <a href="https://jamesdavisnicoll.com/">James Davis Nicoll</a> <br />
+ <a href="http://cloggie.org/books2/">Martin's Booklog</a> <br />
+ <a href="https://steelypips.org/weblog/">Outside of a Dog</a> <br />
+ <a href="https://rushthatspeaks.dreamwidth.org/">rushthatspeaks</a> <br />
+ <a href="http://sff180.com/">SFF180</a> <br />
+ <a href="https://www-users.cs.york.ac.uk/~susan/books/pages/">Susan Stepney</a> <br />
+ <a href="https://www.tor.com/">Tor.com</a> <br />
+ <a href="http://booklog.klio.org/">Weasel Words</a>
+</p>
+
+ <h2>Fiction Authors</h2>
+
+<p>
+ <a href="https://matociquala.dreamwidth.org/">Elizabeth Bear</a> <br />
+ <a href="https://dreamcafe.com/">Steven Brust</a> <br />
+ <a href="https://nicolagriffith.com/blog/">Nicola Griffith</a> <br />
+ <a href="https://ansible.uk/">David Langford</a> <br />
+ <a href="https://yhlee.dreamwidth.org/">Yoon Ha Lee</a> <br />
+ <a href="https://nkjemisin.com/blog/">N.K. Jemisin</a> <br />
+ <a href="https://www.rosemarykirstein.com/">Rosemary Kirstein</a> <br />
+ <a href="https://seanan-mcguire.dreamwidth.org/">Seanan MacGuire</a> <br />
+ <a href="https://kenmacleod.blogspot.com/">Ken MacLeod</a> <br />
+ <a href="https://truepenny.dreamwidth.org/">Sarah Monette</a> <br />
+ <a href="http://elizabethmoon.com/blog/">Elizabeth Moon</a> <br />
+ <a href="https://lydamorehouse.dreamwidth.org/">Lyda Morehouse</a> <br />
+ <a href="https://whatever.scalzi.com/">John Scalzi</a> <br />
+ <a href="https://www.kschroeder.com/weblog">Karl Schroeder</a> <br />
+ <a href="https://tkingfisher.dreamwidth.org/">Ursula Vernon</a> <br />
+ <a href="http://www.jowaltonbooks.com/blog-2/">Jo Walton</a>
+</p>
+
+ <h2>Social Commentary</h2>
+
+<p>
+ <a href="https://www.askamanager.org/">Ask A Manager</a> <br />
+ <a href="https://www.badscience.net/">Bad Science</a> <br />
+ <a href="https://captainawkward.com/">Captain Awkward</a> <br />
+ <a href="https://www.theatlantic.com/author/ta-nehisi-coates/">Ta-Nehisi Coates</a> <br />
+ <a href="https://www.patheos.com/blogs/daylightatheism/">Daylight Atheism</a> <br />
+ <a href="https://www.nytimes.com/column/paul-krugman">Paul Krugman</a> <br />
+ <a href="https://loweringthebar.net/">Lowering the Bar</a> <br />
+ <a href="https://nielsenhayden.com/makinglight/">Making Light</a> <br />
+ <a href="https://james-davis-nicoll.dreamwidth.org/">James Nicoll</a> <br />
+ <a href="https://www.schneier.com/blog/">Bruce Schneier</a> <br />
+ <a href="https://www.patheos.com/blogs/slacktivist/">Slacktivist (Fred Clark)</a>
+</p>
+
+ <h2>Gaming</h2>
+
+<p>
+ <a href="https://majornelson.com/">Major Nelson (Xbox Live)</a> <br />
+ <a href="https://www.penny-arcade.com/">Penny Arcade</a> <br />
+ <a href="https://www.trueachievements.com/">TrueAchievements</a>
+</p>
+
+ <h2>Other</h2>
+
+<p>
+ <a href="https://www.dnalounge.com/backstage/log/">DNA Lounge</a> <br />
+ <a href="https://xkcd.com/">XKCD</a> <br />
+ <a href="https://what-if.xkcd.com/">XKCD What If?</a> <br />
+ <a href="https://www.jwz.org/blog/">Jamie Zawinski</a>
+</p></div>
+<div class="journal">
+<h2>2011-08-13: NPR Top 100 SFF meme</h2>
+
+<p>
+By way of <a href="http://firecat.dreamwidth.org/profile"><img src="dw.png" alt="" /></a><a href="http://firecat.dreamwidth.org/"><strong>firecat</strong></a>, this is the result of a public nomination process,
+panel review, and Internet voting on the NPR web site: an attempt at the
+top 100 works of science fiction or fantasy. Series are counted as single
+works for the purposes of the list.
+</p>
+
+<p>
+This list has a ton of problems, like any list of this sort will have. It
+leans rather more heavily towards white male than the actual literature,
+and certainly than my reading. The lack of non-white writers is
+particularly troubling. But it's still an interesting selection. (For
+those wondering about some obvious omissions, young adult was explicitly
+excluded.)
+</p>
+
+<p>
+The rules are to bold the works one has read in their entirety and
+italicize the ones you've read part of but not finished. I'll add
+underlining the works that I own, which provides some indication of the
+things that I've not read but that are on my to-read list.
+</p>
+
+
+
+
+
+
+
+<ol>
+<li class="packed"><strong><u>The Lord Of The Rings Trilogy, by J.R.R. Tolkien</u></strong>:
+ It's a boring winner because it always wins, but it's an amazing book
+ and I can't argue with it. I'll probably never review this one since
+ I'm not sure I have anything original to say about it.</li>
+<li class="packed"><strong><u>The Hitchhiker's Guide To The Galaxy, by Douglas Adams</u></strong>:
+ Probably the best humorous SF. I've read the entire series except for
+ <cite>The Salmon of Doubt</cite>, the unfinished book left when Adams died.
+ Will re-read them all at some point.</li>
+<li class="packed"><strong><u>Ender's Game, by Orson Scott Card</u></strong>:
+ I intensely dislike Card's politics, but this book is still very good.
+ It's on my re-read list so that I can write a proper review of it.</li>
+<li class="packed"><strong>The Dune Chronicles, by Frank Herbert</strong>:
+ I've read the whole series, but only own the first, which is by far
+ the best. I'm tempted to re-read the whole series at some point,
+ since I don't remember it well enough to analyze it, but I'll probably
+ stop after re-reading just the first.</li>
+<li class="packed"><em><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-57340-3.html">A Song Of Ice And Fire
+ Series</a>, by George R. R. Martin</em>:
+ I own the first couple and have read and reviewed the first four. I
+ think they're somewhat overrated, but will probably read the latest.
+ I'm not sure if I'll re-read the previous books to remember what the
+ heck was going on.</li>
+<li class="packed"><u>1984, by George Orwell</u>:
+ I've somehow never read this. I keep meaning to, particularly since I
+ generally love Orwell.</li>
+<li class="packed"><strong>Fahrenheit 451, by Ray Bradbury</strong>:
+ Massively overrated, or perhaps just made unoriginal by subsequent
+ history. I found it boring and uninteresting.</li>
+<li class="packed"><strong><u>The Foundation Trilogy, by Isaac Asimov</u></strong>:
+ Thoroughly enjoyed this when I was a teenager. I suspect I'll like it
+ less as an adult, but definitely on my to-read list.</li>
+<li class="packed"><u>Brave New World, by Aldous Huxley</u>: Another classic I've never read.</li>
+<li class="packed"><strong><u>American Gods, by Neil Gaiman</u></strong>:
+ Great book. Need to re-read to review.</li>
+<li class="packed"><u>The Princess Bride, by William Goldman</u>:
+ On the list to read. Apparently significantly better than the movie,
+ which I liked less than everyone else on the planet.</li>
+<li class="packed"><em>The Wheel Of Time Series, by Robert Jordan</em>:
+ I read up to book eight (<cite>The Path of Daggers</cite>) and bailed
+ halfway through it. It started as somewhat interesting fantasy with
+ deep world building and fun world surprises, but the writing got worse
+ and worse and the characters became miserably unlikeable. I'm still
+ occasionally tempted to re-read and finish it, but it's a bad
+ temptation.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/animal-farm.html">Animal Farm</a>, by George
+ Orwell</u></strong>:
+ Great book, and a political and historical classic. Best read in
+ combination with a good history.</li>
+<li class="packed"><strong><u>Neuromancer, by William Gibson</u></strong>: Meh.</li>
+<li class="packed"><strong><u>Watchmen, by Alan Moore</u></strong>: Brilliant. On my list to re-read.</li>
+<li class="packed"><strong><u>I, Robot, by Isaac Asimov</u></strong>:
+ Okay, but I generally find Asimov a bit overrated. Good for
+ intellectual puzzle stories, but not that deep of ones, and the
+ characters are essentially nonentities.</li>
+<li class="packed"><strong>Stranger In A Strange Land, by Robert Heinlein</strong>:
+ The only book that I've ever put down within fifteen pages of the end
+ and could never muster enough caring to pick up again. I should
+ re-read it at some point to review it, but I don't think it's very
+ good.</li>
+<li class="packed"><u>The Kingkiller Chronicles, by Patrick Rothfuss</u>:
+ Well, I own the first one at least.</li>
+<li class="packed">Slaughterhouse-Five, by Kurt Vonnegut: Need to read.</li>
+<li class="packed">Frankenstein, by Mary Shelley:
+ I've never actually read this, but I'm not sure there's much point in
+ reading it. I've been so thoroughly exposed to the angles and
+ interpretations of it that reading it at this point would be an odd
+ experience. I probably should for completion's sake at some point.
+ (This is the first woman on the list, and of course she's long-dead
+ and not writing in the modern SF tradition.)</li>
+<li class="packed"><u>Do Androids Dream Of Electric Sheep?, by Philip K. Dick</u>:
+ I do need to read more Dick. I don't think this is as good as its
+ placement on the list; everyone just knows <cite>Blade Runner</cite> (which
+ was based on this).</li>
+<li class="packed"><u>The Handmaid's Tale, by Margaret Atwood</u>:
+ I have a bunch of Atwood, but haven't yet read any of it.</li>
+<li class="packed">The Dark Tower Series, by Stephen King:
+ It's rare for me to find any horror I actually like, but my
+ understanding is that this is less horror than a lot of King. I may
+ give it a try someday (but probably won't).</li>
+<li class="packed"><strong>2001: A Space Odyssey, by Arthur C. Clarke</strong>:
+ Much better than the movie since it actually explained what was going
+ on, although it wasn't as atmospheric. Not actually as good as its
+ position on lists like this would indicate. Mostly it's just a book
+ everyone has heard of.</li>
+<li class="packed"><u>The Stand, by Stephen King</u>: See above about horror.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-56261-4.html">Snow Crash</a>, by Neal
+ Stephenson</u></strong>:
+ One of my favorite humorous SF books, plus features the trademark
+ Stephenson infodumping and some neat bits about building a virtual
+ world.</li>
+<li class="packed"><u>The Martian Chronicles, by Ray Bradbury</u>: On the list to read.</li>
+<li class="packed">Cat's Cradle, by Kurt Vonnegut: Need to track down and read.</li>
+<li class="packed"><strong><u>The Sandman Series, by Neil Gaiman</u></strong>:
+ Quite possibly the best comic book series ever written. Utterly
+ brilliant. The one set of graphic novels that everyone should read at
+ some point in their life.</li>
+<li class="packed">A Clockwork Orange, by Anthony Burgess:
+ Huh. Not really on my radar to read, although of course I've heard of
+ it.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-441-78358-9.html">Starship Troopers</a>, by
+ Robert Heinlein</u></strong>:
+ Also overrated, particularly since it's not much of a story. It's an
+ extended and multifaceted political essay, which isn't as simple as it
+ appears to be. The movie, quite contrary to the negative impression
+ people have of it, is a delightful parody of how the book comes across
+ on its surface reading.</li>
+<li class="packed"><u>Watership Down, by Richard Adams</u>: Yeah, yeah, I know I should read it.</li>
+<li class="packed"><strong><u>Dragonflight, by Anne McCaffrey</u></strong>:
+ I loved the Pern books as a teenager up until the point when the just
+ became retellings of the same book from a new perspective. I'm afraid
+ to re-read them.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-425-03436-4.html">The Moon Is A Harsh
+ Mistress</a>, by Robert Heinlein</u></strong>:
+ Much, much better than <cite>Starship Troopers</cite>. One of the better
+ non-juvenile Heinleins. Still not as good as people think it is.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-37926-7.html">A Canticle For
+ Leibowitz</a>, by Walter M. Miller</u></strong>:
+ I was disappointed in this given how much people like it, but it
+ deserves some credit for being foundational to post-apocalyptic SF.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-517-26188-Xa.html">The Time Machine</a>, by
+ H.G. Wells</u></strong>:
+ More interesting than you might think it would be, given when it was
+ written and the emphasis on description rather than characterization.
+ But it still suffers from a lack of characters for me. Hard to come
+ to this fresh now, since the ideas have been so used elsewhere.</li>
+<li class="packed">20,000 Leagues Under The Sea, by Jules Verne:
+ I've seen the movie take on it. I've not felt a strong urge to read
+ the book, although I probably "should."</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-27450-3.html">Flowers For Algernon</a>,
+ by Daniel Keys</u></strong>:
+ Unforgettable and very strongly affecting (and depressing).</li>
+<li class="packed"><u>The War Of The Worlds, by H.G. Wells</u>: Will read at some point.</li>
+<li class="packed"><u>The Chronicles Of Amber, by Roger Zelazny</u>: Will probably read soon.</li>
+<li class="packed"><strong><u>The Belgariad, by David Eddings</u></strong>:
+ Yeah, I read this as a teenager and quite liked it. But I have no
+ idea what it's doing on this list; it is in absolutely no way one of
+ the best 100 SFF works of all time. (Well, that's not true; I know
+ what it's doing on this list. People have heard of it and read it.
+ But it shouldn't be on this list.)</li>
+<li class="packed"><u>The Mists Of Avalon, by Marion Zimmer Bradley</u>: On the list.</li>
+<li class="packed">The Mistborn Series, by Brandon Sanderson: Want to read this.</li>
+<li class="packed"><strong><u>Ringworld, by Larry Niven</u></strong>:
+ Interesting idea fiction with a great sense of scale. Shame the
+ characters aren't as good as the background. But it's a good book,
+ worth reading.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-441-47812-3.html">The Left Hand Of
+ Darkness</a>, by Ursula K. LeGuin</u></strong>:
+ A deserved classic of anthropological SF with profound things to say
+ about how culture and friendship are constructed.</li>
+<li class="packed"><strong><u>The Silmarillion, by J.R.R. Tolkien</u></strong>:
+ I love this book, but the first section is hard going if you don't
+ like reading mythology. Skip ahead if you're struggling; the gems are
+ later.</li>
+<li class="packed"><u>The Once And Future King, by T.H. White</u>: Definitely on the list to read.</li>
+<li class="packed"><strong><u>Neverwhere, by Neil Gaiman</u></strong>:
+ I'm not sure I'd put it on this list, as there are better Gaiman (and
+ Gaiman is already overrepresented), but it's a solid "urban" fantasy
+ in the old sense of that term. Inventive, with a feel similar to some
+ of the <cite>Sandman</cite> stories.</li>
+<li class="packed"><strong><u>Childhood's End, by Arthur C. Clarke</u></strong>:
+ I read this eons ago and can barely remember it. I definitely need to
+ re-read it.</li>
+<li class="packed">Contact, by Carl Sagan:
+ Liked the movie, have never had any particular urge to read the book.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-28368-5.html">The Hyperion Cantos</a>, by
+ Dan Simmons</u></strong>:
+ Some of my favorite SF novels ever. The third book is the weakest,
+ and the fourth book has problems, but I adore it.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/1-56389-470-X.html">Stardust</a>, by Neil
+ Gaiman</u></strong>:
+ Really far too much Gaiman on this list. But also a good book.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-380-78862-4.html">Cryptonomicon</a>, by Neal
+ Stephenson</u></strong>:
+ Fantastic stuff. Not SF in any traditional sense. It's a combination
+ of secret history and contemporary thriller. But it's written in the
+ Stephenson massive entertaining infodumping style, so it feels like SF
+ and makes it onto lists like this. It's very long, but I've read it
+ twice and don't regret it.</li>
+<li class="packed">World War Z, by Max Brooks:
+ Have a hard time believing this really belongs here, but I haven't
+ read it so I couldn't say for sure.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-345-27505-5.html">The Last Unicorn</a>, by
+ Peter S. Beagle</u></strong>:
+ Eh, it's not a bad book, but I'm not sure it really belongs on this
+ list. But it does have an aesthetic that's hard to find in any other
+ book.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-380-70821-3.html">The Forever War</a>, by Joe
+ Haldeman</u></strong>:
+ A very important response to the whole sub-genre of military SF, and
+ very influential.</li>
+<li class="packed"><u>Small Gods, by Terry Pratchett</u>: Getting to it.</li>
+<li class="packed"><em><u>The Chronicles Of Thomas Covenant, The Unbeliever, by Stephen
+ R. Donaldson</u></em>:
+ Read the first book, wasn't much of a fan. I might get back to it at
+ some point, but I'm not particularly eager.</li>
+<li class="packed"><strong><a href="https://www.eyrie.org/~eagle/reviews/books/0-671-87749-6a.html">The Vorkosigan Saga</a>, by
+ Lois McMaster Bujold</strong>:
+ I don't like the early books as much as some, but I love some of the
+ later books. The last few have been disappointing, but overall very
+ much worth reading, and belongs around here on the list.</li>
+<li class="packed">Going Postal, by Terry Pratchett: Getting to it.</li>
+<li class="packed"><strong>The Mote In God's Eye, by Larry Niven &amp; Jerry Pournelle</strong>:
+ Read many years ago and barely remember it. I need to re-read it,
+ particularly since there's a new sequal by Pournelle's daughter that
+ looks well worth reading.</li>
+<li class="packed"><em>The Sword Of Truth, by Terry Goodkind</em>:
+ I read way too many books in this series. Others should not repeat my
+ mistake. Generic fantasy about incredibly stupid people that turns
+ into libertarian political ravings.</li>
+<li class="packed">The Road, by Cormac McCarthy: Not my thing.</li>
+<li class="packed"><strong><a href="https://www.eyrie.org/~eagle/reviews/books/1-58234-416-7.html">Jonathan Strange &amp; Mr
+ Norrell</a>, by Susanna Clarke</strong>:
+ A nearly unique reading experience, and the best footnoted fantasy
+ that I've ever read (and that includes Pratchett). Great stuff if you
+ don't mind the slow pace. I'm eagerly hoping for an actual sequel.</li>
+<li class="packed">I Am Legend, by Richard Matheson:
+ Having a hard time getting interested enough in a book about zombies.
+ But I've been wrong about that
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-316-12246-7.html">before</a>.</li>
+<li class="packed">The Riftwar Saga, by Raymond E. Feist:
+ Heard of it, but not enough to get it onto my want list.</li>
+<li class="packed">The Shannara Trilogy, by Terry Brooks:
+ Heard enough about it to not put it on my want list.</li>
+<li class="packed">The Conan The Barbarian Series, by R.E. Howard:
+ Something that I feel like I "should" read, but usually I'm not a big
+ fan of pulp.</li>
+<li class="packed"><u>The Farseer Trilogy, by Robin Hobb</u>:
+ Own the first, which has been on my to-read list for a very long time.
+ Someday I'll get to it. I should probably buy all of the trilogy
+ before starting it.</li>
+<li class="packed"><strong><a href="https://www.eyrie.org/~eagle/reviews/books/1-931561-64-8.html">The Time Traveler's
+ Wife</a>, by Audrey Niffenegger</strong>:
+ Surprisingly good for a literary fantasy, with some fantastic moments
+ of description.</li>
+<li class="packed">The Way Of Kings, by Brandon Sanderson: Want to read at some point.</li>
+<li class="packed">A Journey To The Center Of The Earth, by Jules Verne:
+ As above, uninspired to read Verne.</li>
+<li class="packed"><em><a href="https://www.eyrie.org/~eagle/reviews/books/0-88038-905-2.html">The Legend Of Drizzt
+ Series</a>, by R.A. Salvatore</em>:
+ Read the first one, and unless they get substantially better, I have
+ no interest in reading more. Very stock power fantasy with
+ one-dimensional characters.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-765-31524-6.html">Old Man's War</a>, by John
+ Scalzi</u></strong>:
+ The later books in the series are better than the first one. An
+ interesting take on military SF, but I'm not sure it really rises to
+ the level of this sort of list.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-57331-4.html">The Diamond Age</a>, by
+ Neil Stephenson</u></strong>:
+ One too many Stephenson for this list, plus <cite>Anathem</cite> is probably
+ more deserving of this place, but there are some neat bits about
+ computation theory.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-28789-3.html">Rendezvous With Rama</a>,
+ by Arthur C. Clarke</u></strong>:
+ Completely overrated. A bad book that just happens to be foundational
+ in a particular sub-genre of SF. Done much better by other people.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-765-34298-7.html">The Kushiel's Legacy
+ Series</a>, by Jacqueline Carey</u></strong>:
+ By far my favorite epic fantasy series. Lush, involved, very
+ creative, and with a truly unusual heroine. Wonderful stuff.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-06-105488-7.html">The Dispossessed</a>, by
+ Ursula K. LeGuin</u></strong>:
+ Great, thoughtful SF. Probably the best in the utopia genre, even
+ though it isn't a utopia.</li>
+<li class="packed">Something Wicked This Way Comes, by Ray Bradbury: Horror. Eh.</li>
+<li class="packed"><u>Wicked, by Gregory Maguire</u>:
+ On the list, but after a general Oz re-read.</li>
+<li class="packed"><u>The Malazan Book Of The Fallen Series, by Steven Erikson</u>:
+ Own the first. Completely intimidated by the length of the series.</li>
+<li class="packed"><u>The Eyre Affair, by Jasper Fforde</u>: On the list.</li>
+<li class="packed"><em><u><a href="https://www.eyrie.org/~eagle/reviews/books/1-85723-138-4.html">The Culture Series</a>, by
+ Iain M. Banks</u></em>:
+ Brilliant stuff, highly recommended. I only haven't read it all
+ because I'm slowly digesting it. Should be higher on the list than
+ this.</li>
+<li class="packed"><u>The Crystal Cave, by Mary Stewart</u>: On the list.</li>
+<li class="packed"><u>Anathem, by Neal Stephenson</u>: On the list.</li>
+<li class="packed">The Codex Alera Series, by Jim Butcher:
+ I'll read the Dresden series, or least part of it, first, and see if
+ that inspires me to read more Butcher. Dubious that this belongs on
+ this list.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-671-45070-0.html">The Book Of The New
+ Sun</a>, by Gene Wolfe</u></strong>:
+ Incredibly influential and important fantasy-flavored SF that should
+ be much higher on the list than this.</li>
+<li class="packed"><strong><u>The Thrawn Trilogy, by Timothy Zahn</u></strong>:
+ This is a <cite>Star Wars</cite> media tie-in series, and one of the few of
+ that type that I've read. I remember quite enjoying it a long time
+ ago, and it's on the list to re-read at some point.</li>
+<li class="packed">The Outlander Series, by Diana Gabaldan:
+ The only thing on this list that I've never even heard of.</li>
+<li class="packed">The Elric Saga, by Michael Moorcock:
+ Definitely want to read this at some point, once I figure out the
+ right place to start and probably after I've read some other
+ Moorcock.</li>
+<li class="packed">The Illustrated Man, by Ray Bradbury:
+ Waiting to see if I like the better-known Bradbury first.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-515-13881-9.html">Sunshine</a>, by Robin
+ McKinley</u></strong>:
+ Quite possibly the best urban fantasy (in the modern definition) that
+ I've ever read.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-812-51528-5.html">A Fire Upon The Deep</a>,
+ by Vernor Vinge</u></strong>:
+ A little overrated, but it has a fun rendition of Usenet and some
+ neat aliens.</li>
+<li class="packed"><strong>The Caves Of Steel, by Isaac Asimov</strong>:
+ Read long ago. Enjoyed it, but don't remember being grabbed by it.
+ There's a bit too much Asimov on this list.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-56073-5.html">The Mars Trilogy</a>, by
+ Kim Stanley Robinson</u></strong>:
+ The most detailed and in-depth politics that you'll find in SF, even
+ more than Le Guin, at the cost of being mind-numbingly boring. Very
+ ambitious, but just doesn't move fast enough or have enough plot.
+ Robinson is less a novelist than a political and hard science essayist
+ in the form of a novel.</li>
+<li class="packed"><strong><u>Lucifer's Hammer, by Larry Niven &amp; Jerry Pournelle</u></strong>:
+ Large-screen disaster novel with a heavy helping of libertarian
+ utopian politics. Does not belong anywhere near this list.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-56273-8.html">Doomsday Book</a>, by
+ Connie Willis</u></strong>:
+ The best of Willis's time travel novels, with fewer communication
+ failures and frantic faffing about than the other ones. Borderline
+ for this list, but probably deserves to be here.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-345-45940-7.html">Perdido Street Station</a>,
+ by China Mieville</u></strong>:
+ Revolutionary fantasy. The founding book of New Weird. I think
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-345-44438-8.html">The Scar</a> is a better
+ book, but I can't argue with this being here.</li>
+<li class="packed">The Xanth Series, by Piers Anthony: I've been warned off these.</li>
+<li class="packed"><strong><u>The Space Trilogy, by C.S. Lewis</u></strong>:
+ I need to re-read this and write long reviews of them, since I have a
+ lot to say about them. But they need to be read in the context of the
+ Christian faith to make any sense.</li>
+</ol>
+
+<p class="footer">2011-08-13 00:09 &mdash;
+ <a href="https://www.eyrie.org/~eagle/journal/2011-08/006.html">Permanent link</a></p>
+
+<h2>2007-01-14: Review: Fermat's Enigma</h2>
+
+<p>
+Review: <cite>Fermat's Enigma</cite>, by Simon Singh
+</p>
+
+<table>
+ <tr>
+ <td>Publisher</td>
+ <td>Anchor</td>
+ </tr>
+
+ <tr>
+ <td>Copyright</td>
+ <td>1997</td>
+ </tr>
+
+ <tr>
+ <td>Printing</td>
+ <td>October 1998</td>
+ </tr>
+
+ <tr>
+ <td>ISBN</td>
+ <td>0-385-49362-2</td>
+ </tr>
+
+ <tr>
+ <td>Format</td>
+ <td>Mass market</td>
+ </tr>
+
+ <tr>
+ <td>Pages</td>
+ <td>305</td>
+ </tr></table>
+
+<p>
+Fermat's Last Theorem is the infamous proposal that:
+</p>
+
+<blockquote><p>
+ <i>x<sup>n</sup> + y<sup>n</sup> = z<sup>n</sup></i>
+</p></blockquote>
+
+<p>
+has no solutions for integer <i>x, y, z, n</i> and <i>n &gt; 2</i>. It's
+infamous for being very simple to state and understand, a variation on the
+equation produced by the Pythagorean Theorem, but incredibly difficult to
+prove. It's also infamous for Pierre de Fermat's maddening marginal note:
+"I have discovered a truly marvelous demonstration of this proposition
+which this margin is too narrow to contain." 350 years after Fermat wrote
+this, the theorem was still unproven in the general case, although the
+theorem for many specific values of <i>n</i> had since been proven.
+</p>
+
+<p>
+<cite>Fermat's Enigma</cite> is a popular history of Fermat's Last Theorem and
+the attempts to prove it, the partial successes and famous failures. It's
+also the story of Andrew Wiles, a Princeton mathematics professor who
+finally proved the theorem in a complex, brilliant proof that builds on
+much of the power of modern mathematics and almost certainly did not
+follow the same path that Fermat himself did. If, in fact, Fermat had
+truly proven the theorem at all, something that we will probably never
+know.
+</p>
+
+<p>
+Singh comes to this subject with a serious structural problem: he's trying
+to write a popular account that's accessible even to people who are hazy
+on algebra and unfamiliar with basic proof technique, but he's trying to
+tell the story of one of the most complex proofs in modern mathematics.
+He tries to avoid the problem by talking about personalities instead of
+mathematical details, mostly successfully. It helps that Fermat's Last
+Theorem has been tackled by a collection of colorful geniuses, and even
+the soft-spoken Wiles has a subtle dramatic charm. Still, he has to cover
+enough of the mathematics for the reader to follow, and I found those
+sections tedious and a little overdramatized. For example, I can see
+using a domino analogy once to explain inductive proof, but Singh belabors
+the analogy until it's painful and talks about infinite chains of infinite
+dominos as if he doesn't understand that such setups are common in even
+simple inductive proofs.
+</p>
+
+<p>
+An excess of drama, cliche, and reptition are the largest problems with
+this book. Explaining why Fermat's Last Theorem is so interesting
+requires diving into areas of math that many readers have never paid
+attention to, and I got the impression that Singh felt he had to create as
+much drama as possible to keep people reading. Occasionally this works.
+The circumstances around Wiles's proof are inherently dramatic, a great
+conclusion to the story. But at times it feels forced, such as when Singh
+goes on about the wonder of absolute mathematical proof and the supposedly
+unique way that mathematicians are more rigorous than any other
+profession. I enjoyed the bits of history and connection he uncovers and
+explains despite his tone, rather than because of it. The book is based
+on a TV documentary, and I started wondering if some of the dramatic tone
+of television carried over into the book where it's more obvious and less
+useful.
+</p>
+
+<p>
+Another difficulty of aiming at such a broad audience is that Singh can't
+dig too deeply into the aspects of this proof that make it so important to
+modern mathematics. Too much background in very difficult math would be
+needed, so his choice makes sense, but I have some of that background and
+I was wanting more. Wiles proved Fermat's Last Theorem by proving the
+Taniyama-Shimura conjecture, a fifty-year-old conjecture about a
+connection between elliptic curves and modular forms that had previously
+been shown to be equivalent to Fermat's Last Theorem, but which is
+considerably more important to the structure of mathematics. The
+Taniyama-Shimura conjecture covers a portion of the Langlands program, a
+series of conjectures about a deep unity between very disparate sections
+of mathematics that, if proven, would permit techniques of one branch of
+mathematics to be used to attack problems in a very different branch.
+Singh does cover this, but not in as much detail as I would have liked (I
+would have loved a good description of modular forms, for instance), nor
+does he talk much about the other aspects of the Langlands program or
+about the usefulness of the other theorems Wiles proved in the course of
+proving Taniyama-Shimura and Fermat's Last Theorem.
+</p>
+
+<p>
+More detail here is probably a difficult request. From a quick glance
+through Wikipedia, it's not clear whether Singh could adequately explain
+the impact of the math even to someone with my mathematical background,
+and that would be abandoning much of his audience. Still, <cite>Fermat's
+Enigma</cite> left me a bit unsatisfied.
+</p>
+
+<p>
+Worth reading, though, particularly for the last portion of the book. The
+detailed story of Wiles's proof is engrossing, dramatic, and matters for
+more reasons than just solving a long-standing puzzle. I'm not a big fan
+of Singh's writing style, but he does make the story accessible and
+includes several interesting nuggets of mathematical history.
+</p>
+
+<p>
+Rating: 6 out of 10
+</p>
+
+<p class="footer">2007-01-14 21:30 &mdash;
+ <a href="https://www.eyrie.org/~eagle/reviews/books/1-250-30112-2.html">Permanent link</a></p></div>
+
+<address>
+ Last <a href="https://www.eyrie.org/~eagle/software/web/">spun</a>
+ %DATE% from thread modified %DATE%
+</address>
+</body>
+</html>
diff --git a/t/data/spin/output/journal/index.rss b/t/data/spin/output/journal/index.rss
new file mode 100644
index 0000000..5a8440f
--- /dev/null
+++ b/t/data/spin/output/journal/index.rss
@@ -0,0 +1,520 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+ <channel>
+ <title>Eagle's Path</title>
+ <link>https://www.eyrie.org/~eagle/</link>
+ <description>"Passion and dispassion. Choose two." -- Larry Wall</description>
+ <language>en-us</language>
+ <pubDate>%DATE%</pubDate>
+ <lastBuildDate>%DATE%</lastBuildDate>
+ <generator>spin-rss 1.25</generator>
+ <atom:link href="https://www.eyrie.org/~eagle/journal/index.rss" rel="self"
+ type="application/rss+xml" />
+
+ <item>
+ <title>NPR Top 100 SFF meme</title>
+ <link>https://www.eyrie.org/~eagle/journal/2011-08/006.html</link>
+ <description><![CDATA[
+<p>
+By way of <a href="http://firecat.dreamwidth.org/profile"><img src="https://www.eyrie.org/~eagle/journal/dw.png" alt="" /></a><a href="http://firecat.dreamwidth.org/"><strong>firecat</strong></a>, this is the result of a public nomination process,
+panel review, and Internet voting on the NPR web site: an attempt at the
+top 100 works of science fiction or fantasy. Series are counted as single
+works for the purposes of the list.
+</p>
+
+<p>
+This list has a ton of problems, like any list of this sort will have. It
+leans rather more heavily towards white male than the actual literature,
+and certainly than my reading. The lack of non-white writers is
+particularly troubling. But it's still an interesting selection. (For
+those wondering about some obvious omissions, young adult was explicitly
+excluded.)
+</p>
+
+<p>
+The rules are to bold the works one has read in their entirety and
+italicize the ones you've read part of but not finished. I'll add
+underlining the works that I own, which provides some indication of the
+things that I've not read but that are on my to-read list.
+</p>
+
+<ol>
+<li class="packed"><strong><u>The Lord Of The Rings Trilogy, by J.R.R. Tolkien</u></strong>:
+ It's a boring winner because it always wins, but it's an amazing book
+ and I can't argue with it. I'll probably never review this one since
+ I'm not sure I have anything original to say about it.</li>
+<li class="packed"><strong><u>The Hitchhiker's Guide To The Galaxy, by Douglas Adams</u></strong>:
+ Probably the best humorous SF. I've read the entire series except for
+ <cite>The Salmon of Doubt</cite>, the unfinished book left when Adams died.
+ Will re-read them all at some point.</li>
+<li class="packed"><strong><u>Ender's Game, by Orson Scott Card</u></strong>:
+ I intensely dislike Card's politics, but this book is still very good.
+ It's on my re-read list so that I can write a proper review of it.</li>
+<li class="packed"><strong>The Dune Chronicles, by Frank Herbert</strong>:
+ I've read the whole series, but only own the first, which is by far
+ the best. I'm tempted to re-read the whole series at some point,
+ since I don't remember it well enough to analyze it, but I'll probably
+ stop after re-reading just the first.</li>
+<li class="packed"><em><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-57340-3.html">A Song Of Ice And Fire
+ Series</a>, by George R. R. Martin</em>:
+ I own the first couple and have read and reviewed the first four. I
+ think they're somewhat overrated, but will probably read the latest.
+ I'm not sure if I'll re-read the previous books to remember what the
+ heck was going on.</li>
+<li class="packed"><u>1984, by George Orwell</u>:
+ I've somehow never read this. I keep meaning to, particularly since I
+ generally love Orwell.</li>
+<li class="packed"><strong>Fahrenheit 451, by Ray Bradbury</strong>:
+ Massively overrated, or perhaps just made unoriginal by subsequent
+ history. I found it boring and uninteresting.</li>
+<li class="packed"><strong><u>The Foundation Trilogy, by Isaac Asimov</u></strong>:
+ Thoroughly enjoyed this when I was a teenager. I suspect I'll like it
+ less as an adult, but definitely on my to-read list.</li>
+<li class="packed"><u>Brave New World, by Aldous Huxley</u>: Another classic I've never read.</li>
+<li class="packed"><strong><u>American Gods, by Neil Gaiman</u></strong>:
+ Great book. Need to re-read to review.</li>
+<li class="packed"><u>The Princess Bride, by William Goldman</u>:
+ On the list to read. Apparently significantly better than the movie,
+ which I liked less than everyone else on the planet.</li>
+<li class="packed"><em>The Wheel Of Time Series, by Robert Jordan</em>:
+ I read up to book eight (<cite>The Path of Daggers</cite>) and bailed
+ halfway through it. It started as somewhat interesting fantasy with
+ deep world building and fun world surprises, but the writing got worse
+ and worse and the characters became miserably unlikeable. I'm still
+ occasionally tempted to re-read and finish it, but it's a bad
+ temptation.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/animal-farm.html">Animal Farm</a>, by George
+ Orwell</u></strong>:
+ Great book, and a political and historical classic. Best read in
+ combination with a good history.</li>
+<li class="packed"><strong><u>Neuromancer, by William Gibson</u></strong>: Meh.</li>
+<li class="packed"><strong><u>Watchmen, by Alan Moore</u></strong>: Brilliant. On my list to re-read.</li>
+<li class="packed"><strong><u>I, Robot, by Isaac Asimov</u></strong>:
+ Okay, but I generally find Asimov a bit overrated. Good for
+ intellectual puzzle stories, but not that deep of ones, and the
+ characters are essentially nonentities.</li>
+<li class="packed"><strong>Stranger In A Strange Land, by Robert Heinlein</strong>:
+ The only book that I've ever put down within fifteen pages of the end
+ and could never muster enough caring to pick up again. I should
+ re-read it at some point to review it, but I don't think it's very
+ good.</li>
+<li class="packed"><u>The Kingkiller Chronicles, by Patrick Rothfuss</u>:
+ Well, I own the first one at least.</li>
+<li class="packed">Slaughterhouse-Five, by Kurt Vonnegut: Need to read.</li>
+<li class="packed">Frankenstein, by Mary Shelley:
+ I've never actually read this, but I'm not sure there's much point in
+ reading it. I've been so thoroughly exposed to the angles and
+ interpretations of it that reading it at this point would be an odd
+ experience. I probably should for completion's sake at some point.
+ (This is the first woman on the list, and of course she's long-dead
+ and not writing in the modern SF tradition.)</li>
+<li class="packed"><u>Do Androids Dream Of Electric Sheep?, by Philip K. Dick</u>:
+ I do need to read more Dick. I don't think this is as good as its
+ placement on the list; everyone just knows <cite>Blade Runner</cite> (which
+ was based on this).</li>
+<li class="packed"><u>The Handmaid's Tale, by Margaret Atwood</u>:
+ I have a bunch of Atwood, but haven't yet read any of it.</li>
+<li class="packed">The Dark Tower Series, by Stephen King:
+ It's rare for me to find any horror I actually like, but my
+ understanding is that this is less horror than a lot of King. I may
+ give it a try someday (but probably won't).</li>
+<li class="packed"><strong>2001: A Space Odyssey, by Arthur C. Clarke</strong>:
+ Much better than the movie since it actually explained what was going
+ on, although it wasn't as atmospheric. Not actually as good as its
+ position on lists like this would indicate. Mostly it's just a book
+ everyone has heard of.</li>
+<li class="packed"><u>The Stand, by Stephen King</u>: See above about horror.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-56261-4.html">Snow Crash</a>, by Neal
+ Stephenson</u></strong>:
+ One of my favorite humorous SF books, plus features the trademark
+ Stephenson infodumping and some neat bits about building a virtual
+ world.</li>
+<li class="packed"><u>The Martian Chronicles, by Ray Bradbury</u>: On the list to read.</li>
+<li class="packed">Cat's Cradle, by Kurt Vonnegut: Need to track down and read.</li>
+<li class="packed"><strong><u>The Sandman Series, by Neil Gaiman</u></strong>:
+ Quite possibly the best comic book series ever written. Utterly
+ brilliant. The one set of graphic novels that everyone should read at
+ some point in their life.</li>
+<li class="packed">A Clockwork Orange, by Anthony Burgess:
+ Huh. Not really on my radar to read, although of course I've heard of
+ it.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-441-78358-9.html">Starship Troopers</a>, by
+ Robert Heinlein</u></strong>:
+ Also overrated, particularly since it's not much of a story. It's an
+ extended and multifaceted political essay, which isn't as simple as it
+ appears to be. The movie, quite contrary to the negative impression
+ people have of it, is a delightful parody of how the book comes across
+ on its surface reading.</li>
+<li class="packed"><u>Watership Down, by Richard Adams</u>: Yeah, yeah, I know I should read it.</li>
+<li class="packed"><strong><u>Dragonflight, by Anne McCaffrey</u></strong>:
+ I loved the Pern books as a teenager up until the point when the just
+ became retellings of the same book from a new perspective. I'm afraid
+ to re-read them.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-425-03436-4.html">The Moon Is A Harsh
+ Mistress</a>, by Robert Heinlein</u></strong>:
+ Much, much better than <cite>Starship Troopers</cite>. One of the better
+ non-juvenile Heinleins. Still not as good as people think it is.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-37926-7.html">A Canticle For
+ Leibowitz</a>, by Walter M. Miller</u></strong>:
+ I was disappointed in this given how much people like it, but it
+ deserves some credit for being foundational to post-apocalyptic SF.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-517-26188-Xa.html">The Time Machine</a>, by
+ H.G. Wells</u></strong>:
+ More interesting than you might think it would be, given when it was
+ written and the emphasis on description rather than characterization.
+ But it still suffers from a lack of characters for me. Hard to come
+ to this fresh now, since the ideas have been so used elsewhere.</li>
+<li class="packed">20,000 Leagues Under The Sea, by Jules Verne:
+ I've seen the movie take on it. I've not felt a strong urge to read
+ the book, although I probably "should."</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-27450-3.html">Flowers For Algernon</a>,
+ by Daniel Keys</u></strong>:
+ Unforgettable and very strongly affecting (and depressing).</li>
+<li class="packed"><u>The War Of The Worlds, by H.G. Wells</u>: Will read at some point.</li>
+<li class="packed"><u>The Chronicles Of Amber, by Roger Zelazny</u>: Will probably read soon.</li>
+<li class="packed"><strong><u>The Belgariad, by David Eddings</u></strong>:
+ Yeah, I read this as a teenager and quite liked it. But I have no
+ idea what it's doing on this list; it is in absolutely no way one of
+ the best 100 SFF works of all time. (Well, that's not true; I know
+ what it's doing on this list. People have heard of it and read it.
+ But it shouldn't be on this list.)</li>
+<li class="packed"><u>The Mists Of Avalon, by Marion Zimmer Bradley</u>: On the list.</li>
+<li class="packed">The Mistborn Series, by Brandon Sanderson: Want to read this.</li>
+<li class="packed"><strong><u>Ringworld, by Larry Niven</u></strong>:
+ Interesting idea fiction with a great sense of scale. Shame the
+ characters aren't as good as the background. But it's a good book,
+ worth reading.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-441-47812-3.html">The Left Hand Of
+ Darkness</a>, by Ursula K. LeGuin</u></strong>:
+ A deserved classic of anthropological SF with profound things to say
+ about how culture and friendship are constructed.</li>
+<li class="packed"><strong><u>The Silmarillion, by J.R.R. Tolkien</u></strong>:
+ I love this book, but the first section is hard going if you don't
+ like reading mythology. Skip ahead if you're struggling; the gems are
+ later.</li>
+<li class="packed"><u>The Once And Future King, by T.H. White</u>: Definitely on the list to read.</li>
+<li class="packed"><strong><u>Neverwhere, by Neil Gaiman</u></strong>:
+ I'm not sure I'd put it on this list, as there are better Gaiman (and
+ Gaiman is already overrepresented), but it's a solid "urban" fantasy
+ in the old sense of that term. Inventive, with a feel similar to some
+ of the <cite>Sandman</cite> stories.</li>
+<li class="packed"><strong><u>Childhood's End, by Arthur C. Clarke</u></strong>:
+ I read this eons ago and can barely remember it. I definitely need to
+ re-read it.</li>
+<li class="packed">Contact, by Carl Sagan:
+ Liked the movie, have never had any particular urge to read the book.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-28368-5.html">The Hyperion Cantos</a>, by
+ Dan Simmons</u></strong>:
+ Some of my favorite SF novels ever. The third book is the weakest,
+ and the fourth book has problems, but I adore it.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/1-56389-470-X.html">Stardust</a>, by Neil
+ Gaiman</u></strong>:
+ Really far too much Gaiman on this list. But also a good book.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-380-78862-4.html">Cryptonomicon</a>, by Neal
+ Stephenson</u></strong>:
+ Fantastic stuff. Not SF in any traditional sense. It's a combination
+ of secret history and contemporary thriller. But it's written in the
+ Stephenson massive entertaining infodumping style, so it feels like SF
+ and makes it onto lists like this. It's very long, but I've read it
+ twice and don't regret it.</li>
+<li class="packed">World War Z, by Max Brooks:
+ Have a hard time believing this really belongs here, but I haven't
+ read it so I couldn't say for sure.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-345-27505-5.html">The Last Unicorn</a>, by
+ Peter S. Beagle</u></strong>:
+ Eh, it's not a bad book, but I'm not sure it really belongs on this
+ list. But it does have an aesthetic that's hard to find in any other
+ book.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-380-70821-3.html">The Forever War</a>, by Joe
+ Haldeman</u></strong>:
+ A very important response to the whole sub-genre of military SF, and
+ very influential.</li>
+<li class="packed"><u>Small Gods, by Terry Pratchett</u>: Getting to it.</li>
+<li class="packed"><em><u>The Chronicles Of Thomas Covenant, The Unbeliever, by Stephen
+ R. Donaldson</u></em>:
+ Read the first book, wasn't much of a fan. I might get back to it at
+ some point, but I'm not particularly eager.</li>
+<li class="packed"><strong><a href="https://www.eyrie.org/~eagle/reviews/books/0-671-87749-6a.html">The Vorkosigan Saga</a>, by
+ Lois McMaster Bujold</strong>:
+ I don't like the early books as much as some, but I love some of the
+ later books. The last few have been disappointing, but overall very
+ much worth reading, and belongs around here on the list.</li>
+<li class="packed">Going Postal, by Terry Pratchett: Getting to it.</li>
+<li class="packed"><strong>The Mote In God's Eye, by Larry Niven &amp; Jerry Pournelle</strong>:
+ Read many years ago and barely remember it. I need to re-read it,
+ particularly since there's a new sequal by Pournelle's daughter that
+ looks well worth reading.</li>
+<li class="packed"><em>The Sword Of Truth, by Terry Goodkind</em>:
+ I read way too many books in this series. Others should not repeat my
+ mistake. Generic fantasy about incredibly stupid people that turns
+ into libertarian political ravings.</li>
+<li class="packed">The Road, by Cormac McCarthy: Not my thing.</li>
+<li class="packed"><strong><a href="https://www.eyrie.org/~eagle/reviews/books/1-58234-416-7.html">Jonathan Strange &amp; Mr
+ Norrell</a>, by Susanna Clarke</strong>:
+ A nearly unique reading experience, and the best footnoted fantasy
+ that I've ever read (and that includes Pratchett). Great stuff if you
+ don't mind the slow pace. I'm eagerly hoping for an actual sequel.</li>
+<li class="packed">I Am Legend, by Richard Matheson:
+ Having a hard time getting interested enough in a book about zombies.
+ But I've been wrong about that
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-316-12246-7.html">before</a>.</li>
+<li class="packed">The Riftwar Saga, by Raymond E. Feist:
+ Heard of it, but not enough to get it onto my want list.</li>
+<li class="packed">The Shannara Trilogy, by Terry Brooks:
+ Heard enough about it to not put it on my want list.</li>
+<li class="packed">The Conan The Barbarian Series, by R.E. Howard:
+ Something that I feel like I "should" read, but usually I'm not a big
+ fan of pulp.</li>
+<li class="packed"><u>The Farseer Trilogy, by Robin Hobb</u>:
+ Own the first, which has been on my to-read list for a very long time.
+ Someday I'll get to it. I should probably buy all of the trilogy
+ before starting it.</li>
+<li class="packed"><strong><a href="https://www.eyrie.org/~eagle/reviews/books/1-931561-64-8.html">The Time Traveler's
+ Wife</a>, by Audrey Niffenegger</strong>:
+ Surprisingly good for a literary fantasy, with some fantastic moments
+ of description.</li>
+<li class="packed">The Way Of Kings, by Brandon Sanderson: Want to read at some point.</li>
+<li class="packed">A Journey To The Center Of The Earth, by Jules Verne:
+ As above, uninspired to read Verne.</li>
+<li class="packed"><em><a href="https://www.eyrie.org/~eagle/reviews/books/0-88038-905-2.html">The Legend Of Drizzt
+ Series</a>, by R.A. Salvatore</em>:
+ Read the first one, and unless they get substantially better, I have
+ no interest in reading more. Very stock power fantasy with
+ one-dimensional characters.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-765-31524-6.html">Old Man's War</a>, by John
+ Scalzi</u></strong>:
+ The later books in the series are better than the first one. An
+ interesting take on military SF, but I'm not sure it really rises to
+ the level of this sort of list.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-57331-4.html">The Diamond Age</a>, by
+ Neil Stephenson</u></strong>:
+ One too many Stephenson for this list, plus <cite>Anathem</cite> is probably
+ more deserving of this place, but there are some neat bits about
+ computation theory.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-28789-3.html">Rendezvous With Rama</a>,
+ by Arthur C. Clarke</u></strong>:
+ Completely overrated. A bad book that just happens to be foundational
+ in a particular sub-genre of SF. Done much better by other people.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-765-34298-7.html">The Kushiel's Legacy
+ Series</a>, by Jacqueline Carey</u></strong>:
+ By far my favorite epic fantasy series. Lush, involved, very
+ creative, and with a truly unusual heroine. Wonderful stuff.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-06-105488-7.html">The Dispossessed</a>, by
+ Ursula K. LeGuin</u></strong>:
+ Great, thoughtful SF. Probably the best in the utopia genre, even
+ though it isn't a utopia.</li>
+<li class="packed">Something Wicked This Way Comes, by Ray Bradbury: Horror. Eh.</li>
+<li class="packed"><u>Wicked, by Gregory Maguire</u>:
+ On the list, but after a general Oz re-read.</li>
+<li class="packed"><u>The Malazan Book Of The Fallen Series, by Steven Erikson</u>:
+ Own the first. Completely intimidated by the length of the series.</li>
+<li class="packed"><u>The Eyre Affair, by Jasper Fforde</u>: On the list.</li>
+<li class="packed"><em><u><a href="https://www.eyrie.org/~eagle/reviews/books/1-85723-138-4.html">The Culture Series</a>, by
+ Iain M. Banks</u></em>:
+ Brilliant stuff, highly recommended. I only haven't read it all
+ because I'm slowly digesting it. Should be higher on the list than
+ this.</li>
+<li class="packed"><u>The Crystal Cave, by Mary Stewart</u>: On the list.</li>
+<li class="packed"><u>Anathem, by Neal Stephenson</u>: On the list.</li>
+<li class="packed">The Codex Alera Series, by Jim Butcher:
+ I'll read the Dresden series, or least part of it, first, and see if
+ that inspires me to read more Butcher. Dubious that this belongs on
+ this list.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-671-45070-0.html">The Book Of The New
+ Sun</a>, by Gene Wolfe</u></strong>:
+ Incredibly influential and important fantasy-flavored SF that should
+ be much higher on the list than this.</li>
+<li class="packed"><strong><u>The Thrawn Trilogy, by Timothy Zahn</u></strong>:
+ This is a <cite>Star Wars</cite> media tie-in series, and one of the few of
+ that type that I've read. I remember quite enjoying it a long time
+ ago, and it's on the list to re-read at some point.</li>
+<li class="packed">The Outlander Series, by Diana Gabaldan:
+ The only thing on this list that I've never even heard of.</li>
+<li class="packed">The Elric Saga, by Michael Moorcock:
+ Definitely want to read this at some point, once I figure out the
+ right place to start and probably after I've read some other
+ Moorcock.</li>
+<li class="packed">The Illustrated Man, by Ray Bradbury:
+ Waiting to see if I like the better-known Bradbury first.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-515-13881-9.html">Sunshine</a>, by Robin
+ McKinley</u></strong>:
+ Quite possibly the best urban fantasy (in the modern definition) that
+ I've ever read.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-812-51528-5.html">A Fire Upon The Deep</a>,
+ by Vernor Vinge</u></strong>:
+ A little overrated, but it has a fun rendition of Usenet and some
+ neat aliens.</li>
+<li class="packed"><strong>The Caves Of Steel, by Isaac Asimov</strong>:
+ Read long ago. Enjoyed it, but don't remember being grabbed by it.
+ There's a bit too much Asimov on this list.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-56073-5.html">The Mars Trilogy</a>, by
+ Kim Stanley Robinson</u></strong>:
+ The most detailed and in-depth politics that you'll find in SF, even
+ more than Le Guin, at the cost of being mind-numbingly boring. Very
+ ambitious, but just doesn't move fast enough or have enough plot.
+ Robinson is less a novelist than a political and hard science essayist
+ in the form of a novel.</li>
+<li class="packed"><strong><u>Lucifer's Hammer, by Larry Niven &amp; Jerry Pournelle</u></strong>:
+ Large-screen disaster novel with a heavy helping of libertarian
+ utopian politics. Does not belong anywhere near this list.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-553-56273-8.html">Doomsday Book</a>, by
+ Connie Willis</u></strong>:
+ The best of Willis's time travel novels, with fewer communication
+ failures and frantic faffing about than the other ones. Borderline
+ for this list, but probably deserves to be here.</li>
+<li class="packed"><strong><u><a href="https://www.eyrie.org/~eagle/reviews/books/0-345-45940-7.html">Perdido Street Station</a>,
+ by China Mieville</u></strong>:
+ Revolutionary fantasy. The founding book of New Weird. I think
+ <a href="https://www.eyrie.org/~eagle/reviews/books/0-345-44438-8.html">The Scar</a> is a better
+ book, but I can't argue with this being here.</li>
+<li class="packed">The Xanth Series, by Piers Anthony: I've been warned off these.</li>
+<li class="packed"><strong><u>The Space Trilogy, by C.S. Lewis</u></strong>:
+ I need to re-read this and write long reviews of them, since I have a
+ lot to say about them. But they need to be read in the context of the
+ Christian faith to make any sense.</li>
+
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid>https://www.eyrie.org/~eagle/journal/2011-08/006.html</guid>
+ </item>
+ <item>
+ <title>Review: Fermat's Enigma</title>
+ <link>https://www.eyrie.org/~eagle/reviews/books/1-250-30112-2.html</link>
+ <description><![CDATA[
+<p>Review: <cite>Fermat's Enigma</cite>, by Simon Singh</p>
+
+<table>
+ <tr>
+ <td>Publisher:</td>
+ <td>Anchor</td>
+ </tr>
+ <tr>
+ <td>Copyright:</td>
+ <td>1997</td>
+ </tr>
+ <tr>
+ <td>Printing:</td>
+ <td>October 1998</td>
+ </tr>
+ <tr>
+ <td>ISBN:</td>
+ <td>0-385-49362-2</td>
+ </tr>
+ <tr>
+ <td>Format:</td>
+ <td>Mass market</td>
+ </tr>
+ <tr>
+ <td>Pages:</td>
+ <td>305</td>
+ </tr></table>
+
+<p>
+Fermat's Last Theorem is the infamous proposal that:
+</p>
+
+<blockquote><p>
+ <i>x<sup>n</sup> + y<sup>n</sup> = z<sup>n</sup></i>
+</p></blockquote>
+
+<p>
+has no solutions for integer <i>x, y, z, n</i> and <i>n &gt; 2</i>. It's
+infamous for being very simple to state and understand, a variation on the
+equation produced by the Pythagorean Theorem, but incredibly difficult to
+prove. It's also infamous for Pierre de Fermat's maddening marginal note:
+"I have discovered a truly marvelous demonstration of this proposition
+which this margin is too narrow to contain." 350 years after Fermat wrote
+this, the theorem was still unproven in the general case, although the
+theorem for many specific values of <i>n</i> had since been proven.
+</p>
+
+<p>
+<cite>Fermat's Enigma</cite> is a popular history of Fermat's Last Theorem and
+the attempts to prove it, the partial successes and famous failures. It's
+also the story of Andrew Wiles, a Princeton mathematics professor who
+finally proved the theorem in a complex, brilliant proof that builds on
+much of the power of modern mathematics and almost certainly did not
+follow the same path that Fermat himself did. If, in fact, Fermat had
+truly proven the theorem at all, something that we will probably never
+know.
+</p>
+
+<p>
+Singh comes to this subject with a serious structural problem: he's trying
+to write a popular account that's accessible even to people who are hazy
+on algebra and unfamiliar with basic proof technique, but he's trying to
+tell the story of one of the most complex proofs in modern mathematics.
+He tries to avoid the problem by talking about personalities instead of
+mathematical details, mostly successfully. It helps that Fermat's Last
+Theorem has been tackled by a collection of colorful geniuses, and even
+the soft-spoken Wiles has a subtle dramatic charm. Still, he has to cover
+enough of the mathematics for the reader to follow, and I found those
+sections tedious and a little overdramatized. For example, I can see
+using a domino analogy once to explain inductive proof, but Singh belabors
+the analogy until it's painful and talks about infinite chains of infinite
+dominos as if he doesn't understand that such setups are common in even
+simple inductive proofs.
+</p>
+
+<p>
+An excess of drama, cliche, and reptition are the largest problems with
+this book. Explaining why Fermat's Last Theorem is so interesting
+requires diving into areas of math that many readers have never paid
+attention to, and I got the impression that Singh felt he had to create as
+much drama as possible to keep people reading. Occasionally this works.
+The circumstances around Wiles's proof are inherently dramatic, a great
+conclusion to the story. But at times it feels forced, such as when Singh
+goes on about the wonder of absolute mathematical proof and the supposedly
+unique way that mathematicians are more rigorous than any other
+profession. I enjoyed the bits of history and connection he uncovers and
+explains despite his tone, rather than because of it. The book is based
+on a TV documentary, and I started wondering if some of the dramatic tone
+of television carried over into the book where it's more obvious and less
+useful.
+</p>
+
+<p>
+Another difficulty of aiming at such a broad audience is that Singh can't
+dig too deeply into the aspects of this proof that make it so important to
+modern mathematics. Too much background in very difficult math would be
+needed, so his choice makes sense, but I have some of that background and
+I was wanting more. Wiles proved Fermat's Last Theorem by proving the
+Taniyama-Shimura conjecture, a fifty-year-old conjecture about a
+connection between elliptic curves and modular forms that had previously
+been shown to be equivalent to Fermat's Last Theorem, but which is
+considerably more important to the structure of mathematics. The
+Taniyama-Shimura conjecture covers a portion of the Langlands program, a
+series of conjectures about a deep unity between very disparate sections
+of mathematics that, if proven, would permit techniques of one branch of
+mathematics to be used to attack problems in a very different branch.
+Singh does cover this, but not in as much detail as I would have liked (I
+would have loved a good description of modular forms, for instance), nor
+does he talk much about the other aspects of the Langlands program or
+about the usefulness of the other theorems Wiles proved in the course of
+proving Taniyama-Shimura and Fermat's Last Theorem.
+</p>
+
+<p>
+More detail here is probably a difficult request. From a quick glance
+through Wikipedia, it's not clear whether Singh could adequately explain
+the impact of the math even to someone with my mathematical background,
+and that would be abandoning much of his audience. Still, <cite>Fermat's
+Enigma</cite> left me a bit unsatisfied.
+</p>
+
+<p>
+Worth reading, though, particularly for the last portion of the book. The
+detailed story of Wiles's proof is engrossing, dramatic, and matters for
+more reasons than just solving a long-standing puzzle. I'm not a big fan
+of Singh's writing style, but he does make the story accessible and
+includes several interesting nuggets of mathematical history.
+</p>
+
+<p>Rating: 6 out of 10</p>
+
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid>https://www.eyrie.org/~eagle/reviews/books/1-250-30112-2.html</guid>
+ </item>
+ </channel>
+</rss>
diff --git a/t/data/spin/output/journal/reviews.rss b/t/data/spin/output/journal/reviews.rss
new file mode 100644
index 0000000..1720802
--- /dev/null
+++ b/t/data/spin/output/journal/reviews.rss
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+ <channel>
+ <title>Eagle's Path</title>
+ <link>https://www.eyrie.org/~eagle/</link>
+ <description>"Passion and dispassion. Choose two." -- Larry Wall</description>
+ <language>en-us</language>
+ <pubDate>%DATE%</pubDate>
+ <lastBuildDate>%DATE%</lastBuildDate>
+ <generator>spin-rss 1.25</generator>
+ <atom:link href="https://www.eyrie.org/~eagle/journal/reviews.rss" rel="self"
+ type="application/rss+xml" />
+
+ <item>
+ <title>Review: Fermat's Enigma</title>
+ <link>https://www.eyrie.org/~eagle/reviews/books/1-250-30112-2.html</link>
+ <description><![CDATA[
+<p>Review: <cite>Fermat's Enigma</cite>, by Simon Singh</p>
+
+<table>
+ <tr>
+ <td>Publisher:</td>
+ <td>Anchor</td>
+ </tr>
+ <tr>
+ <td>Copyright:</td>
+ <td>1997</td>
+ </tr>
+ <tr>
+ <td>Printing:</td>
+ <td>October 1998</td>
+ </tr>
+ <tr>
+ <td>ISBN:</td>
+ <td>0-385-49362-2</td>
+ </tr>
+ <tr>
+ <td>Format:</td>
+ <td>Mass market</td>
+ </tr>
+ <tr>
+ <td>Pages:</td>
+ <td>305</td>
+ </tr></table>
+
+<p>
+Fermat's Last Theorem is the infamous proposal that:
+</p>
+
+<blockquote><p>
+ <i>x<sup>n</sup> + y<sup>n</sup> = z<sup>n</sup></i>
+</p></blockquote>
+
+<p>
+has no solutions for integer <i>x, y, z, n</i> and <i>n &gt; 2</i>. It's
+infamous for being very simple to state and understand, a variation on the
+equation produced by the Pythagorean Theorem, but incredibly difficult to
+prove. It's also infamous for Pierre de Fermat's maddening marginal note:
+"I have discovered a truly marvelous demonstration of this proposition
+which this margin is too narrow to contain." 350 years after Fermat wrote
+this, the theorem was still unproven in the general case, although the
+theorem for many specific values of <i>n</i> had since been proven.
+</p>
+
+<p>
+<cite>Fermat's Enigma</cite> is a popular history of Fermat's Last Theorem and
+the attempts to prove it, the partial successes and famous failures. It's
+also the story of Andrew Wiles, a Princeton mathematics professor who
+finally proved the theorem in a complex, brilliant proof that builds on
+much of the power of modern mathematics and almost certainly did not
+follow the same path that Fermat himself did. If, in fact, Fermat had
+truly proven the theorem at all, something that we will probably never
+know.
+</p>
+
+<p>
+Singh comes to this subject with a serious structural problem: he's trying
+to write a popular account that's accessible even to people who are hazy
+on algebra and unfamiliar with basic proof technique, but he's trying to
+tell the story of one of the most complex proofs in modern mathematics.
+He tries to avoid the problem by talking about personalities instead of
+mathematical details, mostly successfully. It helps that Fermat's Last
+Theorem has been tackled by a collection of colorful geniuses, and even
+the soft-spoken Wiles has a subtle dramatic charm. Still, he has to cover
+enough of the mathematics for the reader to follow, and I found those
+sections tedious and a little overdramatized. For example, I can see
+using a domino analogy once to explain inductive proof, but Singh belabors
+the analogy until it's painful and talks about infinite chains of infinite
+dominos as if he doesn't understand that such setups are common in even
+simple inductive proofs.
+</p>
+
+<p>
+An excess of drama, cliche, and reptition are the largest problems with
+this book. Explaining why Fermat's Last Theorem is so interesting
+requires diving into areas of math that many readers have never paid
+attention to, and I got the impression that Singh felt he had to create as
+much drama as possible to keep people reading. Occasionally this works.
+The circumstances around Wiles's proof are inherently dramatic, a great
+conclusion to the story. But at times it feels forced, such as when Singh
+goes on about the wonder of absolute mathematical proof and the supposedly
+unique way that mathematicians are more rigorous than any other
+profession. I enjoyed the bits of history and connection he uncovers and
+explains despite his tone, rather than because of it. The book is based
+on a TV documentary, and I started wondering if some of the dramatic tone
+of television carried over into the book where it's more obvious and less
+useful.
+</p>
+
+<p>
+Another difficulty of aiming at such a broad audience is that Singh can't
+dig too deeply into the aspects of this proof that make it so important to
+modern mathematics. Too much background in very difficult math would be
+needed, so his choice makes sense, but I have some of that background and
+I was wanting more. Wiles proved Fermat's Last Theorem by proving the
+Taniyama-Shimura conjecture, a fifty-year-old conjecture about a
+connection between elliptic curves and modular forms that had previously
+been shown to be equivalent to Fermat's Last Theorem, but which is
+considerably more important to the structure of mathematics. The
+Taniyama-Shimura conjecture covers a portion of the Langlands program, a
+series of conjectures about a deep unity between very disparate sections
+of mathematics that, if proven, would permit techniques of one branch of
+mathematics to be used to attack problems in a very different branch.
+Singh does cover this, but not in as much detail as I would have liked (I
+would have loved a good description of modular forms, for instance), nor
+does he talk much about the other aspects of the Langlands program or
+about the usefulness of the other theorems Wiles proved in the course of
+proving Taniyama-Shimura and Fermat's Last Theorem.
+</p>
+
+<p>
+More detail here is probably a difficult request. From a quick glance
+through Wikipedia, it's not clear whether Singh could adequately explain
+the impact of the math even to someone with my mathematical background,
+and that would be abandoning much of his audience. Still, <cite>Fermat's
+Enigma</cite> left me a bit unsatisfied.
+</p>
+
+<p>
+Worth reading, though, particularly for the last portion of the book. The
+detailed story of Wiles's proof is engrossing, dramatic, and matters for
+more reasons than just solving a long-standing puzzle. I'm not a big fan
+of Singh's writing style, but he does make the story accessible and
+includes several interesting nuggets of mathematical history.
+</p>
+
+<p>Rating: 6 out of 10</p>
+
+ ]]></description>
+ <pubDate>%DATE%</pubDate>
+ <guid>https://www.eyrie.org/~eagle/reviews/books/1-250-30112-2.html</guid>
+ </item>
+ </channel>
+</rss>
diff --git a/t/lib/Test/DocKnot/Spin.pm b/t/lib/Test/DocKnot/Spin.pm
index 0a20ea5..f9f3374 100644
--- a/t/lib/Test/DocKnot/Spin.pm
+++ b/t/lib/Test/DocKnot/Spin.pm
@@ -44,6 +44,9 @@ sub is_spin_output {
[ ] \d{4}-\d\d-\d\d (?: [ ] \d\d:\d\d:\d\d [ ] -0000 )?
}{ %DATE%}gxms;
$results =~ s{
+ \w{3}, [ ] \d\d [ ] \w{3} [ ] \d{4} [ ] \d\d:\d\d:\d\d [ ] -\d{4}
+ }{%DATE%}gxms;
+ $results =~ s{
Last [ ] modified [ ] and \s+ (<a[^>]+>spun</a>) [ ] [%]DATE[%]
}{Last $1\n %DATE% from thread modified %DATE%}gxms;
@@ -85,7 +88,7 @@ sub is_spin_output_tree {
# Compare HTML output using is_spin_output and all other files as
# copies.
- if ($file =~ m{ [.] html \z }xms) {
+ if ($file =~ m{ [.] (?: html | rss ) \z }xms) {
is_spin_output($file, $expected_file, "$message ($path)");
} else {
is(compare($file, $expected_file), 0, "$message ($path)");
diff --git a/t/spin/tree.t b/t/spin/tree.t
index 03d8ffd..b794b04 100755
--- a/t/spin/tree.t
+++ b/t/spin/tree.t
@@ -15,8 +15,8 @@ use lib 't/lib';
use Capture::Tiny qw(capture_stdout);
use Cwd qw(getcwd);
use File::Copy::Recursive qw(dircopy);
-use File::Spec;
-use File::Temp;
+use File::Spec ();
+use File::Temp ();
use Perl6::Slurp qw(slurp);
use POSIX qw(strftime);
use Test::DocKnot::Spin qw(is_spin_output_tree);
@@ -25,8 +25,26 @@ use Test::More;
# Expected output when spinning our tree of input files.
my $EXPECTED_OUTPUT = <<'OUTPUT';
+Generating thread file .../changes.th
+Generating RSS file .../changes.rss
+Updating .../changes.rss
+Spinning .../changes.html
Spinning .../index.html
Updating .../names.png
+Creating .../journal
+Generating index file .../journal/index.th
+Generating RSS file .../journal/index.rss
+Generating RSS file .../journal/debian.rss
+Generating RSS file .../journal/reviews.rss
+Updating .../journal/debian.rss
+Updating .../journal/index.rss
+Spinning .../journal/index.html
+Updating .../journal/reviews.rss
+Creating .../journal/2011-08
+Spinning .../journal/2011-08/006.html
+Creating .../reviews
+Creating .../reviews/books
+Spinning .../reviews/books/0-385-49362-2.html
Creating .../software
Spinning .../software/index.html
Creating .../software/docknot
@@ -38,26 +56,35 @@ Spinning .../usefor/index.html
Creating .../usefor/drafts
Updating .../usefor/drafts/draft-ietf-usefor-message-id-01.txt
Updating .../usefor/drafts/draft-ietf-usefor-posted-mailed-01.txt
-Updating .../usefor/drafts/draft-lindsey-usefor-signed-01.txt
Updating .../usefor/drafts/draft-ietf-usefor-useage-01.txt
-Creating .../reviews
-Creating .../reviews/books
-Spinning .../reviews/books/0-385-49362-2.html
-Creating .../journal
-Creating .../journal/2011-08
-Spinning .../journal/2011-08/006.html
+Updating .../usefor/drafts/draft-lindsey-usefor-signed-01.txt
OUTPUT
require_ok('App::DocKnot::Spin');
+# Copy the input tree to a new temporary directory since .rss files generate
+# additional thread files. Replace the rpod pointer since it points to a
+# relative path in the source tree.
+my $tmpdir = File::Temp->newdir();
+my $datadir = File::Spec->catfile('t', 'data', 'spin');
+my $input = File::Spec->catfile($datadir, 'input');
+dircopy($input, $tmpdir->dirname)
+ or die "Cannot copy $input to $tmpdir: $!\n";
+my $rpod_source = File::Spec->catfile(getcwd(), 'lib', 'App', 'DocKnot.pm');
+my $rpod_path = File::Spec->catfile(
+ $tmpdir->dirname, 'software', 'docknot', 'api',
+ 'app-docknot.rpod',
+);
+open(my $fh, '>', $rpod_path);
+print {$fh} "$rpod_source\n" or die "Cannot write to $rpod_path: $!\n";
+close($fh);
+
# Spin a tree of files.
my $output = File::Temp->newdir();
-my $datadir = File::Spec->catfile('t', 'data', 'spin');
-my $input = File::Spec->catfile($datadir, 'input');
my $expected = File::Spec->catfile($datadir, 'output');
my $spin = App::DocKnot::Spin->new({ 'style-url' => '/~eagle/styles/' });
my $stdout = capture_stdout {
- $spin->spin($input, $output->dirname);
+ $spin->spin($tmpdir->dirname, $output->dirname);
};
my $count = is_spin_output_tree($output, $expected, 'spin');
is($stdout, $EXPECTED_OUTPUT, 'Expected spin output');
@@ -66,14 +93,14 @@ is($stdout, $EXPECTED_OUTPUT, 'Expected spin output');
my $bogus = File::Spec->catfile($output->dirname, 'bogus');
my $bogus_file = File::Spec->catfile($bogus, 'some-file');
mkdir($bogus);
-open(my $fh, '>', $bogus_file);
+open($fh, '>', $bogus_file);
print {$fh} "Some stuff\n" or die "Cannot write to $bogus_file: $!\n";
close($fh);
# Spinning the same tree of files again should do nothing because of the
# modification timestamps.
$stdout = capture_stdout {
- $spin->spin($input, $output->dirname);
+ $spin->spin($tmpdir->dirname, $output->dirname);
};
is($stdout, q{}, 'Spinning again does nothing');
@@ -85,7 +112,7 @@ ok(-d $bogus, 'Stray file and directory not deleted');
$spin
= App::DocKnot::Spin->new({ delete => 1, 'style-url' => '/~eagle/styles/' });
$stdout = capture_stdout {
- $spin->spin($input, $output->dirname);
+ $spin->spin($tmpdir->dirname, $output->dirname);
};
is(
$stdout,
@@ -94,23 +121,6 @@ is(
);
ok(!-e $bogus, 'Stray file and directory was deleted');
-# Copy the input tree to a new temporary directory, replace the rpod pointer,
-# and regenerate output files with the new timestamps.
-my $tmpdir = File::Temp->newdir();
-dircopy($input, $tmpdir)
- or die "Cannot copy $input to $tmpdir: $!\n";
-my $rpod_source = File::Spec->catfile(getcwd(), 'lib', 'App', 'DocKnot.pm');
-my $rpod_path = File::Spec->catfile(
- $tmpdir->dirname, 'software', 'docknot', 'api',
- 'app-docknot.rpod',
-);
-open($fh, '>', $rpod_path);
-print {$fh} "$rpod_source\n" or die "Cannot write to $rpod_path: $!\n";
-close($fh);
-capture_stdout {
- $spin->spin($tmpdir->dirname, $output->dirname);
-};
-
# Now, update the .versions file at the top of the input tree to change the
# timestamp to a second into the future. This should force regeneration of
# only the software/docknot/index.html file.