Il client dell'autorità, fatto in casa — e poi erano tre
Un secondo metodo accanto a Ookla: il client dell'autorità di regolamentazione, chiuso in un add-on fatto in casa. E tre strumenti che si falsavano a vicenda.
Contenuto
- Due metodi, due domande diverse
- Prima guardare che cosa riceve il vicinato
- Che cosa questi dati non danno
- Tre trappole dell’interfaccia, tutte prese in pieno
- Che cosa è stato costruito
- La posizione è stata aggiunta dopo
- Quattro fallimenti in compilazione
- Che cosa non è
- Marche temporali in UTC, e perché non è un dettaglio
- La trappola nell’allargare la tabella
- E poi erano tre
- La prova
- Due passi falsi lungo la strada
- E una frase che era falsa da quattro giorni
- La cadenza fissa
- Che cosa ti consiglio
- E questo che cosa significa?
Nella prima parte ho sostituito il mio strumento di misura perché quello incluso sbagliava di un fattore quattro. Da allora un client Ookla misura ogni 30 minuti, e la serie è buona.
Ha però una proprietà da conoscere: vale a casa mia. Un operatore non è tenuto a crederci, e non è nemmeno scorretto. Ookla misura contro un server qualsiasi, scelto per vicinanza.
Così si è aggiunto un secondo metodo. E con esso un problema che non avevo previsto.
Due metodi, due domande diverse
In Austria l’autorità di regolamentazione gestisce un proprio test di rete. Misura contro i suoi server e comunica il risultato al suo server di controllo.
| Ookla | test dell’autorità | |
|---|---|---|
| misura contro | il server più vicino | il server dell’autorità |
| il risultato resta | da me | anche lì |
| cadenza | ogni 30 minuti | quattro volte al giorno, a finestre |
| serve come | indicazione | registrazione |
La differenza non è la precisione. È l’ancoraggio: alla fine il risultato non sta solo nel mio database.
Il client a riga di comando è pubblico. Nelle note sta scritto che è pensato per sviluppo e verifica — non un divieto, ma un’indicazione di ciò che queste misure non sono. Più sotto ci torno.
Prima guardare che cosa riceve il vicinato
Prima di costruire qualcosa ho interrogato i dati aperti della stessa autorità. Ogni misura del loro test di rete è pubblicata, con posizione, operatore e tecnologia.
Entro otto chilometri, solo 5G, solo il mio operatore — 539 misure:
| Download | |
|---|---|
| quartile inferiore | 104,2 Mbit/s |
| mediana | 189,9 |
| quartile superiore | 341,7 |
| decile migliore | 487,7 |
| sotto i 90 Mbit/s | 22 % delle misure |
Per la prima volta la mia serie era collocata invece che giudicata. I 242–338 dei giorni buoni stavano tra mediana e quartile superiore — del tutto normali. I 60–95 dei giorni cattivi stavano sotto il quartile inferiore.
Questo indebolisce una tesi che quasi credevo: se la cella fosse strutturalmente al limite, ci starebbe sotto tutto il circondario. Non ci sta.
Che cosa questi dati non danno
Nella finestra degli ultimi sette giorni c’erano due misure confrontabili, in trenta giorni undici. Su quello che succede da martedì non dicono nulla.
E sono misure da telefono in posti diversi, dentro e fuori. Descrivono l’ordine di grandezza della zona, non la mia cella.
Tre trappole dell’interfaccia, tutte prese in pieno
- Il parametro del raggio si chiama
radius, nondistance. Con il nome sbagliato torna una lista vuota — che sembra «nessun dato in zona». - Il campo dei risultati può essere
nullinvece di una lista vuota. Chi ci itera sopra si schianta in mezzo all’elaborazione. - La più costosa: ogni tanto l’interfaccia restituisce una pagina vuota anche se dopo c’è dell’altro. Il mio ciclo si fermava lì. Due interrogazioni identiche hanno dato una volta 5000 misure e una volta 1000.
Al punto tre va aggiunta un’ammissione: nel giro di pochi minuti ho riferito prima «solo cinque misure, troppo poche per dire qualcosa» e poi «118». Stessa zona, solo interrogata a profondità diverse. Lo script ora si ferma solo dopo tre pagine vuote di fila — e restituisce 14.500 misure invece di 1000.
Una condizione di uscita che dà retta al primo silenzio trasforma un buco nei dati in un’affermazione di fatto.
Che cosa è stato costruito
| Add-on | Alpine nudo, il client C fissato a un commit |
| Servizio | HTTP in casa; una chiamata misura e risponde in JSON |
| Programma | ogni 15 minuti in quattro finestre: 06–08, 11–13, 17–19, 23–01 |
Quattro finestre invece che tutto il giorno, perché ogni misura occupa davvero la linea e perché l’andamento giornaliero resta confrontabile solo se si misura sempre alle stesse ore.
Il client è inchiodato a uno stato preciso, non a «ultima versione». Per uno strumento di misura non è pignoleria: se l’attrezzo cambia a metà serie, dopo si confrontano due cose diverse.
La posizione è stata aggiunta dopo
Qui si è fatto interessante. Il client invia la propria posizione come lista vuota — scritta nel codice, senza interruttore. Per una misura che un giorno dovrebbe documentare qualcosa è l’impostazione sbagliata: senza posizione è una misura da chissà dove.
Un piccolo script interviene quindi durante la compilazione in tre punti del sorgente e inserisce i campi veri.
La parte che conta: si interrompe se anche uno solo dei tre punti non combacia esattamente.
Una modifica applicata a metà sarebbe peggio di nessuna. Compilerebbe, girerebbe e misurerebbe — e nessuno saprebbe che cosa c’è dentro.
E i nomi dei campi non vengono dalla memoria, ma dal sorgente del server di controllo che li riceve. È la differenza tra «dovrebbe chiamarsi così» e «si chiama così».
Onestamente: se la posizione arrivi davvero, quel giorno non era ancora confermato. I dati aperti sono indietro di uno o due giorni.
Quattro fallimenti in compilazione
- L’immagine di base non era definita, perché mancava un file. Senza non è stabilito su che cosa si costruisce.
- Un conflitto di pacchetti nell’immagine di base già pronta. Fissa un archivio in cui due librerie che vanno insieme non vanno insieme. Un aggiornamento non aiutava — il blocco non offre nemmeno la versione più nuova. Soluzione: Alpine nudo, quindi senza la libreria di appoggio; le impostazioni se le legge il servizio.
- Una sostituzione nel Dockerfile che non ha fatto presa — e ho riferito «adattato» senza controllare. La compilazione è poi fallita due volte con lo stesso errore. Da allora: riscrivere il file invece di intagliarlo, e controllare dopo.
- Il server di controllo ha respinto la prima richiesta con «la tua versione del client non è supportata». Falsa pista: non era la versione, erano due campi obbligatori mai inviati. Con quelli risponde gentilmente a qualunque versione.
Il quarto è il più istruttivo. Il messaggio di errore era vero e fuorviante insieme — descriveva che cosa il server non riusciva a riconoscere, non perché.
Che cosa non è
Non è una misura certificata. Secondo le regole dell’autorità questa si fa solo da browser su un computer, con la linea altrimenti libera, in tre cicli in tre giorni diversi — e allora fonda una presunzione di prova.
La mia serie è un’altra cosa, più modesta: un andamento rilevato con uno strumento riconosciuto, che rende fattuale una discussione. Non sostituisce un mezzo di prova. Chi confonde le due cose si ritrova con 300 misure che formalmente non valgono nulla.
Marche temporali in UTC, e perché non è un dettaglio
Il contenitore dell’add-on non conosce il fuso orario, e nessuno glielo passa.
Nella tabella c’era quindi 05:15 mentre in casa erano le 07:15.
Ora è tutto UTC con una Z esplicita. Costa due secondi di calcolo mentale e ne
risparmia due: uno scalino al cambio dell’ora di fine ottobre — e un
destinatario costretto a indovinare il fuso.
Quanto possano costare due ore di sfasamento l’ho già pagato altrove: mi sono costate l’intera attribuzione di colpa.
La trappola nell’allargare la tabella
Quando è arrivata una colonna nuova, l’intera serie esistente è quasi sparita. Il lettore scartava le righe il cui numero di colonne non corrispondeva all’intestazione — senza messaggio di errore, solo una tabella improvvisamente molto più corta.
Ora i campi mancanti vengono riempiti. Si scarta solo ciò che è troppo lungo, perché indica un separatore dentro il testo, e allora sarebbe tutto spostato.
E poi erano tre
L’osservazione non è venuta da un’analisi, ma dal guardare: alle 5:00 e alle 5:30 poca portata, e in parallelo Ookla misura insieme al test dell’autorità.
Era vero. Su questa linea misuravano ormai tre sistemi: il client dell’autorità nelle sue finestre, Ookla ogni 30 minuti tutto il giorno, e l’antenna stessa due volte al giorno.
Ognuno satura la linea per 20–45 secondi. Se ne girano due insieme, si dividono la banda e tutti e due riportano la metà.
La prova
107 misure del client dell’autorità, raggruppate per distanza temporale dalla corsa Ookla più vicina:
| Distanza | n | giù, mediana | su, mediana |
|---|---|---|---|
| davvero in contemporanea, sotto 20 s | 3 | 75 | 29 |
| appena accanto, 20–90 s | 8 | 208 | 98 |
| separate, 90–300 s | 25 | 112 | 94 |
| lontane, oltre 300 s | 71 | 126 | 98 |
E ora la frase decisiva: il download più basso di tutta la serie e l’upload più basso di tutta la serie stanno entrambi in quelle tre righe — su 107. Che entrambi gli estremi finiscano per caso nelle stesse tre ha una probabilità inferiore a uno su mille.
Quei tre risultati non mostrano che cosa sa fare la linea. Mostrano che cosa succede se la si occupa tre volte.
Due passi falsi lungo la strada
Prima raggruppato per il minuto — :00 e :30 contro :15 e :45 — ottenendo «nessun effetto».
Raggruppamento sbagliato. Ookla non parte fisso alla mezz’ora, slitta di circa 25 secondi a corsa e così percorre lentamente l’orologio. Di 43 presunti incontri solo tre erano veri; gli altri 40 coprivano l’effetto.
Poi «si sovrappone sì o no» con 90 secondi di tolleranza — e di nuovo niente, stavolta addirittura al contrario. Sbagliato anche questo: a 90 secondi di distanza entrambe le misure sono finite da un pezzo. Solo la scaletta per distanza lo mostra.
Due volte ho posto male la stessa domanda e due volte ho ricevuto una risposta pulita. Un’analisi non ti dice che il raggruppamento era sbagliato. Calcola quello che le dai.
E una frase che era falsa da quattro giorni
In tre file stava scritto dalla costruzione: «durante una finestra il sensore di casa tace».
Non era mai stato costruito. La condizione che avrebbe dovuto farlo non compariva in nessuna automazione fuori dal proprio file. L’intenzione era scritta bene e mai realizzata — e siccome stava lì, nessuno è più andato a controllare.
È la riga più scomoda di questo articolo. Una documentazione che descrive un’intenzione come uno stato è peggio di nessuna documentazione.
La cadenza fissa
Uno sfasamento da solo non sarebbe bastato: l’integrazione Ookla misura a intervalli, non a orari fissi, e quindi torna inevitabilmente a scivolare nei quarti d’ora dell’altra misura.
Così la sua interrogazione è stata spenta e la cadenza imposta dall’esterno:
client dell'autorità :00 :15 :30 :45 solo nelle quattro finestre
Ookla :07 :37 tutto il giorno, come prima
antenna 08:07 e 20:07 fuori da tutte le finestre
Sette minuti di distanza, per misure che durano meno di un minuto.
Due accortezze fanno parte della cosa:
Verificato che senza interrogazione propria Ookla misuri ancora. Una interrogazione spenta è un ottimo modo per chiudere in silenzio una serie di misure. Quindi: avviata a mano, e 30 secondi dopo il valore nuovo era lì.
E un avviso se la cadenza salta. Se per tre ore non arriva un valore nuovo, il sistema lo segnala. Un programma che smette in silenzio è esattamente il tipo di guasto che si scopre solo quando si analizza.
Per inciso, il resoconto del mattino è passato dalle 07:30 alle 08:15 e non misura più da sé, legge il valore delle 08:07. Il mio primo tentativo avrebbe tolto solo la misura lasciando il resoconto dov’era — e allora avrebbe letto il valore della sera prima, vecchio di undici ore.
Che cosa ti consiglio
- Aggiungi un secondo metodo se vuoi documentare qualcosa. La tua serie è un’indicazione. Uno strumento riconosciuto è un argomento.
- Guarda che cosa riceve il vicinato prima di sospettare dell’operatore. I dati aperti esistono; collocano i tuoi numeri.
- Inchioda lo strumento a una versione. Un attrezzo che cambia a metà serie trasforma una serie in due.
- Fa’ interrompere una modifica se non combacia esattamente. Applicata a metà è peggio che non applicata — perché gira lo stesso.
- Conta i tuoi strumenti. Ognuno occupa la linea. Tre sulla stessa linea si misurano a vicenda.
- Scrivi solo quello che è costruito. Un’intenzione che sembra uno stato mette fine a ogni ulteriore verifica.
E questo che cosa significa?
Volevo rendere le mie misure più solide e per prima cosa le ho rese inservibili. Il terzo strumento ha prodotto i tre valori peggiori di tutta la serie — proprio quelli che altrimenti avrei mostrato più forte di tutti.
Quello che resta sono due cose. Un andamento rilevato con uno strumento che non è mio. E una cadenza in cui i tre non si incontrano più.
Il resto è la vecchia lezione in abiti nuovi: un osservatore che sta in mezzo si misura anche da solo.
Che cosa abbia poi mostrato la serie pulita sta nella terza parte: Il ripetitore più debole era il migliore.
Se vuoi seguire tutto questo: usa RSS
Niente newsletter. Non mi dai un indirizzo, non tengo liste e nessuno deve acconsentire a nulla per sapere che un articolo è pronto. RSS è la soluzione più vecchia e, per entrambe le parti, la più onesta.
Come si fa, e perché niente newsletter
- 1Procurati un lettore di feed. Senza account con un’app sul telefono o un’estensione del browser; chi preferisce usa un servizio con account.
- 2Inserisci lì l’indirizzo qui sopra.
- 3Fatto. I nuovi articoli compaiono da soli nel tuo lettore — ciò che non leggi resta non letto, e niente finisce tra fatture e pubblicità nella posta.
Perché è meglio: il tuo lettore scarica il file. Io non ricevo nessun indirizzo e non posso vedere chi legge né se qualcuno ha aperto. Disiscriversi vuol dire cancellare la voce — senza link, senza mail di conferma, senza di me.