You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Blocked by #44 — do not start until the notebooks are signed off.
The decks should introduce notebooks that are already good. Reshaping slides
around content that is still moving means doing it twice.
The problem
Each section's slides currently run: # NN · Title {#sec-NN-slug} → the hidden ::: {.sec-part} div → *Part III · exercise* → the .pace-badge → two to
seven concept slides → a "To the notebook" slide with the Colab link.
Two things are off. The concept slides re-teach material the notebook then
teaches again, so the deck competes with the notebook instead of setting it up.
And the objective the section is aiming at never appears on screen at all — it
lives only in scripts/content.py and surfaces only inside the notebook.
Pacing is uneven as a result: §00 gets 2 slides for its 5 minutes, §01 gets 7
for its 20.
Styling is deliberately minimal and now reads as plain rather than as calm. slides/slides.scss is system-ui only — no web fonts — on three colours: #2f4858 headings, #2c5f8a links, #1f2933 body, with #b3541e for Kahoot.
The same palette as the site's custom.scss.
The ask — part 1, structure
Reshape each section's slides to what the notebook is → its objective → the
key questions it answers, then hand over to Colab. The deck frames; the
notebook teaches.
Supporting change: lift objectives out of scripts/content.py into _variables.yml. That is what lets {{< var >}} reach them from both decks and
from the site, and what gets them a Spanish translation like every other string
there. #43 may already have done this — check before duplicating it.
EN and ES in lockstep, always:
00 · Setup and welcome
01 · What a tensor is
02 · Thinking in N dimensions
03 · Indexing and broadcasting real data
04 · Reshape and transpose real images
05 · Video pipeline design
06 · Contraction with einsum
07 · Inverses and the pseudoinverse
08 · Recursion with matrices and vectors
09 · Convolution and deconvolution
10 · Tucker decomposition on real data
11 · Wrap-up and take-homes
The ask — part 2, make it fun to look at
Fonts — Google Fonts is the one external host Quarto allows here. Give
every face a real fallback stack; slides.scss currently has none because
it never needed one.
A warmer, wider palette than the current three colours, without losing
contrast on the Kahoot slides or under the pace chrome.
Illustrations. Extend scripts/gen_figures.py and scripts/gen_thumbnails.py rather than dropping in stock art — every
figure in this repo is drawn from an array the workshop actually uses, and
that property is worth keeping.
Constraints
slides/deck-pace.html is include-after-body for both decks and owns TOTAL_SECONDS = 11700. check_links.py fails if that stops matching workshop.minutes. Quarto runs its shortcode parser over included HTML —
a bare var shortcode written out in a comment there crashes the render with Cannot get Attr from TypeNil.
A section's part number must stay a hidden ::: {.sec-part} div. As a data-
attribute on the heading it is not parsed as an attribute at all: pandoc folds
the whole brace into the heading text and auto-generates an id from it, which
silently destroys every #sec-NN anchor.
check_links.py enforces that both decks carry every section anchor and list
the same twelve sections. EN and ES change together.
section.factorization-ladder (§10's four-rung slide) and section.data-slide
(the nine-card dataset grid) are hand-tuned to 1280×760. A font change will
move both.
The image generators are not in CI — they need network and a scientific stack
the workflow does not install. Nothing will tell you a figure is stale; rerun
them by hand when their inputs change.
The problem
Each section's slides currently run:
# NN · Title {#sec-NN-slug}→ the hidden::: {.sec-part}div →*Part III · exercise*→ the.pace-badge→ two toseven concept slides → a "To the notebook" slide with the Colab link.
Two things are off. The concept slides re-teach material the notebook then
teaches again, so the deck competes with the notebook instead of setting it up.
And the objective the section is aiming at never appears on screen at all — it
lives only in
scripts/content.pyand surfaces only inside the notebook.Pacing is uneven as a result: §00 gets 2 slides for its 5 minutes, §01 gets 7
for its 20.
Styling is deliberately minimal and now reads as plain rather than as calm.
slides/slides.scssissystem-uionly — no web fonts — on three colours:#2f4858headings,#2c5f8alinks,#1f2933body, with#b3541efor Kahoot.The same palette as the site's
custom.scss.The ask — part 1, structure
Reshape each section's slides to what the notebook is → its objective → the
key questions it answers, then hand over to Colab. The deck frames; the
notebook teaches.
Supporting change: lift
objectivesout ofscripts/content.pyinto_variables.yml. That is what lets{{< var >}}reach them from both decks andfrom the site, and what gets them a Spanish translation like every other string
there. #43 may already have done this — check before duplicating it.
EN and ES in lockstep, always:
The ask — part 2, make it fun to look at
every face a real fallback stack;
slides.scsscurrently has none becauseit never needed one.
contrast on the Kahoot slides or under the pace chrome.
scripts/gen_figures.pyandscripts/gen_thumbnails.pyrather than dropping in stock art — everyfigure in this repo is drawn from an array the workshop actually uses, and
that property is worth keeping.
Constraints
slides/deck-pace.htmlisinclude-after-bodyfor both decks and ownsTOTAL_SECONDS = 11700.check_links.pyfails if that stops matchingworkshop.minutes. Quarto runs its shortcode parser over included HTML —a bare
varshortcode written out in a comment there crashes the render withCannot get Attr from TypeNil.::: {.sec-part}div. As adata-attribute on the heading it is not parsed as an attribute at all: pandoc folds
the whole brace into the heading text and auto-generates an id from it, which
silently destroys every
#sec-NNanchor.check_links.pyenforces that both decks carry every section anchor and listthe same twelve sections. EN and ES change together.
slides/slides.scss:31-37is a Kahoot-contrast comment introducing an emptyrule block — the comment ends and
.reveal .calloutfollows directly. Fixit as part of this, and check it against Cold load: reveal misclassifies every slide as dark, and the footer goes unreadable #39.
section.factorization-ladder(§10's four-rung slide) andsection.data-slide(the nine-card dataset grid) are hand-tuned to 1280×760. A font change will
move both.
the workflow does not install. Nothing will tell you a figure is stale; rerun
them by hand when their inputs change.