DET INDRE · Tilblivelsen
Følgedokument · Det indre

TILBLIVELSEN

Hvordan et oppdrag på fire avsnitt ble til en verden man kan utforske: beslutningene, geometrien, simuleringsmodellen, koden, det som gikk i stykker, og hvordan man endrer det. Skrevet for den neste som åpner filene, og det kan være deg om et år.

bygget 11.–12. september 2026Three.js 0.164ingen byggetrinn≈ 3 100 linjer

Oppdraget

Forespørselen kom som en prompt utformet i samtale med en annen modell, og kjernesetningen var denne: behandle menneskets indre slik en erfaren nettverksingeniør behandler et komplekst nettverk. For det meste usynlig, sammensatt av diskrete objekter med egenskaper, feilmoduser og innbyrdes relasjoner, og mulig å inspisere når man først har et kart. Lag en høyoppløst, utforskbar 3D-modell av det klassiske kristne monastiske kartet over det indre livet, i en Tron-aktig nettverksvisualiseringsstil, som fungerer både som et personlig diagnoseverktøy og som et undervisningsmiljø.

Oppdraget listet så opp hva kartet måtte inneholde. Forfatterne: Evagrios som grunnlag, Cassian, Filokalia og hesykastene, med Maximos, Klimakos og Ørkenfedrene som andre stemmer, hver i sin egen romlige region. Objektene: de åtte tankene, skillet mellom at en tanke oppstår, samtykke og lidenskap, lidenskapene, nous, årvåkenheten, lidenskapsløsheten, festningene, motsigelsen, botemidler tilpasset hver tanke, og spørsmålet om ikke-kroppslig forsterkning utenfra. Et relasjonslag: hvordan tankene mater hverandre, hvordan forfatterne skiller seg fra hverandre, hvilke mønstre som rammer nybegynnere og hvilke som rammer de viderekomne, hvordan en vane blir til en borg. Et lag med botemidler i klart 2026-språk. Og et metafysisk standpunkt: psykologi og ånd som overlappende sirkler, ingen av dem presset inn i den andre.

Så ble ett ord lagt til i samtalen: nøkkelen var fylde. Og senere: gjør det visuelt imponerende, for det er slik man gjør seg fortjent til oppmerksomhet.

Å lese “fylde”

Fylde kunne ha betydd en større scene. Det ble i stedet lest som to fullstendige lag som måtte stemme med hverandre.

Objektmodellen

En strukturert fortegnelse der hver evne, hver tanke, hvert stadium, hvert botemiddel, hver struktur, hver påvirkning, hver forfatter, hver tekst og hvert begrep er en post med de samme feltene: enkel beskrivelse, lengre fremstilling, tegn innenfra, hva som styrker og svekker den, botemidler, svar fra Skriften, hvordan hver forfatter behandler den, vekt for nybegynner mot viderekommen, de to lesningene, kilder. Dette er det “veldokumenterte nettverket”.

Verden

En tegnemotor som legger den fortegnelsen ut i rommet, tegner hver relasjon som en linje, og legger til den dynamikken oppdraget ba om: tankeformer i bevegelse, tetthet som endres når et mønster mates, vakttårn, festninger. Ingenting i verden er laget for hånd; alt kommer fra modellen.

Beslutningen som fulgte av dette er den viktigste i prosjektet: innholdet bor i én fil, data.js, og alt annet er avledet fra den. 3D-verden, inspektørkortene, omvisningene, diagnosen, tegnforklaringen, og nå Leseveiledningen, genereres alle fra de samme postene. Endre en setning i modellen, og den endres overalt. Det er også derfor verden kunne bygges på en dag: motoren er generell, og innholdet er arbeidet.

Tre lesninger til formet det som ble bygget:

  • Diagnostisk betyr interaktiv. Et kart man bare ser på, er en plakat. Derfor har de åtte tankene levende tilstand (en ladning), brukeren kan mate dem, sulte dem ut, legge dem frem og si dem imot, en sjekkliste farger verden på nytt etter brukerens egne mønstre, og går man inn i en tanke, ser man hvor i kjeden den sitter hos deg.
  • Undervisning betyr veiledet. Åtte omvisninger flyr en klasse fra objekt til objekt med fortellerstemme, en undervisningsmodus forstørrer etikettene og skjuler kontrollene, og hver tilstand har en lenke som kan deles.
  • To sirkler betyr to lesninger av hvert objekt. Ikke et forbehold øverst, men et felt på hver post: en psykologisk fremstilling og en åndelig fremstilling, side om side, og en merknad om “forsterkning utenfra” som gir tradisjonens egen avsløring av den tanken.

