114 lines
6 KiB
Markdown
114 lines
6 KiB
Markdown
|
|
# randogoth.com, the technical work
|
||
|
|
|
||
|
|
A devlog and project index. 40 articles spanning 2004 to 2026, which makes this the only one of
|
||
|
|
the three sites with continuous coverage. See `REFACTOR.md` §D in the working material.
|
||
|
|
|
||
|
|
A **Pelican site** on the `bbs` theme: an ANSI bulletin board, 80 columns of CP437 on black in the
|
||
|
|
16 colour EGA palette. `mc-pelican` is still in the tree as the fallback. It came over from
|
||
|
|
`tobias.raayoni-last.com`, where that aesthetic never belonged, but it is a DOS *application*,
|
||
|
|
Turbo Vision chrome, and a board is a different object.
|
||
|
|
|
||
|
|
## Building
|
||
|
|
|
||
|
|
```sh
|
||
|
|
uv run --quiet --with pelican --with markdown -- pelican content -o output -s pelicanconf.py
|
||
|
|
```
|
||
|
|
|
||
|
|
Unlike the other two sites this one is a blog, so it is paginated and it has feeds.
|
||
|
|
|
||
|
|
## Message areas
|
||
|
|
|
||
|
|
Derived from what is actually written, not from the repo list in `REFACTOR.md` §D and not from
|
||
|
|
the inherited tags, which encoded three different sites' filing decisions. The numbers are the
|
||
|
|
hotkeys at the prompt, so reordering them in `BBS_AREAS` reorders the menu and the keys together.
|
||
|
|
|
||
|
|
| # | Area | Holds | n |
|
||
|
|
|---|---|---|---|
|
||
|
|
| 1 | `RANDOM` | generating and testing entropy. The number, not the place | 4 |
|
||
|
|
| 2 | `PLACE` | what a location is and how you describe one: theory, then the code | 7 |
|
||
|
|
| 3 | `MINIMAL` | the least apparatus that does the job: small interfaces, small networks | 7 |
|
||
|
|
| 4 | `MACHINES` | the device itself: bought, broken, repaired, built, handed on | 6 |
|
||
|
|
| 5 | `GONZO` | first-person reportage, exaggerated on purpose. A declared method | 7 |
|
||
|
|
| 6 | `ENDTIMES` | post-apocalyptic film and games, 2008 to 2016 | 9 |
|
||
|
|
|
||
|
|
There is no miscellany. Everything that was in `ODDS` found a home or was pruned, which is the test
|
||
|
|
of whether a taxonomy describes the work: a residue area means the categories are wrong, not that
|
||
|
|
the work is untidy.
|
||
|
|
|
||
|
|
`MINIMAL` replaced `TXT` and absorbed `INFRA`. Text was the medium both of them had in common, not
|
||
|
|
the subject: what actually connects a FreeDOS neofetch port, a launcher with no widgets, and a
|
||
|
|
cryptographic mail protocol is that each is the least apparatus that does the job. The small-net
|
||
|
|
work lands here when it is written, which is also why the area is not called after the medium
|
||
|
|
again.
|
||
|
|
|
||
|
|
## The prompt
|
||
|
|
|
||
|
|
Numbers are scoped to the screen, which is how a board resolved the ambiguity: at the main menu
|
||
|
|
they select an area, inside an area they select a message, and no two things on one screen claim
|
||
|
|
the same key. Anything typeable carries `data-key` and the bracket chrome that marks it, and the
|
||
|
|
key map is built from the DOM so a template cannot drift out of sync with the handler.
|
||
|
|
|
||
|
|
Messages are numbered from the oldest, so publishing never renumbers anything.
|
||
|
|
|
||
|
|
Two traps, both of which look like nothing when you get them wrong:
|
||
|
|
|
||
|
|
- `bbs.js` sits in `<head>` so the palette applies before first paint. The command handler
|
||
|
|
therefore has to wait for `DOMContentLoaded`, or it binds nothing and the page looks identical.
|
||
|
|
- A number that can no longer match anything must be dropped. `ODDS` has eleven messages, so `1`
|
||
|
|
waits in case `11` follows, and without the reset a mistyped `19` sticks at the prompt forever.
|
||
|
|
|
||
|
|
## The masthead
|
||
|
|
|
||
|
|
TheDraw's *Syndicate*, found by sweeping 3,711 fonts across 1,198 `.tdf` files for ones that render
|
||
|
|
RANDOGOTH inside 80 columns. 691 do; 73 at six rows or more. It is baked in as static text: the TDF
|
||
|
|
tooling was scaffolding for finding it, not something the site carries.
|
||
|
|
|
||
|
|
It uses three tones **across both colour planes**. ANSI paints solid areas as a space with a
|
||
|
|
background, and 247 of its 355 inked cells are background rather than foreground, so anything that
|
||
|
|
maps only foregrounds loses most of the mass and the letters come out hollow.
|
||
|
|
|
||
|
|
The tones are classes, so a ramp is three custom properties. `bbs.js` draws one of fifteen per
|
||
|
|
session, held in `sessionStorage`. None of the ramps bottoms out on the frame blue, which would
|
||
|
|
dissolve the logo's feet into the chrome.
|
||
|
|
|
||
|
|
## Layout
|
||
|
|
|
||
|
|
Every frame is laid out by column arithmetic and checked against the built output: strip the
|
||
|
|
markup, count the visible characters, assert 80. That has caught real bugs twice, once where header
|
||
|
|
dashes were counted including their own HTML markup, and once where a config change emptied every
|
||
|
|
hotkey and shortened 40 rows by one character.
|
||
|
|
|
||
|
|
`line-height` is exactly 1 for the chrome, because each box row is its own `<pre>` and any leading
|
||
|
|
at all stops the vertical box-drawing characters meeting. Prose takes its leading back on
|
||
|
|
`.msgbody`.
|
||
|
|
|
||
|
|
Equal columns are impossible at this width: three verticals plus symmetric padding leave an odd
|
||
|
|
number of cells to split, so the left column is 37 and the right 36.
|
||
|
|
|
||
|
|
## Assets
|
||
|
|
|
||
|
|
`content/library/` 62 files, `content/images/` 11, `content/files/` 1. The images arrived late:
|
||
|
|
their articles moved here in the split but the files stayed behind in TRL's `content/images/`.
|
||
|
|
See `IMAGES.md` in the working material.
|
||
|
|
|
||
|
|
## Not planned in yet
|
||
|
|
|
||
|
|
A small-net server over the same content, so the Markdown also resolves over Gemini, Spartan, Nex,
|
||
|
|
Gopher and WAP. The multi-protocol publishing is subject matter for this site, not just plumbing.
|
||
|
|
Deferred because `smolweb` is being replaced by a Rust implementation.
|
||
|
|
|
||
|
|
One incompatibility to resolve when it lands: `smolweb` reads YAML-style `---` frontmatter, while
|
||
|
|
Pelican content here uses bare `Title:` lines with no delimiters.
|
||
|
|
|
||
|
|
## Still to write
|
||
|
|
|
||
|
|
**The guestbook.** The page says so plainly rather than offering a form that goes nowhere.
|
||
|
|
Deferred until the writing is further along: a guestbook wants something worth signing under.
|
||
|
|
When it lands it is self hosted on bucur alongside Forgejo, not a third party form service, which
|
||
|
|
would sit badly next to `INFRA` and `practical-privacy`.
|
||
|
|
|
||
|
|
**The project pages.** The articles here are *writing*; the areas also want one page per project,
|
||
|
|
undated, updated as the thing changes, which is what distinguishes them from dated posts. Several
|
||
|
|
projects already have their own domains (`jourjutsu.com`, `smol.place`, `zonetoast.com`,
|
||
|
|
`nmns.place`), so those are pointers rather than documentation.
|