| author | Alan Dipert
<alan@tailrecursion.com> 2026-08-09 18:40:06 UTC |
| committer | Alan Dipert
<alan@tailrecursion.com> 2026-08-09 18:40:06 UTC |
| parent | 2cd5263f27333d04c16ff0ecb6759860668248e3 |
| 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 - +# Home + -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){