In dit artikel reflecteert James Bowman op het tijdrovende proces om vier statusindicatoren (TX, RX en controllijnen) op het display van de TermDriver2 visueel te perfectioneren.
De belangrijkste technische details zijn:
- Animatie: De lampjes maken gebruik van een 16-staps teller om een natuurlijke, gloeilamp-achtige overgang van aan naar uit te simuleren, waarbij het licht sneller opkomt dan het dooft.
- Grafische vormgeving: De lampjes zijn vormgegeven als superellipsen met een kwadratische afname in helderheid vanaf het centrum.
- Visuele effecten: Er is een Gaussian glow toegevoegd om lichtlekkage over de zwarte tekst te simuleren, waarbij de beelden eerst op 96x64 pixels worden gerenderd en daarna worden gedownsampled naar 24x16 pixels.
Bowman concludeert dat, hoewel functioneel werk in de toekomst steeds meer door AI-agents kan worden geautomatiseerd, esthetische keuzes en menselijke 'smaak' onvervangbaar en waardevol blijven.
Veel te veel detail over de knipperende lampjes van de TermDriver2
Ik heb verrassend veel tijd besteed om de vier statusindicatoren van een TermDriver2 precies goed te krijgen.
Dit zijn vier kleine gesimuleerde indicatielampjes in de hoek van het display van de TermDriver2. De bovenste twee (TX, RX) knipperen en lichten op wanneer er dataverkeer is, en de onderste twee tonen de huidige status van de controllijnen.
Aan/uit leek niet voldoende. Vooral voor TX en RX wilde ik dat de lampjes langer aan bleven dan de eigenlijke transmissietijd, anders kun je de flits gemakkelijk missen. (UART-chips van FTDI doen hetzelfde; zij implementeren een pulse stretch op hun LED-uitgangen om precies dezelfde reden.)
Maar ik wilde de lampjes ook een meer analoog gevoel geven. Iets als de prachtige indicatoren uit het Apollo-tijdperk.
De animatie van het licht
Om te beginnen is er geen sprake meer van een onmiddellijke aan/uit-schakeling. Gloeilampen werken niet zo. Elk van de vier lampen is geanimeerd van 'uit' naar 'aan' in 16 stappen:
De firmware houdt voor elk lampje een teller van 0-15 bij. Als het signaal aan staat, wordt de teller met 5 verhoogd, en als het uit staat, wordt deze met 1 verlaagd. De lampjes worden dus veel sneller helderder dan ze dimmer worden. Dit zorgt voor een mooie, gloeilamp-achtige tijdrespons.
Eén enkel byte veroorzaakt een waarneembare maar zwakke flikkering. Een constante stroom verkeer zorgt voor maximale helderheid. Wanneer het verkeer stopt, duurt het ongeveer een kwart seconde voordat het lampje volledig donker is.
Grafische details
Maar dat is nog niet alles. De graphics van de lampjes zelf (die slechts 24x16 pixels groot zijn) bevatten een verrassende hoeveelheid detail:
- De vorm: De omtrek is geen simpele rechthoek met afgeronde hoeken, maar een superellipse, geliefd bij liefhebbers van meetkunde vanwege de prettige gebogen vorm.
- De helderheid: De helderheid is niet gelijkmatig over het lampje verdeeld. Er is een kwadratische afname van het centrum van het lampje naar de rand. Dit is het duidelijkst te zien bij de drie gekleurde lampjes; het centrum is volledig helder en wordt minder verzadigd naar de randen toe.
- De gloed: Er is een laatste stap die een Gaussian glow (Gaussische gloed) toevoegt om te simuleren dat het felle licht van het lampje door de zwarte tekst begint te lekken, waardoor het helderder lijkt.
(Bijschrift: Zonder gloed links, met gloed rechts)
Al deze stappen worden gerenderd op een resolutie van 96x64, om vervolgens met een filter 4x te worden verkleind naar de uiteindelijke 24x16 die in de hardware wordt gebruikt.
Reflectie op het proces
Over het geheel genomen denk ik dat ik een hele middag heb besteed om de lampjes er zo uit te laten zien. Was dat de tijd waard? Mijn gevoel hierover is wat complex. In 2024, toen ik het deed, misschien niet echt. Er was veel ander werk dat ik had kunnen doen: de firmware van de TermDriver2 gereedmaken, testsuites schrijven, acceptatietesten uitvoeren.
Maar in 2026? Ja, absoluut. Veel van dat andere werk kan worden geautomatiseerd. Het schrijven van kwalitatief goede testsuites is bijvoorbeeld geen enkel probleem voor coding agents. Maar esthetisch werk kan niet worden geautomatiseerd. En alle beslissingen die ik hierboven heb genomen, waren kwesties van smaak. Wij hebben smaak, en het uitoefenen van die smaak op plekken waar het zichtbaar is, lijkt me tijd en moeite waard.
Veel te veel detail over de knipperende lampjes van de TermDriver2
Ik heb verrassend veel tijd besteed om de vier statusindicatoren van een TermDriver2 precies goed te krijgen.
Dit zijn vier kleine gesimuleerde indicatielampjes in de hoek van het display van de TermDriver2. De bovenste twee (TX, RX) knipperen en lichten op wanneer er dataverkeer is, en de onderste twee tonen de huidige status van de controllijnen.
Aan/uit leek niet voldoende. Vooral voor TX en RX wilde ik dat de lampjes langer aan bleven dan de eigenlijke transmissietijd, anders kun je de flits gemakkelijk missen. (UART-chips van FTDI doen hetzelfde; zij implementeren een pulse stretch op hun LED-uitgangen om precies dezelfde reden.)
Maar ik wilde de lampjes ook een meer analoog gevoel geven. Iets als de prachtige indicatoren uit het Apollo-tijdperk.
De animatie van het licht
Om te beginnen is er geen sprake meer van een onmiddellijke aan/uit-schakeling. Gloeilampen werken niet zo. Elk van de vier lampen is geanimeerd van 'uit' naar 'aan' in 16 stappen:
De firmware houdt voor elk lampje een teller van 0-15 bij. Als het signaal aan staat, wordt de teller met 5 verhoogd, en als het uit staat, wordt deze met 1 verlaagd. De lampjes worden dus veel sneller helderder dan ze dimmer worden. Dit zorgt voor een mooie, gloeilamp-achtige tijdrespons.
Eén enkel byte veroorzaakt een waarneembare maar zwakke flikkering. Een constante stroom verkeer zorgt voor maximale helderheid. Wanneer het verkeer stopt, duurt het ongeveer een kwart seconde voordat het lampje volledig donker is.
Grafische details
Maar dat is nog niet alles. De graphics van de lampjes zelf (die slechts 24x16 pixels groot zijn) bevatten een verrassende hoeveelheid detail:
- De vorm: De omtrek is geen simpele rechthoek met afgeronde hoeken, maar een superellipse, geliefd bij liefhebbers van meetkunde vanwege de prettige gebogen vorm.
- De helderheid: De helderheid is niet gelijkmatig over het lampje verdeeld. Er is een kwadratische afname van het centrum van het lampje naar de rand. Dit is het duidelijkst te zien bij de drie gekleurde lampjes; het centrum is volledig helder en wordt minder verzadigd naar de randen toe.
- De gloed: Er is een laatste stap die een Gaussian glow (Gaussische gloed) toevoegt om te simuleren dat het felle licht van het lampje door de zwarte tekst begint te lekken, waardoor het helderder lijkt.
(Bijschrift: Zonder gloed links, met gloed rechts)
Al deze stappen worden gerenderd op een resolutie van 96x64, om vervolgens met een filter 4x te worden verkleind naar de uiteindelijke 24x16 die in de hardware wordt gebruikt.
Reflectie op het proces
Over het geheel genomen denk ik dat ik een hele middag heb besteed om de lampjes er zo uit te laten zien. Was dat de tijd waard? Mijn gevoel hierover is wat complex. In 2024, toen ik het deed, misschien niet echt. Er was veel ander werk dat ik had kunnen doen: de firmware van de TermDriver2 gereedmaken, testsuites schrijven, acceptatietesten uitvoeren.
Maar in 2026? Ja, absoluut. Veel van dat andere werk kan worden geautomatiseerd. Het schrijven van kwalitatief goede testsuites is bijvoorbeeld geen enkel probleem voor coding agents. Maar esthetisch werk kan niet worden geautomatiseerd. En alle beslissingen die ik hierboven heb genomen, waren kwesties van smaak. Wij hebben smaak, en het uitoefenen van die smaak op plekken waar het zichtbaar is, lijkt me tijd en moeite waard.