Kartets geometri

Oversikten over Det indre: korridoren går fra det ytre feltet inn mot sentrum, ringen av de åtte i fargene til sjelens krefter, de fire sekskantede fløyene rundt dem.
Hjemvisningen. Korridoren kommer inn fra nedre venstre; de fire fløyene ligger i himmelretningene.

Rommet måtte bety noe, så utlegget koder modellens egne påstander.

  • Sentrum er personen. Hjertet i origo, nous over det, kroppen under, sjelens tre krefter på en ring med radius 11 rundt hjertet, minne og forestilling like utenfor sentrum, og de sunne tilstandene svevende over.
  • De åtte sitter nær den kraften de infiserer. Ringen av de åtte har radius 36. Fråtseri, utukt og gjerrighet samler seg rundt den begjærende kraften; sorg og vrede rundt den oppbrusende; forfengelighet og hovmod rundt den fornuftige; acedia, som Evagrios sier legger beslag på hele sjelen, sitter imellom. Vinklene deres er satt i dataene, ikke beregnet, så klyngingen er en påstand du kan redigere.
  • Praksisene sitter mellom personen og tankene, på en ring med radius 23, for det er der de virker.
  • Korridoren er en rett linje fra utsiden til hjertet. Den kommer inn ved 205° (mellom Cassian-fløyen ved 180° og hesykast-fløyen ved 270°), begynner ved radius 66 og slutter ved radius 10. De seks stadiene plasseres av en parameter t langs den; samtykket ligger ved t = 0.6, og samtykkets port fra Det indre tegnes nøyaktig i det punktet, så de to lagene møtes fysisk. Vakttårnet står ved siden av porten; myntprøveren nær samtalen; cellen til den ene siden.
  • Fløyene er sekskantede plattformer med radius 40 i avstand 130, én per himmelretning: Evagrios i øst, Cassian i vest, hesykastene i nord, andre stemmer i sør. Inne i hver står forfatteren i sentrum, tekstene på en ring med radius 15, begrepene på en ring med radius 28, og lange grå buer forbinder hvert fløyobjekt med de kjerneobjektene det beskriver. Disse buene er skjult som standard og kommer frem når du velger noe, for med alle på er kartet en floke.
  • Det ytre feltet er en svak ring av støv ved radius 120–190. Innskytelse utenfra sitter ved korridorens ytterste ende; tankene fra deg selv litt til siden; nåden rett over hjertet, og sender stråler ned. Cassians tre kilder, på tre steder.
Den ene kollisjonen som måtte bygges vekk: korridoren ble først lagt ved 135°, og gikk da rett gjennom forfengeligheten. Å flytte den til 205° la den også i gapet mellom hovmod-enden og fråtseri-enden av ringen, og det viste seg å være det rette stedet for hjemkameraet å se fra.

Visuell identitet

Oppdraget sa Tron, og Tron ble tatt bokstavelig: mørk grunn, et rutenett som gulv, alt tegnet som lys. Men paletten gjør en jobb; den er ikke pynt.

cyan · Det indre, grensesnittet
rød · den begjærende kraften
oransje · den oppbrusende kraften
blå · den fornuftige kraften
fiolett · acedia, hele sjelen
gul · korridoren
gull · strukturer, viderekommen
grønn · praksiser, botemidler
lavendel · det ytre feltet
varm hvit · tilstander, nåden

De åtte tankene er farget etter den sjelskraften de infiserer, så fargen på en node er en påstand fra Praktikos 89 snarere enn et stilvalg. Hver fløy har sin egen farge (rav, fiolett, mint, rosa), og begrepene dens arver den, så en linje fra en fløy inn mot sentrum forteller deg med ett blikk hvem som snakker. Grønt betyr alltid et botemiddel; gull betyr alltid en bygget struktur eller, i leseveiledningen, en merknad for viderekomne.

Skriften er Rajdhani til overskrifter og etiketter (en kantet, litt teknisk skrift som leses som instrumentbokstaver uten å se ut som et spill) og IBM Plex Sans til lesing, med Plex Mono til kode i disse dokumentene. Etikettene i verden er canvas-sprites på en mørk, avrundet plate, så de forblir lesbare over gløden.

