Filipes Notiz nennt acht: "Host-Steuerung fuer Kamera, Mikrofon,
Video, Gaeste, Lautstaerke, Chat, Layout und Start/Ende."
Nachgezaehlt war sechsmal etwas da und zweimal nichts.
KAMERA
Es gab keinen Weg, das eigene Bild abzuschalten. Wer kurz aufstehen,
trinken oder etwas holen wollte, musste die Sendung verlassen oder
sich dabei filmen lassen.
Jetzt liegt eine SENDERLEISTE ueber dem Bild -- Kamera, Mikro und ein
Pegel. Sie gehoert jedem, der sendet, Host wie Gast: Ein Gast, der
sein eigenes Bild nicht abschalten kann, muesste den Host darum
bitten, und das ist keine Bedienung, sondern eine Bitte.
DAS BILD WIRD AM GERAET ABGESCHALTET (`track.enabled = false`), nicht
am Server: Die Verbindung bleibt stehen, der Ton laeuft weiter, und
beim Wiedereinschalten ist das Bild sofort da. Der Server erfaehrt es
nur, damit bei den ANDEREN "Kamera aus" im Fenster steht. Ohne diese
Beschriftung sind ein abgeschaltetes und ein kaputtes Bild dasselbe
schwarze Rechteck -- und dann fragt jemand im Chat, ob die Technik
hakt.
Erst das Geraet, dann die Ansage. Andersherum stuende bei allen
"Kamera aus", waehrend noch ein Bild fliesst; man glaubte sich
unsichtbar. Geht die Ansage nicht durch, wird das Geraet
zurueckgesetzt -- ein Knopf, der halb wirkt, ist schlimmer als einer,
der gar nicht wirkt.
Das Mikro laeuft denselben Weg. Erst wollte ich es rein oertlich
lassen; das waere dieselbe stille Falle gewesen: Wer sich selbst
stummschaltet und trotzdem redet, saehe bei allen anderen ein ganz
normales Fenster.
CHAT
Es gab Moderation -- Beitraege wegnehmen -- aber keine Steuerung des
Chats selbst. Einen Beitrag zu loeschen, nachdem er stand, ist etwas
anderes, als ihn gar nicht erst zuzulassen.
Drei Stufen: OFFEN, TEAM (wer moderiert, darf -- wer aufraeumen soll,
muss dabei reden koennen) und ZU (nur die zwei, die fuehren). Zwei
Stufen waeren zu wenig: "zu" ist in einer Sendung fast immer zu viel,
dann sitzen alle vor einem stummen Fenster. Die mittlere ist die, die
man wirklich braucht.
Die Schalter stehen im Kopf der Chatschiene, nicht im Regiepult: Man
moderiert, wo man liest. Ein Umweg ueber ein Register waere in dem
Moment, in dem es laut wird, genau ein Umweg zu viel.
EIN GESPERRTES FELD SAGT, WARUM. "Gerade schreibt nur das Team" statt
eines Feldes, das sich nicht beschreiben laesst und schweigt --
sonst schreibt jemand in den Hauschat, dass die Reaction hakt. Und
die Stufe gilt AM SERVER: Ein ausgegrautes Feld haelt niemanden auf,
der die Schnittstelle kennt. Beide Antworten kommen aus derselben
Funktion; zwei Rechnungen waeren zwei Gelegenheiten, dass ein Feld da
ist und mit 403 antwortet.
EIN FUND NEBENBEI: "MEIN MIKRO" WAR EIN PLACEBO
Gemessen: `staende.mikro` wird nirgends gelesen. Der Schieber liess
sich bewegen, die Zahl daneben aenderte sich -- und es passierte
nichts. Das ist schlimmer als ein fehlender Regler: Man glaubt, man
haette leiser gestellt.
Technisch ist das auch richtig. Die eigene Lautstaerke laesst sich
nicht am Regler aendern; man muesste den Ton umrechnen und die Spur
in jeder Verbindung austauschen. Was man beim eigenen Mikro braucht,
ist AN oder AUS -- und ein Pegel, der zeigt, dass es ankommt. Genau
das steht jetzt dort, als vierte Spalte im Pult, mit demselben
Zustand wie die Senderleiste. Die drei anderen Regler bleiben Regler:
Sie steuern, was ICH hoere, und das geht am Empfaenger.
UND EINER IN MEINER EIGENEN ARBEIT
`kasten.append(el("div","pegel")).append(el("i"))` -- `Node.append()`
gibt `undefined` zurueck, nicht das angehaengte Element. Ein
TypeError beim Aufbau des Pults, den `node --check` nicht sieht.
Beim Verkuerzen nicht nachgesehen, was die Methode zurueckgibt.
Dazu: Die Pegel-Takte liefen in `pultAufbauen()`. Das Pult hat nur,
wer die Sendung fuehrt -- ein Gast haette seinen Pegel nie gesehen,
und genau er braucht ihn am dringendsten.
GEMESSEN
mess-reaktion Der Host schaltet ab, und bei der Zuschauerin steht
"Kamera aus" bei DogFather, Bild verdeckt.
Stufe "Team": Feld gesperrt mit Grund, und der
Server lehnt denselben Versuch mit 403 ab.
pruef-reaktion 154 Punkte, 0 Fehler (vorher 132), neuer Abschnitt
13 mit 22 Punkten und Gegenprobe (es geht auch
wieder auf -- eine Sperre, die man nicht loesen
kann, ist keine Stufe, sondern ein Ende)
dazu gruen handy 180, css-klassen 33, struktur 35,
tippziele 11, aufbewahrung 45, meldungen 8
Der neue Abschnitt baut sich seine Buehne selbst. Abschnitt 9 beendet
die Sendung; sich auf den Stand eines frueheren Abschnitts zu
verlassen ist die Kopplung, die spaeter jemand aus Versehen
zerreisst.
SCHEMA: drei Spalten (reaktion_dabei.kamera_aus, .mikro_aus,
reaktion.chat_modus), alle per ALTER TABLE. Auf einer Kopie der
echten Datenbank durchgespielt: 20 Personen, keine Tabelle verliert
eine Spalte.
123 lines
5.4 KiB
HTML
123 lines
5.4 KiB
HTML
<!doctype html>
|
||
<html lang="de">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||
<title>Unterstützen · Spicy & Dogi</title>
|
||
<meta name="robots" content="noindex, nofollow" />
|
||
<link rel="manifest" href="/workspace/app.webmanifest" />
|
||
<meta name="theme-color" content="#06090f" />
|
||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202609280816" />
|
||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609280816" />
|
||
<link rel="stylesheet" href="assets/css/gate.css?v=202609280816" />
|
||
<link rel="stylesheet" href="assets/css/start.css?v=202609280816" />
|
||
<link rel="stylesheet" href="assets/css/unterstuetzen.css?v=202609280816" />
|
||
<link rel="stylesheet" href="assets/css/module.css?v=202609280816" />
|
||
<link rel="stylesheet" href="assets/css/haus.css?v=202609280816" />
|
||
</head>
|
||
|
||
<body class="start">
|
||
|
||
<div class="schleier" aria-hidden="true"></div>
|
||
|
||
<header class="kopfleiste">
|
||
<button type="button" class="zurueck-knopf" id="zurueck" hidden>
|
||
<svg class="zurueck-knopf__pfeil" viewBox="0 0 24 24" aria-hidden="true">
|
||
<path d="M14.5 5.5 8 12l6.5 6.5" />
|
||
</svg>
|
||
<span class="zurueck-knopf__text">Zurück</span>
|
||
</button>
|
||
<p class="marke"><span class="marke__text"><a class="zurueck" href="start.html">Creator Workspace</a> · Unterstützen</span></p>
|
||
<div class="kopfleiste__rechts">
|
||
<span class="wer" id="wer">…</span>
|
||
<button type="button" class="abmelden" id="abmelden">Abmelden</button>
|
||
</div>
|
||
</header>
|
||
|
||
<main class="inhalt inhalt--breit">
|
||
|
||
<!-- ==================================================================
|
||
DER KOPF SAGT ZUERST, DASS NIEMAND MUSS (24.09.2026)
|
||
|
||
Filipe: „wo die leute alle supporten können auf andere art
|
||
anstatt nur tiktok."
|
||
|
||
Eine Seite, die mit „unterstütze mich" anfängt, liest sich wie
|
||
eine hohle Hand. Der erste Satz sagt deshalb das Gegenteil: Es
|
||
gibt Wege, die nichts kosten, und keiner davon ist zweite Wahl.
|
||
Erst danach kommen die, bei denen Geld fließt.
|
||
|
||
Wer nichts geben kann, soll diese Seite nicht mit einem
|
||
schlechten Gefühl schließen — das ist die ganze Überlegung
|
||
hinter dem Aufbau.
|
||
============================================================== -->
|
||
<section class="kopf-zeile">
|
||
<div>
|
||
<p class="marke">Community</p>
|
||
<h1 class="titel" id="seiten-titel">Dogi etwas zurückgeben</h1>
|
||
<p class="unterzeile" id="seiten-unter">
|
||
Es geht auch ohne TikTok – und es geht auch ohne Geld.
|
||
Such dir aus, was zu dir passt. Niemand muss etwas geben, um dazuzugehören.
|
||
</p>
|
||
</div>
|
||
</section>
|
||
|
||
<p class="fehler" id="fehler" role="alert" aria-live="polite" hidden></p>
|
||
|
||
<!-- ==================================================================
|
||
NUR DOGFATHER: die Leiste zum Ändern und die Zahlen
|
||
|
||
„nur dogfather soll sie verändern können oder vieles mehr sehen."
|
||
|
||
Sie steht im Dokument und wird von unterstuetzen.js eingeblendet
|
||
— ausgeliefert bekommt sie jeder, das ist nur HTML. Die
|
||
ENTSCHEIDUNG trifft der Server: Er liefert `darf_aendern` und
|
||
weist jedes Schreiben ohne dieses Recht mit 404 ab. Ein
|
||
verstecktes Feld ist eine Bitte, keine Sperre.
|
||
============================================================== -->
|
||
<section class="u-leitung" id="leitung" hidden aria-labelledby="leitung-titel">
|
||
<div class="u-leitung__kopf">
|
||
<h2 class="u-leitung__titel" id="leitung-titel">Nur du siehst das hier</h2>
|
||
<button type="button" class="knopf knopf--klein" id="aendern-an">Ändern</button>
|
||
</div>
|
||
<p class="u-leitung__satz" id="leitung-satz"></p>
|
||
<div class="u-zahlen" id="zahlen" hidden></div>
|
||
</section>
|
||
|
||
<!-- Die Wege. unterstuetzen.js baut sie aus der Antwort des Servers —
|
||
hier steht nur, wo sie hingehören. -->
|
||
<div id="wege" aria-live="polite">
|
||
<p class="u-laedt" id="laedt">Wird geladen …</p>
|
||
</div>
|
||
|
||
<!-- ==================================================================
|
||
DER LETZTE SATZ IST KEIN SCHMUCK
|
||
|
||
Er steht fest im Dokument und nicht in der Datenbank: Was hier
|
||
zugesagt wird, soll nicht aus Versehen wegzuklicken sein.
|
||
============================================================== -->
|
||
<p class="u-fuss">
|
||
Nichts davon ist Pflicht, und niemand sieht, wer etwas gegeben hat.
|
||
Wer nur zuschaut, gehört genauso dazu.
|
||
</p>
|
||
|
||
</main>
|
||
|
||
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
|
||
liest daraus die Leitungsrollen. Ohne sie stürzt jede Seite mit
|
||
„Cannot read properties of undefined (reading 'LEITUNG')" ab. -->
|
||
<script src="assets/js/bereiche.js?v=202609280816" defer></script>
|
||
<script src="assets/js/wahl.js?v=202609280816" defer></script>
|
||
<script src="assets/js/nachfrage.js?v=202609280816" defer></script>
|
||
<script src="assets/js/installieren.js?v=202609280816" defer></script>
|
||
<script src="assets/js/kopf.js?v=202609280816" defer></script>
|
||
<script src="assets/js/glocke.js?v=202609280816" defer></script>
|
||
<script src="assets/js/holen.js?v=202609280816" defer></script>
|
||
<!-- Die Satz-Tafel. Ohne sie stand auf dieser Seite das Maschinenwort
|
||
des Servers (z.B. "nicht_gefunden") statt eines Satzes -- gemeldet
|
||
von pruef-meldungen, nicht beim Ansehen. -->
|
||
<script src="assets/js/meldung.js?v=202609280816" defer></script>
|
||
<script src="assets/js/unterstuetzen.js?v=202609280816" defer></script>
|
||
</body>
|
||
</html>
|