Monorepo for Aesthetic.Computer aesthetic.computer
4
fork

Configure Feed

Select the types of activity you want to include in your feed.

compush everything

+2381 -5
+16
oven/deploy.sh
··· 129 129 echo "" 130 130 echo "✅ Font glyph sync complete in ${FONT_SYNC_TIME}ms" 131 131 132 + # Ensure OS cache path is writable by the oven service user. 133 + echo "" 134 + echo "🧹 Ensuring OS cache directory + permissions..." 135 + ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "root@$OVEN_HOST" " 136 + mkdir -p $REMOTE_DIR/cache 137 + if id -u oven >/dev/null 2>&1; then 138 + chown -R oven:oven $REMOTE_DIR 139 + fi 140 + if grep -q '^OS_CACHE_DIR=' $REMOTE_DIR/.env 2>/dev/null; then 141 + sed -i 's|^OS_CACHE_DIR=.*|OS_CACHE_DIR=$REMOTE_DIR/cache|' $REMOTE_DIR/.env 142 + else 143 + echo 'OS_CACHE_DIR=$REMOTE_DIR/cache' >> $REMOTE_DIR/.env 144 + fi 145 + " 146 + echo "✅ OS cache path ready: $REMOTE_DIR/cache" 147 + 132 148 # Restart unless --no-restart flag 133 149 if [ "$1" != "--no-restart" ]; then 134 150 echo ""
+102 -3
oven/os-builder.mjs
··· 52 52 53 53 // ─── Configuration ────────────────────────────────────────────────── 54 54 55 - const CACHE_DIR = process.env.OS_CACHE_DIR || "/opt/oven/cache"; 56 55 const TEMP_DIR = process.env.OS_TEMP_DIR || "/tmp"; 56 + const CONFIGURED_CACHE_DIR = (process.env.OS_CACHE_DIR || "").trim(); 57 + const DEFAULT_CACHE_DIR = "/opt/oven/cache"; 58 + const FALLBACK_CACHE_DIR = path.join(TEMP_DIR, "oven-cache"); 59 + const WORKDIR_CACHE_DIR = path.join(process.cwd(), ".cache", "oven-os"); 57 60 const BASE_IMAGE_URLS = { 58 61 fedora: process.env.FEDAC_BASE_IMAGE_URL || 59 62 "https://assets-aesthetic-computer.sfo3.cdn.digitaloceanspaces.com/os/fedora-base-latest.img", ··· 69 72 // Legacy aliases 70 73 const BASE_IMAGE_URL = BASE_IMAGE_URLS.fedora; 71 74 const MANIFEST_URL = MANIFEST_URLS.fedora; 75 + 76 + let resolvedCacheDir = null; 77 + let resolvingCacheDirPromise = null; 78 + 79 + function getCacheDirCandidates() { 80 + return [...new Set([ 81 + CONFIGURED_CACHE_DIR || DEFAULT_CACHE_DIR, 82 + DEFAULT_CACHE_DIR, 83 + FALLBACK_CACHE_DIR, 84 + WORKDIR_CACHE_DIR, 85 + ])]; 86 + } 87 + 88 + async function resolveCacheDir() { 89 + if (resolvedCacheDir) return resolvedCacheDir; 90 + if (resolvingCacheDirPromise) return resolvingCacheDirPromise; 91 + 92 + resolvingCacheDirPromise = (async () => { 93 + const candidates = getCacheDirCandidates(); 94 + const errors = []; 95 + const preferred = CONFIGURED_CACHE_DIR || DEFAULT_CACHE_DIR; 96 + 97 + for (const dir of candidates) { 98 + const probePath = path.join(dir, `.cache-probe-${process.pid}-${Date.now()}`); 99 + try { 100 + await fs.mkdir(dir, { recursive: true }); 101 + await fs.writeFile(probePath, "ok"); 102 + await fs.unlink(probePath); 103 + resolvedCacheDir = dir; 104 + if (dir !== preferred) { 105 + console.warn(`[os] Cache fallback active: ${preferred} is not writable. Using ${dir}`); 106 + } 107 + return dir; 108 + } catch (err) { 109 + errors.push(`${dir} (${err.code || err.message})`); 110 + } 111 + } 112 + 113 + throw new Error( 114 + `No writable OS cache directory. Tried: ${errors.join(", ")}`, 115 + ); 116 + })(); 117 + 118 + try { 119 + return await resolvingCacheDirPromise; 120 + } finally { 121 + resolvingCacheDirPromise = null; 122 + } 123 + } 124 + 125 + function buildLocalCacheFilenamePattern(flavor) { 126 + if (flavor) { 127 + const safeFlavor = String(flavor).replace(/[^a-z0-9_-]/gi, ""); 128 + return new RegExp(`^${safeFlavor}-base\\.img(?:\\.sha256|\\.downloading)?$`, "i"); 129 + } 130 + return /^[a-z0-9_-]+-base\.img(?:\.sha256|\.downloading)?$/i; 131 + } 132 + 133 + export async function clearOSBuildLocalCache(flavor) { 134 + const cacheDirs = [...new Set([ 135 + resolvedCacheDir, 136 + ...getCacheDirCandidates(), 137 + ].filter(Boolean))]; 138 + const filenamePattern = buildLocalCacheFilenamePattern(flavor); 139 + 140 + let deleted = 0; 141 + const errors = []; 142 + for (const cacheDir of cacheDirs) { 143 + let entries = []; 144 + try { 145 + entries = await fs.readdir(cacheDir); 146 + } catch (err) { 147 + if (err.code === "ENOENT") continue; 148 + errors.push(`${cacheDir}: ${err.code || err.message}`); 149 + continue; 150 + } 151 + 152 + for (const entry of entries) { 153 + if (!filenamePattern.test(entry)) continue; 154 + try { 155 + await fs.unlink(path.join(cacheDir, entry)); 156 + deleted++; 157 + } catch (err) { 158 + errors.push(`${cacheDir}/${entry}: ${err.code || err.message}`); 159 + } 160 + } 161 + } 162 + 163 + if (errors.length) { 164 + console.warn("[os] Local cache clear warnings:", errors.join("; ")); 165 + } 166 + 167 + return { deleted, dirs: cacheDirs, errors }; 168 + } 72 169 73 170 // ─── CDN Cache (DO Spaces) ────────────────────────────────────────── 74 171 // After building an ISO, upload it to Spaces so repeat downloads bypass ··· 243 340 // ─── Base Image Cache ─────────────────────────────────────────────── 244 341 245 342 async function ensureBaseImage(onProgress, flavor = "alpine") { 246 - await fs.mkdir(CACHE_DIR, { recursive: true }); 343 + const cacheDir = await resolveCacheDir(); 344 + await fs.mkdir(cacheDir, { recursive: true }); 247 345 const manifest = await fetchManifest(onProgress, flavor); 248 - const basePath = path.join(CACHE_DIR, `${flavor}-base.img`); 346 + const basePath = path.join(cacheDir, `${flavor}-base.img`); 249 347 const hashPath = `${basePath}.sha256`; 250 348 251 349 // Check if cached image matches manifest size AND sha256 hash. ··· 1153 1251 activeBuildCount, 1154 1252 maxConcurrent: MAX_CONCURRENT_BUILDS, 1155 1253 recentBuilds: recentBuilds.slice(0, 10), 1254 + cacheDir: resolvedCacheDir || (CONFIGURED_CACHE_DIR || DEFAULT_CACHE_DIR), 1156 1255 baseImageUrl: BASE_IMAGE_URL, 1157 1256 manifestUrl: MANIFEST_URL, 1158 1257 };
+26 -2
oven/server.mjs
··· 13 13 import { grabHandler, grabGetHandler, grabIPFSHandler, grabPiece, getCachedOrGenerate, getActiveGrabs, getRecentGrabs, getLatestKeepThumbnail, getLatestIPFSUpload, getAllLatestIPFSUploads, setNotifyCallback, setLogCallback, cleanupStaleGrabs, clearAllActiveGrabs, getQueueStatus, getCurrentProgress, getAllProgress, getConcurrencyStatus, IPFS_GATEWAY, generateKidlispOGImage, getOGImageCacheStatus, getFrozenPieces, clearFrozenPiece, getLatestOGImageUrl, regenerateOGImagesBackground, generateKidlispBackdrop, getLatestBackdropUrl, APP_SCREENSHOT_PRESETS, generateNotepatOGImage, getLatestNotepatOGUrl } from './grabber.mjs'; 14 14 import archiver from 'archiver'; 15 15 import { createBundle, createJSPieceBundle, createM4DBundle, generateDeviceHTML, prewarmCache, getCacheStatus, setSkipMinification } from './bundler.mjs'; 16 - import { streamOSImage, getOSBuildStatus, invalidateManifest, purgeOSBuildCache } from './os-builder.mjs'; 16 + import { streamOSImage, getOSBuildStatus, invalidateManifest, purgeOSBuildCache, clearOSBuildLocalCache } from './os-builder.mjs'; 17 17 import { startOSBaseBuild, getOSBaseBuild, getOSBaseBuildsSummary, cancelOSBaseBuild } from './os-base-build.mjs'; 18 18 19 19 const app = express(); ··· 2638 2638 2639 2639 app.post('/os-invalidate', async (req, res) => { 2640 2640 const purge = req.body?.purge === true; 2641 + const clearLocal = req.body?.local === true || req.body?.clearLocal === true; 2641 2642 const flavor = req.body?.flavor; 2642 2643 invalidateManifest(flavor); 2643 2644 addServerLog('info', '💿', `OS base image manifest cache invalidated${flavor ? ` (${flavor})` : ''}`); 2645 + 2646 + let localResult = null; 2647 + if (clearLocal) { 2648 + localResult = await clearOSBuildLocalCache(flavor); 2649 + addServerLog('info', '🧹', `Cleared ${localResult.deleted} local base-image cache file(s)${flavor ? ` (${flavor})` : ''}`); 2650 + } 2644 2651 2645 2652 if (purge) { 2646 2653 const purgeResult = await purgeOSBuildCache(flavor); 2647 2654 addServerLog('info', '🗑️', `Purged ${purgeResult.deleted} cached build(s) from CDN${flavor ? ` (${flavor})` : ''}`); 2648 - return res.json({ ok: true, message: 'Manifest + CDN build cache purged.', purged: purgeResult.deleted }); 2655 + return res.json({ 2656 + ok: true, 2657 + message: clearLocal 2658 + ? 'Manifest invalidated, local base cache cleared, and CDN build cache purged.' 2659 + : 'Manifest + CDN build cache purged.', 2660 + purged: purgeResult.deleted, 2661 + localCleared: localResult?.deleted || 0, 2662 + localDirs: localResult?.dirs || [], 2663 + }); 2664 + } 2665 + 2666 + if (clearLocal) { 2667 + return res.json({ 2668 + ok: true, 2669 + message: 'Manifest invalidated and local base-image cache cleared.', 2670 + localCleared: localResult.deleted, 2671 + localDirs: localResult.dirs, 2672 + }); 2649 2673 } 2650 2674 2651 2675 res.json({ ok: true, message: 'Manifest cache invalidated — next build will re-fetch.' });
+16
sosoft/proposal.aux
··· 1 + \relax 2 + \providecommand\hyper@newdestlabel[2]{} 3 + \providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} 4 + \HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined 5 + \global\let\oldnewlabel\newlabel 6 + \gdef\newlabel#1#2{\newlabelxx{#1}#2} 7 + \gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} 8 + \AtEndDocument{\ifx\hyper@anchor\@undefined 9 + \let\newlabel\oldnewlabel 10 + \fi} 11 + \fi} 12 + \global\let\hyper@last\relax 13 + \gdef\HyperFirstAtBeginDocument#1{#1} 14 + \providecommand*\HyPL@Entry[1]{} 15 + \HyPL@Entry{0<</S/D>>} 16 + \gdef \@abspage@last{5}
+1534
sosoft/proposal.log
··· 1 + This is XeTeX, Version 3.141592653-2.6-0.999995 (TeX Live 2023) (preloaded format=xelatex 2026.3.2) 2 MAR 2026 17:59 2 + entering extended mode 3 + restricted \write18 enabled. 4 + %&-line parsing enabled. 5 + **proposal.tex 6 + (./proposal.tex 7 + LaTeX2e <2022-11-01> patch level 1 8 + L3 programming layer <2023-02-22> 9 + (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls 10 + Document Class: article 2022/07/02 v1.4n Standard LaTeX document class 11 + (/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo 12 + File: size10.clo 2022/07/02 v1.4n Standard LaTeX file (size option) 13 + ) 14 + \c@part=\count181 15 + \c@section=\count182 16 + \c@subsection=\count183 17 + \c@subsubsection=\count184 18 + \c@paragraph=\count185 19 + \c@subparagraph=\count186 20 + \c@figure=\count187 21 + \c@table=\count188 22 + \abovecaptionskip=\skip48 23 + \belowcaptionskip=\skip49 24 + \bibindent=\dimen140 25 + ) 26 + (/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty 27 + Package: geometry 2020/01/02 v5.9 Page Geometry 28 + 29 + (/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty 30 + Package: keyval 2022/05/29 v1.15 key=value parser (DPC) 31 + \KV@toks@=\toks16 32 + ) 33 + (/usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty 34 + Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. 35 + 36 + (/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty 37 + Package: iftex 2022/02/03 v1.0f TeX engine tests 38 + )) 39 + \Gm@cnth=\count189 40 + \Gm@cntv=\count190 41 + \c@Gm@tempcnt=\count191 42 + \Gm@bindingoffset=\dimen141 43 + \Gm@wd@mp=\dimen142 44 + \Gm@odd@mp=\dimen143 45 + \Gm@even@mp=\dimen144 46 + \Gm@layoutwidth=\dimen145 47 + \Gm@layoutheight=\dimen146 48 + \Gm@layouthoffset=\dimen147 49 + \Gm@layoutvoffset=\dimen148 50 + \Gm@dimlist=\toks17 51 + ) 52 + (/usr/share/texlive/texmf-dist/tex/latex/fontspec/fontspec.sty 53 + (/usr/share/texlive/texmf-dist/tex/latex/l3packages/xparse/xparse.sty 54 + (/usr/share/texlive/texmf-dist/tex/latex/l3kernel/expl3.sty 55 + Package: expl3 2023-02-22 L3 programming layer (loader) 56 + 57 + (/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-xetex.def 58 + File: l3backend-xetex.def 2023-01-16 L3 backend support: XeTeX 59 + \g__graphics_track_int=\count192 60 + \l__pdf_internal_box=\box51 61 + \g__pdf_backend_object_int=\count193 62 + \g__pdf_backend_annotation_int=\count194 63 + \g__pdf_backend_link_int=\count195 64 + )) 65 + Package: xparse 2023-02-02 L3 Experimental document command parser 66 + ) 67 + Package: fontspec 2022/01/15 v2.8a Font selection for XeLaTeX and LuaLaTeX 68 + 69 + (/usr/share/texlive/texmf-dist/tex/latex/fontspec/fontspec-xetex.sty 70 + Package: fontspec-xetex 2022/01/15 v2.8a Font selection for XeLaTeX and LuaLaTe 71 + X 72 + \l__fontspec_script_int=\count196 73 + \l__fontspec_language_int=\count197 74 + \l__fontspec_strnum_int=\count198 75 + \l__fontspec_tmp_int=\count199 76 + \l__fontspec_tmpa_int=\count266 77 + \l__fontspec_tmpb_int=\count267 78 + \l__fontspec_tmpc_int=\count268 79 + \l__fontspec_em_int=\count269 80 + \l__fontspec_emdef_int=\count270 81 + \l__fontspec_strong_int=\count271 82 + \l__fontspec_strongdef_int=\count272 83 + \l__fontspec_tmpa_dim=\dimen149 84 + \l__fontspec_tmpb_dim=\dimen150 85 + \l__fontspec_tmpc_dim=\dimen151 86 + 87 + (/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty 88 + Package: fontenc 2021/04/29 v2.0v Standard LaTeX package 89 + ) 90 + (/usr/share/texlive/texmf-dist/tex/latex/fontspec/fontspec.cfg))) 91 + (/usr/share/texlive/texmf-dist/tex/latex/unicode-math/unicode-math.sty 92 + Package: unicode-math 2020/01/31 v0.8q Unicode maths in XeLaTeX and LuaLaTeX 93 + 94 + (/usr/share/texlive/texmf-dist/tex/latex/unicode-math/unicode-math-xetex.sty 95 + Package: unicode-math-xetex 2020/01/31 v0.8q Unicode maths in XeLaTeX and LuaLa 96 + TeX 97 + 98 + (/usr/share/texlive/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty 99 + Package: l3keys2e 2023-02-02 LaTeX2e option processing using LaTeX3 keys 100 + ) 101 + (/usr/share/texlive/texmf-dist/tex/latex/base/fix-cm.sty 102 + Package: fix-cm 2020/11/24 v1.1t fixes to LaTeX 103 + 104 + (/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def 105 + File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file 106 + LaTeX Font Info: Redeclaring font encoding TS1 on input line 47. 107 + )) 108 + (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty 109 + Package: amsmath 2022/04/08 v2.17n AMS math features 110 + \@mathmargin=\skip50 111 + 112 + For additional information on amsmath, use the `?' option. 113 + (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty 114 + Package: amstext 2021/08/26 v2.01 AMS text 115 + 116 + (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty 117 + File: amsgen.sty 1999/11/30 v2.0 generic functions 118 + \@emptytoks=\toks18 119 + \ex@=\dimen152 120 + )) 121 + (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty 122 + Package: amsbsy 1999/11/29 v1.2d Bold Symbols 123 + \pmbraise@=\dimen153 124 + ) 125 + (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty 126 + Package: amsopn 2022/04/08 v2.04 operator names 127 + ) 128 + \inf@bad=\count273 129 + LaTeX Info: Redefining \frac on input line 234. 130 + \uproot@=\count274 131 + \leftroot@=\count275 132 + LaTeX Info: Redefining \overline on input line 399. 133 + LaTeX Info: Redefining \colon on input line 410. 134 + \classnum@=\count276 135 + \DOTSCASE@=\count277 136 + LaTeX Info: Redefining \ldots on input line 496. 137 + LaTeX Info: Redefining \dots on input line 499. 138 + LaTeX Info: Redefining \cdots on input line 620. 139 + \Mathstrutbox@=\box52 140 + \strutbox@=\box53 141 + LaTeX Info: Redefining \big on input line 722. 142 + LaTeX Info: Redefining \Big on input line 723. 143 + LaTeX Info: Redefining \bigg on input line 724. 144 + LaTeX Info: Redefining \Bigg on input line 725. 145 + \big@size=\dimen154 146 + LaTeX Font Info: Redeclaring font encoding OML on input line 743. 147 + LaTeX Font Info: Redeclaring font encoding OMS on input line 744. 148 + \macc@depth=\count278 149 + LaTeX Info: Redefining \bmod on input line 905. 150 + LaTeX Info: Redefining \pmod on input line 910. 151 + LaTeX Info: Redefining \smash on input line 940. 152 + LaTeX Info: Redefining \relbar on input line 970. 153 + LaTeX Info: Redefining \Relbar on input line 971. 154 + \c@MaxMatrixCols=\count279 155 + \dotsspace@=\muskip16 156 + \c@parentequation=\count280 157 + \dspbrk@lvl=\count281 158 + \tag@help=\toks19 159 + \row@=\count282 160 + \column@=\count283 161 + \maxfields@=\count284 162 + \andhelp@=\toks20 163 + \eqnshift@=\dimen155 164 + \alignsep@=\dimen156 165 + \tagshift@=\dimen157 166 + \tagwidth@=\dimen158 167 + \totwidth@=\dimen159 168 + \lineht@=\dimen160 169 + \@envbody=\toks21 170 + \multlinegap=\skip51 171 + \multlinetaggap=\skip52 172 + \mathdisplay@stack=\toks22 173 + LaTeX Info: Redefining \[ on input line 2953. 174 + LaTeX Info: Redefining \] on input line 2954. 175 + ) 176 + \g__um_fam_int=\count285 177 + \g__um_fonts_used_int=\count286 178 + \l__um_primecount_int=\count287 179 + \g__um_primekern_muskip=\muskip17 180 + 181 + (/usr/share/texlive/texmf-dist/tex/latex/unicode-math/unicode-math-table.tex))) 182 + 183 + Package fontspec Info: Font family 'LatinModernRoman(0)' created for font 184 + (fontspec) 'Latin Modern Roman' with options [Ligatures=TeX]. 185 + (fontspec) 186 + (fontspec) This font family consists of the following NFSS 187 + (fontspec) series/shapes: 188 + (fontspec) 189 + (fontspec) - 'normal' (m/n) with NFSS spec.: <->"Latin Modern 190 + (fontspec) Roman/OT:script=latn;language=dflt;mapping=tex-text;" 191 + (fontspec) - 'small caps' (m/sc) with NFSS spec.: 192 + (fontspec) - 'bold' (b/n) with NFSS spec.: <->"Latin Modern 193 + (fontspec) Roman/B/OT:script=latn;language=dflt;mapping=tex-text;" 194 + (fontspec) - 'bold small caps' (b/sc) with NFSS spec.: 195 + (fontspec) - 'italic' (m/it) with NFSS spec.: <->"Latin Modern 196 + (fontspec) Roman/I/OT:script=latn;language=dflt;mapping=tex-text;" 197 + (fontspec) - 'italic small caps' (m/scit) with NFSS spec.: 198 + (fontspec) - 'bold italic' (b/it) with NFSS spec.: <->"Latin 199 + (fontspec) Modern 200 + (fontspec) Roman/BI/OT:script=latn;language=dflt;mapping=tex-text;" 201 + 202 + (fontspec) - 'bold italic small caps' (b/scit) with NFSS spec.: 203 + 204 + 205 + Package fontspec Info: Font family 'LatinModernRoman(1)' created for font 206 + (fontspec) 'Latin Modern Roman' with options []. 207 + (fontspec) 208 + (fontspec) This font family consists of the following NFSS 209 + (fontspec) series/shapes: 210 + (fontspec) 211 + (fontspec) - 'normal' (m/n) with NFSS spec.: <->"Latin Modern 212 + (fontspec) Roman/OT:script=latn;language=dflt;" 213 + (fontspec) - 'small caps' (m/sc) with NFSS spec.: 214 + (fontspec) - 'bold' (b/n) with NFSS spec.: <->"Latin Modern 215 + (fontspec) Roman/B/OT:script=latn;language=dflt;" 216 + (fontspec) - 'bold small caps' (b/sc) with NFSS spec.: 217 + (fontspec) - 'italic' (m/it) with NFSS spec.: <->"Latin Modern 218 + (fontspec) Roman/I/OT:script=latn;language=dflt;" 219 + (fontspec) - 'italic small caps' (m/scit) with NFSS spec.: 220 + (fontspec) - 'bold italic' (b/it) with NFSS spec.: <->"Latin 221 + (fontspec) Modern Roman/BI/OT:script=latn;language=dflt;" 222 + (fontspec) - 'bold italic small caps' (b/scit) with NFSS spec.: 223 + 224 + LaTeX Font Info: Overwriting math alphabet `\mathrm' in version `normal' 225 + (Font) OT1/cmr/m/n --> TU/LatinModernRoman(1)/m/n on input lin 226 + e 13. 227 + LaTeX Font Info: Overwriting math alphabet `\mathit' in version `normal' 228 + (Font) OT1/cmr/m/it --> TU/LatinModernRoman(1)/m/it on input l 229 + ine 13. 230 + LaTeX Font Info: Overwriting math alphabet `\mathbf' in version `normal' 231 + (Font) OT1/cmr/bx/n --> TU/LatinModernRoman(1)/b/n on input li 232 + ne 13. 233 + 234 + Package fontspec Info: Font family 'LatinModernSans(0)' created for font 235 + (fontspec) 'Latin Modern Sans' with options [Ligatures=TeX]. 236 + (fontspec) 237 + (fontspec) This font family consists of the following NFSS 238 + (fontspec) series/shapes: 239 + (fontspec) 240 + (fontspec) - 'normal' (m/n) with NFSS spec.: <->"Latin Modern 241 + (fontspec) Sans/OT:script=latn;language=dflt;mapping=tex-text;" 242 + (fontspec) - 'small caps' (m/sc) with NFSS spec.: 243 + (fontspec) - 'bold' (b/n) with NFSS spec.: <->"Latin Modern 244 + (fontspec) Sans/B/OT:script=latn;language=dflt;mapping=tex-text;" 245 + (fontspec) - 'bold small caps' (b/sc) with NFSS spec.: 246 + (fontspec) - 'italic' (m/it) with NFSS spec.: <->"Latin Modern 247 + (fontspec) Sans/I/OT:script=latn;language=dflt;mapping=tex-text;" 248 + (fontspec) - 'italic small caps' (m/scit) with NFSS spec.: 249 + (fontspec) - 'bold italic' (b/it) with NFSS spec.: <->"Latin 250 + (fontspec) Modern 251 + (fontspec) Sans/BI/OT:script=latn;language=dflt;mapping=tex-text;" 252 + (fontspec) - 'bold italic small caps' (b/scit) with NFSS spec.: 253 + 254 + 255 + Package fontspec Info: Font family 'LatinModernSans(1)' created for font 256 + (fontspec) 'Latin Modern Sans' with options []. 257 + (fontspec) 258 + (fontspec) This font family consists of the following NFSS 259 + (fontspec) series/shapes: 260 + (fontspec) 261 + (fontspec) - 'normal' (m/n) with NFSS spec.: <->"Latin Modern 262 + (fontspec) Sans/OT:script=latn;language=dflt;" 263 + (fontspec) - 'small caps' (m/sc) with NFSS spec.: 264 + (fontspec) - 'bold' (b/n) with NFSS spec.: <->"Latin Modern 265 + (fontspec) Sans/B/OT:script=latn;language=dflt;" 266 + (fontspec) - 'bold small caps' (b/sc) with NFSS spec.: 267 + (fontspec) - 'italic' (m/it) with NFSS spec.: <->"Latin Modern 268 + (fontspec) Sans/I/OT:script=latn;language=dflt;" 269 + (fontspec) - 'italic small caps' (m/scit) with NFSS spec.: 270 + (fontspec) - 'bold italic' (b/it) with NFSS spec.: <->"Latin 271 + (fontspec) Modern Sans/BI/OT:script=latn;language=dflt;" 272 + (fontspec) - 'bold italic small caps' (b/scit) with NFSS spec.: 273 + 274 + LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `normal' 275 + (Font) OT1/cmss/m/n --> TU/LatinModernSans(1)/m/n on input lin 276 + e 14. 277 + LaTeX Font Info: Overwriting math alphabet `\mathsf' in version `bold' 278 + (Font) OT1/cmss/bx/n --> TU/LatinModernSans(1)/b/n on input li 279 + ne 14. 280 + 281 + Package fontspec Info: Font family 'ywft-processing-bold(0)' created for font 282 + (fontspec) 'ywft-processing-bold' with options 283 + (fontspec) [Path=../system/public/type/webfonts/,Extension=.ttf]. 284 + (fontspec) 285 + (fontspec) This font family consists of the following NFSS 286 + (fontspec) series/shapes: 287 + (fontspec) 288 + (fontspec) - 'normal' (m/n) with NFSS spec.: 289 + (fontspec) <->"[../system/public/type/webfonts/ywft-processing-bold 290 + .ttf]/OT:script=latn;language=dflt;" 291 + (fontspec) - 'small caps' (m/sc) with NFSS spec.: 292 + 293 + 294 + Package fontspec Info: Font family 'ywft-processing-light(0)' created for font 295 + (fontspec) 'ywft-processing-light' with options 296 + (fontspec) [Path=../system/public/type/webfonts/,Extension=.ttf]. 297 + (fontspec) 298 + (fontspec) This font family consists of the following NFSS 299 + (fontspec) series/shapes: 300 + (fontspec) 301 + (fontspec) - 'normal' (m/n) with NFSS spec.: 302 + (fontspec) <->"[../system/public/type/webfonts/ywft-processing-ligh 303 + t.ttf]/OT:script=latn;language=dflt;" 304 + (fontspec) - 'small caps' (m/sc) with NFSS spec.: 305 + 306 + 307 + Package fontspec Info: Could not resolve font "Latin Modern Mono/B" (it 308 + (fontspec) probably doesn't exist). 309 + 310 + 311 + Package fontspec Info: Font family 'LatinModernMono(0)' created for font 312 + (fontspec) 'Latin Modern Mono' with options 313 + (fontspec) [WordSpace={1,0,0},HyphenChar=None,PunctuationSpace=Word 314 + Space,Scale=0.85]. 315 + (fontspec) 316 + (fontspec) This font family consists of the following NFSS 317 + (fontspec) series/shapes: 318 + (fontspec) 319 + (fontspec) - 'normal' (m/n) with NFSS spec.: <->s*[0.85]"Latin 320 + (fontspec) Modern Mono/OT:script=latn;language=dflt;" 321 + (fontspec) - 'small caps' (m/sc) with NFSS spec.: 322 + (fontspec) and font adjustment code: 323 + (fontspec) \fontdimen 2\font =1\fontdimen 2\font \fontdimen 3\font 324 + (fontspec) =0\fontdimen 3\font \fontdimen 4\font =0\fontdimen 325 + (fontspec) 4\font \fontdimen 7\font =0\fontdimen 2\font 326 + (fontspec) \tex_hyphenchar:D \font =-1\scan_stop: 327 + (fontspec) - 'italic' (m/it) with NFSS spec.: <->s*[0.85]"Latin 328 + (fontspec) Modern Mono/I/OT:script=latn;language=dflt;" 329 + (fontspec) - 'italic small caps' (m/scit) with NFSS spec.: 330 + (fontspec) and font adjustment code: 331 + (fontspec) \fontdimen 2\font =1\fontdimen 2\font \fontdimen 3\font 332 + (fontspec) =0\fontdimen 3\font \fontdimen 4\font =0\fontdimen 333 + (fontspec) 4\font \fontdimen 7\font =0\fontdimen 2\font 334 + (fontspec) \tex_hyphenchar:D \font =-1\scan_stop: 335 + (fontspec) - 'bold italic' (b/it) with NFSS spec.: 336 + (fontspec) <->s*[0.85]"Latin Modern 337 + (fontspec) Mono/BI/OT:script=latn;language=dflt;" 338 + (fontspec) - 'bold italic small caps' (b/scit) with NFSS spec.: 339 + (fontspec) and font adjustment code: 340 + (fontspec) \fontdimen 2\font =1\fontdimen 2\font \fontdimen 3\font 341 + (fontspec) =0\fontdimen 3\font \fontdimen 4\font =0\fontdimen 342 + (fontspec) 4\font \fontdimen 7\font =0\fontdimen 2\font 343 + (fontspec) \tex_hyphenchar:D \font =-1\scan_stop: 344 + 345 + 346 + Package fontspec Info: Could not resolve font "Latin Modern Mono/B" (it 347 + (fontspec) probably doesn't exist). 348 + 349 + 350 + Package fontspec Info: Font family 'LatinModernMono(1)' created for font 351 + (fontspec) 'Latin Modern Mono' with options [Scale=0.85]. 352 + (fontspec) 353 + (fontspec) This font family consists of the following NFSS 354 + (fontspec) series/shapes: 355 + (fontspec) 356 + (fontspec) - 'normal' (m/n) with NFSS spec.: <->s*[0.85]"Latin 357 + (fontspec) Modern Mono/OT:script=latn;language=dflt;" 358 + (fontspec) - 'small caps' (m/sc) with NFSS spec.: 359 + (fontspec) - 'italic' (m/it) with NFSS spec.: <->s*[0.85]"Latin 360 + (fontspec) Modern Mono/I/OT:script=latn;language=dflt;" 361 + (fontspec) - 'italic small caps' (m/scit) with NFSS spec.: 362 + (fontspec) - 'bold italic' (b/it) with NFSS spec.: 363 + (fontspec) <->s*[0.85]"Latin Modern 364 + (fontspec) Mono/BI/OT:script=latn;language=dflt;" 365 + (fontspec) - 'bold italic small caps' (b/scit) with NFSS spec.: 366 + 367 + LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `normal' 368 + (Font) OT1/cmtt/m/n --> TU/LatinModernMono(1)/m/n on input lin 369 + e 25. 370 + LaTeX Font Info: Overwriting math alphabet `\mathtt' in version `bold' 371 + (Font) OT1/cmtt/m/n --> TU/LatinModernMono(1)/b/n on input lin 372 + e 25. 373 + (/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty 374 + Package: xcolor 2022/06/12 v2.14 LaTeX color extensions (UK) 375 + 376 + (/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg 377 + File: color.cfg 2016/01/02 v1.6 sample color configuration 378 + ) 379 + Package xcolor Info: Driver file: xetex.def on input line 227. 380 + 381 + (/usr/share/texlive/texmf-dist/tex/latex/graphics-def/xetex.def 382 + File: xetex.def 2022/09/22 v5.0n Graphics/color driver for xetex 383 + ) 384 + (/usr/share/texlive/texmf-dist/tex/latex/graphics/mathcolor.ltx) 385 + Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1353. 386 + Package xcolor Info: Model `RGB' extended on input line 1369. 387 + Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1371. 388 + Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1372. 389 + Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1373. 390 + Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1374. 391 + Package xcolor Info: Model `Gray' substituted by `gray' on input line 1375. 392 + Package xcolor Info: Model `wave' substituted by `hsb' on input line 1376. 393 + ) 394 + (/usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty 395 + Package: titlesec 2021/07/05 v2.14 Sectioning titles 396 + \ttl@box=\box54 397 + \beforetitleunit=\skip53 398 + \aftertitleunit=\skip54 399 + \ttl@plus=\dimen161 400 + \ttl@minus=\dimen162 401 + \ttl@toksa=\toks23 402 + \titlewidth=\dimen163 403 + \titlewidthlast=\dimen164 404 + \titlewidthfirst=\dimen165 405 + ) 406 + (/usr/share/texlive/texmf-dist/tex/latex/enumitem/enumitem.sty 407 + Package: enumitem 2019/06/20 v3.9 Customized lists 408 + \labelindent=\skip55 409 + \enit@outerparindent=\dimen166 410 + \enit@toks=\toks24 411 + \enit@inbox=\box55 412 + \enit@count@id=\count288 413 + \enitdp@description=\count289 414 + ) 415 + (/usr/share/texlive/texmf-dist/tex/latex/booktabs/booktabs.sty 416 + Package: booktabs 2020/01/12 v1.61803398 Publication quality tables 417 + \heavyrulewidth=\dimen167 418 + \lightrulewidth=\dimen168 419 + \cmidrulewidth=\dimen169 420 + \belowrulesep=\dimen170 421 + \belowbottomsep=\dimen171 422 + \aboverulesep=\dimen172 423 + \abovetopsep=\dimen173 424 + \cmidrulesep=\dimen174 425 + \cmidrulekern=\dimen175 426 + \defaultaddspace=\dimen176 427 + \@cmidla=\count290 428 + \@cmidlb=\count291 429 + \@aboverulesep=\dimen177 430 + \@belowrulesep=\dimen178 431 + \@thisruleclass=\count292 432 + \@lastruleclass=\count293 433 + \@thisrulewidth=\dimen179 434 + ) 435 + (/usr/share/texlive/texmf-dist/tex/latex/tools/tabularx.sty 436 + Package: tabularx 2020/01/15 v2.11c `tabularx' package (DPC) 437 + 438 + (/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty 439 + Package: array 2022/09/04 v2.5g Tabular extension package (FMi) 440 + \col@sep=\dimen180 441 + \ar@mcellbox=\box56 442 + \extrarowheight=\dimen181 443 + \NC@list=\toks25 444 + \extratabsurround=\skip56 445 + \backup@length=\skip57 446 + \ar@cellbox=\box57 447 + ) 448 + \TX@col@width=\dimen182 449 + \TX@old@table=\dimen183 450 + \TX@old@col=\dimen184 451 + \TX@target=\dimen185 452 + \TX@delta=\dimen186 453 + \TX@cols=\count294 454 + \TX@ftn=\toks26 455 + ) 456 + (/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty 457 + Package: multicol 2021/11/30 v1.9d multicolumn formatting (FMi) 458 + \c@tracingmulticols=\count295 459 + 460 + 461 + Package multicol Warning: May not work with the twocolumn option on input line 462 + 143. 463 + 464 + \mult@box=\box58 465 + \multicol@leftmargin=\dimen187 466 + \c@unbalance=\count296 467 + \c@collectmore=\count297 468 + \doublecol@number=\count298 469 + \multicoltolerance=\count299 470 + \multicolpretolerance=\count300 471 + \full@width=\dimen188 472 + \page@free=\dimen189 473 + \premulticols=\dimen190 474 + \postmulticols=\dimen191 475 + \multicolsep=\skip58 476 + \multicolbaselineskip=\skip59 477 + \partial@page=\box59 478 + \last@line=\box60 479 + \maxbalancingoverflow=\dimen192 480 + \mult@rightbox=\box61 481 + \mult@grightbox=\box62 482 + \mult@firstbox=\box63 483 + \mult@gfirstbox=\box64 484 + \@tempa=\box65 485 + \@tempa=\box66 486 + \@tempa=\box67 487 + \@tempa=\box68 488 + \@tempa=\box69 489 + \@tempa=\box70 490 + \@tempa=\box71 491 + \@tempa=\box72 492 + \@tempa=\box73 493 + \@tempa=\box74 494 + \@tempa=\box75 495 + \@tempa=\box76 496 + \@tempa=\box77 497 + \@tempa=\box78 498 + \@tempa=\box79 499 + \@tempa=\box80 500 + \@tempa=\box81 501 + \@tempa=\box82 502 + \@tempa=\box83 503 + \@tempa=\box84 504 + \@tempa=\box85 505 + \@tempa=\box86 506 + \@tempa=\box87 507 + \@tempa=\box88 508 + \@tempa=\box89 509 + \@tempa=\box90 510 + \@tempa=\box91 511 + \@tempa=\box92 512 + \@tempa=\box93 513 + \@tempa=\box94 514 + \@tempa=\box95 515 + \@tempa=\box96 516 + \@tempa=\box97 517 + \@tempa=\box98 518 + \@tempa=\box99 519 + \@tempa=\box100 520 + \c@minrows=\count301 521 + \c@columnbadness=\count302 522 + \c@finalcolumnbadness=\count303 523 + \last@try=\dimen193 524 + \multicolovershoot=\dimen194 525 + \multicolundershoot=\dimen195 526 + \mult@nat@firstbox=\box101 527 + \colbreak@box=\box102 528 + \mc@col@check@num=\count304 529 + ) (/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty 530 + Package: fancyhdr 2022/11/09 v4.1 Extensive control of page headers and footers 531 + 532 + \f@nch@headwidth=\skip60 533 + \f@nch@O@elh=\skip61 534 + \f@nch@O@erh=\skip62 535 + \f@nch@O@olh=\skip63 536 + \f@nch@O@orh=\skip64 537 + \f@nch@O@elf=\skip65 538 + \f@nch@O@erf=\skip66 539 + \f@nch@O@olf=\skip67 540 + \f@nch@O@orf=\skip68 541 + ) 542 + (/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty 543 + Package: hyperref 2023-02-07 v7.00v Hypertext links for LaTeX 544 + 545 + (/usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty 546 + Package: ltxcmds 2020-05-10 v1.25 LaTeX kernel commands for general use (HO) 547 + ) 548 + (/usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty 549 + Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO 550 + ) 551 + 552 + (/usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty 553 + Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) 554 + ) 555 + Package pdftexcmds Info: \pdf@primitive is available. 556 + Package pdftexcmds Info: \pdf@ifprimitive is available. 557 + Package pdftexcmds Info: \pdfdraftmode not found. 558 + ) 559 + (/usr/share/texlive/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty 560 + Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO) 561 + ) 562 + (/usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty 563 + Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) 564 + ) 565 + (/usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty 566 + Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) 567 + ) 568 + (/usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty 569 + Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) 570 + ) 571 + (/usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty 572 + Package: letltxmacro 2019/12/03 v1.6 Let assignment for LaTeX macros (HO) 573 + ) 574 + (/usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty 575 + Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO) 576 + ) 577 + (/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty 578 + Package: nameref 2022-05-17 v2.50 Cross-referencing by name of section 579 + 580 + (/usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty 581 + Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) 582 + ) 583 + (/usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty 584 + Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) 585 + 586 + (/usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty 587 + Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO) 588 + )) 589 + \c@section@level=\count305 590 + ) 591 + \@linkdim=\dimen196 592 + \Hy@linkcounter=\count306 593 + \Hy@pagecounter=\count307 594 + 595 + (/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def 596 + File: pd1enc.def 2023-02-07 v7.00v Hyperref: PDFDocEncoding definition (HO) 597 + ) 598 + (/usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty 599 + Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) 600 + ) 601 + (/usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty 602 + Package: etexcmds 2019/12/15 v1.7 Avoid name clashes with e-TeX commands (HO) 603 + ) 604 + \Hy@SavedSpaceFactor=\count308 605 + 606 + (/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def 607 + File: puenc.def 2023-02-07 v7.00v Hyperref: PDF Unicode definition (HO) 608 + ) 609 + Package hyperref Info: Hyper figures OFF on input line 4177. 610 + Package hyperref Info: Link nesting OFF on input line 4182. 611 + Package hyperref Info: Hyper index ON on input line 4185. 612 + Package hyperref Info: Plain pages OFF on input line 4192. 613 + Package hyperref Info: Backreferencing OFF on input line 4197. 614 + Package hyperref Info: Implicit mode ON; LaTeX internals redefined. 615 + Package hyperref Info: Bookmarks ON on input line 4425. 616 + \c@Hy@tempcnt=\count309 617 + 618 + (/usr/share/texlive/texmf-dist/tex/latex/url/url.sty 619 + \Urlmuskip=\muskip18 620 + Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. 621 + ) 622 + LaTeX Info: Redefining \url on input line 4763. 623 + \XeTeXLinkMargin=\dimen197 624 + 625 + (/usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty 626 + Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) 627 + 628 + (/usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty 629 + Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO 630 + ) 631 + )) 632 + \Fld@menulength=\count310 633 + \Field@Width=\dimen198 634 + \Fld@charsize=\dimen199 635 + Package hyperref Info: Hyper figures OFF on input line 6042. 636 + Package hyperref Info: Link nesting OFF on input line 6047. 637 + Package hyperref Info: Hyper index ON on input line 6050. 638 + Package hyperref Info: backreferencing OFF on input line 6057. 639 + Package hyperref Info: Link coloring OFF on input line 6062. 640 + Package hyperref Info: Link coloring with OCG OFF on input line 6067. 641 + Package hyperref Info: PDF/A mode OFF on input line 6072. 642 + 643 + (/usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty 644 + Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi 645 + package with kernel methods 646 + ) 647 + \Hy@abspage=\count311 648 + \c@Item=\count312 649 + \c@Hfootnote=\count313 650 + ) 651 + Package hyperref Info: Driver (autodetected): hxetex. 652 + 653 + (/usr/share/texlive/texmf-dist/tex/latex/hyperref/hxetex.def 654 + File: hxetex.def 2023-02-07 v7.00v Hyperref driver for XeTeX 655 + 656 + (/usr/share/texlive/texmf-dist/tex/generic/stringenc/stringenc.sty 657 + Package: stringenc 2019/11/29 v1.12 Convert strings between diff. encodings (HO 658 + ) 659 + ) 660 + \pdfm@box=\box103 661 + \c@Hy@AnnotLevel=\count314 662 + \HyField@AnnotCount=\count315 663 + \Fld@listcount=\count316 664 + \c@bookmark@seq@number=\count317 665 + 666 + (/usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty 667 + Package: rerunfilecheck 2022-07-10 v1.10 Rerun checks for auxiliary files (HO) 668 + 669 + (/usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty 670 + Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend pac 671 + kage 672 + with kernel methods 673 + ) 674 + (/usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty 675 + Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) 676 + ) 677 + Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 678 + 85. 679 + ) 680 + \Hy@SectionHShift=\skip69 681 + ) 682 + (/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty 683 + Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) 684 + 685 + (/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty 686 + Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR) 687 + 688 + (/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty 689 + Package: trig 2021/08/11 v1.11 sin cos tan (DPC) 690 + ) 691 + (/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg 692 + File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration 693 + ) 694 + Package graphics Info: Driver file: xetex.def on input line 107. 695 + ) 696 + \Gin@req@height=\dimen256 697 + \Gin@req@width=\dimen257 698 + ) 699 + (/usr/share/texlive/texmf-dist/tex/latex/ragged2e/ragged2e.sty 700 + Package: ragged2e 2023/02/25 v3.4 ragged2e Package 701 + \CenteringLeftskip=\skip70 702 + \RaggedLeftLeftskip=\skip71 703 + \RaggedRightLeftskip=\skip72 704 + \CenteringRightskip=\skip73 705 + \RaggedLeftRightskip=\skip74 706 + \RaggedRightRightskip=\skip75 707 + \CenteringParfillskip=\skip76 708 + \RaggedLeftParfillskip=\skip77 709 + \RaggedRightParfillskip=\skip78 710 + \JustifyingParfillskip=\skip79 711 + \CenteringParindent=\skip80 712 + \RaggedLeftParindent=\skip81 713 + \RaggedRightParindent=\skip82 714 + \JustifyingParindent=\skip83 715 + ) 716 + (/usr/share/texlive/texmf-dist/tex/latex/microtype/microtype.sty 717 + Package: microtype 2023/03/13 v3.1a Micro-typographical refinements (RS) 718 + 719 + (/usr/share/texlive/texmf-dist/tex/latex/etoolbox/etoolbox.sty 720 + Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) 721 + \etb@tempcnta=\count318 722 + ) 723 + \MT@toks=\toks27 724 + \MT@tempbox=\box104 725 + \MT@count=\count319 726 + LaTeX Info: Redefining \noprotrusionifhmode on input line 1059. 727 + LaTeX Info: Redefining \leftprotrusion on input line 1060. 728 + \MT@prot@toks=\toks28 729 + LaTeX Info: Redefining \rightprotrusion on input line 1078. 730 + LaTeX Info: Redefining \textls on input line 1368. 731 + \MT@outer@kern=\dimen258 732 + LaTeX Info: Redefining \textmicrotypecontext on input line 1988. 733 + \MT@listname@count=\count320 734 + 735 + (/usr/share/texlive/texmf-dist/tex/latex/microtype/microtype-xetex.def 736 + File: microtype-xetex.def 2023/03/13 v3.1a Definitions specific to xetex (RS) 737 + LaTeX Info: Redefining \lsstyle on input line 238. 738 + ) 739 + Package microtype Info: Loading configuration file microtype.cfg. 740 + 741 + (/usr/share/texlive/texmf-dist/tex/latex/microtype/microtype.cfg 742 + File: microtype.cfg 2023/03/13 v3.1a microtype main configuration file (RS) 743 + )) 744 + Package hyperref Info: Option `colorlinks' set `true' on input line 54. 745 + 746 + (./proposal.aux) 747 + \openout1 = `proposal.aux'. 748 + 749 + LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 94. 750 + LaTeX Font Info: ... okay on input line 94. 751 + LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 94. 752 + LaTeX Font Info: ... okay on input line 94. 753 + LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 94. 754 + LaTeX Font Info: ... okay on input line 94. 755 + LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 94. 756 + LaTeX Font Info: ... okay on input line 94. 757 + LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 94. 758 + LaTeX Font Info: ... okay on input line 94. 759 + LaTeX Font Info: Checking defaults for TU/lmr/m/n on input line 94. 760 + LaTeX Font Info: ... okay on input line 94. 761 + LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 94. 762 + LaTeX Font Info: ... okay on input line 94. 763 + LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 94. 764 + LaTeX Font Info: ... okay on input line 94. 765 + LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 94. 766 + LaTeX Font Info: ... okay on input line 94. 767 + LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 94. 768 + LaTeX Font Info: ... okay on input line 94. 769 + 770 + *geometry* driver: auto-detecting 771 + *geometry* detected driver: xetex 772 + *geometry* verbose mode - [ preamble ] result: 773 + * driver: xetex 774 + * paper: letterpaper 775 + * layout: <same size as paper> 776 + * layoutoffset:(h,v)=(0.0pt,0.0pt) 777 + * modes: 778 + * h-part:(L,W,R)=(54.2025pt, 505.89pt, 54.2025pt) 779 + * v-part:(T,H,B)=(54.2025pt, 686.56499pt, 54.2025pt) 780 + * \paperwidth=614.295pt 781 + * \paperheight=794.96999pt 782 + * \textwidth=505.89pt 783 + * \textheight=686.56499pt 784 + * \oddsidemargin=-18.06749pt 785 + * \evensidemargin=-18.06749pt 786 + * \topmargin=-55.06749pt 787 + * \headheight=12.0pt 788 + * \headsep=25.0pt 789 + * \topskip=10.0pt 790 + * \footskip=30.0pt 791 + * \marginparwidth=4.0pt 792 + * \marginparsep=10.0pt 793 + * \columnsep=18.00003pt 794 + * \skip\footins=9.0pt plus 4.0pt minus 2.0pt 795 + * \hoffset=0.0pt 796 + * \voffset=0.0pt 797 + * \mag=1000 798 + * \@twocolumntrue 799 + * \@twosidefalse 800 + * \@mparswitchfalse 801 + * \@reversemarginfalse 802 + * (1in=72.27pt=25.4mm, 1cm=28.453pt) 803 + 804 + 805 + Package fontspec Info: Font family 'latinmodern-math.otf(0)' created for font 806 + (fontspec) 'latinmodern-math.otf' with options 807 + (fontspec) [BoldItalicFont={},ItalicFont={},SmallCapsFont={},Script 808 + =Math,BoldFont={latinmodern-math.otf}]. 809 + (fontspec) 810 + (fontspec) This font family consists of the following NFSS 811 + (fontspec) series/shapes: 812 + (fontspec) 813 + (fontspec) - 'normal' (m/n) with NFSS spec.: 814 + (fontspec) <->"[latinmodern-math.otf]/OT:script=math;language=dflt; 815 + " 816 + (fontspec) - 'small caps' (m/sc) with NFSS spec.: 817 + (fontspec) - 'bold' (b/n) with NFSS spec.: 818 + (fontspec) <->"[latinmodern-math.otf]/OT:script=math;language=dflt; 819 + " 820 + (fontspec) - 'bold small caps' (b/sc) with NFSS spec.: 821 + 822 + 823 + Package fontspec Info: Font family 'latinmodern-math.otf(1)' created for font 824 + (fontspec) 'latinmodern-math.otf' with options 825 + (fontspec) [BoldItalicFont={},ItalicFont={},SmallCapsFont={},Script 826 + =Math,SizeFeatures={{Size=8.5-},{Size=6-8.5,Font=latinmodern-math.otf,Style=Mat 827 + hScript},{Size=-6,Font=latinmodern-math.otf,Style=MathScriptScript}},BoldFont={ 828 + latinmodern-math.otf}]. 829 + (fontspec) 830 + (fontspec) This font family consists of the following NFSS 831 + (fontspec) series/shapes: 832 + (fontspec) 833 + (fontspec) - 'normal' (m/n) with NFSS spec.: 834 + (fontspec) <8.5->"[latinmodern-math.otf]/OT:script=math;language=df 835 + lt;"<6-8.5>"[latinmodern-math.otf]/OT:script=math;language=dflt;+ssty=0;"<-6>"[ 836 + latinmodern-math.otf]/OT:script=math;language=dflt;+ssty=1;" 837 + (fontspec) - 'small caps' (m/sc) with NFSS spec.: 838 + (fontspec) - 'bold' (b/n) with NFSS spec.: 839 + (fontspec) <->"[latinmodern-math.otf]/OT:script=math;language=dflt; 840 + " 841 + (fontspec) - 'bold small caps' (b/sc) with NFSS spec.: 842 + 843 + LaTeX Font Info: Encoding `OT1' has changed to `TU' for symbol font 844 + (Font) `operators' in the math version `normal' on input line 94. 845 + LaTeX Font Info: Overwriting symbol font `operators' in version `normal' 846 + (Font) OT1/cmr/m/n --> TU/latinmodern-math.otf(1)/m/n on input 847 + line 94. 848 + LaTeX Font Info: Encoding `OT1' has changed to `TU' for symbol font 849 + (Font) `operators' in the math version `bold' on input line 94. 850 + LaTeX Font Info: Overwriting symbol font `operators' in version `bold' 851 + (Font) OT1/cmr/bx/n --> TU/latinmodern-math.otf(1)/b/n on inpu 852 + t line 94. 853 + 854 + Package fontspec Info: latinmodern-math scale = 1.0001. 855 + 856 + 857 + Package fontspec Info: latinmodern-math scale = 1.0001. 858 + 859 + 860 + Package fontspec Info: latinmodern-math scale = 1.0001. 861 + 862 + 863 + Package fontspec Info: latinmodern-math scale = 1.0001. 864 + 865 + 866 + Package fontspec Info: latinmodern-math scale = 1.0001. 867 + 868 + 869 + Package fontspec Info: Font family 'latinmodern-math.otf(2)' created for font 870 + (fontspec) 'latinmodern-math.otf' with options 871 + (fontspec) [BoldItalicFont={},ItalicFont={},SmallCapsFont={},Script 872 + =Math,SizeFeatures={{Size=8.5-},{Size=6-8.5,Font=latinmodern-math.otf,Style=Mat 873 + hScript},{Size=-6,Font=latinmodern-math.otf,Style=MathScriptScript}},BoldFont={ 874 + latinmodern-math.otf},ScaleAgain=1.0001,FontAdjustment={\fontdimen 875 + (fontspec) 8\font =6.77pt\relax \fontdimen 9\font =3.94pt\relax 876 + (fontspec) \fontdimen 10\font =4.44pt\relax \fontdimen 11\font 877 + (fontspec) =6.86pt\relax \fontdimen 12\font =3.45pt\relax 878 + (fontspec) \fontdimen 13\font =3.63pt\relax \fontdimen 14\font 879 + (fontspec) =3.63pt\relax \fontdimen 15\font =2.89pt\relax 880 + (fontspec) \fontdimen 16\font =2.47pt\relax \fontdimen 17\font 881 + (fontspec) =2.47pt\relax \fontdimen 18\font =2.5pt\relax 882 + (fontspec) \fontdimen 19\font =2.0pt\relax \fontdimen 22\font 883 + (fontspec) =2.5pt\relax \fontdimen 20\font =0pt\relax \fontdimen 884 + (fontspec) 21\font =0pt\relax }]. 885 + (fontspec) 886 + (fontspec) This font family consists of the following NFSS 887 + (fontspec) series/shapes: 888 + (fontspec) 889 + (fontspec) - 'normal' (m/n) with NFSS spec.: 890 + (fontspec) <8.5->s*[1.0001]"[latinmodern-math.otf]/OT:script=math;l 891 + anguage=dflt;"<6-8.5>s*[1.0001]"[latinmodern-math.otf]/OT:script=math;language= 892 + dflt;+ssty=0;"<-6>s*[1.0001]"[latinmodern-math.otf]/OT:script=math;language=dfl 893 + t;+ssty=1;" 894 + (fontspec) - 'small caps' (m/sc) with NFSS spec.: 895 + (fontspec) and font adjustment code: 896 + (fontspec) \fontdimen 8\font =6.77pt\relax \fontdimen 9\font 897 + (fontspec) =3.94pt\relax \fontdimen 10\font =4.44pt\relax 898 + (fontspec) \fontdimen 11\font =6.86pt\relax \fontdimen 12\font 899 + (fontspec) =3.45pt\relax \fontdimen 13\font =3.63pt\relax 900 + (fontspec) \fontdimen 14\font =3.63pt\relax \fontdimen 15\font 901 + (fontspec) =2.89pt\relax \fontdimen 16\font =2.47pt\relax 902 + (fontspec) \fontdimen 17\font =2.47pt\relax \fontdimen 18\font 903 + (fontspec) =2.5pt\relax \fontdimen 19\font =2.0pt\relax \fontdimen 904 + (fontspec) 22\font =2.5pt\relax \fontdimen 20\font =0pt\relax 905 + (fontspec) \fontdimen 21\font =0pt\relax 906 + (fontspec) - 'bold' (b/n) with NFSS spec.: 907 + (fontspec) <->s*[1.0001]"[latinmodern-math.otf]/OT:script=math;lang 908 + uage=dflt;" 909 + (fontspec) - 'bold small caps' (b/sc) with NFSS spec.: 910 + (fontspec) and font adjustment code: 911 + (fontspec) \fontdimen 8\font =6.77pt\relax \fontdimen 9\font 912 + (fontspec) =3.94pt\relax \fontdimen 10\font =4.44pt\relax 913 + (fontspec) \fontdimen 11\font =6.86pt\relax \fontdimen 12\font 914 + (fontspec) =3.45pt\relax \fontdimen 13\font =3.63pt\relax 915 + (fontspec) \fontdimen 14\font =3.63pt\relax \fontdimen 15\font 916 + (fontspec) =2.89pt\relax \fontdimen 16\font =2.47pt\relax 917 + (fontspec) \fontdimen 17\font =2.47pt\relax \fontdimen 18\font 918 + (fontspec) =2.5pt\relax \fontdimen 19\font =2.0pt\relax \fontdimen 919 + (fontspec) 22\font =2.5pt\relax \fontdimen 20\font =0pt\relax 920 + (fontspec) \fontdimen 21\font =0pt\relax 921 + 922 + LaTeX Font Info: Encoding `OMS' has changed to `TU' for symbol font 923 + (Font) `symbols' in the math version `normal' on input line 94. 924 + LaTeX Font Info: Overwriting symbol font `symbols' in version `normal' 925 + (Font) OMS/cmsy/m/n --> TU/latinmodern-math.otf(2)/m/n on inpu 926 + t line 94. 927 + LaTeX Font Info: Encoding `OMS' has changed to `TU' for symbol font 928 + (Font) `symbols' in the math version `bold' on input line 94. 929 + LaTeX Font Info: Overwriting symbol font `symbols' in version `bold' 930 + (Font) OMS/cmsy/b/n --> TU/latinmodern-math.otf(2)/b/n on inpu 931 + t line 94. 932 + 933 + Package fontspec Info: latinmodern-math scale = 0.9999. 934 + 935 + 936 + Package fontspec Info: latinmodern-math scale = 0.9999. 937 + 938 + 939 + Package fontspec Info: latinmodern-math scale = 0.9999. 940 + 941 + 942 + Package fontspec Info: latinmodern-math scale = 0.9999. 943 + 944 + 945 + Package fontspec Info: latinmodern-math scale = 0.9999. 946 + 947 + 948 + Package fontspec Info: Font family 'latinmodern-math.otf(3)' created for font 949 + (fontspec) 'latinmodern-math.otf' with options 950 + (fontspec) [BoldItalicFont={},ItalicFont={},SmallCapsFont={},Script 951 + =Math,SizeFeatures={{Size=8.5-},{Size=6-8.5,Font=latinmodern-math.otf,Style=Mat 952 + hScript},{Size=-6,Font=latinmodern-math.otf,Style=MathScriptScript}},BoldFont={ 953 + latinmodern-math.otf},ScaleAgain=0.9999,FontAdjustment={\fontdimen 954 + (fontspec) 8\font =0.4pt\relax \fontdimen 9\font =2.0pt\relax 955 + (fontspec) \fontdimen 10\font =1.67pt\relax \fontdimen 11\font 956 + (fontspec) =1.11pt\relax \fontdimen 12\font =6.0pt\relax 957 + (fontspec) \fontdimen 13\font =0pt\relax }]. 958 + (fontspec) 959 + (fontspec) This font family consists of the following NFSS 960 + (fontspec) series/shapes: 961 + (fontspec) 962 + (fontspec) - 'normal' (m/n) with NFSS spec.: 963 + (fontspec) <8.5->s*[0.9999]"[latinmodern-math.otf]/OT:script=math;l 964 + anguage=dflt;"<6-8.5>s*[0.9999]"[latinmodern-math.otf]/OT:script=math;language= 965 + dflt;+ssty=0;"<-6>s*[0.9999]"[latinmodern-math.otf]/OT:script=math;language=dfl 966 + t;+ssty=1;" 967 + (fontspec) - 'small caps' (m/sc) with NFSS spec.: 968 + (fontspec) and font adjustment code: 969 + (fontspec) \fontdimen 8\font =0.4pt\relax \fontdimen 9\font 970 + (fontspec) =2.0pt\relax \fontdimen 10\font =1.67pt\relax 971 + (fontspec) \fontdimen 11\font =1.11pt\relax \fontdimen 12\font 972 + (fontspec) =6.0pt\relax \fontdimen 13\font =0pt\relax 973 + (fontspec) - 'bold' (b/n) with NFSS spec.: 974 + (fontspec) <->s*[0.9999]"[latinmodern-math.otf]/OT:script=math;lang 975 + uage=dflt;" 976 + (fontspec) - 'bold small caps' (b/sc) with NFSS spec.: 977 + (fontspec) and font adjustment code: 978 + (fontspec) \fontdimen 8\font =0.4pt\relax \fontdimen 9\font 979 + (fontspec) =2.0pt\relax \fontdimen 10\font =1.67pt\relax 980 + (fontspec) \fontdimen 11\font =1.11pt\relax \fontdimen 12\font 981 + (fontspec) =6.0pt\relax \fontdimen 13\font =0pt\relax 982 + 983 + LaTeX Font Info: Encoding `OMX' has changed to `TU' for symbol font 984 + (Font) `largesymbols' in the math version `normal' on input line 9 985 + 4. 986 + LaTeX Font Info: Overwriting symbol font `largesymbols' in version `normal' 987 + (Font) OMX/cmex/m/n --> TU/latinmodern-math.otf(3)/m/n on inpu 988 + t line 94. 989 + LaTeX Font Info: Encoding `OMX' has changed to `TU' for symbol font 990 + (Font) `largesymbols' in the math version `bold' on input line 94. 991 + 992 + LaTeX Font Info: Overwriting symbol font `largesymbols' in version `bold' 993 + (Font) OMX/cmex/m/n --> TU/latinmodern-math.otf(3)/b/n on inpu 994 + t line 94. 995 + Package hyperref Info: Link coloring ON on input line 94. 996 + (./proposal.out) (./proposal.out) 997 + \@outlinefile=\write3 998 + \openout3 = `proposal.out'. 999 + 1000 + LaTeX Info: Redefining \microtypecontext on input line 94. 1001 + Package microtype Info: Applying patch `item' on input line 94. 1002 + Package microtype Info: Applying patch `toc' on input line 94. 1003 + Package microtype Info: Applying patch `eqnum' on input line 94. 1004 + Package microtype Info: Applying patch `footnote' on input line 94. 1005 + Package microtype Info: Applying patch `verbatim' on input line 94. 1006 + Package microtype Info: Character protrusion enabled (level 2). 1007 + Package microtype Info: Using default protrusion set `alltext'. 1008 + Package microtype Info: No adjustment of tracking. 1009 + Package microtype Info: No adjustment of spacing. 1010 + Package microtype Info: No adjustment of kerning. 1011 + 1012 + (/usr/share/texlive/texmf-dist/tex/latex/microtype/mt-LatinModernRoman.cfg 1013 + File: mt-LatinModernRoman.cfg 2021/02/21 v1.1 microtype config. file: Latin Mod 1014 + ern Roman (RS) 1015 + ) 1016 + Package microtype Info: Loading generic protrusion settings for font family 1017 + (microtype) `ywft-processing-bold' (encoding: TU). 1018 + (microtype) For optimal results, create family-specific settings. 1019 + (microtype) See the microtype manual for details. 1020 + 1021 + 1022 + Package microtype Warning: Unknown slot number of character 1023 + (microtype) `\k A' 1024 + (microtype) in font encoding `TU' in inheritance list 1025 + (microtype) `microtype.cfg/411(protrusion)'. 1026 + 1027 + 1028 + Package microtype Warning: Unknown slot number of character 1029 + (microtype) `\u A' 1030 + (microtype) in font encoding `TU' in inheritance list 1031 + (microtype) `microtype.cfg/411(protrusion)'. 1032 + 1033 + 1034 + Package microtype Warning: Unknown slot number of character 1035 + (microtype) `\k a' 1036 + (microtype) in font encoding `TU' in inheritance list 1037 + (microtype) `microtype.cfg/411(protrusion)'. 1038 + 1039 + 1040 + Package microtype Warning: Unknown slot number of character 1041 + (microtype) `\u a' 1042 + (microtype) in font encoding `TU' in inheritance list 1043 + (microtype) `microtype.cfg/411(protrusion)'. 1044 + 1045 + 1046 + Package microtype Warning: Unknown slot number of character 1047 + (microtype) `\'C' 1048 + (microtype) in font encoding `TU' in inheritance list 1049 + (microtype) `microtype.cfg/411(protrusion)'. 1050 + 1051 + 1052 + Package microtype Warning: Unknown slot number of character 1053 + (microtype) `\v C' 1054 + (microtype) in font encoding `TU' in inheritance list 1055 + (microtype) `microtype.cfg/411(protrusion)'. 1056 + 1057 + 1058 + Package microtype Warning: Unknown slot number of character 1059 + (microtype) `\'c' 1060 + (microtype) in font encoding `TU' in inheritance list 1061 + (microtype) `microtype.cfg/411(protrusion)'. 1062 + 1063 + 1064 + Package microtype Warning: Unknown slot number of character 1065 + (microtype) `\v c' 1066 + (microtype) in font encoding `TU' in inheritance list 1067 + (microtype) `microtype.cfg/411(protrusion)'. 1068 + 1069 + 1070 + Package microtype Warning: Unknown slot number of character 1071 + (microtype) `\v D' 1072 + (microtype) in font encoding `TU' in inheritance list 1073 + (microtype) `microtype.cfg/411(protrusion)'. 1074 + 1075 + 1076 + Package microtype Warning: Unknown slot number of character 1077 + (microtype) `\v d' 1078 + (microtype) in font encoding `TU' in inheritance list 1079 + (microtype) `microtype.cfg/411(protrusion)'. 1080 + 1081 + Package microtype Info: Character `\dj ' is missing 1082 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/10'. 1083 + (microtype) Ignoring protrusion settings for this character. 1084 + 1085 + Package microtype Warning: Unknown slot number of character 1086 + (microtype) `\k E' 1087 + (microtype) in font encoding `TU' in inheritance list 1088 + (microtype) `microtype.cfg/411(protrusion)'. 1089 + 1090 + 1091 + Package microtype Warning: Unknown slot number of character 1092 + (microtype) `\v E' 1093 + (microtype) in font encoding `TU' in inheritance list 1094 + (microtype) `microtype.cfg/411(protrusion)'. 1095 + 1096 + 1097 + Package microtype Warning: Unknown slot number of character 1098 + (microtype) `\k e' 1099 + (microtype) in font encoding `TU' in inheritance list 1100 + (microtype) `microtype.cfg/411(protrusion)'. 1101 + 1102 + 1103 + Package microtype Warning: Unknown slot number of character 1104 + (microtype) `\v e' 1105 + (microtype) in font encoding `TU' in inheritance list 1106 + (microtype) `microtype.cfg/411(protrusion)'. 1107 + 1108 + 1109 + Package microtype Warning: Unknown slot number of character 1110 + (microtype) `\u G' 1111 + (microtype) in font encoding `TU' in inheritance list 1112 + (microtype) `microtype.cfg/411(protrusion)'. 1113 + 1114 + 1115 + Package microtype Warning: Unknown slot number of character 1116 + (microtype) `\u g' 1117 + (microtype) in font encoding `TU' in inheritance list 1118 + (microtype) `microtype.cfg/411(protrusion)'. 1119 + 1120 + 1121 + Package microtype Warning: Unknown slot number of character 1122 + (microtype) `\.I' 1123 + (microtype) in font encoding `TU' in inheritance list 1124 + (microtype) `microtype.cfg/411(protrusion)'. 1125 + 1126 + Package microtype Info: Character `\i ' is missing 1127 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/10'. 1128 + (microtype) Ignoring protrusion settings for this character. 1129 + Package microtype Info: Character `\L ' is missing 1130 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/10'. 1131 + (microtype) Ignoring protrusion settings for this character. 1132 + 1133 + Package microtype Warning: Unknown slot number of character 1134 + (microtype) `\'L' 1135 + (microtype) in font encoding `TU' in inheritance list 1136 + (microtype) `microtype.cfg/411(protrusion)'. 1137 + 1138 + 1139 + Package microtype Warning: Unknown slot number of character 1140 + (microtype) `\v L' 1141 + (microtype) in font encoding `TU' in inheritance list 1142 + (microtype) `microtype.cfg/411(protrusion)'. 1143 + 1144 + Package microtype Info: Character `\l ' is missing 1145 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/10'. 1146 + (microtype) Ignoring protrusion settings for this character. 1147 + 1148 + Package microtype Warning: Unknown slot number of character 1149 + (microtype) `\'l' 1150 + (microtype) in font encoding `TU' in inheritance list 1151 + (microtype) `microtype.cfg/411(protrusion)'. 1152 + 1153 + 1154 + Package microtype Warning: Unknown slot number of character 1155 + (microtype) `\v l' 1156 + (microtype) in font encoding `TU' in inheritance list 1157 + (microtype) `microtype.cfg/411(protrusion)'. 1158 + 1159 + 1160 + Package microtype Warning: Unknown slot number of character 1161 + (microtype) `\'N' 1162 + (microtype) in font encoding `TU' in inheritance list 1163 + (microtype) `microtype.cfg/411(protrusion)'. 1164 + 1165 + 1166 + Package microtype Warning: Unknown slot number of character 1167 + (microtype) `\v N' 1168 + (microtype) in font encoding `TU' in inheritance list 1169 + (microtype) `microtype.cfg/411(protrusion)'. 1170 + 1171 + 1172 + Package microtype Warning: Unknown slot number of character 1173 + (microtype) `\'n' 1174 + (microtype) in font encoding `TU' in inheritance list 1175 + (microtype) `microtype.cfg/411(protrusion)'. 1176 + 1177 + 1178 + Package microtype Warning: Unknown slot number of character 1179 + (microtype) `\v n' 1180 + (microtype) in font encoding `TU' in inheritance list 1181 + (microtype) `microtype.cfg/411(protrusion)'. 1182 + 1183 + 1184 + Package microtype Warning: Unknown slot number of character 1185 + (microtype) `\H O' 1186 + (microtype) in font encoding `TU' in inheritance list 1187 + (microtype) `microtype.cfg/411(protrusion)'. 1188 + 1189 + 1190 + Package microtype Warning: Unknown slot number of character 1191 + (microtype) `\H o' 1192 + (microtype) in font encoding `TU' in inheritance list 1193 + (microtype) `microtype.cfg/411(protrusion)'. 1194 + 1195 + 1196 + Package microtype Warning: Unknown slot number of character 1197 + (microtype) `\'R' 1198 + (microtype) in font encoding `TU' in inheritance list 1199 + (microtype) `microtype.cfg/411(protrusion)'. 1200 + 1201 + 1202 + Package microtype Warning: Unknown slot number of character 1203 + (microtype) `\v R' 1204 + (microtype) in font encoding `TU' in inheritance list 1205 + (microtype) `microtype.cfg/411(protrusion)'. 1206 + 1207 + 1208 + Package microtype Warning: Unknown slot number of character 1209 + (microtype) `\'r' 1210 + (microtype) in font encoding `TU' in inheritance list 1211 + (microtype) `microtype.cfg/411(protrusion)'. 1212 + 1213 + 1214 + Package microtype Warning: Unknown slot number of character 1215 + (microtype) `\v r' 1216 + (microtype) in font encoding `TU' in inheritance list 1217 + (microtype) `microtype.cfg/411(protrusion)'. 1218 + 1219 + 1220 + Package microtype Warning: Unknown slot number of character 1221 + (microtype) `\'S' 1222 + (microtype) in font encoding `TU' in inheritance list 1223 + (microtype) `microtype.cfg/411(protrusion)'. 1224 + 1225 + 1226 + Package microtype Warning: Unknown slot number of character 1227 + (microtype) `\c S' 1228 + (microtype) in font encoding `TU' in inheritance list 1229 + (microtype) `microtype.cfg/411(protrusion)'. 1230 + 1231 + 1232 + Package microtype Warning: Unknown slot number of character 1233 + (microtype) `\'s' 1234 + (microtype) in font encoding `TU' in inheritance list 1235 + (microtype) `microtype.cfg/411(protrusion)'. 1236 + 1237 + 1238 + Package microtype Warning: Unknown slot number of character 1239 + (microtype) `\c s' 1240 + (microtype) in font encoding `TU' in inheritance list 1241 + (microtype) `microtype.cfg/411(protrusion)'. 1242 + 1243 + 1244 + Package microtype Warning: Unknown slot number of character 1245 + (microtype) `\c T' 1246 + (microtype) in font encoding `TU' in inheritance list 1247 + (microtype) `microtype.cfg/411(protrusion)'. 1248 + 1249 + 1250 + Package microtype Warning: Unknown slot number of character 1251 + (microtype) `\v T' 1252 + (microtype) in font encoding `TU' in inheritance list 1253 + (microtype) `microtype.cfg/411(protrusion)'. 1254 + 1255 + 1256 + Package microtype Warning: Unknown slot number of character 1257 + (microtype) `\c t' 1258 + (microtype) in font encoding `TU' in inheritance list 1259 + (microtype) `microtype.cfg/411(protrusion)'. 1260 + 1261 + 1262 + Package microtype Warning: Unknown slot number of character 1263 + (microtype) `\v t' 1264 + (microtype) in font encoding `TU' in inheritance list 1265 + (microtype) `microtype.cfg/411(protrusion)'. 1266 + 1267 + 1268 + Package microtype Warning: Unknown slot number of character 1269 + (microtype) `\H U' 1270 + (microtype) in font encoding `TU' in inheritance list 1271 + (microtype) `microtype.cfg/411(protrusion)'. 1272 + 1273 + 1274 + Package microtype Warning: Unknown slot number of character 1275 + (microtype) `\r U' 1276 + (microtype) in font encoding `TU' in inheritance list 1277 + (microtype) `microtype.cfg/411(protrusion)'. 1278 + 1279 + 1280 + Package microtype Warning: Unknown slot number of character 1281 + (microtype) `\H u' 1282 + (microtype) in font encoding `TU' in inheritance list 1283 + (microtype) `microtype.cfg/411(protrusion)'. 1284 + 1285 + 1286 + Package microtype Warning: Unknown slot number of character 1287 + (microtype) `\r u' 1288 + (microtype) in font encoding `TU' in inheritance list 1289 + (microtype) `microtype.cfg/411(protrusion)'. 1290 + 1291 + 1292 + Package microtype Warning: Unknown slot number of character 1293 + (microtype) `\'Z' 1294 + (microtype) in font encoding `TU' in inheritance list 1295 + (microtype) `microtype.cfg/411(protrusion)'. 1296 + 1297 + 1298 + Package microtype Warning: Unknown slot number of character 1299 + (microtype) `\.Z' 1300 + (microtype) in font encoding `TU' in inheritance list 1301 + (microtype) `microtype.cfg/411(protrusion)'. 1302 + 1303 + 1304 + Package microtype Warning: Unknown slot number of character 1305 + (microtype) `\'z' 1306 + (microtype) in font encoding `TU' in inheritance list 1307 + (microtype) `microtype.cfg/411(protrusion)'. 1308 + 1309 + 1310 + Package microtype Warning: Unknown slot number of character 1311 + (microtype) `\.z' 1312 + (microtype) in font encoding `TU' in inheritance list 1313 + (microtype) `microtype.cfg/411(protrusion)'. 1314 + 1315 + Package microtype Info: Character `\textendash ' is missing 1316 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/10'. 1317 + (microtype) Ignoring protrusion settings for this character. 1318 + Package microtype Info: Character `\textemdash ' is missing 1319 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/10'. 1320 + (microtype) Ignoring protrusion settings for this character. 1321 + Package microtype Info: Character `\textquoteleft ' is missing 1322 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/10'. 1323 + (microtype) Ignoring protrusion settings for this character. 1324 + Package microtype Info: Character `\textquoteright ' is missing 1325 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/10'. 1326 + (microtype) Ignoring protrusion settings for this character. 1327 + Package microtype Info: Character `\textquotedblleft ' is missing 1328 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/10'. 1329 + (microtype) Ignoring protrusion settings for this character. 1330 + Package microtype Info: Character `\textquotedblright ' is missing 1331 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/10'. 1332 + (microtype) Ignoring protrusion settings for this character. 1333 + Package microtype Info: Character `\quotesinglbase ' is missing 1334 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/10'. 1335 + (microtype) Ignoring protrusion settings for this character. 1336 + Package microtype Info: Character `\quotedblbase ' is missing 1337 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/10'. 1338 + (microtype) Ignoring protrusion settings for this character. 1339 + Package microtype Info: Character `\guilsinglleft ' is missing 1340 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/10'. 1341 + (microtype) Ignoring protrusion settings for this character. 1342 + Package microtype Info: Character `\guilsinglright ' is missing 1343 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/10'. 1344 + (microtype) Ignoring protrusion settings for this character. 1345 + Package microtype Info: Character `\textendash ' is missing 1346 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/26'. 1347 + (microtype) Ignoring protrusion settings for this character. 1348 + Package microtype Info: Character `\textemdash ' is missing 1349 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/26'. 1350 + (microtype) Ignoring protrusion settings for this character. 1351 + Package microtype Info: Character `\textquoteleft ' is missing 1352 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/26'. 1353 + (microtype) Ignoring protrusion settings for this character. 1354 + Package microtype Info: Character `\textquoteright ' is missing 1355 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/26'. 1356 + (microtype) Ignoring protrusion settings for this character. 1357 + Package microtype Info: Character `\textquotedblleft ' is missing 1358 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/26'. 1359 + (microtype) Ignoring protrusion settings for this character. 1360 + Package microtype Info: Character `\textquotedblright ' is missing 1361 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/26'. 1362 + (microtype) Ignoring protrusion settings for this character. 1363 + Package microtype Info: Character `\quotesinglbase ' is missing 1364 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/26'. 1365 + (microtype) Ignoring protrusion settings for this character. 1366 + Package microtype Info: Character `\quotedblbase ' is missing 1367 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/26'. 1368 + (microtype) Ignoring protrusion settings for this character. 1369 + Package microtype Info: Character `\guilsinglleft ' is missing 1370 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/26'. 1371 + (microtype) Ignoring protrusion settings for this character. 1372 + Package microtype Info: Character `\guilsinglright ' is missing 1373 + (microtype) in font `\TU/ywft-processing-bold(0)/m/n/26'. 1374 + (microtype) Ignoring protrusion settings for this character. 1375 + Package microtype Info: Loading generic protrusion settings for font family 1376 + (microtype) `ywft-processing-light' (encoding: TU). 1377 + (microtype) For optimal results, create family-specific settings. 1378 + (microtype) See the microtype manual for details. 1379 + Package microtype Info: Character `\textendash ' is missing 1380 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/10'. 1381 + (microtype) Ignoring protrusion settings for this character. 1382 + Package microtype Info: Character `\textemdash ' is missing 1383 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/10'. 1384 + (microtype) Ignoring protrusion settings for this character. 1385 + Package microtype Info: Character `\textquoteleft ' is missing 1386 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/10'. 1387 + (microtype) Ignoring protrusion settings for this character. 1388 + Package microtype Info: Character `\textquoteright ' is missing 1389 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/10'. 1390 + (microtype) Ignoring protrusion settings for this character. 1391 + Package microtype Info: Character `\textquotedblleft ' is missing 1392 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/10'. 1393 + (microtype) Ignoring protrusion settings for this character. 1394 + Package microtype Info: Character `\textquotedblright ' is missing 1395 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/10'. 1396 + (microtype) Ignoring protrusion settings for this character. 1397 + Package microtype Info: Character `\quotesinglbase ' is missing 1398 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/10'. 1399 + (microtype) Ignoring protrusion settings for this character. 1400 + Package microtype Info: Character `\quotedblbase ' is missing 1401 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/10'. 1402 + (microtype) Ignoring protrusion settings for this character. 1403 + Package microtype Info: Character `\guilsinglleft ' is missing 1404 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/10'. 1405 + (microtype) Ignoring protrusion settings for this character. 1406 + Package microtype Info: Character `\guilsinglright ' is missing 1407 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/10'. 1408 + (microtype) Ignoring protrusion settings for this character. 1409 + Package microtype Info: Character `\textendash ' is missing 1410 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/12'. 1411 + (microtype) Ignoring protrusion settings for this character. 1412 + Package microtype Info: Character `\textemdash ' is missing 1413 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/12'. 1414 + (microtype) Ignoring protrusion settings for this character. 1415 + Package microtype Info: Character `\textquoteleft ' is missing 1416 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/12'. 1417 + (microtype) Ignoring protrusion settings for this character. 1418 + Package microtype Info: Character `\textquoteright ' is missing 1419 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/12'. 1420 + (microtype) Ignoring protrusion settings for this character. 1421 + Package microtype Info: Character `\textquotedblleft ' is missing 1422 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/12'. 1423 + (microtype) Ignoring protrusion settings for this character. 1424 + Package microtype Info: Character `\textquotedblright ' is missing 1425 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/12'. 1426 + (microtype) Ignoring protrusion settings for this character. 1427 + Package microtype Info: Character `\quotesinglbase ' is missing 1428 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/12'. 1429 + (microtype) Ignoring protrusion settings for this character. 1430 + Package microtype Info: Character `\quotedblbase ' is missing 1431 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/12'. 1432 + (microtype) Ignoring protrusion settings for this character. 1433 + Package microtype Info: Character `\guilsinglleft ' is missing 1434 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/12'. 1435 + (microtype) Ignoring protrusion settings for this character. 1436 + Package microtype Info: Character `\guilsinglright ' is missing 1437 + (microtype) in font `\TU/ywft-processing-light(0)/m/n/12'. 1438 + (microtype) Ignoring protrusion settings for this character. 1439 + LaTeX Font Info: Font shape `TU/LatinModernMono(0)/m/n' will be 1440 + (Font) scaled to size 7.65005pt on input line 111. 1441 + Package microtype Info: Loading generic protrusion settings for font family 1442 + (microtype) `LatinModernMono' (encoding: TU). 1443 + (microtype) For optimal results, create family-specific settings. 1444 + (microtype) See the microtype manual for details. 1445 + Package microtype Info: Loading generic protrusion settings for font family 1446 + (microtype) `latinmodern-math.otf' (encoding: TU). 1447 + (microtype) For optimal results, create family-specific settings. 1448 + (microtype) See the microtype manual for details. 1449 + LaTeX Font Info: Font shape `TU/latinmodern-math.otf(2)/m/n' will be 1450 + (Font) scaled to size 9.00096pt on input line 111. 1451 + LaTeX Font Info: Font shape `TU/latinmodern-math.otf(2)/m/n' will be 1452 + (Font) scaled to size 6.00064pt on input line 111. 1453 + LaTeX Font Info: Font shape `TU/latinmodern-math.otf(2)/m/n' will be 1454 + (Font) scaled to size 5.00053pt on input line 111. 1455 + LaTeX Font Info: Font shape `TU/latinmodern-math.otf(3)/m/n' will be 1456 + (Font) scaled to size 8.99904pt on input line 111. 1457 + LaTeX Font Info: Font shape `TU/latinmodern-math.otf(3)/m/n' will be 1458 + (Font) scaled to size 5.99936pt on input line 111. 1459 + LaTeX Font Info: Font shape `TU/latinmodern-math.otf(3)/m/n' will be 1460 + (Font) scaled to size 4.99947pt on input line 111. 1461 + 1462 + Underfull \vbox (badness 10000) has occurred while \output is active [] 1463 + 1464 + LaTeX Font Info: Font shape `TU/LatinModernMono(0)/m/n' will be 1465 + (Font) scaled to size 8.50006pt on input line 141. 1466 + 1467 + Underfull \vbox (badness 10000) has occurred while \output is active [] 1468 + 1469 + LaTeX Font Info: Font shape `TU/latinmodern-math.otf(2)/m/n' will be 1470 + (Font) scaled to size 8.00085pt on input line 157. 1471 + LaTeX Font Info: Font shape `TU/latinmodern-math.otf(3)/m/n' will be 1472 + (Font) scaled to size 7.99915pt on input line 157. 1473 + LaTeX Font Info: Font shape `TU/LatinModernMono(0)/m/n' will be 1474 + (Font) scaled to size 6.80005pt on input line 157. 1475 + [1 1476 + 1477 + 1478 + ] 1479 + [2 1480 + 1481 + ] 1482 + LaTeX Font Info: Font shape `TU/latinmodern-math.otf(2)/m/n' will be 1483 + (Font) scaled to size 10.00107pt on input line 175. 1484 + LaTeX Font Info: Font shape `TU/latinmodern-math.otf(2)/m/n' will be 1485 + (Font) scaled to size 7.00075pt on input line 175. 1486 + LaTeX Font Info: Font shape `TU/latinmodern-math.otf(3)/m/n' will be 1487 + (Font) scaled to size 9.99893pt on input line 175. 1488 + LaTeX Font Info: Font shape `TU/latinmodern-math.otf(3)/m/n' will be 1489 + (Font) scaled to size 6.99925pt on input line 175. 1490 + 1491 + 1492 + LaTeX Font Warning: Font shape `TU/LatinModernRoman(0)/m/sc' undefined 1493 + (Font) using `TU/LatinModernRoman(0)/m/n' instead on input line 17 1494 + 8. 1495 + 1496 + 1497 + LaTeX Font Warning: Font shape `TU/LatinModernRoman(0)/b/sc' undefined 1498 + (Font) using `TU/LatinModernRoman(0)/b/n' instead on input line 19 1499 + 9. 1500 + 1501 + 1502 + LaTeX Font Warning: Font shape `TU/LatinModernMono(0)/b/n' undefined 1503 + (Font) using `TU/LatinModernMono(0)/m/n' instead on input line 219 1504 + . 1505 + 1506 + LaTeX Font Info: Font shape `TU/LatinModernMono(0)/b/n' will be 1507 + (Font) scaled to size 7.65005pt on input line 220. 1508 + 1509 + Underfull \hbox (badness 10000) in paragraph at lines 288--290 1510 + 1511 + [] 1512 + 1513 + [3 1514 + 1515 + ] 1516 + LaTeX Font Info: Font shape `TU/LatinModernMono(0)/m/n' will be 1517 + (Font) scaled to size 5.95004pt on input line 314. 1518 + [4] [5] (./proposal.aux) 1519 + 1520 + LaTeX Font Warning: Some font shapes were not available, defaults substituted. 1521 + 1522 + Package rerunfilecheck Info: File `proposal.out' has not changed. 1523 + (rerunfilecheck) Checksum: D41D8CD98F00B204E9800998ECF8427E;0. 1524 + ) 1525 + Here is how much of TeX's memory you used: 1526 + 19295 strings out of 478651 1527 + 359621 string characters out of 5848367 1528 + 1884018 words of memory out of 6000000 1529 + 39125 multiletter control sequences out of 15000+600000 1530 + 515514 words of font info for 111 fonts, out of 8000000 for 9000 1531 + 34 hyphenation exceptions out of 8191 1532 + 84i,12n,115p,1005b,562s stack positions out of 10000i,1000n,20000p,200000b,200000s 1533 + 1534 + Output written on proposal.pdf (5 pages).
sosoft/proposal.out

This is a binary file and will not be displayed.

sosoft/proposal.pdf

This is a binary file and will not be displayed.

+573
sosoft/proposal.tex
··· 1 + % !TEX program = xelatex 2 + \documentclass[10pt,letterpaper,twocolumn]{article} 3 + 4 + % === GEOMETRY === 5 + \usepackage[top=0.75in, bottom=0.75in, left=0.75in, right=0.75in]{geometry} 6 + 7 + % === FONTS === 8 + \usepackage{fontspec} 9 + \usepackage{unicode-math} 10 + 11 + % Body: Latin Modern (Computer Modern successor — the academic standard) 12 + \setmainfont{Latin Modern Roman} 13 + \setsansfont{Latin Modern Sans} 14 + 15 + % Custom AC fonts 16 + \newfontfamily\acbold{ywft-processing-bold}[ 17 + Path=../system/public/type/webfonts/, 18 + Extension=.ttf 19 + ] 20 + \newfontfamily\aclight{ywft-processing-light}[ 21 + Path=../system/public/type/webfonts/, 22 + Extension=.ttf 23 + ] 24 + % Berkeley Mono only available as .woff2 — use Latin Modern Mono (academic standard) 25 + \setmonofont{Latin Modern Mono}[Scale=0.85] 26 + 27 + % === PACKAGES === 28 + \usepackage{xcolor} 29 + \usepackage{titlesec} 30 + \usepackage{enumitem} 31 + \usepackage{booktabs} 32 + \usepackage{tabularx} 33 + \usepackage{multicol} 34 + \usepackage{fancyhdr} 35 + \usepackage{hyperref} 36 + \usepackage{graphicx} 37 + \usepackage{ragged2e} 38 + \usepackage{microtype} 39 + 40 + % === COLORS (AC palette) === 41 + \definecolor{acpink}{RGB}{180,72,135} 42 + \definecolor{acpurple}{RGB}{120,80,180} 43 + \definecolor{acdark}{RGB}{64,56,74} 44 + \definecolor{acgray}{RGB}{119,119,119} 45 + 46 + % === HYPERREF === 47 + \hypersetup{ 48 + colorlinks=true, 49 + linkcolor=acpurple, 50 + urlcolor=acpurple, 51 + citecolor=acpurple, 52 + pdfauthor={Jeffrey Scudder}, 53 + pdftitle={Aesthetic.Computer — Proposal for Social Software Cycle 2}, 54 + } 55 + 56 + % === SECTION FORMATTING === 57 + \titleformat{\section} 58 + {\normalfont\bfseries\normalsize\uppercase} 59 + {} 60 + {0em} 61 + {} 62 + \titlespacing{\section}{0pt}{1.2em}{0.3em} 63 + 64 + \titleformat{\subsection} 65 + {\normalfont\bfseries\small\scshape} 66 + {} 67 + {0em} 68 + {} 69 + \titlespacing{\subsection}{0pt}{0.8em}{0.2em} 70 + 71 + % === HEADER/FOOTER === 72 + \pagestyle{fancy} 73 + \fancyhf{} 74 + \renewcommand{\headrulewidth}{0pt} 75 + \fancyfoot[C]{\footnotesize\color{acgray}Aesthetic{\color{acpink}.}Computer Research Template 1.0 \quad$\cdot$\quad \texttt{@jeffrey} \quad$\cdot$\quad github.com/whistlegraph/aesthetic-computer} 76 + 77 + % === CUSTOM COMMANDS === 78 + \newcommand{\acdot}{{\color{acpink}.}} 79 + \newcommand{\pe}[2]{\texttt{\color{acpurple}#1} #2} 80 + \newcommand{\peh}[1]{\vspace{0.3em}\noindent\textbf{\textsc{#1}}\par\vspace{0.1em}\hrule\vspace{0.2em}} 81 + 82 + % === LIST SETTINGS === 83 + \setlist[itemize]{nosep, leftmargin=1.2em, itemsep=0.1em} 84 + \setlist[enumerate]{nosep, leftmargin=1.2em} 85 + 86 + % === COLUMN SEPARATION === 87 + \setlength{\columnsep}{1.8em} 88 + \setlength{\columnseprule}{0.4pt} 89 + 90 + % === PARAGRAPH SETTINGS === 91 + \setlength{\parindent}{0pt} 92 + \setlength{\parskip}{0.5em} 93 + 94 + \begin{document} 95 + 96 + % ============ TITLE BLOCK ============ 97 + 98 + \twocolumn[{% 99 + \begin{center} 100 + {\acbold\fontsize{26pt}{30pt}\selectfont\color{acdark} Aesthetic{\color{acpink}.}Computer}\par 101 + \vspace{0.3em} 102 + {\aclight\fontsize{12pt}{14pt}\selectfont\color{acpink} Proposal for Social Software Cycle 2}\par 103 + \vspace{0.5em} 104 + {\small Jeffrey Scudder \enspace/\enspace \texttt{@jeffrey}}\par 105 + {\small\color{acgray} Score for Social Software --- Cycle 2 \enspace$\cdot$\enspace DESMA 596/199 \enspace$\cdot$\enspace March 2026}\par 106 + {\small\color{acpurple} \url{https://aesthetic.computer} \enspace$\cdot$\enspace \url{https://github.com/whistlegraph/aesthetic-computer} \enspace$\cdot$\enspace \url{https://nopaint.art}}\par 107 + \vspace{0.6em} 108 + \rule{\textwidth}{2pt} 109 + \vspace{0.8em} 110 + \end{center} 111 + }] 112 + 113 + % ============ PAGE 1: PROPOSAL ============ 114 + 115 + \section*{The Score} 116 + 117 + I'm submitting Aesthetic Computer (AC)---the open-source creative computing platform I've been building since 2021---as a social software project in active development. I'm not proposing to build a new thing for this cycle. I'm bringing the thing I'm already building into the room for dialogue, feedback, and critical exchange as I continue to develop it alongside its community. 118 + 119 + AC is a mobile-first runtime and social network where users write, publish, and share small interactive programs called \emph{pieces}. It has real-time chat, @handles with per-character color customization, ephemeral status updates (ATProto integration for identity and Bluesky bridging), a pixel painting system, a built-in Lisp dialect (KidLisp), multiplayer WebSocket sessions, and user profiles that track creative output. The codebase is open source with 4+ years of continuous development. 120 + 121 + The score is simple: I develop AC in the open over 10 weeks, sharing what I'm working on, what decisions I'm facing, and what the community is doing on the platform. The cohort engages as users and as critics---trying the tools, reading the design choices, and giving me feedback I can't get from inside the project. 122 + 123 + \section*{What I'm Looking For} 124 + 125 + I've been deep inside AC's architecture for years. I know how the systems work. What I lack is outside perspective on the social design---the questions I can't answer alone: 126 + 127 + \begin{itemize} 128 + \item What feels inviting and what feels opaque when you first encounter the platform? 129 + \item Which social features sustain participation vs.\ which are technically impressive but socially inert? 130 + \item How does the ``instrument'' metaphor land for people who aren't already invested in it? 131 + \item What would you want to do on AC that you currently can't? 132 + \item Where does the design accidentally exclude the people it claims to welcome? 133 + \end{itemize} 134 + 135 + These questions require sustained dialogue, not a single usability test. A cohort of practitioners thinking about social software from different angles is the right context for this kind of exchange. 136 + 137 + \section*{What the Cohort Gets} 138 + 139 + \begin{itemize} 140 + \item \textbf{A live codebase}---open source, documented, actively changing week to week 141 + \item \textbf{The dev process}---I work with Emacs, VS Code, and Claude Code, and maintain a living \texttt{SCORE.md}; the process is as legible as the product 142 + \item \textbf{Platform accounts}---everyone gets an @handle, can paint, chat, set moods, write KidLisp, publish pieces 143 + \item \textbf{Real community data}---2,800 handles, 18k chat messages, 4,400 paintings, 16k KidLisp programs; the social patterns are there to observe 144 + \end{itemize} 145 + 146 + \section*{Why This Cycle} 147 + 148 + Casey's framing of ``scores for social software'' maps directly onto how I already think about AC. The platform's \texttt{SCORE.md} literally uses the metaphor of a musical score to organize the project. The interface is designed to work like an instrument---users discover memorizable paths, build literacy through play, and eventually improvise. But I've been composing alone. This cycle is a chance to compose in conversation. 149 + 150 + I'm at a specific inflection point. The technical infrastructure is mature. The question now is about social design: how do the features I've built actually shape the way people relate to each other and to creative computing? That's best answered through dialogue with people thinking critically about social software, not through more engineering. 151 + 152 + \section*{Practice} 153 + 154 + I'm an artist, educator, and software developer. Before AC, I created No Paint (2020), a pixel art tool whose community of non-technical users taught me how people learn computing through social participation in software they love. AC extends that into a full platform: anyone can write, publish, and share interactive programs at a URL. 155 + 156 + I teach creative computing and have used AC as infrastructure in courses and workshops. My interest in social software comes from watching people learn computation through social participation---first in No Paint, now in AC. I'm bringing this not as a finished project but as an ongoing practice I want to develop through critical exchange. 157 + 158 + % ============ APPENDIX A: NETWORK ============ 159 + 160 + \onecolumn 161 + \vspace{0.5em} 162 + \rule{\textwidth}{2pt} 163 + \vspace{0.3em} 164 + 165 + \begin{center} 166 + {\large\bfseries Appendix A: The Network}\par 167 + \vspace{0.2em} 168 + {\small\itshape Live data from AC's MongoDB cluster --- March 2, 2026} 169 + \end{center} 170 + 171 + \vspace{0.5em} 172 + 173 + % Stat grid as table 174 + \begin{center} 175 + \begin{tabular}{ccccccccc} 176 + \toprule 177 + \textbf{\color{acpink}\large 2,798} & \textbf{\color{acpink}\large 18,016} & \textbf{\color{acpink}\large 4,392} & \textbf{\color{acpink}\large 2,900} & \textbf{\color{acpink}\large 16,174} & \textbf{\color{acpink}\large 265} & \textbf{\color{acpink}\large 333} & \textbf{\color{acpink}\large 102} & \textbf{\color{acpink}\large 93,122} \\ 178 + {\scriptsize\color{acpurple}\textsc{@handles}} & 179 + {\scriptsize\color{acpurple}\textsc{chat msgs}} & 180 + {\scriptsize\color{acpurple}\textsc{paintings}} & 181 + {\scriptsize\color{acpurple}\textsc{moods}} & 182 + {\scriptsize\color{acpurple}\textsc{kidlisp}} & 183 + {\scriptsize\color{acpurple}\textsc{pieces}} & 184 + {\scriptsize\color{acpurple}\textsc{clocks}} & 185 + {\scriptsize\color{acpurple}\textsc{tapes}} & 186 + {\scriptsize\color{acpurple}\textsc{boots}} \\ 187 + \bottomrule 188 + \end{tabular} 189 + \end{center} 190 + 191 + \begin{center} 192 + \small\textbf{Who makes things:} 1,067 have painted $\cdot$ 997 have posted moods $\cdot$ 59 have written KidLisp $\cdot$ 19 have published pieces 193 + \end{center} 194 + 195 + \vspace{0.3em} 196 + 197 + \begin{multicols}{2} 198 + 199 + \subsection*{The Instrument Loop} 200 + 201 + \begin{center} 202 + \small 203 + \texttt{\color{acpurple}prompt} $\rightarrow$ type a piece name $\rightarrow$ \texttt{\color{acpurple}enter} $\rightarrow$ play the piece $\rightarrow$ \texttt{\color{acpurple}esc} $\rightarrow$ back to prompt 204 + \end{center} 205 + 206 + \subsection*{User Data Flow} 207 + 208 + \begin{center} 209 + \small 210 + \texttt{\color{acpurple}@handle} $\rightarrow$ paint / chat / mood / kid / publish $\rightarrow$ \texttt{\color{acpurple}MongoDB} $\rightarrow$ profile $\rightarrow$ \texttt{\color{acpurple}public URL}\\[0.3em] 211 + {\footnotesize\itshape\color{acpurple} ATProto PDS $\rightarrow$ Bluesky (identity + moods) $\cdot$ paintings $\rightarrow$ DO Spaces CDN} 212 + \end{center} 213 + 214 + \columnbreak 215 + 216 + \subsection*{Sample Documents (live)} 217 + 218 + {\small\ttfamily 219 + \textbf{\color{acpurple}mood}~~\{ mood: "studying astronomy", when: "2026-03-02T12:32:49Z", atproto: \{ rkey: "3mg3b6jcj4k2x" \} \}\\[0.3em] 220 + \textbf{\color{acpurple}painting}~~\{ code: "gfl", slug: "2026.03.02.14.14.39", when: "2026-03-02T13:14:48Z" \}\\[0.3em] 221 + \textbf{\color{acpurple}kidlisp}~~\{ code: "27z", source: "fade:red-blue-black-blue-red\textbackslash nscroll (* 100 amp)", hits: 1 \}\\[0.3em] 222 + \textbf{\color{acpurple}chat}~~\{ text: "y'all gonna piss me off", when: "2026-03-02T05:26:25Z", font: "font\_1" \}\\[0.3em] 223 + \textbf{\color{acpurple}piece}~~\{ code: "zod", slug: "zod", name: "3d-cube", extension: ".mjs", hits: 1 \} 224 + } 225 + 226 + \end{multicols} 227 + 228 + % ============ ARCHITECTURE & SITEMAP ============ 229 + 230 + \rule{\textwidth}{2pt} 231 + \vspace{0.3em} 232 + 233 + \begin{center} 234 + {\large\bfseries Architecture \& Sitemap}\par 235 + \vspace{0.2em} 236 + {\small\itshape 22 domains $\cdot$ \textasciitilde355 disk routes $\cdot$ \textasciitilde85 API endpoints $\cdot$ open source since 2021} 237 + \end{center} 238 + 239 + \vspace{0.3em} 240 + 241 + % Service cards as 3x2 table 242 + {\small 243 + \begin{tabularx}{\textwidth}{|X|X|X|} 244 + \hline 245 + \textbf{\textsc{aesthetic.computer}} & \textbf{\textsc{session server}} & \textbf{\textsc{oven.aesthetic.computer}} \\ 246 + \begin{itemize}[nosep,leftmargin=0.8em] 247 + \item Netlify --- \textasciitilde85 API endpoints, edge functions 248 + \item Canvas 2D + WebGL2 frontend 249 + \item ES Modules, WebSocket hot-reload 250 + \item Auth0, Firebase, Stripe 251 + \item 351 built-in pieces 252 + \end{itemize} & 253 + \begin{itemize}[nosep,leftmargin=0.8em] 254 + \item Fastify + Geckos.io (WebSocket) 255 + \item Jamsocket ephemeral containers 256 + \item Redis state sync 257 + \item Chat, multiplayer, rooms 258 + \item DigitalOcean + pm2 259 + \end{itemize} & 260 + \begin{itemize}[nosep,leftmargin=0.8em] 261 + \item Express.js + FFmpeg 262 + \item Tape $\rightarrow$ MP4, screenshots 263 + \item OG image generation 264 + \item Caddy (auto HTTPS) 265 + \item DigitalOcean droplet 266 + \end{itemize} \\ 267 + \hline 268 + \textbf{\textsc{feed.* / grab.*}} & \textbf{\textsc{data layer}} & \textbf{\textsc{kidlisp.com}} \\ 269 + \begin{itemize}[nosep,leftmargin=0.8em] 270 + \item Cloudflare Workers 271 + \item Hono + TypeScript (feed) 272 + \item Browser Rendering API (grab) 273 + \item KV, Durable Objects 274 + \end{itemize} & 275 + \begin{itemize}[nosep,leftmargin=0.8em] 276 + \item MongoDB Atlas --- user content 277 + \item Redis --- session cache 278 + \item DO Spaces (S3 CDN) --- media 279 + \item ATProto PDS --- identity + Bluesky 280 + \end{itemize} & 281 + \begin{itemize}[nosep,leftmargin=0.8em] 282 + \item 118 built-in functions, 12 categories 283 + \item Evaluator: lib/kidlisp.mjs 284 + \item Programs stored in MongoDB 285 + \item Shareable by 3-char code 286 + \end{itemize} \\ 287 + \hline 288 + \end{tabularx} 289 + } 290 + 291 + \vspace{0.4em} 292 + 293 + % Source box 294 + \noindent\fbox{\parbox{\dimexpr\textwidth-2\fboxsep-2\fboxrule}{% 295 + \small 296 + \textbf{Source:} github.com/whistlegraph/aesthetic-computer $\cdot$ boot.mjs $\rightarrow$ bios.mjs $\rightarrow$ disk.mjs (\textasciitilde572KB API) $\rightarrow$ disks/*.mjs\\ 297 + \textbf{Languages:} JavaScript (ES Modules), TypeScript (workers), KidLisp, HTML/CSS\\ 298 + \textbf{Dev:} Docker devcontainer across Windows / macOS / Fedora $\cdot$ Emacs (Evil mode) + VS Code + Claude Code $\cdot$ Fish shell $\cdot$ esbuild, Jasmine, Vitest, Wrangler, pm2\\ 299 + \textbf{22 domains:} notepat.com, kidlisp.com, sotce.net, botce.ac, wipppps.world + subdomains (feed, grab, help, oven, etc.) 300 + }} 301 + 302 + \vspace{0.5em} 303 + 304 + % ============ PIECE CATALOG ============ 305 + 306 + \noindent\textbf{\textsc{362 Pieces}} --- type a name at the prompt to play 307 + 308 + \vspace{0.3em} 309 + 310 + \begin{multicols}{3} 311 + \scriptsize 312 + 313 + \peh{Drawing \& Painting} 314 + \pe{paint}{AI-powered auto-painting from text}\\ 315 + \pe{nopaint}{paint or reject, then publish}\\ 316 + \pe{line}{simple line brush}\\ 317 + \pe{pline}{perfect 1px line algorithm}\\ 318 + \pe{shape}{filled freehand shapes}\\ 319 + \pe{oval}{draw ovals and circles}\\ 320 + \pe{box}{rectangles with modes + thickness}\\ 321 + \pe{fill}{flood fill with a color}\\ 322 + \pe{spray}{stylus-based spray painting}\\ 323 + \pe{smear}{smear brush (co-designed by Rapter)}\\ 324 + \pe{marker}{brush interpolation tool}\\ 325 + \pe{crayon}{draw with a crayon}\\ 326 + \pe{sparkle-brush}{sparkle emitter}\\ 327 + \pe{bits}{confetti/speckle brush}\\ 328 + \pe{multipen}{multi-touch tracked cursors}\\ 329 + \pe{doodle}{build up and replay points}\\ 330 + \pe{wand}{generative art viewer}\\ 331 + \pe{blur}{blur pixels with a radius}\\ 332 + \pe{crop}{crop or extend painting}\\ 333 + \pe{stamp}{import painting as stamp}\\ 334 + \pe{pull}{copy + move pixels}\\ 335 + \pe{snap}{camera still to painting}\\ 336 + \pe{camera}{paste stills to painting}\\ 337 + \pe{paste}{load external image}\\ 338 + \pe{handprint}{stamp your hand}\\ 339 + \pe{selfie}{decorated photo (w/ Molly Soda)}\\ 340 + \pe{painting}{view any painting by number}\\ 341 + \pe{paintings}{user portfolio page}\\ 342 + \pe{colors}{scrollable CSS color list}\\ 343 + \pe{nail}{multiplayer thumbnailing}\\ 344 + \pe{wipe}{clear painting with a color}\\ 345 + \pe{icon}{add vector glyphs (Molly Soda)}\\ 346 + \pe{colplay}{painting as tonal keyboard}\\ 347 + \pe{make}{KidLisp from text prompts}\\ 348 + \pe{vary}{AI-vary an existing image} 349 + 350 + \peh{Music \& Audio} 351 + \pe{notepat}{tap pads to play notes}\\ 352 + \pe{beat}{rhythmic percussion}\\ 353 + \pe{tone}{single frequency + wave type}\\ 354 + \pe{chord}{play a musical chord}\\ 355 + \pe{melody}{plays back a tracker score}\\ 356 + \pe{song}{melody + lyrics sing-along}\\ 357 + \pe{sing}{character responds with notes}\\ 358 + \pe{bleep}{colored box tone maker}\\ 359 + \pe{say}{text-to-speech}\\ 360 + \pe{whistle}{mic input $\rightarrow$ sine wave melody}\\ 361 + \pe{metronome}{visual metronome}\\ 362 + \pe{microphone}{audio + video monitor}\\ 363 + \pe{uke}{live ukulele pitch detector}\\ 364 + \pe{pedal}{audio effect pedal for Ableton}\\ 365 + \pe{amp}{microphone amplifier}\\ 366 + \pe{tracker}{12-tone composer}\\ 367 + \pe{3x3}{ortholinear pad instrument}\\ 368 + \pe{rattle}{accelerometer shaker}\\ 369 + \pe{squaresong}{a song as a program}\\ 370 + \pe{dync}{percussive pad instrument}\\ 371 + \pe{slip}{single voice instrument}\\ 372 + \pe{clock}{clock with melody + live keyboard}\\ 373 + \pe{clocks}{browse saved clock melodies}\\ 374 + \pe{stick}{render clock melody to WAV}\\ 375 + \pe{amby}{tonal radial music generator}\\ 376 + \pe{autopat}{notepat autoplay jukebox}\\ 377 + \pe{stample}{spread a sample across pats}\\ 378 + \pe{sfx}{sound effects player}\\ 379 + \pe{bgm}{background music + visualizer}\\ 380 + \pe{r8dio}{Danish talk radio stream}\\ 381 + \pe{kpbj}{KPBJ.FM community radio}\\ 382 + \pe{audio}{longform player + subtitles}\\ 383 + \pe{butterflies}{multi-touch bitmap instrument}\\ 384 + \pe{seashells}{bytebeat algorithmic synthesis}\\ 385 + \pe{shh}{noise drones}\\ 386 + \pe{notepat-tv}{remote notepat pictures} 387 + 388 + \peh{Games \& Interactive} 389 + \pe{1v1}{multiplayer Quake-like 3D shooter}\\ 390 + \pe{brick-breaker}{brick breakout game}\\ 391 + \pe{scawy-snake}{snake game with color growth}\\ 392 + \pe{run\&gun}{2D side-scrolling shooter}\\ 393 + \pe{hop}{first-person shooter}\\ 394 + \pe{sno}{snowball game (ida, mxsage, jeffrey)}\\ 395 + \pe{words}{Word Munchers-style game}\\ 396 + \pe{gostop}{body movement regulation game}\\ 397 + \pe{staka}{stack colors with your hand}\\ 398 + \pe{flap}{animated flapping sequence}\\ 399 + \pe{fly}{bounce around in 3D}\\ 400 + \pe{field}{open 3D walking space}\\ 401 + \pe{pond}{chat in ripples}\\ 402 + \pe{bubble}{floating bubbles (mxsage + jeffrey)}\\ 403 + \pe{balls}{balls bouncing on lines}\\ 404 + \pe{rain}{rain falling (drawn by Aspen)}\\ 405 + \pe{toss}{two oscillators at once}\\ 406 + \pe{starfield}{classic starfield effect}\\ 407 + \pe{metaballs}{blob rendering}\\ 408 + \pe{ant}{colony simulation + pheromones}\\ 409 + \pe{fps}{basic first-person environment}\\ 410 + \pe{game}{basic game template}\\ 411 + \pe{horizon}{side-scrolling world}\\ 412 + \pe{i}{walk as the letter ``i''}\\ 413 + \pe{paintball}{paint on a 3D ball}\\ 414 + \pe{cards}{playing card (tap to flip)}\\ 415 + \pe{tremory}{temporal memory trainer} 416 + 417 + \peh{Social \& Community} 418 + \pe{mood}{choose a mood + build image}\\ 419 + \pe{moods}{live feed of all moods}\\ 420 + \pe{chat}{multiplayer messaging}\\ 421 + \pe{share}{QR code link sharing}\\ 422 + \pe{sign}{IRL message, upside down}\\ 423 + \pe{signature}{timestamped painting stamp}\\ 424 + \pe{mail}{email preferences + blast history}\\ 425 + \pe{list}{comprehensive piece directory}\\ 426 + \pe{handle}{customize @handle colors}\\ 427 + \pe{handles}{directory of all handles}\\ 428 + \pe{get-handle}{claim your @handle}\\ 429 + \pe{profile}{public user scorecard}\\ 430 + \pe{ptt}{push-to-talk voice chat}\\ 431 + \pe{handtime}{hand-based messaging}\\ 432 + \pe{insta}{browse Instagram profiles}\\ 433 + \pe{play}{dramaturgical messaging game} 434 + 435 + \peh{Characters} 436 + \pe{mom}{doting mother}\\ 437 + \pe{dad}{handyman disguised as father}\\ 438 + \pe{brother}{younger brother}\\ 439 + \pe{sister}{know-it-all sister}\\ 440 + \pe{husband}{forgetful husband}\\ 441 + \pe{wife}{nagging wife}\\ 442 + \pe{boyfriend}{avoidant boyfriend}\\ 443 + \pe{girlfriend}{GF with savior complex}\\ 444 + \pe{kid}{software kid}\\ 445 + \pe{angel}{guardian angel (Judeo-Christian)}\\ 446 + \pe{liar}{compulsive liar}\\ 447 + \pe{sage}{walker demo (mxsage + jeffrey)}\\ 448 + \pe{tobby}{type characters in time}\\ 449 + \pe{valbear}{valentine bear card maker}\\ 450 + \pe{gargoyle}{character (@georgica)}\\ 451 + \pe{dolls}{2D cartoon videos with mic}\\ 452 + \pe{robo}{robot drawing automation}\\ 453 + \pe{botce}{paywalled AI chatbot} 454 + 455 + \peh{KidLisp \& Programming} 456 + \pe{kidlisp}{default KidLisp piece}\\ 457 + \pe{keep}{preserve KidLisp as Tezos KEEP}\\ 458 + \pe{kept}{view KEEP mint result}\\ 459 + \pe{prompt}{LLM-backed console}\\ 460 + \pe{learn}{chatbot tutorial}\\ 461 + \pe{lang}{interface language chooser}\\ 462 + \pe{decode}{tokens $\rightarrow$ poems}\\ 463 + \pe{encode}{poems $\rightarrow$ tokens}\\ 464 + \pe{docgen}{generate piece API docs}\\ 465 + \pe{\$}{live KidLisp code preview feed}\\ 466 + \pe{pack}{offline HTML for KidLisp piece}\\ 467 + \pe{code}{graphical KidLisp editor (.lisp)}\\ 468 + \pe{chart}{make a piece from a diagram} 469 + 470 + \peh{Sequencing \& Routing} 471 + \pe{merry}{URL-able piece sequencer with timing}\\ 472 + \pe{merryo}{looping merry (plays forever)}\\ 473 + \pe{mo}{quick looping merry shorthand}\\ 474 + \pe{merry-fade}{crossfade between KidLisp \$codes}\\ 475 + \pe{pip}{piece-in-piece, run multiple at once}\\ 476 + \pe{split}{two AC instances side by side}\\ 477 + \pe{m4d}{generate Max for Live device} 478 + 479 + \peh{Whistlegraph \& Media} 480 + \pe{whistlegraph}{2D recording tool}\\ 481 + \pe{wg}{Feral File card player}\\ 482 + \pe{wgr}{whistlegraph recorder}\\ 483 + \pe{wipppps}{audio-reactive fractals}\\ 484 + \pe{neo-wipppps}{wipppps music visualizations}\\ 485 + \pe{m2w2}{Music 2 Whistlegraph 2}\\ 486 + \pe{stage}{performance tool}\\ 487 + \pe{tv}{vertical tape feed (``For You'')}\\ 488 + \pe{tapes}{browse recent tapes}\\ 489 + \pe{replay}{view any tape recording}\\ 490 + \pe{video}{playback + export video}\\ 491 + \pe{cap}{camera video recorder}\\ 492 + \pe{screen}{mirror system display}\\ 493 + \pe{desk}{webcam/Elmo selector}\\ 494 + \pe{screenshots}{browse dev screenshots} 495 + 496 + \peh{Visualization \& Art} 497 + \pe{halley}{Halley's method fractal}\\ 498 + \pe{morpho}{pixel sorting morphogenesis lab}\\ 499 + \pe{noise}{noise on every pixel}\\ 500 + \pe{rainbow-x}{centered rainbow X}\\ 501 + \pe{neural-garden}{GPT learns drawing gestures}\\ 502 + \pe{a-star}{A* pathfinding demo}\\ 503 + \pe{zzzwap}{dynamic pathfinding for wipppps}\\ 504 + \pe{spline}{interactive line with curves}\\ 505 + \pe{digitpain0--3}{animated DIGITPAIN series}\\ 506 + \pe{hell\_-world}{random hell\_ painting viewer}\\ 507 + \pe{freaky-flowers}{random Freaky Flower token}\\ 508 + \pe{commits}{live GitHub commit visualization}\\ 509 + \pe{visualizer}{color history decay effect}\\ 510 + \pe{lmn-flower}{pull a petal}\\ 511 + \pe{lmn-petal}{touch an interactive petal}\\ 512 + \pe{opinion}{essays on computing \& creativity}\\ 513 + \pe{weather}{Weather Channel + smooth jazz} 514 + 515 + \peh{System \& Utility} 516 + \pe{about}{AC Q\&A chatbot}\\ 517 + \pe{demo}{what is aesthetic.computer?}\\ 518 + \pe{deck}{slide deck explainer}\\ 519 + \pe{description}{read about any command}\\ 520 + \pe{desktop}{download Electron desktop app}\\ 521 + \pe{mobile}{download iOS/Android app}\\ 522 + \pe{os}{bootable FedAC OS image}\\ 523 + \pe{theme}{prompt theme chooser}\\ 524 + \pe{token}{display auth token (3 taps)}\\ 525 + \pe{wallet}{animated Tezos wallet display}\\ 526 + \pe{connect-wallet}{wallet connection page}\\ 527 + \pe{download}{screenshottable download screen}\\ 528 + \pe{ads}{advertise on AC}\\ 529 + \pe{mug}{ceramic mug with your painting}\\ 530 + \pe{mugs}{browse recent mugs}\\ 531 + \pe{boots}{boot telemetry viewer}\\ 532 + \pe{booted-by}{who booted AC}\\ 533 + \pe{404}{error page}\\ 534 + \pe{delete-erase-and-forget-me}{delete account} 535 + 536 + \peh{Translation} 537 + \pe{english}{/ \texttt{\color{acpurple}en} translate to English}\\ 538 + \pe{danish}{/ \texttt{\color{acpurple}da} translate to Danish}\\ 539 + \pe{spanish}{/ \texttt{\color{acpurple}es} translate to Spanish} 540 + 541 + \peh{External \& Hardware} 542 + \pe{ableton}{Max for Live device browser}\\ 543 + \pe{aframe}{A-Frame VR drawing (WebXR)}\\ 544 + \pe{gameboy}{GameBoy emulator}\\ 545 + \pe{gamepad}{gamepad connectivity test}\\ 546 + \pe{ff1}{send art to FF1 Art Computer}\\ 547 + \pe{ordfish}{virtual fish viewer}\\ 548 + \pe{ordsy}{B\&W ordsy picture palette}\\ 549 + \pe{snappidaggs}{Goodiepal archive browser}\\ 550 + \pe{prutti}{Lessons NOT Learnt (Goodiepal)}\\ 551 + \pe{triquilt}{half-square triangle quilt tool}\\ 552 + \pe{hueber}{psychedelic Uber} 553 + 554 + \peh{Education \& Workshop} 555 + \pe{ucla-1}{-- \texttt{\color{acpurple}ucla-7} UCLA workshop lessons}\\ 556 + + \texttt{\color{acpurple}-keyboard} \texttt{\color{acpurple}-box} \texttt{\color{acpurple}-turtle} \texttt{\color{acpurple}-balls} \texttt{\color{acpurple}-dial} \texttt{\color{acpurple}-jump} variants\\ 557 + \pe{baktok}{learn to talk backwards}\\ 558 + \pe{laer-klokken}{learn the clock}\\ 559 + \pe{alphapoet}{alphabetical nonsense poet} 560 + 561 + \peh{ABC123 Series (36)} 562 + \pe{a}{\texttt{\color{acpurple}--z} interactive letters with musical notes}\\ 563 + \pe{0}{\texttt{\color{acpurple}--9} interactive numbers with sounds} 564 + 565 + \peh{Dynamic Patterns} 566 + \pe{/@handle}{$\rightarrow$ user profile}\\ 567 + \pe{/@handle/piece}{$\rightarrow$ user-published piece}\\ 568 + \pe{/preview/*}{$\rightarrow$ OG images}\\ 569 + \pe{/session/*}{$\rightarrow$ multiplayer rooms} 570 + 571 + \end{multicols} 572 + 573 + \end{document}
+114
utilities/pre-commit-pieces.sh
··· 1 + #!/bin/bash 2 + # Pre-commit hook: auto-update .piece-commits.json and docs.js stubs 3 + # for any new or modified pieces in disks/. 4 + # 5 + # Install: cp utilities/pre-commit-pieces.sh .git/hooks/pre-commit && chmod +x .git/hooks/pre-commit 6 + 7 + REPO_ROOT="$(git rev-parse --show-toplevel)" 8 + DISKS_DIR="$REPO_ROOT/system/public/aesthetic.computer/disks" 9 + COMMITS_FILE="$REPO_ROOT/system/public/.piece-commits.json" 10 + DOCS_FILE="$REPO_ROOT/system/netlify/functions/docs.js" 11 + 12 + # --- 1. Regenerate .piece-commits.json --- 13 + 14 + # Check if any piece files are being committed 15 + PIECE_CHANGES=$(git diff --cached --name-only -- "system/public/aesthetic.computer/disks/*.mjs" 2>/dev/null) 16 + 17 + if [ -n "$PIECE_CHANGES" ] || [ ! -f "$COMMITS_FILE" ]; then 18 + echo "🔄 Regenerating .piece-commits.json..." 19 + 20 + echo "{" > "$COMMITS_FILE" 21 + echo ' "commits": {' >> "$COMMITS_FILE" 22 + 23 + first=true 24 + 25 + for file in "$DISKS_DIR"/*.mjs; do 26 + [ -f "$file" ] || continue 27 + piece=$(basename "$file" .mjs) 28 + 29 + # For staged new files that have no git history yet 30 + if git diff --cached --name-only --diff-filter=A 2>/dev/null | grep -q "disks/$piece.mjs"; then 31 + hash="0000000" 32 + date="$(date -u +"%Y-%m-%d %H:%M:%S +0000")" 33 + author="$(git config user.name)" 34 + message="(new piece)" 35 + else 36 + commit_info=$(git log -1 --format="%H|%ai|%an|%s" -- "$file" 2>/dev/null) 37 + if [ -z "$commit_info" ]; then 38 + continue 39 + fi 40 + IFS='|' read -r hash date author message <<< "$commit_info" 41 + hash="${hash:0:7}" 42 + message=$(echo "$message" | sed 's/"/\\"/g' | head -c 100) 43 + fi 44 + 45 + if [ "$first" = false ]; then 46 + echo "," >> "$COMMITS_FILE" 47 + fi 48 + first=false 49 + 50 + echo -n " \"$piece\": {" >> "$COMMITS_FILE" 51 + echo -n "\"hash\":\"$hash\"," >> "$COMMITS_FILE" 52 + echo -n "\"date\":\"$date\"," >> "$COMMITS_FILE" 53 + echo -n "\"author\":\"$author\"," >> "$COMMITS_FILE" 54 + echo -n "\"message\":\"$message\"" >> "$COMMITS_FILE" 55 + echo -n "}" >> "$COMMITS_FILE" 56 + done 57 + 58 + echo "" >> "$COMMITS_FILE" 59 + echo ' },' >> "$COMMITS_FILE" 60 + echo " \"generated\": \"$(date -u +"%Y-%m-%dT%H:%M:%SZ")\"" >> "$COMMITS_FILE" 61 + echo "}" >> "$COMMITS_FILE" 62 + 63 + git add "$COMMITS_FILE" 64 + echo " ✅ Updated .piece-commits.json" 65 + fi 66 + 67 + # --- 2. Auto-add new pieces to docs.js --- 68 + 69 + NEW_PIECES=$(git diff --cached --name-only --diff-filter=A -- "system/public/aesthetic.computer/disks/*.mjs" 2>/dev/null) 70 + 71 + if [ -n "$NEW_PIECES" ]; then 72 + DOCS_CHANGED=false 73 + 74 + for file in $NEW_PIECES; do 75 + piece=$(basename "$file" .mjs) 76 + 77 + # Skip if already in docs.js 78 + if grep -q "\"$piece\":\|[[:space:]]$piece:" "$DOCS_FILE" 2>/dev/null; then 79 + continue 80 + fi 81 + 82 + # Extract description from line 2 comment (// Description text) 83 + desc="" 84 + if [ -f "$REPO_ROOT/$file" ]; then 85 + desc=$(sed -n '2s|^// *||p' "$REPO_ROOT/$file" | sed 's/"/\\"/g' | head -c 120) 86 + fi 87 + 88 + # Find the closing }, of the pieces section (last one before the `};` that closes the docs object) 89 + # The pieces section ends at the last ` },` line in docs.js 90 + CLOSE_LINE=$(grep -n "^ }," "$DOCS_FILE" | tail -1 | cut -d: -f1) 91 + 92 + if [ -n "$CLOSE_LINE" ]; then 93 + # Insert stub before the closing brace using a temp file (portable) 94 + head -n $((CLOSE_LINE - 1)) "$DOCS_FILE" > "$DOCS_FILE.tmp" 95 + cat >> "$DOCS_FILE.tmp" << STUB 96 + "$piece": { 97 + sig: "$piece", 98 + desc: "$desc", 99 + done: false, 100 + }, 101 + STUB 102 + tail -n +"$CLOSE_LINE" "$DOCS_FILE" >> "$DOCS_FILE.tmp" 103 + mv "$DOCS_FILE.tmp" "$DOCS_FILE" 104 + DOCS_CHANGED=true 105 + echo " ✅ Added '$piece' stub to docs.js" 106 + fi 107 + done 108 + 109 + if [ "$DOCS_CHANGED" = true ]; then 110 + git add "$DOCS_FILE" 111 + fi 112 + fi 113 + 114 + exit 0