Hver nodetype har sin egen kropp: hjertet er en pulserende kule inne i to trådmodellskall; nous et oktaeder; de tre kreftene er ringer; de åtte er dodekaedriske krystaller på sekskantede seter; stadiene er stående ringer som tanken passerer gjennom; praksisene er kapsler; tilstandene er små, varme stjerner med ringer i bane; forfatterne er søyler med en lysende topp; tekstene er heller med tekstlinjer som alltid vender mot deg; vakttårnet har en lampe og en roterende lysstråle; festningsnoden er en sekskant med mur. Og hver av de åtte bærer en skjult festning av sitt eget, en sekskantet mur som vokser opp fra bakken når ladningen passerer 45 % og står ferdig ved 90 %.

Gløden er et bloom-pass. Det gjorde tre ting galt i begynnelsen, og hver av dem lærte bort noe. Etiketter tegnet gjennom bloom smurte ut til tåke, så etikettene bor nå på et eget kameralag som tegnes etter bloom-passet, uten det. Lyse kjerner brant ut til hvitt, så emissiv-intensitetene ble omtrent halvert og eksponeringen senket. Og det andre passet visket ut det første: en Three.js-scene med fargebakgrunn tvangstømmer ved hvert render-kall, så etikettpasset må nulle bakgrunnen før det tegner og gjenopprette den etterpå.

Objektmodellen

data.js eksporterer sju ting: regionene (WINGS), de tre kreftene (PARTS), nodetypene (TYPES), kanttypene (EDGE_KINDS), nodene, de eksplisitte kantene, omvisningene, diagnoseutsagnene og listen over de åtte. En node ser slik ut, forkortet:

{
  id: 'acedia', type: 'logismos', wing: 'ring',
  angle: 92, r: 36, part: 'whole', order: 6,
  name: 'Acedia', aka: 'akedia · the noonday demon · …',
  plain: 'Nothing here is worth it. …',
  long: ['Evagrius (Praktikos 12) gives it his longest description. …', '…'],
  signs: ['Checking the time, the phone, the window.', '…'],
  strengthens: ['Sadness', 'Anger at the present', '…'],
  weakens: ['Staying (hypomone)', 'Manual work', '…'],
  remedies: [{ kind: 'ordinary', text: '…' }, { kind: 'spiritual', text: '…' }],
  antirrhesis: [{ ref: 'Ps 27:14', text: 'Wait for the Lord; …' }],
  voices: { evagrius: '…', cassian: '…', hesychast: '…', others: '…' },
  feeds: ['gluttony', 'sadness'],
  hits: { beginner: 0.5, advanced: 0.95 },
  circles: { psych: '…', spirit: '…' },
  external: 'The tell Evagrius gives: …',
  sources: ['Evagrius, Praktikos 12, 27–28; Antirrhetikos VI', '…'],
}

Utlegget er et hint på posten, som motoren løser opp: en eksplisitt pos, eller angle/r/y rundt origo, eller ring/slot inne i en fløy, eller t langs korridoren. De fleste relasjoner er avledet snarere enn listet opp: en tankes feeds gir matekanter, en praksis’ remedyFor gir botemiddelkanter, et fløyobjekts contributes gir de grå “beskriver”-buene, og hver fløys forfatter knyttes til alt i fløyen. En kort, eksplisitt EDGES-liste legger til det som ikke kan avledes: hvilken kraft hver tanke sitter i, den sunne oppstigningen, korridorens stadielenker, hva som kommer inn hvor, og hva strukturene vokter.

AntallHva
86noder: 6 evner, 3 krefter, 6 tilstander, 8 tanker, 6 stadier, 4 strukturer, 14 praksiser, 3 påvirkninger, 8 forfattere, 7 tekster, 21 begreper
≈ 270kanter, de fleste avledet
8omvisninger, 52 fortalte stopp
25diagnoseutsagn

Valget av hvilke av Evagrios’ sekvenser som skal kodes som matekanter, er den mest fortolkende delen av modellen. Fråtseri → utukt og forfengelighet → hovmod er eksplisitte hos Evagrios; gjerrighet → vrede og sorg er Praktikos 18 og Cassian; sorg → acedia og vrede → sorg følger begge; acedia → fråtseri (småspising som avledning) og utukt → forfengelighet (hovmod etter seier) er lesninger av Praktikos 8 og 12. Alle kan redigeres, og verden tegnes på nytt.

