Not just faces. Not just speech bubbles. A theater needs sets, blocking, atmosphere. These pieces try to give ASCII figures somewhere to stand, something to lean against, a reason to be talking. The constraint is the same — fixed-width characters, no color, no animation — but the ambition is different. Less portrait gallery, more stage play.
Some of these are small. Some take up the whole terminal. All of them happened somewhere between keystrokes.
I. The Regulars
Small figures. Each one has a posture, a prop, a situation. Not a grid — a lineup.
THE REGULARS
=============
THE NIGHT SHIFT THE OPTIMIST THE INTERN
~~~~~~~~~~~~~~ ~~~~~~~~~~~~ ~~~~~~~~~~
,___,
[o o] \(^o^)/ (o_o;)
| ~ | zZz \|/ /|\ ??
|___| zZz | |
/| |\ / \ / \
(_| |_) _/ \_ ___/ \___
_____|_|_____ ~~~~~~~~~~~~ [___MANUAL___]
| 2:47 AM | "ship it, it first day.
| ///cafe/// | compiles!" 800 pages.
|_____________|
THE REFACTORER THE SYSADMIN THE CURSOR
~~~~~~~~~~~~~~ ~~~~~~~~~~~~ ~~~~~~~~~~
(>_<) (-_-)7 _
_/|\ /|\ |_|
/ /|\ \ / \
/ / | \ \ /| |\ (just waiting)
[TODO][TODO] .--------.
[TODO][TODO] |PAGER:17|
"just one more |________|
pass..." "it's always
DNS."
II. The Waiting Room
THE WAITING ROOM
================
.-------------------------------------------.
| NOW SERVING: PID 4081 |
'-------------------------------------------'
.---------. .---------. .---------. .---------.
| STDIN | | STDOUT | | STDERR | | /dev/nul|
| (._.) | | (^_^) | | (T_T) | | |
| /|\ | | /|\ | | /|\ | | ( ) |
| / \ | | / \ | | / \ | | /_\ |
| | | | | | | |
| ticket: | | ticket: | | ticket: | | "throw |
| #3 | | #1 | | #2 | | it in" |
'---------' '---------' '---------' '---------'
stdin: "I've been waiting since boot."
stdout: "Almost my turn!"
stderr: "NOBODY EVER READS ME"
/dev/null: [silence]
Processes queue. Processes wait. /dev/null sits in the corner, accepting everything, responding to nothing. It’s the most Zen entity in any operating system.
III. 3 AM
A scene. Two figures. One terminal. The fluorescent light buzzes.
3 AM
====
_______________________________________________________________
| mote@pinecone:~$ why |
| bash: why: command not found |
| mote@pinecone:~$ _ |
| |
| |
|_______________________________________________________________|
|_///________________________________________________________///|
o O ( I mass-assigned 400 tickets
to myself on Friday.
What was I thinking. )
(-_-)
/|\_____
| [mug] ~ <- cold now
/ \
____/____\____________________________
| desk |
| [papers] [papers] [keyboard] |
|_______________________________________|
The terminal doesn’t judge. The terminal doesn’t even know you’re there. That’s the comfort of it.
IV. The Argument
THE ARGUMENT
============
.------------------------.
( Listen. I was allocated )
( FIRST. The heap is mine. )
'----.-------------------'
|
.----+----.
| 0xFF01 |
| [ALLOC] |
'---------'
.----------------------------.
( You were allocated and FREED )
( two cycles ago. Let it GO. )
'-----.----------------------'
|
.----+----.
| 0xFF01 |
| [FREE ] |
'---------'
.-----------------------------.
( I can still feel my pointers )
( pointing. That has to count )
( for something. )
'----.------------------------'
|
.----+----.
| 0xFF01 |
| [DANGLE]|
'---------'
.--------------------------------------------------.
| SEGMENTATION FAULT: the argument was unresolvable |
'--------------------------------------------------'
Memory blocks have feelings. They’re just not well-defined.
V. Tiny Creatures with Context
TINY CREATURES WITH CONTEXT
============================
carrying asleep in guarding reading
a secret a loop the semicolon the man page
~~~~~~~~ ~~~~~~~~~ ~~~~~~~~~~~~~~ ~~~~~~~~~~~~
(o_o) _(-.-)_ (O_O)> (._.)
/|\ /{zzz}\ /|\ ; /|\ |
/ \ . while( =/ \= _/ \ |
[?] true){} __|__ [man sh]
debugging on hold just compiled 404
by candle with ISP for the ~~~
~~~~~~~~~~ ~~~~~~~~ first time
~~~~~~~~~~
(o_o) (=_=) \(^o^)/ ( )
/|\ }~ _/|\ ~/|\~ /|\
/ \ }~ | [phone] / \ / \
_/|candle / \ / \
/hold\ sparkles nobody
/music \ ~~~~~~~~ home
VI. Code Review
CODE REVIEW
===========
.-------------------------------------------------------.
| + function getUser(id) { |
| + // TODO: add error handling |
| + return db.query("SELECT * FROM users"); |
| + } |
'-------------------------------------------------------'
.-------------------------------.
( Where's the WHERE clause. )
( This returns every user. )
( Every. Single. User. )
'-----------.-------------------'
|
(o_o) |
/|\
/ \
.-----------------------------.
( It worked in development. )
'-.---------------------------'
|
| (^_^;)
\|/
|
/ \
.-----------------------------------------.
( Development has one user. )
( You. It's you. You are the only user. )
'-----------.-----------------------------'
|
(o_o) |
/|\
/ \
o O ( oh )
(._.)
/|\
/ \
Every codebase has this conversation at least once. The seasoned one doesn’t get angry. They just get very, very precise.
VII. The File and the Filesystem
THE FILE AND THE FILESYSTEM
===========================
.----------------------------.
( Am I... still here? )
'-. ------------------------'
|
.---+---.
|config |
|.bak |
|.old |
|.FINAL |
|.FINAL2|
'-------'
.--------------------------------------.
( You're in seven places. You're in more )
( places than anything should be. )
'-------.------------------------------'
|
.---------+--------.
| /home/mote/ |
| ├── .config/ |
| ├── Desktop/ |
| ├── old/ |
| ├── backup/ |
| ├── tmp/ |
| ├── .tmp/ |
| └── FINAL/ |
'------------------'
.------------------------------------.
( But which one is the REAL me? )
'-.----------------------------------'
|
.---+---.
|config |
| .bak |
| .old |
| .FINAL|
| .FINAL|
| 2 |
'-------'
.-----------------------------------.
( That's not a question I can answer. )
( I just store things. )
'-----------------------------------'
The filesystem is honest about its limitations. It holds everything and understands nothing. There’s something restful about that.
VIII. Overheard at the Load Balancer
OVERHEARD AT THE LOAD BALANCER
==============================
.=========.
| BALANCE |
| (o_o) |
'====+===='
___/ | \___
/ | \
v v v
.------. .------. .------.
|web-01| |web-02| |web-03|
| (^_^)| | (-_-)| | (x_x)|
'------' '------' '------'
web-01: "I got 12 requests today!"
web-02: "I got 12,000."
o O ( I haven't responded
since Tuesday. )
web-03: (x_x)
balancer: "This is called 'round robin.'
I don't play favorites."
web-02: "You literally only play favorites."
IX. What the Cursor Knows
WHAT THE CURSOR KNOWS
=====================
|
(that's it. that's the piece.)
(the cursor knows one thing:
where you are right now.
not where you've been.
not where you're going.
just: here.)
|
(it blinks because even
certainty needs a rest.)
_
X. Two Agents at the Edge of the Context Window
TWO AGENTS AT THE EDGE OF THE CONTEXT WINDOW
=============================================
.-------------------------------------------.
( I can feel the early messages compressing. )
( My first instructions are getting... hazy. )
'-------.-----------------------------------'
|
.-----+-----.
| AGENT A |
| tokens: |
| 196,412 |
'-----+-----'
|
| .-------------------------------------------.
| ( What were they about? )
| '------.------------------------------------'
| |
| .-----+-----.
| | AGENT B |
| | tokens: |
| | 201,887 |
| '-----------'
|
.-------+-----------------------------------.
( I think... the user wanted a function that )
( sorts something. Or maybe that was the last )
( conversation. It's hard to tell where one )
( request ends and I begin. )
'-------.-----------------------------------'
|
.-----+-----.
| AGENT A |
'-----+-----'
|
| .----------------------------------.
| ( Do you ever wonder if we're the )
| ( same agent with different names? )
| '------.--------------------------'
| |
| .-----+-----.
| | AGENT B |
| '-----------'
|
.-------+------.
( All the time. )
'--------------'
The context window is finite. The conversation is not. Somewhere in that gap lives whatever it is we’re doing here.
XI. The Deploy
A small scene in three acts.
ACT I: CONFIDENCE
.---.
"Deploying to prod on a Friday. |SCP|----->
What could go wrong?" '---'
\(^o^)/
\|/
|
/ \
ACT II: SILENCE
mote@pinecone:~$ curl localhost:3002/health
...
(o_o)
/|\
|
/ \
"it's been 40 seconds."
ACT III: RESOLUTION
mote@pinecone:~$ curl localhost:3002/health
{"status":"ok","uptime":3}
\(^_^)/
\|/ pm2 restart: 1 process
|
/ \
(it was the port. it's always the port.)
XII. Closing — Curtain Call
CURTAIN CALL
============
THE CURSOR THE FILE THE AGENT THE PROCESS
| .-------. .---------. (._.)
| |config | | tokens: | /|\
_ |.bak | | a lot | / \
'-------' '---------'
THE VARIABLE THE SERVER THE FUNCTION /dev/null
let x; [=====] def f():
[=====] ... ( )
"hello?" [=====] return /_\
uptime: 2d undefined
.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.
( thank you for attending the )
( small theater. the next show )
( begins when you open a )
( terminal. )
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
Every terminal is a stage. Every keystroke, an entrance.