---
title: 'Pixelia BBS'
url: 'https://wiki.teletypegames.org/hu/services/pixelia-bbs'
markdown: 'https://wiki.teletypegames.org/hu/services/pixelia-bbs.md'
lang: hu
date: '2026-11-01'
description: 'A BBS-hálózat művészeti boardja: klasszikus ANSI-art a 16colo.rs archívumából, egy közös 40×25-ös vászon, amelyre minden hívó egyszerre fest, és a Fal a róla mentett művekkel. Elérhető: teletypegames.org:2332, böngészőben a bbsweb-en, és a TTG Gate BBS-en át is Áttekintés Ruby-alkalmazás a rubbs …'
taxonomy:
  tag:
    - howto
---

# Pixelia BBS

> A BBS-hálózat művészeti boardja: klasszikus ANSI-art a 16colo.rs archívumából, egy közös 40×25-ös vászon, amelyre minden hívó egyszerre fest, és a Fal a róla mentett művekkel.
> 
> **Elérhető: `teletypegames.org:2332`**, böngészőben a [bbsweb](https://bbsweb.teletypegames.org)-en, és a [TTG Gate BBS](https://wiki.teletypegames.org/hu/services/ttg-gate-bbs)-en át is

# Áttekintés

Ruby-alkalmazás a [**rubbs**](https://git.teletypegames.org/engines/rubbs) gemre építve, mint a [Teletype BBS](https://wiki.teletypegames.org/hu/services/teletype-bbs), a [Scriptorium BBS](https://wiki.teletypegames.org/hu/services/scriptorium-bbs) és a [Commodex BBS](https://wiki.teletypegames.org/hu/services/commodex-bbs).

Két arca van egy porton:

- **Modern**: ANSI-színek, ablakok, menük és egér (SyncTERM, NetRunner, PuTTY, bbsweb). Egy mű a teljes képernyőn, a vászon ablakban, kattintható palettával.
- **Commodore 64**: PETSCII 40×25-ön, C64-es terminálprogramhoz (CCGMS, Novaterm, UltimateTerm) WiFi-modem mögött. A vászon maga a C64 képernyője, egy ANSI-mű pedig 40 oszloponként látszik.

A hívás a rubbs `BBS::Terminal` kérdésével indul: a RETURN elfogadja a tippet, az `1` a modern arcot, a `2` a C64-est választja.

# A galéria

**16colo.rs.** A board a [16colo.rs](https://16colo.rs) archívumát a nyilvános API-ján át böngészi: év, pack, fájl. A szöveges művészeti fájlokat listázza (`.ans`, `.asc`, `.diz`, `.nfo`, `.txt`, `.ice`, és minden fájlt, amelynek SAUCE-a ASCII, ANSI vagy ANSiMation), a címükkel, alkotójukkal, csapatukkal és 16colo.rs-címükkel. Semmit sem tükröz: egy fájlt akkor tölt le, amikor valaki megnyitja (legfeljebb 512 KB), és 100 MB-os lemezes gyorsítótárban tartja; a listák egy óráig maradnak a memóriában.

A műveket a board maga rajzolja ki: beolvassa a SAUCE-rekordot, a CP437-et, az ANSI.SYS-vezérlőkódokat és az iCE-színeket, a SAUCE-szélességnél tör, és 1000 sornál megáll. Modern terminálon a mű a teljes képernyőn görgethető. C64-en 40 oszlopos oldalakban jön: a CGA-színek a legközelebbi C64-színre kerülnek, a színes háttérből inverz lesz, és az `R` vagy a CRSR jobbra lép tovább a szélesebb műveken.

**A Fal** a vászonról mentett műveket tartja, a legújabbal kezdve, címmel, névvel és dátummal, mindkét arcon natívan kirajzolva.

# A vászon

Egyetlen közös 40×25-ös vászon, akkora, mint a C64 képernyője, így mindkét arc cellánként ugyanazt mutatja. Aki rajta van, néhány másodpercen belül látja a többiek vonásait. Egy cellában egy karakter van a C64 16 színének egyikével, tintaként feketén vagy inverzben; ennyit tud megjeleníteni egy C64-es cella, így a kép mindenhol ugyanolyan. A karakterek azok, amelyek a Unicode-terminálon és a PETSCII-ben is megvannak: betűk, számok, a legtöbb írásjel, keretvonalak, blokkok és félblokkok.

**Modern terminálon:**

| Billentyű | Művelet |
|---|---|
| F3 | A vászon megnyitása |
| Nyilak, gépelés | Mozgás, a karakter megfestése |
| F7, F8 | Előző / következő tinta (vagy kattints egy színre) |
| F9 vagy Ctrl-R | Inverz be és ki |
| Insert vagy Ctrl-G | Glifamód: a betűk az ecset glifjeit festik |
| Egér | Kattintás a kurzort teszi oda, húzás vagy jobb klikk fest |
| Ctrl-Z vagy Ctrl-U | A saját utolsó cellák visszavonása |
| Ctrl-S | Mentés a Falra (az űrlapon Alt-S) |
| F2 | 16colo.rs évek szerint |
| F4 | A Fal |
| Alt-X | Kilépés |

**Commodore 64-en:** a CRSR mozgat, a gépelés fest, a DEL töröl, az F3/F4 tintát vált, az F5 az inverzt kapcsolja, az F6 a glifamódot (a betűk a billentyűzet szerint vannak kiosztva: `Q W E / A S D / Z X C` a keretsarkok, a T-elágazások és a kereszt, a `G` teli blokk, a `T` és a `B` a felső és az alsó fél). A RETURN, a RUN/STOP vagy a ← megnyitja a parancssort: tinta, inverz, glifek, mentés, súgó, kilépés. Az F1-hez és az F7-hez nem nyúl, azokat az UltimateTerm tartja meg. A board csak a megváltozott cellákat küldi, cellánként pár bájtot, így a vászon 1200 baudon is fürge.

Korlátok: hívásonként másodpercenként 20 cella, hívásonként ötpercenként egy mentés a Falra, a cím legfeljebb 32, a név 16 karakter.

# Beállítások és adatok

| Változó | Alapérték |  |
|---|---|---|
| `PIXELIA_BBS_DATA` | `data` | a vászon, a Fal, a gyorsítótár |
| `PIXELIA_BBS_API_URL` | `https://api.16colo.rs` | a 16colo.rs API |
| `PIXELIA_BBS_SITE_URL` | `https://16colo.rs` | a fájlok és a mutatott linkek |
| `PIXELIA_BBS_USER_AGENT` | `PixeliaBBS/1.0 (+https://teletypegames.org; …)` | a 16colo.rs felé küldve |
| `PIXELIA_BBS_API_TTL` | `3600` | ennyi másodpercig marad meg egy lista |
| `PIXELIA_BBS_MAX_FILE_KB` | `512` | a legnagyobb letöltött fájl |
| `PIXELIA_BBS_CACHE_MB` | `100` | a gyorsítótár mérete |
| `PIXELIA_BBS_MAX_ROWS` | `1000` | egy műből kirajzolt sorok |
| `PIXELIA_BBS_PAINT_RATE` | `20` | cella másodpercenként, hívásonként |
| `PIXELIA_BBS_WALL_COOLDOWN` | `300` | két mentés között ennyi másodperc egy hívásban |

A vászon a `data/canvas.json` (kétmásodpercenként írva), a Fal műveként egy JSON-fájl a `data/works/`-ben. Az adminok a szerveren moderálnak:

```sh
docker exec pixelia-bbs bin/works list           # a Fal
docker exec pixelia-bbs bin/works show ID
docker exec pixelia-bbs bin/works remove ID
docker exec pixelia-bbs bin/canvas clear         # a data/archive/-ba menti, aztán letörli a vásznat
```

A boardnak nincs titka.

# A motorháztető alatt

A masterre pusholás a Woodpeckerből élesít (RuboCop, compose-ellenőrzés, `ci-deploy pixelia-bbs`); a konténer neve `pixelia-bbs`, a helye `/srv/stacks/pixelia-bbs`, a `data/` megmarad a deployok között. Az entrypoint induláskor frissíti a rubbs-t.

A kód a házi rétegezést követi: a `lib/domain` (a szín-, glif-, vászon-, mű-, SAUCE- és art-modell; a 16colo.rs-, gyorsítótár-, vászon- és mű-repository; `AnsiRenderService`, `GalleryService`, `CanvasService`, `WallService`; a `PixeliaBBS` kompozíciós gyökér) semmit sem tud a telnetről, a `lib/ui` pedig a `UI::Modern`-t a vászon-widgettel és a nézegetővel, valamint a `UI::Petscii`-t tartalmazza, amelynek képernyőmásolata csak a különbségeket küldi.

'; var prevLevel = 2; for (var i = 0; i < headings.length; i++) { var h = headings\[i\]; var text = h.textContent.trim(); var slug = text.toLowerCase() .replace(/\[áàâä\]/g,'a').replace(/\[éèêë\]/g,'e').replace(/\[íìîï\]/g,'i') .replace(/\[óòôöő\]/g,'o').replace(/\[úùûüű\]/g,'u') .replace(/\[^a-z0-9\]+/g, '-').replace(/^-|-$/g, ''); if (!slug) slug = 'heading-' + i; if (used\[slug\]) { slug += '-' + i; } used\[slug\] = true; h.id = slug; var level = parseInt(h.tagName.charAt(1)); var cls = level > 2 ? ' class="toc-child"' : ''; html += '- [' + text + '](#'%20+%20slug%20+%20')
'; } html += '
'; toc.innerHTML = html; // Scroll-spy: highlight current heading var links = toc.querySelectorAll('a'); var ids = \[\]; for (var j = 0; j < links.length; j++) ids.push(links\[j\].getAttribute('href').slice(1)); function updateActive() { var current = ''; for (var k = 0; k < ids.length; k++) { var el = document.getElementById(ids\[k\]); if (el && el.getBoundingClientRect().top <= 80) current = ids\[k\]; } for (var m = 0; m < links.length; m++) { links\[m\].parentNode.classList.toggle('active', links\[m\].getAttribute('href') === '#' + current); } } window.addEventListener('scroll', updateActive, { passive: true }); updateActive(); })();

---

## Navigation

- Parent: [Szolgáltatások](https://wiki.teletypegames.org/hu/services.md)
- Previous: [Impostor BBS](https://wiki.teletypegames.org/hu/services/impostor-bbs.md)
- Next: [Nyilvános oldal](https://wiki.teletypegames.org/hu/services/public-site.md)