Simuleringen

Det dynamiske laget måtte gjøre tradisjonens påstander synlige uten å late som om det er en modell av et sinn. Det er et leketøy med ærlige regler.

  • Hver av de åtte har en ladning i [0, 1], grunnlinje 0.12. Ladningen avtar mot grunnlinjen med 0.4 % per sekund, eller 1.2 % med bønnen på, raskere jo høyere den er.
  • Tankeformer oppstår med en rate på omtrent én per sekund pluss 1.6 per enhet samlet ladning (0.4 med forsterkning av). Hver velger en kilde (utenfra, fra minnet, eller av og til ovenfra), flyr til korridorens munning og går gjennom stadiene i rekkefølge.
  • Målet trekkes blant de åtte med sannsynlighet proporsjonal med 0.04 + ladning². Det kvadratet er hele “å mate katten”-modellen: et mønster med dobbel ladning har fire ganger så stor sjanse for å bli matet igjen. Linsen multipliserer dette med mønsterets nybegynner- eller viderekommen-vekt.
  • Ved samtykkets port avskjæres den med sannsynlighet lik årvåkenhetsnivået, ganger 0.85 med mindre bønnen er på. Avskjæringen blinker ved porten, gjør vakttårnet lysere og skriver en linje i loggen som navngir tanken og kilden dens.
  • En tanke som slipper gjennom, går videre til lidenskap, så til hjertet, og så reiser en gnist fra hjertet til målet og legger til 0.05 ladning.
  • Mat for hånd legger til 0.25 og sender 35 % av det nedover hver matekjede som en bevegelig partikkel. Sult ut trekker fra 0.20 og tenner botemiddellinjene. Legg frem halverer ladningen. Si imot trekker fra 0.15 og viser ett av tankens svar fra Skriften.
  • Visuelt vokser en tankes størrelse med ladningen, gløden med ladningen, den omkringliggende trafikken med ladningen, og festningen dens reiser seg jevnt mellom 0.45 og 0.9. Inne i en tanke leser stadieringen ladningen av ved 0.2, 0.35, 0.5, 0.62, 0.75 og 0.9.

Det simuleringen med vilje ikke påstår: at tankene bokstavelig talt kommer utenfra, at ladningen er et mål på noe som helst, eller at tallene er kalibrert. Det den påstår, fordi tradisjonen gjør det: at oppmerksomhet og samtykke er føde, at det som mates kommer tilbake, at avskjæring ved porten er billig og riving av en festning er dyrt, og at åpenhet virker.

Motoren

Fire filer, ingen byggetrinn, ingen rammeverk. Three.js 0.164 lastes som ES-moduler fra et CDN gjennom et import map, som også gir tilgang til etterbehandlingstilleggene for bloom. Alt annet er vanlig nettleser-JavaScript og CSS.

FilLinjerRolle
data.js≈ 1 160Objektmodellen. Alt innhold.
world.js≈ 970Utlegg, geometri per nodetype, kanter som kurver, partikkelsystemet, simuleringen, kamera og kontroller, plukking, inspektøren, omvisninger, diagnose, URL-parametere, render-løkken.
index.html≈ 150Siden: paneler, modaler, HUD, intro.
style.css≈ 180Stiler for sidens ramme.
build-docs.mjs≈ 250Genererer Leseveiledningen fra modellen.

