From 3620d94e7ad8d9b04ff39e2eaf01d3e023f3eda1 Mon Sep 17 00:00:00 2001 From: Alexander Date: Mon, 16 Jun 2025 11:56:44 -0400 Subject: [PATCH 1/7] switched to harfbuzz subsetting and now subset alegreya* --- .gitignore | 1 + acl.cool/site/draft/nomad.dj | 2 +- acl.cool/site/writings/culture-order.dj | 2 +- build.sh | 49 ++++++++++++++++--------- css/fonts.css | 16 ++++---- deps.sh | 29 ++++++++++++++- 6 files changed, 69 insertions(+), 30 deletions(-) diff --git a/.gitignore b/.gitignore index ef22b71..95757f2 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ css/code.css pgvv/ all_chars.txt **/fonts/**/*-Subset.* +woff2/ \ No newline at end of file diff --git a/acl.cool/site/draft/nomad.dj b/acl.cool/site/draft/nomad.dj index d83273e..fe24358 100644 --- a/acl.cool/site/draft/nomad.dj +++ b/acl.cool/site/draft/nomad.dj @@ -78,7 +78,7 @@ let various_floats = [1.0; 4.0; 9.0] let together : float ListMonad.t = ListMonad.bind sqrt various_floats ``` -Here's an example of the monad in action. `together` is `[1.0; -1.0] @ [2.0; -2.0] @ [3.0; -3.0]`, which of course is `[1.0; -1.0; 2.0' -2.0; 3.0; -3.0]`. In this case, we used the taking-all-branches nature of the list monad to compute all the square roots of the numbers in the provided list. If taking the square-root is considered to be an ambiguous operation[^i-know], then *yada yada*. This monad is often used to run operations that have some ambiguous result, to capture the idea that multiple possible return values are valid, e.g. "the square root of four" can be considered ambiguous, since both 2^2^ and (-2)^2^ are 4. Another example of this can be found in parsing with ambiguous grammars. Parser combinator libraries often make it easy to define ambiguous-on-the-face parsers and resolve the ambiguity through some convention, but perhaps +Here's an example of the monad in action. `together` is `[1.0; -1.0] @ [2.0; -2.0] @ [3.0; -3.0]`, which of course is `[1.0; -1.0; 2.0; -2.0; 3.0; -3.0]`. In this case, we used the taking-all-branches nature of the list monad to compute all the square roots of the numbers in the provided list. If taking the square-root is considered to be an ambiguous operation[^i-know], then *yada yada*. This monad is often used to run operations that have some ambiguous result, to capture the idea that multiple possible return values are valid, e.g. "the square root of four" can be considered ambiguous, since both 2^2^ and (-2)^2^ are 4. Another example of this can be found in parsing with ambiguous grammars. Parser combinator libraries often make it easy to define ambiguous-on-the-face parsers and resolve the ambiguity through some convention, but perhaps looks like multiple return with only one in the chain, but the sequencing is what gives us nondeterminism; multiple return doesn't chain the same. To do this without a monad we'd need to do diff --git a/acl.cool/site/writings/culture-order.dj b/acl.cool/site/writings/culture-order.dj index 35fd2be..67e826b 100644 --- a/acl.cool/site/writings/culture-order.dj +++ b/acl.cool/site/writings/culture-order.dj @@ -1,6 +1,6 @@ # Reading Order of The Culture -I've generated a reading order dependency graph for books in Iain M. Banks' monumental _Culture_ series. The idea is that if there's an arrow from book A to book B, then to get the most possible enjoyment from either A or B, A should be read before B. +I've generated a reading order dependency graph for books in Iain M. Banks' unsurpassable Sci-Fi classic, the _Culture_ series. The idea is that if there's an arrow from book A to book B, then to get the most possible enjoyment from either A or B, A should be read before B. ![A dependency graph diagram of what Culture books must eb read before what others.](/culture.dot.png) Above is the graph, and [right here](/culture.dot.txt) is the vizgraph description file that lists my rationale for each dependency. diff --git a/build.sh b/build.sh index d787f6b..fee9b88 100755 --- a/build.sh +++ b/build.sh @@ -7,34 +7,47 @@ find acl.cool/serve/ ytheleus.org/serve/ -type f -mmin +11 -delete function soup_config { rm soupault.toml cp ../soupault.toml soupault.toml - cat soupault.toml.frag* >> soupault.toml + cat soupault.toml.frag* >>soupault.toml } source ./pgvv/bin/activate -find acl.cool/site/ ytheleus.org/site/ -type f \( -name '*.dj' -o -name '*.html' \) -exec cat {} + > all_chars.txt -cat common_chars.txt >> all_chars.txt +find acl.cool/site/ ytheleus.org/site/ -type f \( -name '*.dj' -o -name '*.html' \) -exec cat {} + >all_chars.txt +cat common_chars.txt >>all_chars.txt for font in fonts/JuliaMono/*{-Light,-Regular,-SemiBold}{,Italic}.woff2; do - echo "Subsetting $font" - pyftsubset "$font" --flavor=woff2 --text-file=all_chars.txt --layout-features='*' \ - --output-file="$(awk -F '.woff2' '{print $1}' <<< "$font")-Subset.woff2" + ./woff2/woff2_decompress "$font" + ttf_font="${font%.woff2}.ttf" + + subset_ttf="${ttf_font%.ttf}-Subset.ttf" + hb-subset "$ttf_font" \ + --output-file="$subset_ttf" \ + --text-file=all_chars.txt \ + --layout-features='*' \ + --passthrough-tables + + ./woff2/woff2_compress "$subset_ttf" + + rm "$subset_ttf" "$ttf_font" done -#for font in fonts/Alegreya/static/Alegreya-{Regular,Italic,Bold,BoldItalic}.ttf; do -# echo "Subsetting $font" -# pyftsubset "$font" --text-file=all_chars.txt --layout-features='*' \ -# --output-file="$(awk -F '.ttf' '{print $1}' <<< "$font")-Subset.ttf" -#done -# -#for font in fonts/Alegreya_Sans/AlegreyaSans-{Regular,Italic,Bold,BoldItalic}.ttf; do -# echo "Subsetting $font" -# pyftsubset "$font" --text-file=all_chars.txt --layout-features='*' \ -# --output-file="$(awk -F '.ttf' '{print $1}' <<< "$font")-Subset.ttf" -#done +for font in \ + fonts/Alegreya/static/Alegreya-{Regular,Italic,Bold,BoldItalic}.ttf \ + fonts/Alegreya_Sans/AlegreyaSans-{Regular,Italic,Bold,BoldItalic}.ttf; do + subset_ttf="${font%.ttf}-Subset.ttf" + hb-subset "$font" \ + --output-file="$subset_ttf" \ + --text-file=all_chars.txt \ + --layout-features='*' \ + --passthrough-tables + + ./woff2/woff2_compress "$subset_ttf" + + rm "$subset_ttf" +done rm css/code.css -pygmentize -f html -S algol_nu | grep -v 'line-height' > css/code.css +pygmentize -f html -S algol_nu | grep -v 'line-height' >css/code.css builtin pushd acl.cool soup_config diff --git a/css/fonts.css b/css/fonts.css index b2e464a..c5e45e0 100644 --- a/css/fonts.css +++ b/css/fonts.css @@ -56,56 +56,56 @@ @font-face { font-family: 'BodySerif'; - src: url('../assets/fonts/Alegreya/static/Alegreya-Regular.ttf') format('truetype'); + src: url('../assets/fonts/Alegreya/static/Alegreya-Regular-Subset.woff2') format('woff2'); font-weight: normal; font-style: normal; } @font-face { font-family: 'BodySerif'; - src: url('../assets/fonts/Alegreya/static/Alegreya-Italic.ttf') format('truetype'); + src: url('../assets/fonts/Alegreya/static/Alegreya-Italic-Subset.woff2') format('woff2'); font-weight: normal; font-style: italic; } @font-face { font-family: 'BodySerif'; - src: url('../assets/fonts/Alegreya/static/Alegreya-Bold.ttf') format('truetype'); + src: url('../assets/fonts/Alegreya/static/Alegreya-Bold-Subset.woff2') format('woff2'); font-weight: bold; font-style: normal; } @font-face { font-family: 'BodySerif'; - src: url('../assets/fonts/Alegreya/static/Alegreya-BoldItalic.ttf') format('truetype'); + src: url('../assets/fonts/Alegreya/static/Alegreya-BoldItalic-Subset.woff2') format('woff2'); font-weight: bold; font-style: italic; } @font-face { font-family: 'BodySans'; - src: url('../assets/fonts/Alegreya_Sans/AlegreyaSans-Regular.ttf') format('truetype'); + src: url('../assets/fonts/Alegreya_Sans/AlegreyaSans-Regular-Subset.woff2') format('woff2'); font-weight: normal; font-style: normal; } @font-face { font-family: 'BodySans'; - src: url('../assets/fonts/Alegreya_Sans/AlegreyaSans-Italic.ttf') format('truetype'); + src: url('../assets/fonts/Alegreya_Sans/AlegreyaSans-Italic-Subset.woff2') format('woff2'); font-weight: normal; font-style: italic; } @font-face { font-family: 'BodySans'; - src: url('../assets/fonts/Alegreya_Sans/AlegreyaSans-Bold.ttf') format('truetype'); + src: url('../assets/fonts/Alegreya_Sans/AlegreyaSans-Bold-Subset.woff2') format('woff2'); font-weight: bold; font-style: normal; } @font-face { font-family: 'BodySans'; - src: url('../assets/fonts/Alegreya_Sans/AlegreyaSans-BoldItalic.ttf') format('truetype'); + src: url('../assets/fonts/Alegreya_Sans/AlegreyaSans-BoldItalic-Subset.woff2') format('woff2'); font-weight: bold; font-style: italic; } diff --git a/deps.sh b/deps.sh index 7834f41..8f890d8 100755 --- a/deps.sh +++ b/deps.sh @@ -5,11 +5,17 @@ if ! [[ -d pgvv/ ]]; then source ./pgvv/bin/activate python3 -m pip install --upgrade pip pip install --upgrade pygments - pip install --upgrade fonttools - pip install --upgrade brotli + # pip install --upgrade fonttools + # pip install --upgrade brotli deactivate fi +which dnf +if ! [[ $? == 0 ]]; then + echo 'please install hb-subset (provided by harfbuzz-devel on RedHat)' + exit 6 +fi + which opam 2> /dev/null if [[ $? == 0 ]]; then opam install -y soupault @@ -25,3 +31,22 @@ else echo 'failed to install jotdown with cargo' exit 3 fi + +which git 2> /dev/null +if ! [[ $? == 0 ]]; then + echo 'you need git' + exit 4 +fi + +which cc 2> /dev/null +if ! [[ $? == 0 ]]; then + echo 'you need a C compiler' + exit 5 +fi + +if ! [[ -d woff2/ ]]; then + git clone https://github.com/mobotsar/woff2.git --recursive || exit 7 + builtin pushd woff2 + make clean all || exit 8 + popd +fi \ No newline at end of file From e1258d43c5900738b29efb11dee99572c51ef779 Mon Sep 17 00:00:00 2001 From: Alexander Date: Mon, 16 Jun 2025 12:00:26 -0400 Subject: [PATCH 2/7] oops --- deps.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps.sh b/deps.sh index 8f890d8..8401ea6 100755 --- a/deps.sh +++ b/deps.sh @@ -10,7 +10,7 @@ if ! [[ -d pgvv/ ]]; then deactivate fi -which dnf +which hb-subset if ! [[ $? == 0 ]]; then echo 'please install hb-subset (provided by harfbuzz-devel on RedHat)' exit 6 From f9ca6208bda8f1b76ee1b21ee6ad5f39d4c570fc Mon Sep 17 00:00:00 2001 From: Alexander Date: Mon, 16 Jun 2025 12:02:18 -0400 Subject: [PATCH 3/7] oops --- build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sh b/build.sh index fee9b88..675d5f4 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,6 @@ #!/bin/bash -./deps.sh +./deps.sh || exit $? find acl.cool/serve/ ytheleus.org/serve/ -type f -mmin +11 -delete From dca96bc17d943c6159cf3501e95b8a5ed4239f08 Mon Sep 17 00:00:00 2001 From: Alexander Date: Mon, 16 Jun 2025 13:54:41 -0400 Subject: [PATCH 4/7] well there's more nixification that could be done, but this fixes my biggest gripe atm (deps fetching) --- build.sh | 18 +++++++++++++----- deps.sh | 52 ---------------------------------------------------- 2 files changed, 13 insertions(+), 57 deletions(-) delete mode 100755 deps.sh diff --git a/build.sh b/build.sh index 675d5f4..bca3aff 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,14 @@ -#!/bin/bash +#! /usr/bin/env nix-shell +#! nix-shell -i bash --pure +#! nix-shell -p bash harfbuzz soupault woff2 jotdown python3 --pure -./deps.sh || exit $? +if ! [[ -d pgvv/ ]]; then + python3 -m venv pgvv + source ./pgvv/bin/activate + python3 -m pip install --upgrade pip + pip install --upgrade pygments + deactivate +fi find acl.cool/serve/ ytheleus.org/serve/ -type f -mmin +11 -delete @@ -16,7 +24,7 @@ find acl.cool/site/ ytheleus.org/site/ -type f \( -name '*.dj' -o -name '*.html' cat common_chars.txt >>all_chars.txt for font in fonts/JuliaMono/*{-Light,-Regular,-SemiBold}{,Italic}.woff2; do - ./woff2/woff2_decompress "$font" + woff2_decompress "$font" ttf_font="${font%.woff2}.ttf" subset_ttf="${ttf_font%.ttf}-Subset.ttf" @@ -26,7 +34,7 @@ for font in fonts/JuliaMono/*{-Light,-Regular,-SemiBold}{,Italic}.woff2; do --layout-features='*' \ --passthrough-tables - ./woff2/woff2_compress "$subset_ttf" + woff2_compress "$subset_ttf" rm "$subset_ttf" "$ttf_font" done @@ -41,7 +49,7 @@ for font in \ --layout-features='*' \ --passthrough-tables - ./woff2/woff2_compress "$subset_ttf" + woff2_compress "$subset_ttf" rm "$subset_ttf" done diff --git a/deps.sh b/deps.sh deleted file mode 100755 index 8401ea6..0000000 --- a/deps.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/sh - -if ! [[ -d pgvv/ ]]; then - python3 -m venv pgvv - source ./pgvv/bin/activate - python3 -m pip install --upgrade pip - pip install --upgrade pygments - # pip install --upgrade fonttools - # pip install --upgrade brotli - deactivate -fi - -which hb-subset -if ! [[ $? == 0 ]]; then - echo 'please install hb-subset (provided by harfbuzz-devel on RedHat)' - exit 6 -fi - -which opam 2> /dev/null -if [[ $? == 0 ]]; then - opam install -y soupault -else - echo 'failed to install soupault with opam' >&2 - exit 2 -fi - -which cargo 2> /dev/null -if [[ $? == 0 ]]; then - cargo install jotdown -else - echo 'failed to install jotdown with cargo' - exit 3 -fi - -which git 2> /dev/null -if ! [[ $? == 0 ]]; then - echo 'you need git' - exit 4 -fi - -which cc 2> /dev/null -if ! [[ $? == 0 ]]; then - echo 'you need a C compiler' - exit 5 -fi - -if ! [[ -d woff2/ ]]; then - git clone https://github.com/mobotsar/woff2.git --recursive || exit 7 - builtin pushd woff2 - make clean all || exit 8 - popd -fi \ No newline at end of file From e951246a70210d584d2860832682601acbaed693 Mon Sep 17 00:00:00 2001 From: Alexander Date: Mon, 16 Jun 2025 14:24:22 -0400 Subject: [PATCH 5/7] salsa pdf --- acl.cool/site/assets/EasySalsa.pdf.draft | Bin 0 -> 15206 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 acl.cool/site/assets/EasySalsa.pdf.draft diff --git a/acl.cool/site/assets/EasySalsa.pdf.draft b/acl.cool/site/assets/EasySalsa.pdf.draft new file mode 100644 index 0000000000000000000000000000000000000000..060b56dd78b6f160d3cd42afbe1d18b9d701846d GIT binary patch literal 15206 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 I8DW_J1CIEZVgLXD literal 0 HcmV?d00001 From 25d1088227ea24ff8fbe3bd2c45f82dd6c0056d0 Mon Sep 17 00:00:00 2001 From: Alexander Date: Mon, 16 Jun 2025 14:59:05 -0400 Subject: [PATCH 6/7] made deploy atomic with symlink switch --- .gitignore | 3 ++- build.sh | 12 ++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 95757f2..474022f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ css/code.css pgvv/ all_chars.txt **/fonts/**/*-Subset.* -woff2/ \ No newline at end of file +woff2/ +**/serve_* diff --git a/build.sh b/build.sh index bca3aff..b637f49 100755 --- a/build.sh +++ b/build.sh @@ -10,8 +10,6 @@ if ! [[ -d pgvv/ ]]; then deactivate fi -find acl.cool/serve/ ytheleus.org/serve/ -type f -mmin +11 -delete - function soup_config { rm soupault.toml cp ../soupault.toml soupault.toml @@ -60,10 +58,20 @@ pygmentize -f html -S algol_nu | grep -v 'line-height' >css/code.css builtin pushd acl.cool soup_config soupault + +NEXT_DIR="serve_$(date +%s)" +cp -a serve "$NEXT_DIR" +ln -sfn "$NEXT_DIR" serve_ + popd builtin pushd ytheleus.org soup_config soupault + +NEXT_DIR="serve_$(date +%s)" +cp -a serve "$NEXT_DIR" +ln -sfn "$NEXT_DIR" serve_ + popd deactivate From a07978207ae24e53660a3eab544143a8167afbcc Mon Sep 17 00:00:00 2001 From: Alexander Date: Mon, 16 Jun 2025 15:11:43 -0400 Subject: [PATCH 7/7] removed imports to fix blocking css loads --- css/index.css | 7 ------- shared_templates/main.html | 5 ++++- 2 files changed, 4 insertions(+), 8 deletions(-) delete mode 100644 css/index.css diff --git a/css/index.css b/css/index.css deleted file mode 100644 index 753f81a..0000000 --- a/css/index.css +++ /dev/null @@ -1,7 +0,0 @@ -@import url(fonts.css); - -@import url(looks.css); - -@import url(layout.css); - -@import url(code.css); \ No newline at end of file diff --git a/shared_templates/main.html b/shared_templates/main.html index ac13523..8303b84 100644 --- a/shared_templates/main.html +++ b/shared_templates/main.html @@ -4,7 +4,10 @@ <!-- set automatically, see soupault.conf --> - + + + +