Monorepo for Aesthetic.Computer aesthetic.computer
4
fork

Configure Feed

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

at main 416 lines 17 kB view raw
1% !TEX program = xelatex 2\documentclass[10pt,letterpaper,twocolumn]{article} 3 4\usepackage[top=0.75in, bottom=0.75in, left=0.75in, right=0.75in]{geometry} 5\usepackage{fontspec}\usepackage{unicode-math} 6\setmainfont{Latin Modern Roman}\setsansfont{Latin Modern Sans} 7\newfontfamily\acbold{ywft-processing-bold}[Path=../../system/public/type/webfonts/,Extension=.ttf] 8\newfontfamily\aclight{ywft-processing-light}[Path=../../system/public/type/webfonts/,Extension=.ttf] 9\newfontfamily\kidlispfont{ComicRelief-Regular}[Path=../arxiv-kidlisp/fonts/,Extension=.ttf] 10\newfontfamily\kidlispbold{ComicRelief-Bold}[Path=../arxiv-kidlisp/fonts/,Extension=.ttf] 11\setmonofont{Latin Modern Mono}[Scale=0.85] 12 13\usepackage{xcolor}\usepackage{titlesec}\usepackage{enumitem}\usepackage{booktabs}\usepackage{tabularx}\usepackage{multicol}\usepackage{fancyhdr}\usepackage{hyperref}\usepackage{graphicx} 14\graphicspath{{figures/}{../../papers/arxiv-ac/figures/}} 15\usepackage{ragged2e}\usepackage{microtype}\usepackage{listings}\usepackage{natbib}\usepackage[colorspec=0.92]{draftwatermark} 16 17\definecolor{acpink}{RGB}{180,72,135}\definecolor{acpurple}{RGB}{120,80,180}\definecolor{acdark}{RGB}{64,56,74}\definecolor{acgray}{RGB}{119,119,119} 18\definecolor{klbrand}{RGB}{205,92,155}\definecolor{klcyan}{RGB}{112,214,255}\definecolor{kldark}{RGB}{48,43,58}\definecolor{draftcolor}{RGB}{205,92,155} 19 20\definecolor{klparen}{RGB}{140,140,160}\definecolor{klkw}{RGB}{119,51,170}\definecolor{klfn}{RGB}{0,136,170}\definecolor{klcolor}{RGB}{204,80,0}\definecolor{klnum}{RGB}{204,0,102}\definecolor{klstr}{RGB}{44,145,44}\definecolor{klcmt}{RGB}{140,140,140}\definecolor{klvar}{RGB}{50,50,50}\definecolor{klspecial}{RGB}{180,72,135}\definecolor{klbg}{RGB}{250,248,252} 21 22\DraftwatermarkOptions{text=WORKING DRAFT,fontsize=3cm,color=draftcolor!18,angle=45} 23 24\hypersetup{colorlinks=true,linkcolor=acpurple,urlcolor=acpurple,citecolor=acpurple,pdftitle={KidLisp sprogreference: 118 indbyggede funktioner i 12 kategorier}} 25 26\titleformat{\section}{\normalfont\bfseries\normalsize\uppercase}{\thesection.}{0.5em}{} 27\titlespacing{\section}{0pt}{1.2em}{0.3em} 28\titleformat{\subsection}{\normalfont\bfseries\small}{\thesubsection}{0.5em}{} 29\titlespacing{\subsection}{0pt}{0.8em}{0.2em} 30 31\pagestyle{fancy}\fancyhf{}\renewcommand{\headrulewidth}{0pt} 32\fancyhead[C]{\footnotesize\color{acpink}\textit{Arbejdsudkast --- ikke til citation}} 33\fancyfoot[C]{\footnotesize\thepage} 34 35\newcommand{\ac}{\textsc{Aesthetic.Computer}} 36\newcommand{\kl}{\textsc{KidLisp}} 37 38\lstdefinelanguage{kidlisp}{ 39 morekeywords=[1]{def,if,repeat,once,later,die,let,do,fn}, 40 morekeywords=[2]{wipe,ink,line,box,circle,tri,plot,flood,shape,write,type,paste,print}, 41 morekeywords=[3]{scroll,zoom,spin,blur,contrast,suck,pan,sort,resetSpin,smoothspin,unpan,fill,outline,stroke,nofill,nostroke}, 42 morekeywords=[4]{random,wiggle,sin,cos,tan,floor,ceil,round,abs,sqrt,min,max,mod}, 43 morekeywords=[5]{width,height,frame,time,resolution,fps,screen,pen,hand,gamepad,mic,amplitude}, 44 morekeywords=[6]{cube,form,trans,move,scale,hop,delay,jump,melody,overtone,speaker,sound}, 45 morekeywords=[7]{embed,layer,fade,bake,list,get,set,tap}, 46 sensitive=true,morecomment=[l]{;},morestring=[b]", 47 literate={(}{{{\color{klparen}(}}}1 {)}{{{\color{klparen})}}}1 {\$}{{{\color{klspecial}\$}}}1, 48} 49 50\lstdefinestyle{kidlispstyle}{ 51 language=kidlisp,basicstyle=\ttfamily\small, 52 keywordstyle=[1]\color{klkw}\bfseries,keywordstyle=[2]\color{klfn}\bfseries, 53 keywordstyle=[3]\color{acpurple},keywordstyle=[4]\color{klnum}, 54 keywordstyle=[5]\color{klspecial},keywordstyle=[6]\color{klfn},keywordstyle=[7]\color{acpink}, 55 commentstyle=\color{klcmt}\itshape,stringstyle=\color{klstr},numberstyle=\tiny\color{klcmt}, 56 breaklines=true,frame=single,rulecolor=\color{acgray!30},backgroundcolor=\color{klbg}, 57 xleftmargin=0.5em,xrightmargin=0.5em,aboveskip=0.5em,belowskip=0.5em,showstringspaces=false, 58} 59 60\lstset{style=kidlispstyle} 61 62\setlist[itemize]{nosep, leftmargin=1.2em, itemsep=0.1em} 63\setlength{\columnsep}{1.8em}\setlength{\parindent}{1em}\setlength{\parskip}{0.3em} 64 65% Hyphenation for narrow two-column layout 66\tolerance=800 67\emergencystretch=1em 68\hyphenpenalty=50 69 70\begin{document} 71 72\twocolumn[{% 73\begin{center} 74\includegraphics[height=4em]{pals}\par\vspace{0.5em} 75{\kidlispbold\fontsize{26pt}{30pt}\selectfont\color{kldark} Kid{\color{klbrand}Lisp} sprogreference}\par 76\vspace{0.2em} 77{\kidlispfont\fontsize{11pt}{13pt}\selectfont\color{klbrand} 118 indbyggede funktioner i 12 kategorier til generativ kunst}\par 78\vspace{0.3em} 79{\kidlispfont\fontsize{9pt}{11pt}\selectfont\color{acgray} Syntaks, semantik, timing, farve og \texttt{\$}-kode kompositionssystemet}\par 80\vspace{0.6em} 81{\normalsize\href{https://prompt.ac/@jeffrey}{@jeffrey}}\par 82{\small\color{acgray} Aesthetic.Computer}\par 83{\small\color{acgray} ORCID: \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}}\par 84\vspace{0.3em} 85{\small\color{acpurple} \url{https://aesthetic.computer}}\par 86\vspace{0.6em} 87\rule{\textwidth}{1.5pt} 88\vspace{0.5em} 89\end{center} 90 91\begin{center} 92{\small\color{acpink}\textbf{[ arbejdsudkast --- ikke til citation ]}} 93\end{center} 94\vspace{0.3em} 95 96\begin{quote} 97\small\noindent\textbf{Abstrakt.} 98\kl{} er en minimal Lisp-dialekt til generativ kunst med 118 indbyggede funktioner fordelt på 12 kategorier, ingen brugerdefinerede funktioner, ingen rekursion, ingen fil-I/O og intet netværk. Det er sikkert ved konstruktion: et \kl{}-program kan ikke bryde ud af sin sandbox, crashe sin vært eller tilgå ressourcer ud over sit lærred. Denne artikel fungerer som en komplet sprogreference, der dokumenterer enhver indbygget funktion med syntaksfremhævede eksempler, timingsystemet (frame-baseret og sekundbaseret planlægning uden callbacks), farvemodellen (navngivne farver, RGB, gradienter, mønstre), \texttt{\$}-kode kompositionssystemet (indlejring af programmer ved reference som den primære abstraktionsmekanisme) og evalueringsmodellen (fuld AST-reevaluering hvert frame med deterministisk PRNG). Vi præsenterer \kl{} som et sprog designet omkring \emph{udeladelse}: hvad det ikke kan, er lige så bevidst som hvad det kan, og begrænsningerne producerer et kreativt rum, som 59 forfattere har brugt til at skrive 16.634 programmer. 99\end{quote} 100\vspace{0.5em} 101}] 102 103\section{Syntaks} 104 105\kl{} bruger S-udtrykssyntaks~\citep{mccarthy1960recursive}. Ethvert udtryk er enten et atom (tal, streng, symbol) eller en liste omsluttet af parenteser: 106 107\begin{lstlisting} 108; Atomer 10942 ; tal 110"hello" ; streng 111red ; symbol (farvenavn) 112 113; Lister (funktionsapplikation) 114(wipe "navy") ; ryd skærm marineblå 115(ink "red") ; sæt tegnefarve 116(box 10 10 50 50) ; tegn rektangel 117(circle 64 64 30) ; tegn cirkel 118\end{lstlisting} 119 120Der er ingen operatorer, ingen infiks-notation, ingen speciel syntaks ud over parenteser, strenge, tal og symboler. Aritmetik bruger præfiks-notation: 121 122\begin{lstlisting} 123(+ 1 2) ; => 3 124(* 3 (+ 1 2)) ; => 9 125(- 10 3) ; => 7 126(/ 100 4) ; => 25 127(% 17 5) ; => 2 (modulo) 128\end{lstlisting} 129 130\section{De 12 kategorier} 131 132\subsection{Grafik (9 funktioner)} 133 134Tegneprimitiver opererer i immediate-mode---hvert kald renderer direkte til framebufferen. 135 136\begin{lstlisting} 137(wipe "black") ; ryd lærred 138(ink "cyan") ; sæt farve 139(line 0 0 128 128) ; diagonal linje 140(box 10 10 40 40) ; rektangel 141(circle 64 64 20) ; cirkel i centrum 142(tri 32 10 10 54 54 54) ; trekant 143(plot 64 64) ; enkelt pixel 144(flood 64 64) ; oversvømmelsesfyld 145(shape 10 10 50 10 30 50) ; polygon 146\end{lstlisting} 147 148\texttt{fill} og \texttt{outline} kontrollerer, om former er udfyldte eller stregede: 149 150\begin{lstlisting} 151(fill) ; udfyldte former 152(ink "red") 153(circle 64 64 30) ; massiv rød cirkel 154 155(outline) ; stregede former 156(ink "white") 157(circle 64 64 30) ; hvid ring 158\end{lstlisting} 159 160\subsection{Transformationer (11 funktioner)} 161 162Pixelniveau-transformationer opererer på framebufferen efter tegning: 163 164\begin{lstlisting} 165(scroll 1 0) ; flyt pixels til højre 166(zoom 1.01) ; langsom zoom ind 167(spin 1) ; rotér 1 grad 168(blur 2) ; gaussisk sløring 169(contrast 1.2) ; øg kontrast 170(suck 0.5) ; radial forskydning 171(sort) ; sortér pixels efter lysstyrke 172\end{lstlisting} 173 174Transformationer \emph{akkumulerer} på tværs af frames, hvilket producerer animation uden eksplicit tilstandsstyring. 175 176\subsection{Matematik (14 funktioner)} 177 178\begin{lstlisting} 179(sin (* frame 0.05)) ; sinusbølge 180(cos (* frame 0.03)) ; cosinusbølge 181(random) ; 0-255 182(random 10) ; 0-9 183(random 5 15) ; 5-14 184(wiggle 10) ; tilfældig +/-5 185(floor 3.7) ; => 3 186(abs -5) ; => 5 187(sqrt 16) ; => 4 188(min 3 7 1) ; => 1 189(max 3 7 1) ; => 7 190\end{lstlisting} 191 192\texttt{random} bruger en seedet PRNG initialiseret fra programmets korte kode, hvilket gør alt generativt output \textbf{deterministisk}: det samme program producerer altid det samme visuelle. 193 194\subsection{Farve (19+ navngivne farver)} 195 196\begin{lstlisting} 197(ink "red") ; navngivet farve 198(ink 255 0 0) ; RGB 199(ink 255 0 0 128) ; RGBA (semi-transparent) 200(ink "fade:red-blue") ; horisontal gradient 201(ink (fade "cyan" "magenta" "vertical")) 202(ink "rainbow") ; gentagende regnbue 203(ink "zebra") ; stribet mønster 204\end{lstlisting} 205 206\subsection{System og display (9 funktioner)} 207 208\begin{lstlisting} 209(def w width) ; skærmbredde 210(def h height) ; skærmhøjde 211frame ; nuværende framenummer 212time ; sekunder forløbet 213 214(resolution "half") ; halv opløsning 215(resolution 64 64) ; eksplicit 64x64 216(fps 30) ; sæt framerate 217\end{lstlisting} 218 219\subsection{Kontrolflow (7 funktioner)} 220 221\begin{lstlisting} 222; Variabeldefinition 223(def x 50) 224(def y (+ 10 (* frame 0.5))) 225 226; Betinget 227(if (> frame 60) 228 (ink "red") 229 (ink "blue")) 230 231; Løkke 232(repeat 10 i 233 (circle (* i 12) 64 5)) 234 235; Eksekvér én gang (ikke hvert frame) 236(once (wipe "black")) 237 238; Lokal binding 239(let ((cx 64) (cy 64)) 240 (circle cx cy 30)) 241\end{lstlisting} 242 243\subsection{Timing} 244 245\kl{}'s timingsystem bruger \emph{inline-planlægning} snarere end callbacks: 246 247\begin{lstlisting} 248; Frame-baseret timing 249(0 (wipe "black")) ; hvert frame 250(1 (spin 5)) ; hvert 2. frame 251(30f (ink "red")) ; efter 30 frames 252 253; Sekundbaseret timing 254(1s (wipe "red")) ; efter 1 sekund 255(2.5s (ink "gold")) ; efter 2,5 sekunder 256(1s! (write "!" 10 10)) ; affyr én gang ved 1s 257 258; Gentagende intervaller 259(0.5s... (spin 45)) ; hvert 0,5 sekund 260(1s... (scroll 1 0)) ; hvert sekund 261\end{lstlisting} 262 263Dette eliminerer behovet for \texttt{setTimeout}, \texttt{setInterval} eller animationsframe-callbacks. Tid er en \emph{egenskab ved udtrykket}, ikke en funktion kaldt på det. 264 265\subsection{Tekst (4 funktioner)} 266 267\begin{lstlisting} 268(write "hello" 10 20) ; tekst ved position 269(write "centreret" ; centreret tekst 270 (/ width 2) (/ height 2)) 271(type "typed" 10 10) ; skrivemaskineeffekt 272\end{lstlisting} 273 274\subsection{Input (3 funktioner)} 275 276\begin{lstlisting} 277; Pen/museposition og -tilstand 278(if pen 279 (circle pen.x pen.y 5)) 280 281; Berøringsinput 282(if hand 283 (line hand.x hand.y 64 64)) 284\end{lstlisting} 285 286\subsection{Lyd (6 funktioner)} 287 288\begin{lstlisting} 289; Mikrofoninput 290(def vol (mic)) ; amplitude 0-255 291(circle 64 64 vol) ; lydreaktiv 292 293; Melodiafspilning 294(melody "C4 E4 G4 C5") 295 296; Overtonharmonikker 297(overtone 440 3) ; 3. harmonik af A4 298\end{lstlisting} 299 300\subsection{3D-grafik (8 funktioner)} 301 302\begin{lstlisting} 303(cube "mycube") ; opret 3D-kube 304(form "mycube" 305 (move 0 0 -5) ; position 306 (scale 2) ; størrelse 307 (spin (* frame 0.5) 1 1 0)) ; rotér 308\end{lstlisting} 309 310\subsection{Komposition via \texttt{\$}-koder} 311 312Den mest karakteristiske funktion i \kl{} er dens kompositionssystem. I stedet for brugerdefinerede funktioner refererer programmer til andre programmer via deres korte kode: 313 314\begin{lstlisting} 315; Indlejr et andet program som et lag 316($cow) ; eksekvér program "cow" 317($nece 10 20) ; send parametre 318 319; Flerlagskomposition 320(wipe "black") 321($cow) ; baggrundsslag 322($faim) ; forgrundslag 323\end{lstlisting} 324 325Programmer hentes fra MongoDB, caches i RAM og IndexedDB og indholdsadresseres via SHA-256. \texttt{\$}-kodesystemet erstatter brugerdefinerede funktioner, moduler og biblioteker med en enkelt social mekanisme: \emph{find et program nogen har lavet, referér det via kode, komponér med det}. 326 327\section{Evalueringsmodel} 328 329\kl{} reevaluerer sit \textbf{hele AST hvert frame}. Der er ingen bevaret tilstand ud over eksplicit definerede variabler. \texttt{frame}- og \texttt{time}-variablerne inkrementeres automatisk. Transformationer som \texttt{zoom}, \texttt{scroll} og \texttt{spin} akkumulerer i framebufferen. 330 331Denne model eliminerer \texttt{setup()}/\texttt{draw()}-opdelingen kendt fra Processing~\citep{reas2007processing}. Enhver linje i et \kl{}-program eksekverer hvert frame. 332 333\subsection{Deterministisk tilfældighed} 334 335\texttt{random} er seedet fra programmets korte kode. Det samme program producerer identisk output på enhver enhed, hver gang. Dette gør \kl{}-programmer til \emph{reproducerbar generativ kunst}. 336 337\subsection{Kaostilstand} 338 339Ugyldig input producerer ikke fejlmeddelelser. I stedet detekterer \kl{} lave genkendelsesforhold og renderer kunstnerisk visuelt output. Brugeren ser aldrig ``SyntaxError.'' De ser farver. 340 341\section{Design via udeladelse} 342 343\kl{} mangler bevidst: 344 345\begin{itemize} 346 \item \textbf{Brugerdefinerede funktioner}: erstattet af \texttt{\$}-kode komposition 347 \item \textbf{Rekursion}: forhindrer uendelige løkker og stakoverløb 348 \item \textbf{Fil-I/O}: lærredet er det eneste output 349 \item \textbf{Netværk}: programmer kan ikke hente eksterne data 350 \item \textbf{Strengmanipulation}: ingen \texttt{concat}, \texttt{split}, \texttt{replace} 351 \item \textbf{Fejlmeddelelser}: erstattet af kaostilstand 352 \item \textbf{Import/require}: erstattet af \texttt{\$}-koder 353 \item \textbf{Objekter/klasser}: data er tal, strenge og lister 354\end{itemize} 355 356Hver udeladelse er en designbeslutning. Fraværet af brugerdefinerede funktioner tvinger komposition gennem det sociale lag. Fraværet af fejlmeddelelser betyder, at begyndere aldrig møder en mur af rød tekst. Fraværet af netværk betyder, at ethvert program er selvstændigt og sikkert at køre. 357 358Dette følger princippet om, at et sprogs begrænsninger definerer dets kreative rum mere end dets funktioner~\citep{papert1980mindstorms, compton2015casual}. \kl{} er ikke et generelt sprog, der tilfældigvis laver kunst. Det er et kunstsprog, der \emph{ikke kan} gøre andet. 359 360\section{Komplet indbygget indeks} 361 362\begin{table}[h] 363\small\centering 364\begin{tabularx}{\columnwidth}{Xlr} 365\toprule 366\textbf{Kategori} & \textbf{Antal} & \textbf{Kernefunktioner} \\ 367\midrule 368Grafik & 9 & wipe, ink, line, box, circle \\ 369Transformationer & 11 & scroll, zoom, spin, blur, suck \\ 370Matematik & 14 & +, -, *, /, random, sin, cos \\ 371Farve & 19+ & red, blue, fade, rainbow, zebra \\ 372System/Display & 9 & width, height, frame, time \\ 373Kontrolflow & 7 & def, if, repeat, once, let \\ 374Tekst/Output & 4 & write, type, paste, print \\ 375Input & 3 & pen, hand, gamepad \\ 376Lyd & 6 & mic, melody, overtone, sound \\ 3773D-grafik & 8 & cube, form, trans, move, scale \\ 378Komposition & 4 & \$code, layer, bake, embed \\ 379Data & 4 & list, get, set, let \\ 380\midrule 381\textbf{Total} & \textbf{118} & \\ 382\bottomrule 383\end{tabularx} 384\caption{Alle 118 indbyggede funktioner efter kategori.} 385\label{tab:builtins} 386\end{table} 387 388\section{Eksempel: Komplet program} 389 390Et komplet \kl{}-program, der tegner et lydreaktivt partikelfelt med orbital bevægelse: 391 392\begin{lstlisting} 393"black" 394(def vol (+ 5 (* (mic) 0.2))) 395(repeat 50 i 396 (def angle (* i 0.1256)) 397 (def r (+ 20 (* vol (sin (+ (* frame 0.02) angle))))) 398 (def cx (+ 64 (* r (cos (+ angle (* frame 0.01)))))) 399 (def cy (+ 64 (* r (sin (+ angle (* frame 0.01)))))) 400 (ink (+ 100 (* i 3)) 50 (+ 150 (* i 2))) 401 (circle cx cy (+ 1 (random 3)))) 402(blur 1) 403(zoom 1.002) 404\end{lstlisting} 405 406Dette program: sætter en sort baggrund, læser mikrofonamplitude, tegner 50 partikler i orbitale baner moduleret af lyd, farver dem med en beregnet gradient, anvender en let sløring og zoomer langsomt ind. Det kører ved 60 FPS. Det er 12 linjer langt. Det kræver ingen imports, ingen setup-funktion, ingen animationsløkke og ingen hændelseslyttere. 407 408\vspace{0.5em} 409\noindent\textbf{ORCID:} \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913} 410 411\vspace{0.5em}\noindent\textit{Oversat fra engelsk. Originalversion tilgængelig på \url{https://papers.aesthetic.computer}} 412 413\bibliographystyle{plainnat} 414\bibliography{references} 415 416\end{document}