Filipe: "dan will ich auch dass man im chat auch sprachnachrichten und
gifts reinschicken kann. also nur die modis rechte linke hand und
dogfather."
Dieser Commit macht die Sprachnachrichten. Die GIFs kommen als
naechstes -- ich lese "gifts" als GIFs und sage das ausdruecklich,
statt es stillschweigend anzunehmen.
AUFNEHMEN: TIPPEN, NICHT HALTEN
-------------------------------
Gedruecktbleiben ist der bekanntere Weg und der schlechtere: Wer beim
Sprechen verrutscht, verliert die ganze Aufnahme, und mit einer Hand am
Kaffee haelt niemand neunzig Sekunden still. Einmal tippen startet, das
Haekchen schickt, das Kreuz verwirft.
Drei Minuten Hoechstdauer, danach stoppt sie von selbst -- und schickt
NICHT von selbst ab. Wer die Grenze erreicht, hat gerade mitten im Satz
aufgehoert; das ungefragt zu verschicken waere die schlechteste Sekunde
dafuer.
Unter einer Sekunde wird gar nichts geschickt: Das ist ein Versehen,
kein Inhalt.
Die Aufnahmespur wird beim Beenden UND beim Verlassen der Seite
geschlossen. Ein Mikrofon, das offen bleibt, ist ein Vertrauensbruch,
auch wenn niemand zuhoert.
DREI BEHAELTER, WEIL DIE GERAETE DREI LIEFERN
---------------------------------------------
WebM/Opus (Chrome, Android), MP4/AAC (Safari, iPhone), Ogg/Opus
(Firefox). Wer nur einen nimmt, baut eine Funktion, die bei der Haelfte
des Teams stumm bleibt -- und zwar ohne Fehlermeldung.
DER BEHAELTER ALLEIN GENUEGT NICHT: WebM und MP4 tragen genauso gut
Video. Ein Video, das als "Ton" durchginge, landete in einem
Abspielgeraet ohne Bild -- es liefe, man hoerte etwas, und niemand
wuesste, dass die Haelfte fehlt. Die Erkennung sieht deshalb auf die
KENNUNG DER SPUR: Videospur -> abgelehnt, keine Tonspur -> abgelehnt.
Kein MP3: Kein Aufnahmegeraet im Browser erzeugt MP3. Es zuzulassen
hiesse, eine Tuer fuer Musikdateien aufzumachen, nach der niemand
gefragt hat.
"ALSO NUR" IST DER PUNKT
------------------------
Fotos und PDF darf jeder schicken, auch Creator -- das war eine
Entscheidung vom 09.09. und bleibt. Ton nicht. Geprueft wird in der
Route (istTeamDogi), nicht nur im Browser: Ein ausgeblendeter Knopf ist
eine Bitte, abgelehnt wird erst am Server.
Eigene Byte-Grenze fuer Ton (4 MB statt 12). Zwoelf Megabyte sind fuer
ein Foto richtig und fuer eine Sprachnachricht sinnlos -- das waeren
rund fuenfzig Minuten am Stueck.
Die Laenge kommt vom Absender und ist damit eine BEHAUPTUNG, keine
Messung; das steht so an der Spalte. Sie dient nur der Vorschau, bis
das Abspielgeraet die wahre Laenge kennt. Was schuetzt, sind die Bytes.
"FOTO"/"PDF" STAND AN VIER STELLEN
----------------------------------
Dieselbe Aufzaehlung in Gespraechsliste, Zitat, angehefteter Nachricht
und Benachrichtigung -- jede mit ihrem eigenen Fragezeichen-Doppelpunkt.
Mit der Sprachnachricht waeren es vier Aenderungen gewesen, und die
vierte ist die, die man vergisst. Jetzt anhangWort() an einer Stelle.
DER FUND: JEDES FOTO MELDETE "KEINE VERBINDUNG"
-----------------------------------------------
Beim Anfassen derselben Funktion aufgefallen: In `anhangSchicken` stand
seit dem 19.09. `const { nachricht } = e.daten;` -- ein `e`, das es
dort nicht gibt (gemeint war `ergebnis`). Die Zeile wirft, der `catch`
daneben faengt, und der Absender liest:
"Keine Verbindung -- der Anhang wurde nicht geschickt."
Das Foto war aber da. Es kam Sekunden spaeter ueber den Ereignisstrom
in den Verlauf, mit einer roten Meldung darueber, die das Gegenteil
behauptet -- und der getippte Begleitsatz blieb im Feld stehen, also
schickt man es noch einmal.
WARUM DAS VIER TAGE UNBEMERKT BLIEB, und das ist der lehrreiche Teil:
pruef-chat-anhaenge war die ganze Zeit gruen. Sie schickt mit `fetch`
an die Route -- der bequeme Weg, und er prueft den Server gruendlich.
Sie prueft aber nicht den Weg, den ein Mensch geht. Der Fehler lag
hinter der Bueroklammer, und dort hat nie jemand hingesehen. Dazu
fuehlt er sich wie ein Netzproblem an -- und Netzprobleme sucht niemand
im Programm.
Jetzt geht ein Block durch das Dateifeld selbst und sieht auf das, was
der Mensch danach sieht: steht dort eine Meldung, und ist das Feld
leer? Gegenprobe gefahren -- mit dem alten Fehler wieder eingesetzt
werden genau diese zwei Zeilen rot, mit dem Wortlaut von oben.
Uebernommen wird eine frisch geschickte Nachricht jetzt an EINER
Stelle (nachrichtUebernehmen), fuer Anhang und Sprachnachricht. Zwei
Fassungen waeren zwei Gelegenheiten fuer denselben Fehler.
AUGENSCHONEND
-------------
Kein Blinkpunkt waehrend der Aufnahme -- der ist genau das, was die
Hausregel ausschliesst. Der Punkt atmet langsam (1,8 s, 45 bis 100 %)
und steht bei prefers-reduced-motion ganz still; die laufende Zeit
daneben traegt die Auskunft ohnehin.
Die Farben der Sprachnachricht-Blase kommen aus `--blase-leise`, der
fuer DIESE Blase ausgerechneten leisen Schrift. Eine feste Farbe waere
dieselbe Wette, die am 22.09. beim Loeschknopf 1,91:1 auf Babyblau
ergeben hat.
GEPRUEFT
--------
pruef-chat-anhaenge: 86 Pruefungen, 0 Fehler (vorher 60).
Aufgenommen wird mit MediaRecorder im echten Browser ueber den echten
Knopf, mit Chromiums erfundenem Mikrofon. Damit prueft der Abschnitt
nebenbei das, was keine gebastelte Datei pruefen koennte: ob die
Erkennung im Server versteht, was ein Browser wirklich erzeugt
(gemessen: 35 829 Bytes audio/webm, 2743 ms).
* DogFather sieht den Mikrofonknopf, der Scout nicht
* der Scout schickt dieselbe Aufnahme an der Oberflaeche vorbei:
403, und nichts davon ist gespeichert
* ein Video im Ton-Behaelter: 415
* Laenge, Vorlesewort, Bedienbarkeit, preload=metadata, Breite
* "Sprachnachricht" steht in der Gespraechsliste statt einer leeren
Zeile
pruef-chat, pruef-chat-optik: unveraendert gruen.
Co-Authored-By: Claude Opus 5 <[email protected]>
157 lines
6.3 KiB
HTML
157 lines
6.3 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>Entwicklung · 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=202609230151" />
|
||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202609230151" />
|
||
<link rel="stylesheet" href="assets/css/gate.css?v=202609230151" />
|
||
<link rel="stylesheet" href="assets/css/start.css?v=202609230151" />
|
||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609230151" />
|
||
<link rel="stylesheet" href="assets/css/entwicklung.css?v=202609230151" />
|
||
<link rel="stylesheet" href="assets/css/werdegang.css?v=202609230151" />
|
||
<link rel="stylesheet" href="assets/css/module.css?v=202609230151" />
|
||
<link rel="stylesheet" href="assets/css/haus.css?v=202609230151" />
|
||
</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">Team Dogi</a> · Entwicklung</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">
|
||
|
||
<!-- ==================================================================
|
||
ENTWICKLUNG — die Auswertung je Person (19.09.2026)
|
||
|
||
Filipe: „dan perfektionierst du eine neue wo diagramme texte und
|
||
so zu jedem modi gemacht wird und diese kategorie kannst du
|
||
entwicklung nenen."
|
||
|
||
DIESE SEITE HAT ZWEI GESICHTER, und welches man sieht, entscheidet
|
||
der Server:
|
||
|
||
Leitung -> die Karten aller, die eine haben
|
||
Ein Modi -> ausschliesslich die Bewegung in der EIGENEN Karte,
|
||
ohne Namen, ohne Anlass, ohne wer-hat-was
|
||
|
||
WAS HIER NICHT STEHT UND NIE STEHEN WIRD: eine Punktzahl, ein
|
||
Prozentwert, ein Durchschnitt, eine Rangliste, ein Vergleich
|
||
zwischen zwei Menschen. Eine Zahl ueber einen Menschen wird
|
||
gelesen, verglichen und weitererzaehlt — gebraucht wird ein
|
||
Gespraechsanlass.
|
||
============================================================== -->
|
||
|
||
<section class="kopf-zeile">
|
||
<div>
|
||
<p class="marke">Entwicklung & Nachwuchs</p>
|
||
<h1 class="titel" id="titel">Entwicklung</h1>
|
||
<p class="unterzeile" id="unterzeile">
|
||
Wie sich jemand über die Zeit bewegt. Keine Note, kein Vergleich –
|
||
jede Karte nur mit sich selbst.
|
||
</p>
|
||
</div>
|
||
</section>
|
||
|
||
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
|
||
|
||
<!-- ---- Die Liste (nur Leitung) ---------------------------------- -->
|
||
<section id="liste-block" hidden>
|
||
<p class="w-hinweis" id="liste-hinweis"></p>
|
||
<div id="liste" class="w-liste" aria-busy="true">
|
||
<p class="leise">wird geladen …</p>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ---- Eine Karte (nur Leitung) --------------------------------- -->
|
||
<section id="karte-block" hidden>
|
||
<button type="button" class="knopf knopf--still knopf--klein" id="zur-liste">
|
||
← Alle Karten
|
||
</button>
|
||
|
||
<h2 class="w-name" id="karte-name">…</h2>
|
||
<p class="w-satz" id="karte-satz">…</p>
|
||
|
||
<!-- Diagramm 1: Bewegung. Zwei Richtungen um eine Nulllinie —
|
||
vorwaerts und rueckwaerts sind dieselbe Groesse mit
|
||
verschiedenem Vorzeichen, nicht zwei Themen. -->
|
||
<section class="w-teil" id="bewegung-block">
|
||
<h3 class="e-abschnitt">Was sich bewegt hat</h3>
|
||
<p class="w-teil__satz" id="bewegung-satz"></p>
|
||
<div id="bewegung"></div>
|
||
</section>
|
||
|
||
<!-- Diagramm 2: der Streifen. Eine Zeile je Punkt, eine Spalte je
|
||
Monat. Das Zeichen sagt die Stufe, die Farbe verstaerkt nur. -->
|
||
<section class="w-teil" id="streifen-block">
|
||
<h3 class="e-abschnitt">Punkt für Punkt, Monat für Monat</h3>
|
||
<p class="w-teil__satz" id="streifen-satz"></p>
|
||
<div id="streifen" class="w-streifen"></div>
|
||
</section>
|
||
|
||
<!-- Die Texte. Reihenfolge ist Absicht: erst was sich bewegt hat,
|
||
dann was traegt, erst danach was liegt. -->
|
||
<section class="w-teil" id="texte-block">
|
||
<h3 class="e-abschnitt">Was dazu zu sagen ist</h3>
|
||
<div id="texte"></div>
|
||
</section>
|
||
|
||
<p class="w-fuss">
|
||
Auf dieser Seite gibt es keine Punktzahl und keinen Vergleich zwischen
|
||
Personen. Was hier steht, ist ein Gesprächsanlass – kein Zeugnis.
|
||
Einschätzungen setzt und ändert man im Katalog:
|
||
<a href="entwicklung.html">Eure Aufgaben</a>.
|
||
</p>
|
||
</section>
|
||
|
||
<!-- ---- Die eigene Sicht (Modi) ---------------------------------- -->
|
||
<!-- ==================================================================
|
||
WAS DER MENSCH SELBST SIEHT.
|
||
|
||
Hier steht kein fremder Name, keine Beobachtung über jemand
|
||
anderen und kein Anlasstext. Nur: ob sich etwas bewegt hat.
|
||
|
||
Die Lesehilfe und die zwei Wege am Ende sind am 19.09.2026
|
||
dazugekommen. Vorher standen hier Balken ohne Erklärung und ein
|
||
„Frag danach" ohne Adressaten – eine Sackgasse mit freundlichem
|
||
Ton.
|
||
============================================================== -->
|
||
<section id="mich-block" hidden>
|
||
<h2 class="e-abschnitt">Deine Entwicklung</h2>
|
||
<p class="w-satz" id="mich-satz">…</p>
|
||
<p class="w-lesehilfe" id="mich-lesehilfe" hidden></p>
|
||
<div id="mich-bewegung"></div>
|
||
<p class="w-fuss" id="mich-hinweis"></p>
|
||
<div class="w-wege" id="mich-wege" hidden></div>
|
||
</section>
|
||
|
||
</main>
|
||
|
||
<script src="assets/js/nachfrage.js?v=202609230151" defer></script>
|
||
|
||
|
||
<script src="assets/js/wahl.js?v=202609230151" defer></script>
|
||
<script src="assets/js/bereiche.js?v=202609230151" defer></script>
|
||
<script src="assets/js/installieren.js?v=202609230151" defer></script>
|
||
<script src="assets/js/kopf.js?v=202609230151" defer></script>
|
||
<script src="assets/js/werdegang.js?v=202609230151" defer></script>
|
||
</body>
|
||
</html>
|