git » homepage.git » commit 1582406

Polish public archive presentation

author Alan Dipert
2026-08-09 18:40:06 UTC
committer Alan Dipert
2026-08-09 18:40:06 UTC
parent 2cd5263f27333d04c16ff0ecb6759860668248e3

Polish public archive presentation

md/Home.md +4 -4
md/TechWorks.md +1 -1
md/TechWorksArchive.md +50 -118
tools/sitegen.py +3 -3
tpl/head.html +1 -1
tpl/style.css +43 -0

diff --git a/md/Home.md b/md/Home.md
index afaff55..cad55de 100644
--- a/md/Home.md
+++ b/md/Home.md
@@ -1,13 +1,13 @@
-# Alan's Homepage
-![Alan Dipert in front of a wall of giant doughnuts](./Home/donuts_alan_float_right_392px.jpg)
+# Home
+![In front of a wall of giant doughnuts](./Home/donuts_alan_float_right_392px.jpg)
 
-Hello, and welcome to the personal [homepage](https://en.wikipedia.org/wiki/Home_page) and [wiki](https://en.wikipedia.org/wiki/Wiki) of Alan Dipert!
+Hello, and welcome to my personal [homepage](https://en.wikipedia.org/wiki/Home_page) and [wiki](https://en.wikipedia.org/wiki/Wiki).
 
 ## Explore
 
 > ### [TechWorks](./TechWorks.md)
 >
-> Talks, papers, interviews, and workshops from Alan's work in programming languages, web development, and software tools.
+> Talks, papers, interviews, and workshops from my work in programming languages, web development, and software tools.
 
 <!-- latest-works:6 -->
 
diff --git a/md/TechWorks.md b/md/TechWorks.md
index c899199..821fc83 100644
--- a/md/TechWorks.md
+++ b/md/TechWorks.md
@@ -1,6 +1,6 @@
 # TechWorks
 
-Archived copies and preservation notes live in [TechWorks Archive](./TechWorksArchive.md).
+Papers, slides, recordings, and source snapshots are available in the [TechWorks Archive](./TechWorksArchive.md).
 
 | Date       | Venue                                                                                         | Title                                                                                                                                                                                                                                                                       | Format         | Role               | With                       |
 |:-----------|:----------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:---------------|:-------------------|:---------------------------|
diff --git a/md/TechWorksArchive.md b/md/TechWorksArchive.md
index a39ee7c..38dc6d9 100644
--- a/md/TechWorksArchive.md
+++ b/md/TechWorksArchive.md
@@ -1,118 +1,50 @@
-# TechWorksArchive
-
-This page records durable copies and provenance for the materials linked from [TechWorks](./TechWorks.md). The main TechWorks table stays focused on the work; this page holds archive details.
-
-## Preserved files
-
-These files are stored in the repository under `TechWorks/`.
-
-| Work | Local copy |
-|:-----|:-----------|
-| JACL: A Common Lisp for Developing Single-Page Web Applications — paper | [PDF](./TechWorks/jacl-demo-els-2020.pdf) |
-| Integration Testing in Shiny Apps and Modules — poster | [PDF](./TechWorks/2020-01-28-RStudio-Conf-Integration-Testing-ePoster.pdf) |
-| Old School FP: A Common Lisp Experience Report — slides | [PDF](./TechWorks/2018-12-17-CommonLispOrangeCombinator.pdf) |
-| Load testing Shiny — preserved webinar page | [HTML](./TechWorks/2018-09-06-load-testing-shiny-archive.html) |
-| Boot Can Build It — slides | [PDF](./TechWorks/2015-04-20_ClojureWestBoot.pdf) |
-| FRP in ClojureScript with Javelin — slides | [PDF](./TechWorks/Dipert-FRP_in_ClojureScript_with_Javelin.pdf) |
-| Programming with Values in Clojure — slides | [PDF](./TechWorks/Dipert-ProgrammingWithValues.pdf) |
-
-### Old School FP: A Common Lisp Experience Report
-
-- Original: `https://tailrecursion.com/~alan/documents/2018-12-17-CommonLispOrangeCombinator.pdf`
-- Archived copy: [PDF](./TechWorks/2018-12-17-CommonLispOrangeCombinator.pdf)
-- Internet Archive: [2022-12-24 snapshot](https://web.archive.org/web/20221224155804/https://tailrecursion.com/~alan/documents/2018-12-17-CommonLispOrangeCombinator.pdf)
-- Retrieved: 2026-08-08
-
-### Load testing Shiny
-
-- Original: `https://rstudio.com/resources/webinars/load-testing-shiny/`
-- Archived copy: [HTML](./TechWorks/2018-09-06-load-testing-shiny-archive.html)
-- Internet Archive: [2022-10-06 snapshot](https://web.archive.org/web/20221006052309/https://rstudio.com/resources/webinars/load-testing-shiny/)
-- Retrieved: 2026-08-08
-
-## Preserved source snapshots
-
-These are exact-commit source archives of personal repositories linked from TechWorks. The original repository remains the canonical project history.
-
-All seven snapshots were retrieved on 2026-08-08.
-
-| Repository | Commit | Local snapshot |
-|:-----------|:-------|:---------------|
-| [barcamp2012-jsonscript](https://github.com/alandipert/barcamp2012-jsonscript) | `7e4dcf7` | [tar.gz](./TechWorks/barcamp2012-jsonscript-7e4dcf7.tar.gz) |
-| [fast-shiny](https://github.com/alandipert/fast-shiny) | `da0ea10` | [tar.gz](./TechWorks/fast-shiny-da0ea10.tar.gz) |
-| [flapjax-demo](https://github.com/alandipert/flapjax-demo) | `b719782` | [tar.gz](./TechWorks/flapjax-demo-b719782.tar.gz) |
-| [gherkin](https://github.com/alandipert/gherkin) | `76dc034` | [tar.gz](./TechWorks/gherkin-76dc034.tar.gz) |
-| [ocrug-2018-11-27](https://github.com/alandipert/ocrug-2018-11-27) | `71dd0b1` | [tar.gz](./TechWorks/ocrug-2018-11-27-71dd0b1.tar.gz) |
-| [oscon2012-clojure](https://github.com/alandipert/oscon2012-clojure) | `5ac233f` | [tar.gz](./TechWorks/oscon2012-clojure-5ac233f.tar.gz) |
-| [wombat](https://github.com/alandipert/wombat) | `dbd34f4` | [tar.gz](./TechWorks/wombat-dbd34f4.tar.gz) |
-
-## Preserved authored sites
-
-These locally served copies preserve the authored HTML, stylesheets, feeds, and linked articles. They were retrieved on 2026-08-08 and retain the original site structure.
-
-| Site | Local copy |
-|:-----|:-----------|
-| Just Lisp Things | [site index](./TechWorks/authored/jlt/index.html) |
-| Wondr: Thoughts on R programming | [site index](./TechWorks/authored/wondr/index.html) |
-
-## Full-resolution media
-
-The seven YouTube recordings below are preserved as the best available source streams retrieved on 2026-08-08. No downscaling or re-encoding was performed. Each recording includes the original extractor metadata, a thumbnail, and available English captions. The MP4s are Git LFS objects; [SHA256SUMS](./TechWorks/media/SHA256SUMS) covers every media artifact.
-
-| Recording | Resolution | Local preservation |
-|:----------|:-----------|:-------------------|
-| Common Lisp for the Curious Clojurian | 1920×1080 | [MP4](./TechWorks/media/video/44Q9ew9JH_U.mp4), [captions](./TechWorks/media/video/44Q9ew9JH_U.en.vtt), [metadata](./TechWorks/media/video/44Q9ew9JH_U.info.json) |
-| JACL | 1920×1080 | [MP4](./TechWorks/media/video/HGuTqsVh59w.mp4), [captions](./TechWorks/media/video/HGuTqsVh59w.en.vtt), [metadata](./TechWorks/media/video/HGuTqsVh59w.info.json) |
-| Boot Can Build It | 1280×720 | [MP4](./TechWorks/media/video/TcnzB2tB-8Q.mp4), [captions](./TechWorks/media/video/TcnzB2tB-8Q.en.vtt), [metadata](./TechWorks/media/video/TcnzB2tB-8Q.info.json) |
-| Gherkin lightning talks | 1280×720 | [MP4](./TechWorks/media/video/bmHTFo2Rf2w.mp4), [captions](./TechWorks/media/video/bmHTFo2Rf2w.en.vtt), [metadata](./TechWorks/media/video/bmHTFo2Rf2w.info.json) |
-| Uberlisp lightning talks | 1280×720 | [MP4](./TechWorks/media/video/tSw3x0rVh88.mp4), [captions](./TechWorks/media/video/tSw3x0rVh88.en.vtt), [metadata](./TechWorks/media/video/tSw3x0rVh88.info.json) |
-| Web Programming with Hoplon | 1280×720 | [MP4](./TechWorks/media/video/wVXjExRiFy0.mp4), [captions](./TechWorks/media/video/wVXjExRiFy0.en.vtt), [metadata](./TechWorks/media/video/wVXjExRiFy0.info.json) |
-| Flapjax lightning talks | 1920×1080 | [MP4](./TechWorks/media/video/xaxF5RDdVRE.mp4), [captions](./TechWorks/media/video/xaxF5RDdVRE.en.vtt), [metadata](./TechWorks/media/video/xaxF5RDdVRE.info.json) |
-
-### Media retained by provenance
-
-- [Programmable Builds with Boot metadata](./TechWorks/media/video/vimeo-144997124.oembed.json) and [original Vimeo recording](https://vimeo.com/144997124). The public page reports a 1280×720 player, but Vimeo’s player configuration returned 401/403 for direct and privacy-hash requests, so no verified source stream was available.
-- [Hoplon: A Simpler Way to Program the Web metadata](./TechWorks/media/video/vimeo-144696304.oembed.json) and [original Vimeo recording](https://vimeo.com/144696304). The public page reports a 1280×720 player, but Vimeo’s player configuration returned 401/403 for direct and privacy-hash requests, so no verified source stream was available.
-- [SoundCloud source-page snapshot](./TechWorks/media/audio/s4-e19-hoplon-with-alan-dipert-source.html) and [original episode](https://soundcloud.com/user-959992602/s4-e19-hoplon-with-alan-dipert). The page remains reachable, but the track API returns 404, so no audio stream was available to preserve.
-
-The original host links remain alongside every local copy for provenance and future recovery if a higher-quality source becomes available.
-
-## Archive policy
-
-- Keep working original links on TechWorks when they remain useful.
-- Use Internet Archive links for dead conference, meetup, and project pages.
-- Store personally authored papers, slides, posters, and source snapshots locally when available.
-- Keep the original URL and retrieval date with every mirrored page or file.
-- Preserve third-party media by metadata and links unless redistribution is permitted.
-
-## Target audit
-
-Each linked target has one of three dispositions: a local copy, a durable Internet Archive link, or a live original link retained as the canonical source.
-
-### Local copies
-
-- [x] JACL paper, Integration Testing poster, Boot slides, Javelin slides, and Programming with Values slides.
-- [x] Old School FP slides, recovered from the Internet Archive.
-- [x] Load Testing Shiny webinar page, recovered from the Internet Archive.
-- [x] Seven linked personal GitHub repositories, preserved at exact commits above.
-
-### Durable archived links already present
-
-- [x] Linux.com: My workstation OS: NetBSD.
-- [x] OCRUG home page and interview.
-- [x] Clojure/West 2014 and 2015 pages.
-- [x] Clojure/conj 2011, 2012, and 2013 pages.
-
-### Live originals retained as links
-
-- [x] SciCloj and the Common Lisp for the Curious Clojurian recording.
-- [x] ELS and the JACL recording.
-- [x] ClojureScript Podcast episode S4 E19.
-- [x] Just Lisp Things and Wondr.
-- [x] OCRUG presentation page and code snapshot.
-- [x] Orange Combinator event page.
-- [x] rstudio::conf 2018 and 2019 pages, redirected to current Posit pages.
-- [x] Cognicast episodes 52, 111, and 112.
-- [x] Øredev recordings for Programmable Builds with Boot and Hoplon.
-- [x] ClojureBridge Durham, Clojure for the Brave and True, InfoQ presentations, and Pluralsight course.
-- [x] YouTube recordings for Gherkin, Flapjax, Hoplon, Uberlisp, and related talks.
+# TechWorks Archive
+
+Downloads and recordings from [TechWorks](./TechWorks.md). Some original event pages and media hosts have disappeared over the years, so copies of the work itself are collected here.
+
+## Papers and slides
+
+| Work | Download |
+|:-----|:---------|
+| JACL: A Common Lisp for Developing Single-Page Web Applications | [Paper](./TechWorks/jacl-demo-els-2020.pdf) |
+| Integration Testing in Shiny Apps and Modules | [Poster](./TechWorks/2020-01-28-RStudio-Conf-Integration-Testing-ePoster.pdf) |
+| Old School FP: A Common Lisp Experience Report | [Slides](./TechWorks/2018-12-17-CommonLispOrangeCombinator.pdf) |
+| Load testing Shiny | [Webinar page](./TechWorks/2018-09-06-load-testing-shiny-archive.html) |
+| Boot Can Build It | [Slides](./TechWorks/2015-04-20_ClojureWestBoot.pdf) |
+| FRP in ClojureScript with Javelin | [Slides](./TechWorks/Dipert-FRP_in_ClojureScript_with_Javelin.pdf) |
+| Programming with Values in Clojure | [Slides](./TechWorks/Dipert-ProgrammingWithValues.pdf) |
+
+## Recordings
+
+These are the best available copies from the original hosts. Captions are included where available.
+
+| Recording | Watch | Captions |
+|:----------|:------|:---------|
+| Common Lisp for the Curious Clojurian | [Video](./TechWorks/media/video/44Q9ew9JH_U.mp4) | [English](./TechWorks/media/video/44Q9ew9JH_U.en.vtt) |
+| JACL | [Video](./TechWorks/media/video/HGuTqsVh59w.mp4) | [English](./TechWorks/media/video/HGuTqsVh59w.en.vtt) |
+| Boot Can Build It | [Video](./TechWorks/media/video/TcnzB2tB-8Q.mp4) | [English](./TechWorks/media/video/TcnzB2tB-8Q.en.vtt) |
+| Gherkin lightning talk | [Video](./TechWorks/media/video/bmHTFo2Rf2w.mp4) | [English](./TechWorks/media/video/bmHTFo2Rf2w.en.vtt) |
+| Uberlisp lightning talk | [Video](./TechWorks/media/video/tSw3x0rVh88.mp4) | [English](./TechWorks/media/video/tSw3x0rVh88.en.vtt) |
+| Web Programming with Hoplon | [Video](./TechWorks/media/video/wVXjExRiFy0.mp4) | [English](./TechWorks/media/video/wVXjExRiFy0.en.vtt) |
+| Flapjax lightning talk | [Video](./TechWorks/media/video/xaxF5RDdVRE.mp4) | [English](./TechWorks/media/video/xaxF5RDdVRE.en.vtt) |
+
+## Sites
+
+| Site | Browse |
+|:-----|:-------|
+| Just Lisp Things | [Articles](./TechWorks/authored/jlt/index.html) |
+| Wondr: Thoughts on R programming | [Articles](./TechWorks/authored/wondr/index.html) |
+
+## Source code
+
+| Project | Repository | Download |
+|:--------|:-----------|:---------|
+| BarCamp JSONScript | [GitHub](https://github.com/alandipert/barcamp2012-jsonscript) | [Snapshot](./TechWorks/barcamp2012-jsonscript-7e4dcf7.tar.gz) |
+| Fast Shiny | [GitHub](https://github.com/alandipert/fast-shiny) | [Snapshot](./TechWorks/fast-shiny-da0ea10.tar.gz) |
+| Flapjax demo | [GitHub](https://github.com/alandipert/flapjax-demo) | [Snapshot](./TechWorks/flapjax-demo-b719782.tar.gz) |
+| Gherkin | [GitHub](https://github.com/alandipert/gherkin) | [Snapshot](./TechWorks/gherkin-76dc034.tar.gz) |
+| OCRUG 2018 presentation | [GitHub](https://github.com/alandipert/ocrug-2018-11-27) | [Snapshot](./TechWorks/ocrug-2018-11-27-71dd0b1.tar.gz) |
+| OSCON Clojure workshop | [GitHub](https://github.com/alandipert/oscon2012-clojure) | [Snapshot](./TechWorks/oscon2012-clojure-5ac233f.tar.gz) |
+| Wombat | [GitHub](https://github.com/alandipert/wombat) | [Snapshot](./TechWorks/wombat-dbd34f4.tar.gz) |
+
+Original event pages and host links remain on [TechWorks](./TechWorks.md).
diff --git a/tools/sitegen.py b/tools/sitegen.py
index 789bb90..1b32ab0 100644
--- a/tools/sitegen.py
+++ b/tools/sitegen.py
@@ -296,7 +296,7 @@ def write_index(out: Path, src: Path, paths: list[Path], head: str, foot: str) -
     rendered = "".join(
         (
             template(head, **values),
-            "<h1>Index of Alan's Homepage</h1>\n",
+            "<h1>Index</h1>\n",
             "\n".join(index_lines) + "\n",
             template(foot, **values),
         )
@@ -475,9 +475,9 @@ def write_rss(out: Path, updates: list[Update], base_url: str) -> None:
         '<?xml version="1.0" encoding="UTF-8"?>',
         '<rss version="2.0">',
         "  <channel>",
-        "    <title>Alan Dipert — Updates</title>",
+        "    <title>The Homepage — Updates</title>",
         f"    <link>{xml_escape(urljoin(base_url, 'Home.html'))}</link>",
-        "    <description>Recent updates from Alan's homepage.</description>",
+        "    <description>Recent homepage updates.</description>",
         f"    <lastBuildDate>{format_datetime(updates[0].date)}</lastBuildDate>",
     ]
     for update in updates:
diff --git a/tpl/head.html b/tpl/head.html
index e66eae0..03d2048 100644
--- a/tpl/head.html
+++ b/tpl/head.html
@@ -5,7 +5,7 @@
   <meta name="viewport" content="width=device-width,initial-scale=1">
   <title>@TITLE@</title>
   <link rel="stylesheet" href="@ROOT@style.css">
-  <link rel="alternate" type="application/rss+xml" title="Alan Dipert — Updates" href="@ROOT@updates.xml">
+  <link rel="alternate" type="application/rss+xml" title="The Homepage — Updates" href="@ROOT@updates.xml">
   <script async src="https://www.googletagmanager.com/gtag/js?id=G-XCMVL5K44X"></script>
   <script>
     window.dataLayer = window.dataLayer || [];
diff --git a/tpl/style.css b/tpl/style.css
index 37aae6a..5cc1d53 100644
--- a/tpl/style.css
+++ b/tpl/style.css
@@ -545,6 +545,49 @@ img[src*="200px"]{width:200px;}
     letter-spacing:.04em;
   }
   .content table:not(.definition-table){overflow-x:auto;}
+
+  .page-techworksarchive .content table,
+  .page-techworksarchive .content table tbody,
+  .page-techworksarchive .content table tr{
+    display:block;
+    width:100%;
+  }
+  .page-techworksarchive .content table{
+    overflow:visible;
+    border:0;
+    background:transparent;
+    box-shadow:none;
+  }
+  .page-techworksarchive .content table thead{
+    position:absolute;
+    width:1px;
+    height:1px;
+    padding:0;
+    overflow:hidden;
+    clip:rect(0,0,0,0);
+    white-space:nowrap;
+    border:0;
+  }
+  .page-techworksarchive .content table tr{
+    margin-bottom:.5rem;
+    padding:.6rem .7rem;
+    border:1px solid var(--line);
+    border-radius:10px;
+    background:linear-gradient(145deg,#fffefa,#f7f4ed);
+  }
+  .page-techworksarchive .content table td{
+    display:inline;
+    width:auto;
+    padding:0;
+    border:0;
+    white-space:normal;
+  }
+  .page-techworksarchive .content table td:first-child{
+    display:block;
+    margin-bottom:.24rem;
+    font-weight:650;
+  }
+  .page-techworksarchive .content table td+td{margin-right:.7rem;}
 }
 
 @media (max-width:359px){