Grote onderhoudsronde deel 3: Fix It Forward

In deel 1 ging het over nieuwe functies, in deel 2 over begrijpen wat je ziet. Dit derde bericht gaat over iets wat minder glimt maar er net zo goed bij hoort: dingen die niet meer werkten, en die we hebben gerepareerd. (maar natuurlijk ook over nieuwe features en probeersels die we hebben toegevoegd)
Daar bestaat een term voor die we op deze site hebben omarmd: fix it forward. In de softwarewereld betekent dat: gaat er iets stuk, dan draai je niet halsoverkop alles terug naar hoe het gisteren was, maar zet je een stap vooruit — je repareert het en gaat verder. Bij grote bedrijven is dat een zorgvuldige afweging, met draaiboeken en een team dat 's nachts gebeld wordt.
Hier ligt dat eenvoudiger. Dit is een hobbysite, geen organisatie met miljoenen klanten die uren stilstand niet kunnen hebben. Er is geen changeprocedure, geen wachtrij, geen vergadering. Zien we dat iets niet meer goed werkt, dan fixen we het — vaak dezelfde avond nog. Dat is geen slordigheid maar een bewuste keuze: liever een pagina die vandaag klopt dan een pagina die volgende maand perfect is.
Het heeft ook een keerzijde, en die staat er net zo goed in. Wie doorlopend sleutelt, bouwt af en toe iets kapot. En wie op honderd externe bronnen leunt, krijgt te maken met bronnen die zonder aankondiging veranderen of verdwijnen. Dat is precies waarom in deze berichten steeds ook de fouten staan: ze horen bij de werkwijze. Niet elk probleem hieronder is door onszelf veroorzaakt, en niet elk probleem was met meer voorzichtigheid te voorkomen geweest.
Laten we daar meteen eerlijk over zijn: nieuwe functies brengen nieuwe fouten mee. Dat is geen ongelukje dat we er nog even uit gaan halen, dat is hoe het werkt. Deze site is óók een speeltuin — er wordt hier graag met nieuwe technieken gespeeld en volop geëxperimenteerd, en experimenteren betekent per definitie dat het soms misgaat. We breiden uit, we verbeteren, en waar we zien dat het spaak loopt repareren we het. Voor een hobbysite is dat een prima ruil: liever tien nieuwe dingen waarvan er eentje hapert, dan drie dingen die na maanden testen eindelijk af zijn.
Wat wél elke keer terugkomt als les: een storing die zichzelf niet meldt, is het echte probleem. Niet de storing zelf. Daar gaat een flink deel van deze ronde over.
Dordt in Cijfers: actueel, en per cijfer verantwoord
Op Dordt in Cijfers stond het inwonertal van Dordrecht al sinds 1 juli op hetzelfde getal. Niet omdat er niets veranderde, maar omdat het ophalen bij het CBS stuk was — en dat op precies dezelfde manier stil als bij de buurtberichten in deel 2: geen storingsmelding, geen leeg scherm, gewoon de cijfers van vorige maand die bleven staan.
De oorzaak zit in hoe het CBS zijn cijfers aanbiedt. Elk veld heeft een naam met een volgnummer erachter, en bij een herziening van de tabel verandert dat nummer. In juli schoven 22 van de 30 velden op. Vanaf dat moment vroeg de site om velden die niet meer bestonden, en kreeg hij op elke poging een foutmelding terug die nergens werd opgemerkt.
Dat is nu op drie manieren rechtgezet:
- De veldnamen worden opgezocht in plaats van vastgelegd. Bij elke ophaalronde kijkt de site eerst welke nummers het CBS op dat moment gebruikt. Een volgende hernummering merkt niemand meer.
- Mislukken is niet meer stil. Faalt het ophalen, dan komt dat in het interne foutenlogboek terecht, en worden de oude cijfers bewust bewaard in plaats van vervangen door een half gevuld overzicht.
- De pagina laat zien wanneer de cijfers zijn opgehaald, zodat je zelf kunt zien of ze vers zijn.
Bij het herstel kwamen nog twee dingen boven water.
Elk cijfer heeft nu zijn eigen jaartal. Het CBS levert niet alles tegelijk: het inwonertal van 1 januari 2026 stond er al, maar de WOZ-waarde, het aantal huishoudens en de bevolkingsdichtheid waren nog van 2025. Die stonden eerder onder één gezamenlijk jaartal; nu draagt elke tegel het jaar waar dat cijfer werkelijk uit komt.
De herkomstgrafiek volgt de huidige CBS-indeling. Die toonde nog westers/niet-westers met cijfers uit 2022, een indeling die het CBS zelf heeft losgelaten en niet meer publiceert. Vervangen door de indeling die het CBS nu wél gebruikt, naar herkomstland (Nederland, Europa buiten Nederland, buiten Europa), met cijfers van 1 januari 2026.
Verder heeft elke sectie op de pagina een zichtbare bronregel gekregen die er ook bij vertelt wat een cijfer niet zegt. Bij veiligheid staat er nu bijvoorbeeld bij dat het om geregistreerde misdrijven gaat: wat niet gemeld wordt telt niet mee, en een stijging kan dus ook betekenen dat mensen vaker aangifte doen. Bij de antennes heet "masten" nu antennelocaties, want de meeste zitten gewoon op een dak. En de parkeergarages hadden wel een eigen pagina, maar geen enkele verwijzing vanaf het dashboard — die staat er nu.
Bronnen bij dit onderdeel: CBS Open Data (kerncijfers wijken en buurten, bevolking naar herkomstland, woningvoorraad, verkoopprijzen, afvalstatistiek en geregistreerde misdrijven), OpenStreetMap, het Antenneregister van de RDI, het Nationaal Parkeer Register en Drinkwaterkaart.nl.
Traumahelikopter: nu bij vrijwel elke inzet in beeld
Sinds deel 2 laat de site zien wanneer er een traumahelikopter in de buurt vliegt, met daarbij waar hij naartoe gaat — de bijbehorende P2000-inzet. Dat werkte, maar veel minder vaak dan het hoorde te doen. En dat is het verraderlijke: er ging niets kapot en er verscheen geen foutmelding. Er stond alleen regelmatig niets, terwijl er wel degelijk een helikopter onderweg was.
Het zat in een aanname die logisch leek. Je zou verwachten dat een traumaheli-inzet in P2000 binnenkomt als een melding vóór de traumahelikopter. Dat is meestal niet zo: het is gewoon een ambulancemelding, met daarin de oproepcode waarmee de heli-bemanning wordt gealarmeerd. Wij keken naar het etiket van de melding in plaats van naar wie er werkelijk werd opgeroepen.
Wat dat kostte, nagemeten over twee maanden archief:
| meldingen met een traumaheli-oproep | 949 |
| daarvan met een ander etiket — dus gemist | 419 (44%) |
| inzetten rond Dordrecht die in beeld kwamen | 4 van de 19 |
Uitgerekend de helikopter die hier het vaakst komt, die vanaf Rotterdam The Hague, wordt vrijwel altijd op die manier gealarmeerd. Voor Dordrecht werkte de koppeling daardoor in de praktijk eigenlijk nooit.
Er speelde nog iets. Vloog er een traumahelikopter over, dan werd die gekoppeld aan élke inzet die geografisch een beetje paste — ook als het om een heel andere helikopter ging. Nu wordt het toestelnummer aan de bijbehorende oproepcode gekoppeld, zodat een waargenomen helikopter alleen nog bij zijn éígen melding hoort.
Het resultaat zie je in de strook onder de header, tussen de aftellers en de andere meldingen: daar staat nu de bestemming — Traumahelikopter naar Breda — in plaats van alleen het gebied waar hij op dat moment hangt. De volledige omschrijving, met afstand en richting, staat in de tooltip.
Ook nieuw: op Verkeer verschijnt een melding wanneer er een traumahelikopter naar een incident onderweg is. Bewust alleen dán — dat er ergens een helikopter vliegt is op een verkeerspagina geen informatie, dat hij naar een ongeval onderweg is wel.
Inmiddels staat het ook op Luchtverkeer zelf. Zie je daar een traumahelikopter vliegen, dan staat er boven de kaart en in het kaartje bij dat toestel waaróm hij vliegt: welke LifeLiner het is, of hij onderweg is, ter plaatse of alweer op de terugweg, naar welke plaats, en de meldingstekst met prioriteit en tijd erbij. Dat komt uit dezelfde berekening als de nieuwsticker en de melding in de header, zodat die drie plekken nooit iets anders kunnen beweren dan elkaar.
Bij het aansluiten daarvan kwam nog een grens boven water die te krap stond. Inzetten verder dan tachtig kilometer werden weggegooid — precies de lange vluchten, van Rotterdam naar Limburg bijvoorbeeld, waarvoor je nu juist op zo'n kaart kijkt. Staat de oproepcode van de helikopter zelf in de melding, dan mag die afstand nu oplopen tot honderdzestig kilometer.
Eén kanttekening die erbij hoort: politiehelikopters staan niet in P2000. Zie je die in beeld, dan staat er dus wel wáár hij vliegt, maar niet waarom. Dat is geen omissie van ons — die inzetten worden simpelweg niet op deze manier gealarmeerd.
Bronnen bij dit onderdeel: P2000-alarmeringen en positiegegevens uit onze eigen ontvangers · gebiedsindeling van het CBS via de PDOK Locatieserver.
Alarmering op de telefoon: nu met bevestiging
Op zondagmiddag 2 augustus ging in Urk iemand te water. Grote inzet: brandweer, KNRM, reddingsbrigade, ambulances, in totaal 23 eenheden, en een opschaling naar GRIP 1 — de code die aangeeft dat de hulpdiensten hun aanpak op elkaar moeten gaan afstemmen. Op de site kwam die melding keurig binnen. Op de telefoon niet.
Dat is een klein ongemak met een groot randje eraan, want het is exact het patroon uit de inleiding: er ging niets stuk. De melding was ontvangen, correct herkend als GRIP-opschaling, netjes opgeslagen en aantoonbaar doorgestuurd. Het logboek meldde drie keer "succesvol verstuurd". En toch kwam er niets aan.
De oorzaak is een keuze die er jarenlang niet toe deed. Een melding doorgeven aan de Telegram-bot ging zonder ontvangstbevestiging — versturen en doorlopen, zoals je een brief in de bus gooit. Zolang beide kanten draaien gaat dat goed en scheelt het tijd. Maar was de ontvangende kant net even een seconde weg — een herstart, een haperende verbinding — dan viel de melding in het niets. Niemand die het merkte: de verzender was tevreden, want hij had hem verstuurd.
Dat is nu op twee plekken rechtgezet. Bij het versturen wordt op een bevestiging gewacht. Blijft die uit, dan verschijnt dat als storing in het foutenlogboek in plaats van als "succesvol". En de ontvangende kant onthoudt zijn plek: is die kort offline, dan worden de gemiste meldingen alsnog nagestuurd zodra hij terug is. Wat je daarvoor inlevert is een tiende seconde per melding. Dat is bij een alarmering een prima ruil.
In dezelfde ronde is meteen de lengte aangepakt. Bij een grote opschaling wordt élke gealarmeerde eenheid opgesomd, en dan loopt zo'n bericht hard op — de melding uit Urk werd bijna tweeduizend tekens. Meldingen worden nu afgekapt op wat er past, met daaronder een regel die vertelt hoeveel eenheden er niet meer bij pasten, zodat je in elk geval ziet dát er meer op af ging. De kaartlink is uit het bericht gehaald en eronder gezet, waar hij zijn eigen ruimte heeft.
En dan de kleinste vondst, die het aardigst is. In de opsomming van eenheden staan namen als Logistiek & Ondersteuning en Gooi & Vechtstreek. Dat en-teken heeft in opgemaakte berichten een speciale betekenis en werd niet als gewone tekst behandeld, waardoor zo'n melding onderweg kon sneuvelen. Het gaat om twintig meldingen in het archief. Eén leesteken in een organisatienaam, en het hele bericht is weg. Ook dat, uiteraard, zonder dat er ergens iets rood ging kleuren.
Bronnen bij dit onderdeel: P2000-alarmeringen uit onze eigen ontvangers · de documentatie van de Telegram Bot API voor de opmaak- en lengteregels.
OV: van verspringende stipjes naar rijdend openbaar vervoer
Van alles in deze ronde is OV Dordrecht het verst doorgeschoten. De pagina toonde bussen als stipjes die elke seconde een eindje verderop opnieuw verschenen, en haltes met een nummer in plaats van een naam. Er is in twee dagen zoveel aan gebeurd dat een opsomming niemand meer leest — dus hier het resultaat, per onderdeel.
Vooraf één ding, want het hoort bij het verhaal van dit bericht: een flink deel van die stappen was het repareren van wat de vorige stap kapotmaakte. Een bus die de goede kant op reed maar op de verkeerde rijbaan stond. Daarna de goede rijbaan, maar met een schokje bij elke halte. Daarna vloeiend, maar hij viel stil zodra de bus even niets meldde. Zo werkt fix it forward in de praktijk: je ziet het, je repareert het, en de volgende dag zie je het volgende.
De bussen rijden nu echt
Een bus meldt zijn positie maar af en toe. Daartussenin stond hij vroeger stil om vervolgens naar zijn nieuwe plek te springen. Nu rijdt hij dóór: de site weet uit de dienstregeling hoe lang hij over elk stuk doet, en beweegt hem in dat tempo over de werkelijke route — inclusief bochten en rotondes, niet in rechte lijnen tussen de haltes.
Elk voertuig heeft daarbij zijn eigen tempo. Loopt hij achter op zijn laatst gemelde plek, dan rijdt hij wat harder tot hij bij is; zit hij te ver vooruit, dan zakt het tempo. Bij een halte weten we exact waar hij is, dus daar wordt hij opnieuw geijkt en verdwijnt alle opgebouwde afwijking in één keer. Aankomen gaat vloeiend: hij rolt de halte in en staat vanzelf stil, in plaats van er met een schokje op zijn plek gezet te worden.
Twee hardnekkige fouten zijn onderweg opgelost. Bij haltes liggen de heen- en terugweg soms een paar meter uit elkaar, en dan koos een bus telkens een andere rijbaan — waardoor hij een straat verderop opdook. En op een tweebaansweg kon hij de verkeerde kant op rijden, omdat de afstand bepaalde welke rijbaan hij volgde. Nu bepaalt de rit zelf de richting: van welke halte hij komt en welke eraan komt.
Meldt een bus een tijdje niets, dan verdwijnt hij niet meer plotseling. Hij vervaagt eerst — zichtbaar stilte, geen stilstand — en gaat er pas na vijf minuten af.
De trein is erbij
Nieuw op de pagina: vertrekborden voor Dordrecht, Dordrecht Stadspolders, Dordrecht Zuid en Zwijndrecht, met tijd, treinsoort, bestemming, spoor en de actuele vertraging. Die komen van de reisinformatie van NS, waardoor er ook bij staat wat je op het perron hoort: een spoorwijziging licht rood op, en meldingen als "Stopt niet in Blauwe Zoom" staan bij de trein zelf. Valt die bron weg, dan toont het bord gewoon de dienstregeling.
Het spoor staat op de kaart getekend, de stations staan er als eigen punten op — van Zwijndrecht tot Geldermalsen — en rijdende treinen staan erop met hun nummer en snelheid. Klik je er een aan, dan zie je wie hem rijdt, waar hij heen gaat, wat de volgende halte is en hoe laat hij daar vertrekt, welke route hij rijdt en zelfs met welk materieel.
Klik je een station aan, dan zie je wat voor station het is, welke sporen er zijn, of het zelfstandig toegankelijk is en de eerstvolgende vertrekken — ook voor Sliedrecht, Gorinchem en de rest van de lijn, dus niet alleen voor de vier grote borden.
Eén lijn verdient een aparte vermelding, omdat we daar iets doen wat we normaal juist níét doen. Van de MerwedeLingelijn wordt geen positie uitgezonden — niet door het NDOV-loket en niet door NS. Zijn plek op de kaart is dus berekend uit de dienstregeling plus de gemeten vertraging. Dat is een aanname, en dus zie je het ook: zo'n trein heeft een onderbroken rand en een tilde voor zijn nummer, en het kaartje zegt erbij dat de positie berekend is. Liever een zichtbaar geschatte trein dan een onzichtbare lijn — of erger, een geschatte trein die zich voordoet als een gemeten.
Haltes hebben weer een naam
Op de kaart stond letterlijk "Aankomst bij 53705060". De haltecode die de bussen uitzenden bleek in het landelijke dienstregelingbestand nauwelijks voor te komen: van 42 codes waren er drie te vinden. Ze staan wél in het Centraal Halte Bestand, en daarmee werd 53705060 gewoon weer Pearl Buck-erf.
Daar is een landelijke naamlijst bij gekomen van ruim 53.000 haltes, want de bussen hier rijden door naar Rotterdam en Gorinchem — en die haltes heetten "onbekend". Wat we nog steeds niet weten, blijft nu leeg in plaats van dat er een nummer staat.
Klik je een halte aan, dan krijg je de eerstvolgende vertrektijden. Rijdt er die dag niets meer, dan staat dat er expliciet bij; op zondag heeft ruim een kwart van de haltes helemaal geen dienst, en zonder die melding leest "06:27" als een bus die zo komt. Vertrektijden na middernacht stonden er trouwens als "24:01" — zo telt een dienstregeling, maar op de klok bestaat dat niet. Nu 00:01.
Elke lijn als lus, met de bussen erin
Het lijnoverzicht is een routediagram geworden: de heenweg langs de bovenlijn, de terugweg langs de onderlijn, aan de uiteinden verbonden — een buslijn rijdt tenslotte rondjes. De afstanden tussen de bolletjes kloppen met de werkelijkheid, en de rijdende bussen staan erin, op de plek waar ze zijn, met kleur naar hun stiptheid.
Het aantal lijnen met een uitgewerkte route ging van 29 naar 64, inclusief de lijnen die Dordrecht niet aandoen en de waterbussen — die rijden onder een andere vervoerder en vielen daardoor eerst buiten de dienstregeling.
Verstoringen, en snelheid
Vervallen haltes, omleidingen en tijdelijke haltes staan nu op de pagina: in de haltepopup, boven de route van de lijn, en samengevat in een balk bovenaan. Vervoerderscodes staan daarin voluit ("Connexxion" in plaats van "CXX"), en tot wanneer het duurt en naar welke halte je dan moet staan apart vermeld in plaats van verstopt in een lopende zin.
Tot slot iets wat je vooral merkt aan je accu: de kaart tekent alleen nog wat je werkelijk ziet, en alle voertuigen worden op één tekenvlak getekend in plaats van als losse elementen. Ingezoomd scheelt dat ruim negentig procent van wat de browser moet bijhouden, en het tekenwerk ging met zo'n zeventig procent omlaag. Ook met vijftig bussen tegelijk blijft het soepel.
De laatste slag
Een dag later kwamen daar nog drie dingen bij die de pagina vooral prettiger maken in het gebruik. Klik je een bus of waterbus aan, dan verschijnt meteen zijn route op de kaart met de haltes die hij aandoet; sluit je het kaartje, dan is de kaart weer precies zoals je hem had staan — had je een lijn in het filter, dan komt díe route terug. Het kaartje blijft voortaan ook aan het voertuig plakken in plaats van achter te blijven op de plek waar je klikte.
De vertrekborden bleken op een telefoon slecht leesbaar: de kleurmerkjes bij "Sprinter" en "Stoptrein" waren te licht en te klein, en wie zijn telefoon op donker had staan maar de site op licht kreeg zelfs lichtgroene tekst op wit. Opgelost. En bij een waterbus stond "Rijdt over" met daarachter de dichtstbijzijnde straat op de oever — een boot vaart, en over welke weg zegt niets. Die regel is er bij waterbussen uit.
Dat gezegd hebbende: deze pagina is in een paar dagen zo ver omgebouwd dat hij zeker nog niet af is. Er zitten ongetwijfeld nog fouten in, en een aantal dingen die we er graag bij willen hebben zitten er simpelweg nog niet in. Kom je iets tegen dat niet klopt, laat het weten — dan staat het in een volgend bericht bij de opgeloste dingen.
Bronnen bij dit onderdeel: live voertuigposities (KV6/BISON) via het NDOV-loket · dienstregeling, routegeometrie en lijninformatie uit het landelijke GTFS-bestand · haltenamen en voorzieningen uit het Centraal Halte Bestand · verstoringen uit de landelijke GTFS-Realtime meldingen · vertrektijden, spoorinformatie en reismeldingen van de trein via NS.
DX Cluster: de live-stroom houdt nu vol
Op DX Cluster lopen de spots binnen die zendamateurs wereldwijd melden: wie hoort wie, op welke band. Die stroom komt live binnen, en dat werkte — tot hij een keer haperde. Daarna kwam hij niet meer op gang, en dat was aan niets te zien: de spots hielden gewoon op.
Het zat in de code waarmee de pagina zich aanmeldt voor die live-stroom. Die werd meegegeven op het moment dat je de pagina opende, maar was daarna maar kort geldig. Viel de verbinding even weg — wat over een langere sessie nu eenmaal gebeurt — dan kwam een herverbinding er niet meer doorheen. Die code gaat nu een uur mee, ruim genoeg voor een sessie.
In dezelfde ronde is opgeruimd wat er ná je bezoek bleef draaien: navigeerde je door naar een andere pagina, dan bleef de live-stroom openstaan. En de stroom sluit zichzelf nu na een half uur af, waarna je browser vanzelf opnieuw verbindt, zodat een vergeten tabblad geen verbinding blijft bezetten.
De tellingen in de zijbalk lopen voortaan over de volle drie uur die er bewaard worden — dat beloofden de kopjes al, en nu doen de cijfers het ook. "Spots per uur" rekent bovendien met de tijd die er werkelijk in zit, wat vooral scheelt kort na een herstart.
Verder is de achtergrondtekst nagelopen en van bronnen voorzien. De passage over ITU-zones noemde het WAC-award, terwijl dat over werelddelen gaat — Worked All Continents; ITU-zones zijn onder meer de uitwisseling in de IARU HF World Championship. Ook de uitleg bij de zone-informatie op de QTH-locator is meegenomen, en de twee pagina's verwijzen nu naar elkaar door: op de QTH-locator staan die zones namelijk op de kaart.
Tot slot iets wat er nu expliciet bij staat, omdat het anders op een vergissing lijkt: de bandgrenzen op deze pagina zijn ruimer dan op het bandplan. Dat is bewust. Het bandplan toont de indeling voor onze regio; een DX-cluster ziet de hele wereld, inclusief Noord- en Zuid-Amerika waar bijvoorbeeld de 40-meterband verder doorloopt. Met onze eigen grenzen zou een Amerikaanse spot op 7,25 MHz onder "overig" belanden in plaats van op 40 meter.
Bronnen bij dit onderdeel: spots van het DX-cluster · de DXCC-entiteitenlijst waarop de landenherkenning draait · WAC-voorwaarden van de ARRL · contestregels van de IARU en de RSGB voor de zone- en uitwisselinguitleg.
QTH-locator: van rekenhulpje naar kaart
De QTH-locator rekende locators om naar posities en terug. Nuttig, maar niet meer dan dat. Er is deze ronde flink wat bij gekomen, en één ding weer afgehaald.
Nieuw is dat je in het zoekveld ook gewoon een roepletter kunt invullen — PA3BWK, W1AW. De kaart springt naar dat station en rekent meteen afstand, peiling en bandadvies uit vanaf jouw eigen locatie. Is er van dat station geen locator bekend, dan komt de positie uit de woonplaats, en dan staat er ook eerlijk bij dat het een benadering is.
Het berekende pad loopt nu als grootcirkel over de kaart in plaats van als rechte lijn. Dat is niet cosmetisch: bij een pad naar Japan scheelde die rechte lijn duizenden kilometers met de route die het signaal werkelijk aflegt. De peiling eronder klopte overigens al wel — het was alleen de lijn op de kaart die iets anders beweerde dan het getal ernaast. Sla je je eigen locatie op, dan komt er een kompasroos omheen te staan waarop je afleest waar je de beam heen draait, en een nieuwe knop tekent de grayline met jouw zonsopkomst en -ondergang erbij. Onder een berekende afstand staat voortaan welke banden op dát pad op dit moment kansrijk zijn, met dezelfde ionosondeberekening als de propagatiepagina.
Verder zijn de IARU-regio's als kaartlaag toegevoegd, met de landen per regio ingekleurd en de regio erbij in elke locatie-popup. Dat is meer dan een plaatje: het bandplan verschilt per regio, dus het maakt uit in welke je zit. Bij het schrijven van die uitleg zijn de bestaande achtergrondteksten nagelopen bij de bron, en daar klopten vier dingen niet. Een locator van acht tekens is ongeveer 570 bij 460 meter, niet 150 bij 75. De CQ-zonekaart komt uit 1934 en niet uit de jaren vijftig, en is juist uitdrukkelijk getekend zónder naar amateuractiviteit te kijken. En de nummerreeksen per werelddeel stonden verkeerd om.
Tot slot drie kleinigheden die je vooral merkt als je de pagina echt gebruikt. Een plek is nu te delen met een link: één klik zet hem op je klembord, en wie hem opent kijkt meteen naar diezelfde locator. Je kunt je eigen locator ook uit je apparaat laten overnemen in plaats van hem over te typen — alleen die locator wordt bewaard, in je eigen browser, niet je precieze coördinaten. En in de popup staat de locator los in vier, zes, acht en tien tekens, elk met één klik te kopiëren: een contest wil er vier, satelliet- en SOTA-werk acht.
Het afgehaalde: er zat kort een knop op die alle Nederlandse relais- en bakenvergunningen als losse stipjes over de zones heen legde. Op een pagina waar je met locators, afstanden en peilingen bezig bent liepen dat twee verhalen door elkaar, en het beeld werd er vooral drukker van. Die vergunningen staan onveranderd op hun eigen pagina, waar ze doorzoekbaar zijn en meer context hebben dan een stip op een kaart. Iets weer weghalen hoort er net zo goed bij als iets toevoegen.
Bronnen bij dit onderdeel: de IARU voor de regio-indeling en de bandplannen · de ITU voor de regiogrenzen · QRZ voor de stationsgegevens · de vergunningenregisters van de RDI · de CQ-zonekaart zoals gepubliceerd door CQ Magazine.
Propagatie: de bron die wegviel, en een pagina die zichzelf nakijkt
Van alle pagina's is Propagatie deze ronde het grondigst herzien. Die pagina voorspelt hoe goed de kortegolf het op dit moment doet, en dat is een voorspelling — dus hoort er ook bij dat je kunt zien hoe vaak hij het bij het rechte eind heeft. Daar gaat dit hoofdstuk grotendeels over.
De bron die er zomaar uitlag
Begin met wat er misging, want dat is het duidelijkste voorbeeld van fix it forward in deze hele ronde. De hele pagina rekent op ionosondes: meetstations die van onderaf de ionosfeer aftasten en zo bepalen tot welke frequentie die het signaal nog terugkaatst. Al die metingen kwamen van één plek: het GIRO-netwerk. En dat lag er een etmaal uit. Geen storingsmelding, geen onderbreking — de metingen werden gewoon ouder en ouder, en de berekening van de bandgrenzen viel stil.
Daar is een tweede bron voor bij gekomen: eSWua, het meetnet van het Italiaanse onderzoeksinstituut INGV. Dat meet gewoon door, en zelfs vaker dan GIRO: elke vijf minuten in plaats van elk kwartier. Op het moment van inbouwen leverden Sopron, Rome, La Spezia en Gibilmanna metingen van acht minuten oud, terwijl GIRO al vijftien uur zweeg. De analyse stond daarmee meteen weer op de pagina. La Spezia is bovendien een station dat we via GIRO helemaal niet binnenkregen.
De stations worden niet meer met de hand gekozen
Bij dat uitzoekwerk bleek iets ongemakkelijks. Er stonden zes stationscodes met de hand ingetypt, en één daarvan — Chilton — had al 711 dagen niets geleverd. Terwijl Fairford, zestig kilometer verderop, elk kwartier gewoon meet en simpelweg niet werd opgehaald omdat het niet in dat lijstje stond.
Nu doet elk station binnen tweeduizend kilometer mee, en weegt het mee naar afstand: de ionosfeer boven Dourbes lijkt nu eenmaal meer op die boven ons dan die boven Rome. Dat leverde meteen vier bruikbare stations op die we nog niet gebruikten. Stations die al dagen stilliggen verdwijnen uit de tabel — een waarde van twee jaar oud is geen meting, ook niet doorgestreept — maar ze worden nog wel elk kwartier bevraagd, dus komt er één terug, dan staat hij vanzelf weer tussen de metingen. Onder de tabel staat welke er slapen en hoe lang al.
Ook rechtgezet: een stad met meerdere instrumenten (Rome heeft er drie) telde drie keer mee in plaats van één keer. En de pagina noemde station EB040 "El Arenosillo", terwijl dat Roquetes is — El Arenosillo ligt ruim zeshonderd kilometer verderop. De namen komen nu rechtstreeks van de bron.
De pagina houdt zichzelf een spiegel voor
Het interessantste is misschien wel dit: de pagina houdt bij hoe vaak zijn eigen voorspelling klopte, door hem te vergelijken met de verbindingen die er op dat moment werkelijk gemaakt werden. Dat cijfer staat er gewoon bij, met het aantal metingen erbij, zodat je zelf kunt zien hoeveel gewicht het heeft.
Die zelfmeting legde onmiddellijk een fout bloot. Op 10 meter stond in 86 procent van de gevallen "gesloten" terwijl er wel degelijk verbindingen waren. De oorzaak: het model kende Sporadische E — een verschijnsel dat in de zomer banden kan openen die volgens de gewone berekening dicht horen te zitten — alleen op 6 en 4 meter, terwijl het juist ook 10, 12 en 15 meter opent.
En de meting is daarna zelf nog eens nagekeken, want die deugde ook niet helemaal. Zei de pagina "open" terwijl er niets te horen was, dan telde dat als onbeslist — waarmee je je eigen cijfer kon opkrikken door overal maar "open" te roepen. Nu tellen beide soorten fout mee, en heet "stil" alleen nog onbeslist als het op dat uur van de dag ook normaal stil is op die band. Onder de trefzekerheid staat er daarom bij dat we nog aan het trainen zijn: sinds 3 augustus telt de meting beide fouten, en pas vanaf 17 augustus gaan we op grond daarvan de drempels bijstellen — en alleen als de meting tot die tijd is blijven lopen.
Wat er nog meer aan veranderde
De conditiescore zat als klein cijfertje in een tegel met zijn opbouw verstopt achter een tooltip. Die heeft nu een eigen blok bovenaan, en ga je er met de muis overheen, dan klapt de hele berekening open: elke bron met zijn gemeten waarde en het aantal punten dat hij bijdroeg, opgeteld tot het cijfer dat er staat. Daaronder staat wat niet meetelde en waarom — want dat de ionosondes zwijgen is minstens zo bepalend voor de waarde van dat cijfer als wat er wél in zit.
De score luistert bovendien naar onze eigen ontvanger in Dordrecht. Tot nu toe kwam alles van satellieten, ionosondes en modellen; nu telt ook mee wat hier daadwerkelijk binnenkomt, per band afgezet tegen wat op dat uur normaal is. Staat de ontvanger stil, dan weegt hij niet mee — en dan zegt de pagina dat erbij, want anders zou een kapotte antenne als slechte condities worden gelezen. Nieuw in de score zijn verder de gemeten protonenflux (die zat wel op de pagina maar niet in het cijfer, terwijl een protonenstorm de poolpaden urenlang dichtgooit zonder dat de gebruikelijke indices iets bijzonders laten zien), een vooruitblik op de kans op een radioblackout, en de toestand van de F2-laag na een storm — die blijft een dag verzwakt terwijl de indices al hersteld zijn.
Inhoudelijk zijn er ook cijfers rechtgezet die simpelweg fout stonden. De proton- en elektronenflux werden getoond met een waarde van de ene bron maar met de drempels van een andere ernaast gelegd. Daardoor meldde de pagina "Extreem" en "Zeer Hoog" terwijl de satellieten op datzelfde moment rustige achtergrondwaarden maten. Beide komen nu rechtstreeks van de meetsatellieten, in de eenheid waarin die schalen ook echt gedefinieerd zijn. Verder: Kp 7 is een sterke storm, niet een ernstige, en de aurora-index loopt van 0 tot 10.
De pagina laadt ten slotte merkbaar lichter. De röntgengrafiek stuurde een etmaal aan metingen mee op halveminuutresolutie met zestien cijfers achter de komma, waar één meting per minuut op drie cijfers hetzelfde beeld geeft — zeventig kilobyte minder per bezoek, en de pieken blijven gewoon staan. Alle dertien uitlegblokken hebben nu een zichtbare bronregel.
Bronnen bij dit onderdeel: ionosondemetingen van het GIRO-netwerk en van eSWua (INGV, DOI 10.13127/ESWUA/HF) · zonne- en ruimteweergegevens van NOAA SWPC en de GOES-satellieten · verbindingsmeldingen uit het wereldwijde spotnetwerk · onze eigen ontvanger in Dordrecht.
De grafiek die niets te melden had
Op de scheepvaartpagina staat sinds kort een dagritme: hoe druk het per uur van de dag normaal is op het water. Zo'n curve moet zichzelf opbouwen — je hebt eerst metingen nodig voordat je kunt zeggen wat normaal is — en daarom stond er bij de introductie netjes: "De metingen lopen sinds vandaag. Zodra er van een uur genoeg metingen zijn, verschijnt de curve hier."
Een etmaal later stond die zin er nog steeds. En dat is het patroon uit de inleiding in zijn zuiverste vorm: er was niets stuk te zien. De tekst was niet fout, hij was alleen niet meer waar. Er werd namelijk helemaal niets gemeten. Het onderdeel dat elke vijf minuten een meting had moeten wegschrijven kon niet starten, gaf dat netjes door aan het systeem dat het opstartte — en dat systeem gooide de klacht weg. Elke vijf minuten opnieuw, een etmaal lang, zonder één regel in het foutenlogboek.
Wat er is veranderd is niet zozeer de reparatie zelf, want die was klein. Het is dat zo'n mislukte start zichzelf nu meldt: kan een achtergrondtaak niet beginnen, dan staat dat voortaan als storing in het logboek in plaats van in de prullenbak. Bij de controle die daarop volgde bleken er nog drie andere taken op precies dezelfde manier stil te staan — waaronder die de gegevens van de energiecentrales bijwerkt, die daardoor helemaal geen gegevens had. Alle vier draaien weer.
Dat de nieuwe melding werkt, bleek sneller dan gehoopt. Twaalf uur later stond er een verse regel in het logboek: alweer een taak die niet kon starten, ditmaal eentje die diezelfde dag voor de OV-pagina was gemaakt. Nu binnen vier seconden opgemerkt en opgelost, in plaats van na een dag.
De grafiek zelf, tot slot, is eerlijker geworden over zichzelf. Staat er nog geen curve, dan zegt hij er nu bij hoeveel metingen er al zijn. Dan zie je het verschil tussen een grafiek die nog aan het vullen is en een grafiek waar niets in komt.
Bronnen bij dit onderdeel: onze eigen AIS-ontvanger.
Vliegverkeer: de ingreep hielp, maar niet helemaal
In deel 2 stond dat de eigen ontvanger voor vliegverkeer moeite had met toestellen die laag en dichtbij vliegen — die komen zó hard binnen dat het signaal vervormt, en dan vallen er gaten in het spoor. Juist boven de stad dus. Daarom draait er een tweede bron mee die alleen díe gaten opvult.
Eind juli is dat bij de ontvanger zelf aangepakt, door de versterking flink terug te zetten. Dat werkte: de vervorming is helemaal weg. En daarmee kwam de vraag op of die tweede bron nog wel nodig was — want een aanvulling die niets meer aanvult kun je beter uitzetten dan laten meedraaien.
Dat is nu twee keer een half uur gemeten, en het antwoord is genuanceerder dan verwacht. Het normale spoor is inderdaad gezond geworden: waar de posities eerst met tellen achterbleven, volgen ze elkaar nu vloeiend op. Maar de gaten zijn er nog, en precies waar ze altijd zaten: recht boven Dordrecht. Een toestel op 1,8 kilometer afstand hield een gat van bijna dertig seconden over, eentje op drie kilometer zelfs veertig. In dat halve uur vulde de tweede bron ruim vierhonderd keer zo'n gat op, en leverde hij tweehonderdzestig keer een toestel dat hier op dat moment helemaal niet binnenkwam.
De verklaring is dat het gat twee oorzaken had, en dat er maar één van is weggenomen. De vervorming is opgelost. Maar een antenne die rondom uitkijkt heeft recht boven zich vrijwel geen gevoeligheid — een blinde kegel, en dat is een eigenschap van de vorm van de antenne, geen instelling. Daar helpt geen versterking tegen. De tweede bron blijft dus meedraaien, en dat is precies de uitkomst waar we op hoopten toen we besloten eerst te meten in plaats van te schrappen.
Bronnen bij dit onderdeel: onze eigen ontvanger in Dordrecht · aanvullende posities van adsb.fi en airplanes.live.
Luchtkwaliteit: wat er in de lucht zit, en wat een norm eigenlijk zegt
Op Luchtkwaliteit stonden acht stoffen met een meetwaarde erbij: koolmonoxide, stikstofmonoxide, stikstofdioxide, ozon, zwaveldioxide, ammoniak en fijnstof in twee maten. Een getal, een kleurtje, en verder mocht je het zelf uitzoeken. Daar staat nu bij elke stof waar hij vandaan komt, wat hij met je doet en wat hij met de omgeving doet.
Sommige daarvan zijn ronduit verrassend. Ammoniak — dé stof achter de stikstofcrisis — is voor mensen in de buitenlucht zelden direct gevaarlijk, maar reageert in de lucht met zwavel- en stikstofdioxide tot ammoniumzout, en dát is weer fijnstof. De landbouw draagt zo indirect bij aan een probleem waar je hem niet meteen bij zou plaatsen. Ozon is een schoolvoorbeeld van context: op tien kilometer hoogte beschermt hij ons tegen uv-straling, op straatniveau is hij een agressief prikkelend gas. En koolmonoxide bindt ruim tweehonderd keer sterker aan je bloed dan zuurstof, wat verklaart waarom een lage dosis aanvoelt als een beginnende griep — precies de reden dat een CO-melder in huis geen luxe is.
Waarom dit hoofdstuk op zich liet wachten
Zulke teksten schrijven is niet het probleem. Er een getal in zetten wel. Want zodra je "de norm is zoveel" opschrijft, moet dat kloppen — en bij luchtkwaliteit is dat een mijnenveld, omdat er twee soorten getallen naast elkaar bestaan die allebei "norm" heten.
De WHO publiceert advieswaarden: wat er vanuit gezondheid gezien wenselijk is. De EU stelt grenswaarden vast: wat er wettelijk is toegestaan. Die twee lopen ver uiteen, en de WHO heeft haar advieswaarden in 2021 fors aangescherpt. Voor stikstofdioxide ging het jaargemiddelde van 40 naar 10 microgram per kubieke meter — een factor vier. Wie de oude waarde als "de WHO-norm" presenteert, laat de lucht dus vier keer schoner lijken dan de huidige gezondheidskundige inzichten rechtvaardigen. Die 40 is trouwens niet zomaar fout: het is nog steeds de geldende wettelijke EU-grenswaarde. Alleen is het niet wat de WHO adviseert. Bij elk getal moet er dus bij staan wélke van de twee je bedoelt, en dat staat er nu ook.
Bij de controleronde die daarop volgde bleek de rest van de cijfers te kloppen, maar viel iets anders op: de sectie die verreweg de meeste feitelijke beweringen doet, was als enige zonder eigen bronvermelding. Alle andere uitlegblokken op die pagina hadden er al een. Die staat er nu onder.
En alleen fijnstof en stikstofdioxide hádden een advieswaarde; bij ozon, zwaveldioxide en koolmonoxide stond geen enkel getal. Die zijn er nu bij gezet, rechtstreeks uit de richtlijn zelf. Daarbij hoort één ding dat makkelijk misgaat: de middelingstijd verschilt per stof. Fijnstof en stikstofdioxide hebben zowel een jaar- als een 24-uurswaarde, ozon werkt met het hoogste 8-uursgemiddelde van de dag én een gemiddelde over het zomerhalfjaar, en zwaveldioxide en koolmonoxide kennen alleen een 24-uurswaarde. Een momentane meting die boven zo'n getal uitkomt is dus nog geen overschrijding — en daarom staat de middelingstijd er nu overal expliciet bij. Koolmonoxide is bovendien de enige die in milligram wordt uitgedrukt in plaats van microgram; dat is een factor duizend, dus daar wil je niet in verdwalen.
Eén stof heeft er als enige géén: ammoniak. De WHO-richtlijn dekt precies zes stoffen, en ammoniak zit daar niet bij. Dat is geen omissie maar een keuze van de WHO zelf: het probleem met ammoniak zit niet zozeer in wat je inademt, maar in wat het met ecosystemen doet — en in het fijnstof dat het indirect vormt. Ook dat staat er nu bij, want "geen waarde bekend" is iets anders dan "we zijn hem vergeten".
Datzelfde geldt voor de index bovenaan de pagina. Die volgt de Europese luchtkwaliteitsindex, en het Europees Milieuagentschap heeft de klassengrenzen daarvan in 2024 herzien — maar onze databron rekent nog met de oude indeling. Dat is geen fout die we kunnen repareren zonder zelf van de bron af te wijken, dus staat het er gewoon bij.
Gemeten of gerekend?
Bij het nalopen van die teksten viel iets op wat losstond van de getallen zelf: de tegels bovenaan lezen als een meting — een waarde, een kleurtje, een oordeel — maar het zijn berekende waarden. Ze komen uit een model met een raster van tientallen kilometers, doorgerekend naar één punt in Dordrecht. Er staat geen sensor. Dat stond wel uitgelegd, maar in een uitklapblok onderaan, en daarmee dus feitelijk nergens. Nu staat het boven de cijfers waar het hoort.
Daaronder staan de waarden van het RIVM-meetstation, en dat is wél een meting. Dat blok stond in smalle tegels waarin de tekst lag te wringen; het heeft nu dezelfde opmaak, dezelfde balk en dezelfde schaal als het blok erboven, met een groen icoon zodat je aan de kleur ziet welke van de twee gemeten is. Die gelijke schaal is geen detail: twee blokken die er hetzelfde uitzien maar langs een andere maatlat oordelen, is verwarrender dan twee blokken die verschillen.
Bij de vergelijking tussen die twee stond alleen "+5,9", zonder erbij te zeggen waarvan. Er staat nu voluit dat het model 7,5 berekende en de meting 5,9 hoger uitkwam. Met de kanttekening die daarbij hoort: een verschil is geen fout. Het model beschrijft een gebied van tientallen kilometers, het station één plek aan de Bamendaweg. Bij de meting wegen de advieswaarden trouwens zwaarder, want dat is de lucht zoals hij hier werkelijk is.
Ook uitgezocht: de kleurschaal goed/matig/slecht op de tegels blijkt van de leverancier van de modelgegevens te komen en niet van de WHO. Dat stond nergens vermeld, en nu wel — het zijn twee verschillende oordelen over hetzelfde getal.
Waarom het advies zegt wat het zegt
Het gezondheidsadvies bovenaan gaf een oordeel zonder uitleg. Dat komt van de Europese index, en die werkt anders dan je zou denken: het is niet het gemiddelde van de vijf deelscores maar de hóógste. Eén stof kan het hele oordeel dus in zijn eentje naar "slecht" trekken terwijl de rest gewoon goed staat — op een warme zomerdag is dat vrijwel altijd ozon. Die bepalende stof staat er nu bij, met de eerstvolgende deelscore ernaast, zodat je ziet hoe scheef de verdeling is.
Eén ding dat wél stuk was
De gemeten waarden van het meetstation waren er soms niet: het hele blok verdween dan van de pagina. Er werd drie uur teruggekeken, terwijl het RIVM zijn gecontroleerde uurgemiddelden soms later publiceert. Kwam er niets terug, dan werd de vorige meting ook nog eens overschreven met niets. Er wordt nu zes uur teruggekeken, en een leeg antwoord laat gewoon staan wat er stond.
Daar hoort een tweede maatregel bij: staat een meting meer dan drie uur stil, dan krijgt hij een waarschuwingsdriehoekje met de leeftijd erbij. Juist bij ozon telt dat, want dat loopt door de middag hard op — een waarde van drie uur oud is dan iets anders dan "nu".
Op één storing na is dit hoofdstuk vooral het minst spectaculaire van dit bericht: er is weinig kapot geweest, er is vooral nagelopen en verantwoord. Maar het hoort er net zo goed bij, want het is dezelfde afweging als overal op deze site — liever een getal met een bronregel eronder dan een getal dat lekker stellig oogt.
Bronnen bij dit onderdeel: WHO Global Air Quality Guidelines 2021 · de EU-luchtkwaliteitsrichtlijn voor de wettelijke grenswaarden · het RIVM en Luchtmeetnet voor de gezondheids- en milieueffecten en de luchtkwaliteitsindex · het Europees Milieuagentschap voor de Europese index · metingen van het RIVM-meetstation Dordrecht-Bamendaweg en modelwaarden uit het Europese CAMS-model.
Nog lang niet af
Ja er komt waarschijnlijk nog wel een deel 4 en wellicht ook nog een 5 etc... (we zien wel)
Bij een bericht over reparaties past geen slotzin waarin alles opgelost is. Dat is het namelijk niet. De site is niet bugvrij — er zitten fouten in die we nog niet gevonden hebben, en een aantal die we wél kennen maar nog niet hebben aangepakt. Er staan ook nog volop functies op de lijst die er nog niet in zitten.
Dat is geen excuus vooraf, maar hoe het werkt. Deze site wordt gebouwd terwijl hij in de lucht is, door één iemand, in de avonduren. Er komt doorlopend iets bij, en met elke toevoeging komt de kans op iets dat elders scheef gaat. Daar wordt aan gewerkt — en dat "eraan gewerkt wordt" is precies wat je in deze drie berichten hebt kunnen lezen.
Dus: kom je hier iets tegen dat raar is, of ronduit onlogisch — een getal dat niet kan kloppen, een kaart die iets geks doet, een knop die niet doet wat je verwacht — dan is dat waarschijnlijk gewoon een bug. Iets wat net gebouwd is en nog niet goed genoeg getest, of een nieuwe functie die ergens anders iets omver duwde. Trek het je vooral niet aan en ga er niet lang mee worstelen. Het valt op, het komt op de lijst, en het wordt vanzelf gefixt.
Merk je iets op dat niet klopt, of mis je iets? Laat het gerust weten, dan gaat het sneller. Een flink deel van wat in deze berichten staat, is gevonden doordat iemand ergens over struikelde — en dat is precies hoe fix it forward hoort te werken.
Meer nieuws






Laatst gewijzigd