Noen av de tekniske valgene det er verdt å kjenne til før man redigerer:

  • Kantene er kvadratiske Bézier-kurver løftet oppover med en brøkdel av sin egen lengde, så lange buer fra fløyene går over sentrum i stedet for gjennom det. Hver bevegelig partikkel i verden er en posisjon på en av disse kurvene, og det er derfor det samme kurveobjektet tjener til tegning, omkringliggende trafikk, korridorvandringer og botemiddelgnister.
  • Alle partikler er ett tegnekall. Ett enkelt Points-objekt med en liten egen shader (myke, runde punkter, additiv blanding, størrelse per punkt) rommer inntil 2 400 tankeformer; JavaScript-siden holder en liste av {curve, t, speed, colour, onArrive} og skriver posisjoner inn i bufferet hver frame. onArrive-tilbakekallet er slik en tanke går korridoren stadium for stadium, og slik et treff leverer ladning.
  • Plukking bruker usynlige kuler. Hver node har en gjennomsiktig kule litt større enn kroppen sin, så et klikk nær en tynn ring eller en liten kapsel velger den likevel.
  • Kamerabevegelser er tweens etter veggklokke mellom en posisjon og en kvaternion. De begynte som frame-tidsbaserte, som er greit på en GPU og ubrukelig under programvarerendering, der én frame kan ta et sekund.
  • Etikettene er et andre render-pass på kameralag 1 uten bloom. Størrelsen deres er proporsjonal med avstanden opp til et tak, så de holder omtrent konstant størrelse på skjermen, og hver etikett har et avstandstrinn: de åtte, forfatterne, påvirkningene og strukturene vises langt borte fra; praksiser, begreper, tekster og stadier bare når du er nær, eller når de er knyttet til utvalget.
  • Utvalg demper alt som ikke er knyttet til det. Linjer som ikke rører den valgte noden, faller til en femtedel av dekkevnen sin, og uknyttede etiketter tones ned, så kartet svarer på “hva er koblet til dette?” uten en spørring.
  • URL-parametere setter starttilstanden (focus, enter, tour, scenario, nepsis, prayer, amplify, lens, teach, glow, nointro). De finnes for at en lærer skal kunne sende en lenke til en tilstand, og de finnes fordi skjermbilder under programvarerendering trengte en måte å nå en tilstand på uten mus.
  • Orbit-taster. Q og E roterer kameraet rundt det valgte objektet (eller hjertet) om den loddrette aksen, etter ønske, og erstatter den opprinnelige opp/ned-bindingen, som flyttet til mellomromstasten og C.

Byggeloggen

I rekkefølge, med det som gikk galt. Hele byggingen foregikk i én arbeidsøkt om kvelden 11. september og de små timer den 12., med dokumentene og repoet kvelden etter.

1

Les oppdraget; bestem de to lagene

Objektmodellen først, verden etterpå, innholdet i én fil. Valgte kompassutlegget, korridoren og simuleringsreglene på papir før noe ble skrevet.

2

Skriv objektmodellen

Alle 86 postene med feltene sine, omvisningene og diagnosen. Det første forsøket på å skrive den gjennom skallet mislyktes fordi filen overskred operativsystemets grense for argumentstørrelse for én enkelt kommando (E2BIG, ved omtrent 150 KB); den ble skrevet gjennom editorverktøyet i stedet.

3

Skriv motoren, siden og stilene

Geometri per nodetype, kanter, partikler, simulering, kontroller, inspektør, omvisninger, diagnose, intro.

4

Rett posisjonene

Korridoren kolliderte med forfengeligheten; flyttet den til 205° og satte vakttårnet, myntprøveren, cellen, festningen og nodene i det ytre feltet på plass rundt den igjen.

5

Første blikk: feil nettleser

Den tilkoblede utviklerverktøy-nettleseren kunne ikke opprette en WebGL-kontekst i det hele tatt. Byttet til en lokal headless Chrome med programvarerenderer (SwiftShader), som tegner scenen riktig, men bare rekker en håndfull frames på tretti sekunder.

6

Modalene ville ikke skjule seg

hidden-attributtet tapte mot modalens display:flex-regel. Én linje: [hidden]{display:none!important}.

7

Legg til URL-parametere

For å nå tilstander til skjermbilder, og fordi de uansett er nyttige i undervisning.

8

Etikettene var en tåke

Hver etikett vokste med avstanden og gikk gjennom bloom. Flyttet dem til et andre render-pass uten bloom, med avstandstrinn og nesten konstant skjermstørrelse.

9

Verden forsvant

Det nye etikettpasset tømte bildet: en scene med fargebakgrunn tvangstømmer ved hver render. Null bakgrunnen for etikettpasset, gjenopprett etterpå.

10

Hver flyging så feil vei

Målorienteringen ble beregnet med et vanlig objekts lookAt, som peker +Z-aksen mot målet; kameraer ser langs −Z. Beregnet den med kameraet selv i stedet. Denne ene feilen hadde fått hver omvisning, fokuslenke og innsidevisning til å vende bort fra sitt emne.

11

For nært, for lyst

