Monorepo for Aesthetic.Computer
aesthetic.computer
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\usepackage{xeCJK}
11\setCJKmainfont{Droid Sans Fallback}
12
13\setmainfont{Latin Modern Roman}
14\setsansfont{Latin Modern Sans}
15
16% Custom AC fonts
17\newfontfamily\acbold{ywft-processing-bold}[
18 Path=../../system/public/type/webfonts/,
19 Extension=.ttf
20]
21\newfontfamily\aclight{ywft-processing-light}[
22 Path=../../system/public/type/webfonts/,
23 Extension=.ttf
24]
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\graphicspath{{figures/}}
38\usepackage{ragged2e}
39\usepackage{listings}
40\usepackage{natbib}
41\usepackage[colorspec=0.92]{draftwatermark}
42
43% === COLORS (AC palette) ===
44\definecolor{acpink}{RGB}{180,72,135}
45\definecolor{acpurple}{RGB}{120,80,180}
46\definecolor{acdark}{RGB}{64,56,74}
47\definecolor{acgray}{RGB}{119,119,119}
48\definecolor{draftcolor}{RGB}{180,72,135}
49
50% === DRAFT WATERMARK ===
51\DraftwatermarkOptions{
52 text=WORKING DRAFT,
53 fontsize=3cm,
54 color=draftcolor!18,
55 angle=45,
56 pos={0.5\paperwidth, 0.5\paperheight}
57}
58
59% === KIDLISP SYNTAX COLORS ===
60\definecolor{klfn}{RGB}{0,136,170}
61\definecolor{klform}{RGB}{119,51,170}
62\definecolor{klrepeat}{RGB}{170,0,170}
63\definecolor{klnum}{RGB}{204,0,102}
64\definecolor{klstr}{RGB}{170,120,0}
65\definecolor{klcmt}{RGB}{102,102,102}
66\definecolor{klmath}{RGB}{0,136,0}
67\definecolor{klvar}{RGB}{204,102,0}
68\definecolor{klembed}{RGB}{0,136,0}
69
70% === JS SYNTAX COLORS ===
71\definecolor{jskw}{RGB}{119,51,170}
72\definecolor{jsfn}{RGB}{0,136,170}
73\definecolor{jsstr}{RGB}{170,120,0}
74\definecolor{jsnum}{RGB}{204,0,102}
75\definecolor{jscmt}{RGB}{102,102,102}
76
77% Inline color macros
78\newcommand{\kn}[1]{\textcolor{klnum}{#1}}
79\newcommand{\kt}[1]{\textcolor{klstr}{#1}}
80\newcommand{\kv}[1]{\textcolor{klvar}{#1}}
81\newcommand{\ke}[1]{\textcolor{klembed}{\textbf{#1}}}
82\newcommand{\km}[1]{\textcolor{klmath}{#1}}
83
84% === HYPERREF ===
85\hypersetup{
86 colorlinks=true,
87 linkcolor=acpurple,
88 urlcolor=acpurple,
89 citecolor=acpurple,
90 pdfauthor={@jeffrey},
91 pdftitle={Aesthetic Computer '26:面向创意计算的移动优先运行时},
92}
93
94% === SECTION FORMATTING ===
95\titleformat{\section}
96 {\normalfont\bfseries\normalsize\uppercase}
97 {\thesection.}
98 {0.5em}
99 {}
100\titlespacing{\section}{0pt}{1.2em}{0.3em}
101
102\titleformat{\subsection}
103 {\normalfont\bfseries\small}
104 {\thesubsection}
105 {0.5em}
106 {}
107\titlespacing{\subsection}{0pt}{0.8em}{0.2em}
108
109% === HEADER/FOOTER ===
110\pagestyle{fancy}
111\fancyhf{}
112\renewcommand{\headrulewidth}{0pt}
113\fancyhead[C]{\footnotesize\color{acpink}\textit{工作草稿 --- 请勿引用}}
114\fancyfoot[C]{\footnotesize\thepage}
115
116% === CUSTOM COMMANDS ===
117\newcommand{\acdot}{{\color{acpink}.}}
118\newcommand{\ac}{\textsc{Aesthetic.Computer}}
119
120% === LISTINGS ===
121\lstdefinelanguage{kidlisp}{
122 morekeywords=[1]{wipe,ink,line,box,circle,write,wiggle,shape,scroll,spin,zoom,blur,contrast,embed,layer,width,height,frame,time,form,trans,cube,move,scale,hop,overtone,melody,mic,resolution,sort,fade,stamp,paste,flood,poly,noise,flip},
123 morekeywords=[2]{def,let,if,cond,once,later,lambda,do},
124 morekeywords=[3]{repeat},
125 morekeywords=[4]{random,sin,cos,tan,floor,ceil,round,abs,sqrt,min,max},
126 sensitive=true,
127 morecomment=[l]{;},
128 morestring=[b]",
129 escapeinside={|}{|},
130}
131
132\lstdefinelanguage{acjs}{
133 morekeywords=[1]{function,export,const,let,var,return,if,else,new,async,await,import,from},
134 morekeywords=[2]{wipe,ink,line,box,circle,write,screen,params,colon,jump,send,store,net,sound,speaker},
135 sensitive=true,
136 morecomment=[l]{//},
137 morestring=[b]",
138 morestring=[b]',
139 morestring=[b]`,
140 escapeinside={|}{|},
141}
142
143\lstdefinestyle{acjsstyle}{
144 language=acjs,
145 keywordstyle=[1]\color{jskw}\bfseries,
146 keywordstyle=[2]\color{jsfn}\bfseries,
147 commentstyle=\color{jscmt}\itshape,
148 stringstyle=\color{jsstr},
149}
150
151\lstdefinestyle{kidlispstyle}{
152 language=kidlisp,
153 keywordstyle=[1]\color{klfn}\bfseries,
154 keywordstyle=[2]\color{klform}\bfseries,
155 keywordstyle=[3]\color{klrepeat}\bfseries,
156 keywordstyle=[4]\color{klmath},
157 commentstyle=\color{klcmt}\itshape,
158 stringstyle=\color{klstr},
159}
160
161\lstset{
162 basicstyle=\ttfamily\small,
163 breaklines=true,
164 frame=single,
165 rulecolor=\color{acgray!30},
166 backgroundcolor=\color{acgray!5},
167 xleftmargin=0.5em,
168 xrightmargin=0.5em,
169 aboveskip=0.5em,
170 belowskip=0.5em,
171}
172
173% === LIST SETTINGS ===
174\setlist[itemize]{nosep, leftmargin=1.2em, itemsep=0.1em}
175\setlist[enumerate]{nosep, leftmargin=1.2em}
176
177% === COLUMN SEPARATION ===
178\setlength{\columnsep}{1.8em}
179
180% === PARAGRAPH SETTINGS ===
181\setlength{\parindent}{1em}
182\setlength{\parskip}{0.3em}
183
184% Hyphenation for narrow two-column layout
185\tolerance=800
186\emergencystretch=1em
187\hyphenpenalty=50
188
189\begin{document}
190
191% ============ TITLE BLOCK ============
192
193\twocolumn[{%
194\begin{center}
195\includegraphics[height=4em]{pals}\par\vspace{0.5em}
196{\acbold\fontsize{24pt}{28pt}\selectfont\color{acdark} Aesthetic\acdot Computer '26}\par
197\vspace{0.2em}
198{\aclight\fontsize{11pt}{13pt}\selectfont\color{acpink} 面向创意计算的移动优先运行时}\par
199\vspace{0.6em}
200{\normalsize\href{https://prompt.ac/@jeffrey}{@jeffrey}}\par
201{\small\color{acgray} Aesthetic.Computer}\par
202{\small\color{acgray} ORCID: \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}}\par
203\vspace{0.3em}
204{\small\color{acpurple} \url{https://aesthetic.computer}}\par
205\vspace{0.6em}
206\rule{\textwidth}{1.5pt}
207\vspace{0.5em}
208\end{center}
209
210\begin{center}
211{\small\color{acpink}\textbf{[ 工作草稿 --- 请勿引用 ]}}
212\end{center}
213\vspace{0.3em}
214
215\begin{quote}
216\small\noindent\textbf{摘要。}
217\ac{}(AC)是一个面向创意计算的移动优先运行时和社交网络,完全在浏览器中运行。其主要界面是文本提示符——而非图形用户界面——用户通过它浏览由354个内置交互程序("作品")和265个用户发布作品组成的命名空间。每个作品是一个单独的JavaScript或KidLisp文件,导出生命周期函数(boot、paint、act、sim、leave),接收即时模式图形API。该平台将社交基础设施——用户标识、实时聊天、心情动态、在线档案——直接集成到运行时中,而非作为附加层。打包系统将作品捆绑为独立的HTML文件以供离线分发。本文描述了该架构(63,000行核心运行时代码)、作品模型、多语言支持、发布与分发基础设施,并报告了来自2,801名注册用户的采用指标。我们论证,将编程界面视为一种\emph{乐器}——用户通过即兴探索发现可记忆的路径——产生了与创意软件之间质的不同关系。
218\end{quote}
219\vspace{0.5em}
220}]
221
222% ============ 1. INTRODUCTION ============
223
224\section{引言}
225
226创意编程平台已逐步降低了计算表达的门槛。Processing~\citep{reas2007processing}引入了速写本隐喻;p5.js~\citep{mccarthy2015p5js}将其带入浏览器;Scratch~\citep{resnick2009scratch}通过基于积木的可视化编程使编程对儿童变得可及。然而,这些工具共享一个共同假设:用户与\emph{编辑器}交互——代码编辑器、积木画布或集成开发环境。
227
228\ac{}从一个不同的前提出发。其主要界面是一个\textbf{文本提示符}——一个命令行,用户在其中输入简短、可记忆的名称来启动交互程序。没有文件浏览器,没有项目面板,没有菜单栏。这种体验更接近乐器而非开发环境:用户通过探索发现命令,通过重复建立肌肉记忆,最终通过流畅地重组作品来即兴创作。
229
230该平台源于No Paint(2020)开发过程中的观察,这是一个像素画工具,其非技术用户社区开始贡献自定义画笔和图章。手动集成过程——每次贡献需要数小时至数天——推动了构建一个任何人都能即时发布交互程序的系统。开发始于2021年,当前仓库包含从2022年12月至2026年3月的11,045次提交。
231
232本文描述了设计原则(\S\ref{sec:principles})、系统架构(\S\ref{sec:architecture})、作品模型(\S\ref{sec:pieces})、多语言运行时(\S\ref{sec:languages})、提示符界面(\S\ref{sec:prompt})、社交基础设施(\S\ref{sec:social})、发布与分发(\S\ref{sec:publishing})、开发历史(\S\ref{sec:history})以及采用情况(\S\ref{sec:evaluation})。配套论文~\citep{scudder2026kidlisp}详细介绍了KidLisp语言。
233
234% ============ 2. DESIGN PRINCIPLES ============
235
236\section{设计原则}
237\label{sec:principles}
238
239\begin{enumerate}
240 \item \textbf{乐器,而非IDE。}界面被设计为如同乐器一般运作,用户在命令和已发布作品的网络中发现自己可记忆的路径。随着通过游戏提升素养,用户即兴创作、重新组合并扩展其技能库。
241 \item \textbf{移动优先。}每个交互都以手机和平板上的触控输入为目标。桌面支持自然随之而来;反之则不然。
242 \item \textbf{URL可寻址。}每个作品、每个参数组合、每个用户的作品都是一个URL。分享即导航;导航即分享。
243 \item \textbf{单文件程序。}遵循Processing的速写本模型和Unix的小型可组合程序哲学,每个作品是一个文件——没有项目结构,没有构建步骤,没有依赖。
244 \item \textbf{默认社交。}用户标识、聊天、心情动态和档案是运行时的一部分,而非附加服务。
245\end{enumerate}
246
247% ============ 3. ARCHITECTURE ============
248
249\section{架构}
250\label{sec:architecture}
251
252该系统由四个主要组件组成:引导加载器、BIOS运行时、Disk API和模块加载器。
253
254\subsection{引导加载器}
255
256引导加载器(\texttt{boot.mjs},1,948行)并行初始化三个子系统:到会话服务器的WebSocket连接(800毫秒超时并回退至HTTP)、用于持久模块缓存的Service Worker,以及用于离线模块存储的IndexedDB存储。引导遥测将浏览器、设备类型、屏幕分辨率和性能计时数据记录到\texttt{/api/boot-log}。
257
258\subsection{BIOS}
259
260BIOS(\texttt{bios.mjs},20,935行)是运行时协调器。它管理60fps渲染循环,路由输入事件(键盘、触控、鼠标、手柄、MIDI),协调作品生命周期转换,并维护WebGL合成层("glaze")用于后处理效果。BIOS还管理录制系统,用于将作品演奏捕获为带有同步音频的帧序列。
261
262\subsection{Disk API}
263
264Disk(\texttt{disk.mjs},15,879行)提供作品使用的完整API接口。它管理作品加载、生命周期调度,并暴露绘图原语、音频、输入、网络和UI组件。所有图形操作均为即时模式——没有保留的场景图。
265
266\subsection{模块加载器}
267
268模块加载器通过WebSocket从会话服务器流式传输JavaScript模块,绕过HTTP代理链以加快加载速度。首次加载时,模块缓存在IndexedDB中。后续访问从缓存加载,如果会话服务器不可用则回退至HTTP。这使得重复访问时作品几乎即时加载。
269
270% ============ 4. THE PIECE MODEL ============
271
272\section{作品模型}
273\label{sec:pieces}
274
275作品是一个单独的\texttt{.mjs}(JavaScript)或\texttt{.lisp}(KidLisp)文件,导出最多五个生命周期函数:
276
277\begin{lstlisting}[style=acjsstyle]
278function boot({ wipe, screen, params }) {
279 // Runs once when piece loads
280}
281
282function paint({ wipe, ink, line, circle }) {
283 wipe(|\textcolor{jsstr}{"navy"}|)
284 ink(|\textcolor{jsstr}{"pink"}|)
285 circle(screen.width / |\textcolor{jsnum}{2}|,
286 screen.height / |\textcolor{jsnum}{2}|, |\textcolor{jsnum}{50}|)
287}
288
289function act({ event: e }) {
290 if (e.is(|\textcolor{jsstr}{"keyboard:down:space"}|)) { }
291}
292
293function sim() { } // Per-frame logic
294
295export { boot, paint, act, sim };
296\end{lstlisting}
297
298传递给每个函数的API对象提供:
299
300\begin{table}[h]
301\small
302\centering
303\begin{tabularx}{\columnwidth}{lX}
304\toprule
305\textbf{类别} & \textbf{函数} \\
306\midrule
307图形 & \texttt{wipe}, \texttt{ink}, \texttt{line}, \texttt{box}, \texttt{circle}, \texttt{poly}, \texttt{paste}, \texttt{plot}, \texttt{flood} \\
308文本 & \texttt{write}, \texttt{form}, \texttt{TextInput} \\
309输入 & \texttt{event}, \texttt{pen}, \texttt{hand}, \texttt{gamepad} \\
310音频 & \texttt{sound}, \texttt{speaker}, \texttt{microphone}, \texttt{melody} \\
311界面 & \texttt{ui.Button}, \texttt{ui.TextInput}, \texttt{cursor} \\
312系统 & \texttt{screen}, \texttt{jump}, \texttt{store}, \texttt{net}, \texttt{send} \\
313\bottomrule
314\end{tabularx}
315\caption{作品API分类。}
316\label{tab:api}
317\end{table}
318
319作品遵循Processing的速写本模型——每个可探索的想法对应一个源文件——结合Unix在小型、单一用途程序之间的用户级可组合性哲学。
320
321% ============ 5. MULTI-LANGUAGE RUNTIME ============
322
323\section{多语言运行时}
324\label{sec:languages}
325
326AC支持两种编程语言:JavaScript(ES模块,\texttt{.mjs})和KidLisp(一种极简Lisp方言,\texttt{.lisp})。系统目前包含336个JavaScript作品和18个KidLisp作品。
327
328JavaScript作品可完全访问Web API和Disk API接口。KidLisp作品使用一个15,161行的树遍历求值器~\citep{scudder2026kidlisp},提供118个内置函数用于绘图、颜色、变换、数学、动画和音频——没有文件I/O、网络或字符串操作,使得任意用户提交的代码可以安全执行。
329
330KidLisp程序也可以直接作为URL输入。表达式\texttt{(wipe blue)}经URL编码后可在\texttt{aesthetic.computer/(\%28wipe\%20blue\%29)}执行。短代码(\texttt{\$cow}、\texttt{\$27z})通过MongoDB查找解析为存储的程序。
331
332该架构支持额外的语言后端。任何能够针对作品生命周期(boot/paint/act/sim/leave)并调用Disk API的语言都可以作为新的求值器集成。
333
334% ============ 6. THE PROMPT ============
335
336\section{提示符}
337\label{sec:prompt}
338
339提示符(\texttt{prompt.mjs},9,386行)本身就是一个作品——系统中最复杂的一个。它作为主要导航界面,实现了60多个命令。
340
341\subsection{URL路由}
342
343每个作品都可通过解析器(\texttt{parse.mjs})进行URL寻址,支持多种参数约定:
344
345\begin{itemize}
346 \item \textbf{简单}:\texttt{aesthetic.computer/notepat}
347 \item \textbf{冒号参数}:\texttt{tone:440:sine}
348 \item \textbf{空格参数}:\texttt{notepat 180 major}(在URL中编码为波浪号)
349 \item \textbf{用户作品}:\texttt{@bash/hub}
350 \item \textbf{KidLisp代码}:\texttt{\$cow}
351 \item \textbf{短代码}:\texttt{!abc}(视频),\texttt{*bako}(时钟旋律)
352\end{itemize}
353
354\subsection{命令类别}
355
356提示符实现了用于导航(\texttt{list}、\texttt{back})、创作(\texttt{publish}、\texttt{source}、\texttt{pack})、社交互动(\texttt{chat}、\texttt{mood}、\texttt{profile})、身份(\texttt{handle}、\texttt{login})、录制(\texttt{tape}、\texttt{share})和作品编排(\texttt{merry},按时序链接作品)的命令。
357
358% ============ 7. SOCIAL INFRASTRUCTURE ============
359
360\section{社交基础设施}
361\label{sec:social}
362
363与社交功能作为外部服务(GitHub、Discord)的平台不同,AC将社交基础设施直接集成到运行时中。
364
365\subsection{身份}
366
367用户通过提示符注册\texttt{@handles}(标识)。标识解析为MongoDB用户记录,并作为已发布作品的命名空间(\texttt{@handle/piece-name})。截至2026年3月,已注册2,801个标识。
368
369\subsection{实时通信}
370
371会话服务器提供基于WebSocket的实时功能:公共聊天(18,020条消息)、在线状态跟踪(每个用户当前正在查看的作品)以及协作作品的多人状态同步。
372
373\subsection{心情动态}
374
375用户发布短文本更新("心情"),在其档案上可见。心情动态同时写入MongoDB和ATProto(Bluesky底层协议),实现与更广泛社交网络的联合。
376
377\subsection{实时档案}
378
379档案作品显示实时记分卡:在线/离线状态、当前作品、WebSocket延迟,以及画作、已发布作品、KidLisp程序、聊天消息和心情动态的计数——全部通过WebSocket流实时更新。
380
381% ============ 8. PUBLISHING & DISTRIBUTION ============
382
383\section{发布与分发}
384\label{sec:publishing}
385
386\subsection{发布与源码}
387
388\texttt{publish}命令将作品上传到DigitalOcean Spaces并在MongoDB中以用户标识注册。\texttt{source}命令下载任何作品的源代码作为派生模板。
389
390\subsection{打包系统}
391
392\texttt{pack}命令通过oven服务将作品捆绑为自包含的HTML文件。输出包含作品代码、所有运行时依赖和嵌入字体——一个无需服务器即可离线工作的单文件。这使得通过电子邮件、USB驱动器、区块链铸造(Tezos/Teia)和存档进行分发成为可能。
393
394\subsection{自定义域名}
395
396作品可以在自定义域名上作为独立应用程序提供服务。\texttt{notepat.com}路由到\texttt{notepat}音乐序列器作品;\texttt{kidlisp.com}提供KidLisp IDE。Netlify边缘函数检测主机名并相应地重写路由,包括用于社交分享的自定义Open Graph元标签。
397
398\subsection{媒体导出}
399
400oven服务(\texttt{oven.aesthetic.computer})通过FFmpeg将录制会话转换为MP4视频,为社交分享生成Open Graph预览图片,并为作品URL提供二维码。录制捕获帧序列,包含每帧时间数据和可选音频。
401
402% ============ 9. DEVELOPMENT HISTORY ============
403
404\section{开发历史}
405\label{sec:history}
406
407以下时间线根据Aesthetic Computer仓库的git历史重建(2022年12月至2026年3月间11,045次提交)。该项目的概念起源可追溯到2020年的No Paint。
408
409\subsection{起源:No Paint(2020--2021)}
410
411No Paint是2020年发布的像素画工具,建立了一个非技术用户社区,他们贡献了自定义画笔和图章。手动集成瓶颈——每次贡献都需要开发者介入——推动了构建一个任何人都能即时发布交互程序的平台。
412
413\subsection{基础阶段(2022--2023)}
414
415当前仓库始于2022年12月。2023年全年(3,766次提交),核心运行时成型:BIOS渲染循环、Disk API、提示符界面、作品生命周期以及初始的内置作品集。2023年9月迎来早期活动高峰(542次提交),多人会话服务器和实时聊天被整合。
416
417\subsection{扩展阶段(2024)}
418
4192024年(2,698次提交)增加了KidLisp(4月)、绘画系统、标识注册、心情动态和录制基础设施。活动在4月(379次提交)和10月(336次提交)达到峰值。
420
421\subsection{平台整合(2025--2026)}
422
423开发在2025年末急剧加速:10月700次提交,11月663次,12月525次。KidLisp IDE在\texttt{kidlisp.com}上线(2025年11月),添加了ATProto/Bluesky联合,打包系统成熟,oven服务开始生成社交预览图片。2026年1月是单月最繁忙的月份(1,095次提交),驱动力包括KidLisp改进、混沌模式、3D原语和用于现场表演的舞台模式。
424
425\begin{table}[h]
426\small
427\centering
428\begin{tabular}{lrl}
429\toprule
430\textbf{时期} & \textbf{提交数} & \textbf{里程碑} \\
431\midrule
4322020--2021 & --- & No Paint;AC构想 \\
4332022年12月 & 47 & 仓库创建 \\
4342023 & 3{,}766 & 核心运行时、提示符、多人 \\
4352024 & 2{,}698 & KidLisp、绘画、标识、心情 \\
4362025年1--5月 & 318 & 维护期 \\
4372025年6--12月 & 2{,}962 & IDE、打包、oven、联合 \\
4382026年1--3月 & 2{,}149 & 混沌模式、3D、舞台模式 \\
439\midrule
440\textbf{总计} & \textbf{11{,}045} & \\
441\bottomrule
442\end{tabular}
443\caption{各时期开发活动。}
444\label{tab:history}
445\end{table}
446
447该项目主要由单一作者完成:@jeffrey贡献了约98\%的提交,另有14位合作者参与。
448
449% ============ 10. EVALUATION ============
450
451\section{评估}
452\label{sec:evaluation}
453
454截至2026年3月的采用指标如表~\ref{tab:adoption}所示。
455
456\begin{table}[h]
457\small
458\centering
459\begin{tabular}{lr}
460\toprule
461\textbf{指标} & \textbf{数值} \\
462\midrule
463内置作品 & 354(336 JS + 18 KidLisp) \\
464用户发布作品 & 265 \\
465API端点 & 78 \\
466注册标识 & 2,801 \\
467创建画作 & 4,404 \\
468KidLisp程序 & 16,244 \\
469聊天消息 & 18,020 \\
470核心运行时(行) & $\sim$63,300 \\
471\bottomrule
472\end{tabular}
473\caption{平台指标(2026年3月)。}
474\label{tab:adoption}
475\end{table}
476
477\subsection{观察}
478
479\textbf{提示符作为发现机制。}用户报告通过在提示符中输入猜测来发现作品——尝试\texttt{piano}、\texttt{draw}、\texttt{chat}等词汇——并找到已有内容。这种偶然发现是扁平命名空间的有意设计结果。
480
481\textbf{移动端参与。}移动优先设计意味着用户在通勤中、候诊室和教室里通过手机与AC互动——这些场景是桌面创意编程工具无法触及的。
482
483\textbf{社交结构驱动留存。}聊天、心情动态和档案的整合创造了社交环境,使用户持续回访。用户查看心情、在聊天中回复,并通过社交活动而非搜索发现新作品。
484
485\subsection{局限性}
486
487单文件作品模型限制了程序复杂性。作品无法导入共享库或跨多个模块拆分(尽管它们可以通过\texttt{\$code}引用嵌入KidLisp程序)。提示符界面虽然对经验丰富的用户来说功能强大,但对期望视觉引导的新用户来说存在陡峭的发现曲线。
488
489% ============ 11. RELATED WORK ============
490
491\section{相关工作}
492
493\textbf{创意编程。}Processing~\citep{reas2007processing}和p5.js~\citep{mccarthy2015p5js}建立了速写本范式。AC继承了单文件模型,但用提示符替代了编辑器,并添加了社交基础设施。
494
495\textbf{社交编程。}Scratch~\citep{resnick2009scratch}证明了社交分享推动教育编程的参与度。OpenProcessing~\citep{openprocessing2009}和Glitch~\citep{glitch2017}为创意代码提供了基于Web的分享平台。AC的不同之处在于将社交功能作为运行时本身的一部分,而非周围网站的功能。
496
497\textbf{实时编程。}Hydra~\citep{hydra2019}提供基于浏览器的实时视觉编程。Sonic Pi~\citep{aaron2016sonic}面向音乐教育,采用实时编程REPL。AC的舞台模式(全屏画布上覆盖透明编辑器)支持类似的现场表演场景。
498
499\textbf{移动创意工具。}大多数创意编程工具假设桌面使用环境。AC的移动优先设计——触控输入、提示符导航、手机大小的画布——面向桌面工具无法触及的场景。
500
501% ============ 12. CONCLUSION ============
502
503\section{结论}
504
505\ac{}证明了创意计算平台可以围绕文本提示符而非图形IDE来组织,将社交基础设施直接集成到运行时中可以产生不同于外部社交层的参与模式,而移动优先的浏览器原生方法使创意编程在桌面工具无法触及的场景中变得可及。
506
507该平台的354个内置作品、265个用户发布作品和16,244个KidLisp程序构成了不断增长的创意计算作品集。提示符即乐器的隐喻——用户通过记忆和即兴而非菜单导航来建立流畅度——为人们与创意软件的关系提供了一种替代模型。
508
509AC在ISC许可证下开源,位于\url{https://github.com/digitpain/aesthetic.computer}。
510
511\vspace{0.5em}
512\noindent\textit{翻译自英文原版。原版请访问 \url{https://papers.aesthetic.computer}}
513
514\vspace{0.5em}
515\noindent\textbf{ORCID:} \href{https://orcid.org/0009-0007-4460-4913}{0009-0007-4460-4913}
516
517% ============ REFERENCES ============
518
519\bibliographystyle{plainnat}
520\bibliography{references}
521
522\end{document}