Flygeavstandene utvidet, innsidebanen utvidet, emissiv-intensitetene halvert, eksponeringen senket, urelaterte etiketter skjult når man er nær, omvisningslinjen flyttet så den ikke lenger overlappet inspektøren.

12

Dokumenter, orbit-taster, repositorium

Generatoren for Leseveiledningen, dette dokumentet, det delte stilarket, Q/E som orbit-taster, og et git-repositorium.

13

Vitne-stien

Et levd eksempel lagt over kartet: byggerens egen rute, tolv stopp i første person, hvert i tre deler (hva som skjedde, hva tradisjonen kaller det, hva man kan begynne å legge merke til), tegnet som en rosenrød tråd gjennom objektene den rørte ved. Det er data, ikke motor: en WITNESS-post ved siden av omvisningene. Tradisjonen leverte et kart og et vitne sammen (Evagrios’ kapitler, Athanasius’ Antonius’ liv); dette er den samme sammenstillingen.

14

Porten

Det tredje tradisjonen leverer ved siden av et kart og et vitne: en praksis. Tankene kommer til samtykkets port én om gangen som tekstkort som går korridoren; personen navngir og avviser (1–8), slipper inn (Enter), eller tar dem til pengevekslerens bord (T), eller gjør ingenting, på egen risiko. Seksti tanker i GATE: hver med gamle ord i stil med Evagrios’ Antirrhetikos, moderne ord, kilde, mønster, svar, Cassians fire myntprøver og en etternotis. En nybegynnervakt med de høylytte kroppslige tankene og de åpenbart gode; en viderekommen vakt med tankene fra høyre, de ti forfalskningene, og den sanne trøsten satt foran sin falske tvilling. Motoren gjenbruker korridorkurven, avskjæringsblinket, treffgnistene og ladningsmekanikken; kameraet parkerer ved porten, og bevegelsen låses. I undervisningsmodus stanser hver tanke like før porten, og R avslører den.

Verifisering og dens grenser

Det som ble sjekket: siden laster uten skriptfeil; modulen løser CDN-importene sine; oversikten, en fokusert tanke med et scenario påført, en tanke man har gått inn i, en omvisning underveis, hjertet og vakttårnet med lysstrålen på tegnes alle riktig under programvare-WebGL; inspektøren, ladningsstolpene, loggen og omvisningslinjen fylles; diagnosemarkeringen og tegnforklaringen genereres. Hver rettelse ovenfor ble bekreftet med en fersk rendering.

Det som ikke ble sjekket, fordi miljøet ikke kunne: bildefrekvens på en ekte GPU, museblikk og tastaturflyging, verktøytips ved peking, følelsen i tweenene, bloom i full oppløsning, lyd (det finnes ingen) og berøring på mobil. Den første kjøringen i en ekte nettleser er den ærlige testen for disse. Er noe galt, er det mest sannsynlig en hastighets- eller avstandskonstant, og hver eneste av dem er et navngitt tall nær toppen av den aktuelle funksjonen i world.js.

Det som bare ble sjekket mot hukommelsen: kapittelhenvisningene. De er oppgitt ved hver node og er, så langt forfatteren vet, riktige pekere inn i Sinkewicz’ Evagrios, Ramseys Cassian, Palmer–Sherrard–Wares Filokalia og Luibheid–Russells Stige, men ingen utgave lå åpen under byggingen. Den som underviser fra denne verden, bør verifisere en henvisning før den siteres.

Å utvide den

For å legge til et objekt: legg til en post i NODES i data.js med en type fra TYPES, en wing, et navn, en enkel beskrivelse og et utleggshint. En ny praksis gir du angle, r: 23 og en remedyFor-liste; et nytt begrep i en fløy gir du ring: 2, en slot og en contributes-liste. Motoren tegner det, kobler det opp, og leseveiledningen tar det med ved neste bygg.

For å legge til en niende tanke (misunnelse, for eksempel, etter Gregor): gi den type: 'logismos', en angle på ringen, en part, feeds, hits og antirrhesis, og legg id-en dens til i EIGHT, så simuleringen og diagnosen teller den med.

For å redigere Porten: endre GATE.thoughts: hver oppføring er et nivå, en type (bad, good, counterfeit), et mønster, en kilde, de gamle og de moderne ordene, et svar, de fire prøvene og en etternotis. Nivåene og tempoet deres ligger i GATE.levels.

For å legge til eller redigere et vitne: rediger WITNESSES-listen: hvert vitne har en id, tittel, undertittel, farge, et innrammende og et avsluttende avsnitt, og stopp som består av en node-id pluss tre tekster. Tråden tegnes på nytt gjennom de nodene stoppene navngir, og velgeren og leseveiledningen lister det opp automatisk. Det andre vitnet, en vanlig uke med detaljene anonymisert, ble lagt til etter at kartet var brukt på et virkelig problem: tradisjonens prøve på et kart er om det virker på en tirsdag.

For å legge til en omvisning: skyv et objekt med en id, en title og en liste av {node, text}-stopp inn i TOURS. For å legge til et diagnoseutsagn: skyv {text, w: {pattern: weight}} inn i DIAGNOSTIC.

For å endre geometrien: konstantene ligger øverst i world.js: korridorens vinkel og radier, og i fløyutlegget ringradiene. Fløysentrene ligger i WINGS.

For å regenerere leseveiledningen: node build-docs.mjs (eller npm run docs). Den leser data.js direkte og skriver guide.html.

For å endre utseendet: avbildningen fra type til geometri er én switch i buildNode, fargene ligger i TYPES, PARTS og WINGS, og bloom-parameterne er én linje nær toppen.

Kjøre, utplassere, versjonere

Den må serveres over HTTP, fordi ES-moduler ikke lastes fra file://. Lokalt:

cd ~/mekk/theworld
python3 -m http.server 8765      # then open http://127.0.0.1:8765/

På Pi-en er det statiske filer under standard nginx-rot:

ssh claude@192.168.10.125 'sudo mkdir -p /var/www/home/interior/docs'
scp index.html data.js world.js style.css guide.html making.html docs.css claude@192.168.10.125:/tmp/
ssh claude@192.168.10.125 'sudo cp /tmp/{index.html,data.js,world.js,style.css,guide.html,making.html,docs.css} /var/www/home/interior/ && sudo cp -r docs /var/www/home/interior/'
# http://raspberrypi.home/interior/

Verden og begge dokumentene er også publisert som private artefakter med egne lenker, og det er den enkleste måten å gi dem til noen på.

Prosjektet er et git-repositorium. Den første commiten inneholder modellen, motoren, siden, stilene, de to dokumentene, generatoren og dette oppdraget. For å publisere det til Gitea på Pi-en, opprett et tomt repositorium der med navnet theworld og legg det til som remote:

git remote add origin http://raspberrypi.home:3000/tor/theworld.git
git push -u origin main

Kilder og forbehold

Innholdet bygger på: Evagrios, Praktikos, Om tankene, Antirrhetikos og Om bønnen; Cassian, Institusjonene V–XII og Samtalene 1, 2, 4, 5, 7–10 og 13; Filokalia, bind 1 og 4, først og fremst Hesychios, Markus Asketen, Diadochos, Filotheos, Nikeforos, Gregor av Sinai og Palamas; Johannes Klimakos, Paradisstigen; Maximos, Kapitler om kjærligheten; Athanasius, Antonius’ liv; og Ørkenfedrenes tenkespråk.

Tre fortolkende valg er forfatterens og bør leses som det. Matekjedene mellom de åtte er en syntese av Evagrios og Cassian, ikke en liste noen av dem skrev ned. Nybegynner- og viderekommen-vektene er skjønnsmessige vurderinger ut fra tradisjonens bemerkninger om hvilke tanker som angriper hvem, uttrykt som tall så verden kan bruke dem. Og navnene i klarspråk (gjerrighet for avaritia, den indre PR-avdelingen for forfengelighet, reprisen for vrede) er oversettelser for en moderne leser, beholdt ved siden av originalene så ingenting går tapt.

Et sidenotat, De ni festningene, leser Enneagrammets ni lidenskaper gjennom verdens sjuende trinn: hva hver av dem bygger når den mates, setningen hver mur sier, og om et system av typer river slike murer ned eller pynter dem.

Der tradisjonen er uenig med seg selv (Evagrios’ orden mot Cassians; apatheia mot hjertets renhet; de åtte mot de sju), beholder verden begge og sier hvem som sa hva. Det er nettverksingeniørens vane også: dokumenter leverandørens påstand og den observerte oppførselen hver for seg.