Strumenti per sviluppatori

Le piccole faccende che spezzano un pomeriggio: un JWT da leggere, un payload da rendere leggibile, una stringa che deve sopravvivere a una query. Ognuno degli strumenti qui sotto calcola nella pagina stessa che stai guardando — ed è proprio questo il punto, perché quello che uno sviluppatore incolla in moduli del genere è quasi sempre esattamente ciò che non doveva uscire dalla sua macchina.

19 strumenti

  • Formattare JSONA qualcuno è arrivato un muro di JSON su una riga sola — una risposta di API, un campo di log, un blob di configurazione — e deve vederne la struttura prima di poterci fare qualsiasi cosa.
  • Decodificare Base64Qualcuno ha davanti una stringa che sembra un guazzabuglio e deve sapere cosa dice — un JWT, un valore preso da un secret di Kubernetes, una riga di log — senza consegnarla a uno sconosciuto.
  • Convertire un timestamp UnixQualcuno vede un numero di dieci o tredici cifre in un log, in una colonna di database o in un payload JSON e deve sapere che istante indica, e in quale fuso.
  • Validare JSONQualcosa rifiuta il JSON di qualcuno senza dire perché, e serve la riga e la colonna del primo punto in cui si inceppa.
  • Codificare in Base64Qualcuno deve infilare una stringa dove così com’è non viene accettata: una data URI, un’intestazione di Basic Auth, un campo JSON che deve sopravvivere a un trasporto con opinioni proprie su quali byte siano ammessi.
  • Generare un hash SHA-256Qualcuno ha bisogno dello SHA-256 di un testo — un valore di integrità, un’impronta da confrontare, un identificatore deterministico — e vuole quello attuale e non rotto.
  • Codificare una URLQualcuno sta montando una URL a mano — un parametro con spazi o e commerciali, una destinazione di redirect che deve sopravvivere come valore dentro un altro indirizzo — e deve sapere quali caratteri vanno protetti e quali no.
  • Generatore di UUIDA qualcuno servono uno o più identificatori adesso — per un set di dati di prova, una migrazione, un file di configurazione — e non ha voglia di aprire un terminale per questo.
  • Generare un hash MD5Qualcuno ha bisogno dell’MD5 di un testo — per confrontarlo con un valore in un database, per ricostruire una chiave di cache, o per un’interfaccia vecchia che lo pretende ancora.
  • Decodificare una URLQualcuno legge una URL presa da un log, da un export di statistiche o da un messaggio d’errore, e la parte interessante è sepolta sotto le sequenze percentuali.
  • Codificare le entità HTMLQualcuno mette in una pagina del testo che non ha scritto lui — un commento, una descrizione di prodotto, un esempio di markup — e ha bisogno che i caratteri che diventerebbero tag restino caratteri.
  • Decodificare le entità HTMLQualcuno ha davanti del testo in cui al posto dei caratteri ci sono le loro forme di escape — da un campo di database, da un feed RSS, dall’export di uno scraper — e vuole leggere cosa c’è scritto davvero.
  • Minificare JSONQualcuno vuole ridurre del JSON formattato a una riga sola, perché deve stare in una variabile di configurazione, in un campo di database o passare da un canale in cui ogni byte conta.
  • Generare un hash SHA-1Qualcuno deve produrre uno SHA-1 perché glielo chiede qualcos’altro — un oggetto Git, un vecchio schema di firma, un’interfaccia anteriore al 2017 — e non perché l’abbia scelto.
  • Analizzare una URLQualcuno ha davanti un indirizzo lungo e deve vederne i pezzi separati — host, porta, percorso, query, frammento — invece di contarli a mente.
  • Codificare in esadecimaleA qualcuno servono i byte che stanno dietro a un testo — per un protocollo, per confrontare un dump, per un campo che si aspetta esadecimale — e con i separatori che il suo strumento sa leggere.
  • Decodificare esadecimaleQualcuno ha un dump esadecimale preso da un log, da una cattura di rete o da un messaggio d’errore e vuole sapere che testo c’è dietro.
  • Analizzare una query stringQualcuno ha una query string piena di parametri di tracciamento e vuole una riga per parametro, con i valori decodificati e senza che le chiavi ripetute spariscano.
  • Validare un UUIDQualcuno ha davanti un identificatore e deve sapere se è un UUID ben formato, e quale versione e quale variante dichiara.

Perché qui «gira in locale» non è una questione di gusto

Cosa incolla la gente in un decodificatore Base64, in ordine di frequenza: un JWT, un’intestazione di Basic Auth, il payload di un webhook, un file di configurazione. Tre casi su quattro sono credenziali o le contengono. Una pagina che decodifichi tutto questo su un server le ha già viste, e le ha nei log delle richieste, che qualcuno lo volesse o no.

Non è un’obiezione teorica. È il motivo per cui questo intero genere di siti è bloccato dal proxy in parecchie aziende, e per cui dove non lo è di solito esiste una policy che nessuno legge. Tutto quello che sta in queste pagine è aritmetica che un browser sa fare da solo; portarla altrove è una scelta, ed è quella sbagliata.

Cosa resta esattamente nel browser, e cosa no

La pagina è HTML statico servito da una CDN. Al primo tasto premuto viene caricato un piccolo modulo JavaScript, una volta e poi dalla cache, e il lavoro avviene nella tua scheda. Nessuna richiesta porta con sé quello che hai scritto, e questo si verifica nel pannello di rete invece di crederci sulla parola.

Due limiti detti per intero. La pagina in sé è una richiesta, quindi il fatto che tu sia stato qui è visibile a noi e alla tua rete. E il sito ha pubblicità e, se accetti, statistiche: nessuna delle due vede il contenuto di un campo di testo, ma entrambe sono richieste verso terzi. La differenza è quella fra quello che scrivi e il fatto che tu sia qui: la prima cosa non si muove mai, la seconda per forza sì.

Cosa comporta tutto questo per il GDPR

Se i dati non escono dal dispositivo non c’è comunicazione verso di noi e quindi nemmeno un trattamento affidato a un responsabile esterno per quello che incolli. Nella pratica è il punto decisivo quando nel campo finiscono un’anagrafica cliente, un ticket di assistenza o un payload con dati personali, ed è il motivo per cui questi strumenti si possono usare dove una versione con server non si potrebbe.

Quello che invece succede sta nell’informativa e qui non viene addolcito: la visita, le richieste di pubblicità e statistiche, il consenso. Che uno strumento calcoli in locale non rende neutro l’intero sito — toglie soltanto la parte che pesa di più, che è anche l’unica su cui il Garante avrebbe qualcosa da dire riguardo al contenuto di un campo.

Una domanda per pagina, invece di una pagina con menu a tendina

Una pagina sola che risolvesse Base64, URL e HTML nei due sensi dietro un selettore sarebbe meno pagine e peggiori. Codificare e decodificare falliscono in modi diversi, si spiegano in modo diverso e si cercano in modo diverso: chi ha davanti una sequenza percentuale rotta e chi sta montando una query non hanno quasi niente da dirsi.

Così ogni verso ha la sua pagina, con gli errori che le appartengono: cosa fare quando il Base64 si scioglie in byte che non sono testo, perché `encodeURIComponent` lascia passare il punto esclamativo e cosa combina questo a una firma OAuth. Da lì esce una pagina che merita di essere letta, e succede solo perché non parla a sei pubblici insieme.

Funzionano anche senza rete

Una volta caricata la pagina di uno strumento, tutto avviene in locale: funziona in treno, in aereo e dietro un proxy aziendale che blocchi il dominio un’ora dopo. Non viene installato nessun service worker e non c’è niente da configurare; una pagina che non chiama mai fuori semplicemente non ha niente da perdere quando la connessione sì.

In concreto vuol dire che questi strumenti servono proprio nelle situazioni in cui uno strumento online sarebbe la scelta sbagliata: su una macchina non tua, su una rete di cui non ti fidi, con dati che in realtà non dovresti spostare. È per quel caso che sono fatti.

Nessun account, nessun limite, nessuna filigrana

Non c’è niente da registrare perché non c’è niente da amministrare. Gli strumenti non conservano nulla fra due visite: chiudere la scheda cancella quello che avevi scritto, perché non è mai esistito da nessun’altra parte se non in quella scheda.

Non c’è nemmeno un limite di quantità, e non per generosità: il tuo tempo di calcolo non lo paghiamo noi, quindi non c’è niente da razionare. L’unico tetto è quanto testo il tuo browser è disposto a tenere in un campo.

Perché i termini tecnici restano in inglese

In queste pagine c’è scritto payload, token, hash, query string e Base64 — non carico utile, gettone, impronta o stringa di interrogazione. Non è pigrizia: è la lingua in cui si parla di queste cose nei team italiani e quella in cui si cerca su Google.

Dove invece la parola corrente è italiana, si usa quella: carattere, riga, colonna, rientro, a capo, accento. La regola non è «più italiano possibile» ma «la parola che si dice davvero a voce»; qualunque altra scelta produce una pagina tradotta correttamente e che non trova nessuno.

Cosa manca qui di proposito

Non c’è nessun formattatore di HTML, CSS o JavaScript, ed è una decisione, non un buco. Uno fatto bene ha bisogno di un parser vero; le librerie che si usano per questo pesano diversi megabyte e sarebbero una scelta di licenza e di tempo di caricamento a sé stante, mentre una fatta in casa rovina input in silenzio. Il formattatore JSON è innocuo solo perché quel parser il browser ce l’ha già dentro.

Manca anche un’anteprima di Markdown o di HTML. Entrambe vorrebbero dire renderizzare markup altrui dentro questa pagina, che è esattamente ciò che la pagina per decodificare le entità HTML rifiuta di fare, con le sue ragioni, perché un parser del genere può provocare richieste di rete. Un argomento valido su una pagina non si può ignorare su quella dopo.

Strumenti per sviluppatori: domande frequenti

Quello che incollo viene mandato a un server?

No. Ogni strumento di questa sezione calcola nella pagina stessa, e il pannello di rete è il modo di verificarlo invece di crederci. La pagina arriva da una CDN e il sito ha pubblicità, quindi delle richieste ci sono: nessuna di queste porta il contenuto di un campo di testo.

C’è un limite a quanto testo posso incollare?

Solo quello che regge la tua macchina. Niente viene messo in coda, contato o limitato, perché non c’è nessun server a fare il lavoro che possa contare qualcosa. Gli input molto grandi fanno pensare la scheda per un momento: quello è l’unico tetto.

Serve un account?

No, e non c’è nemmeno niente a cui iscriversi. Gli strumenti non ricordano nulla fra due visite: chiudere la scheda cancella quello che avevi scritto, perché non è mai esistito altrove.

Posso usarli con i dati della mia azienda?

Lo decide la vostra policy, ma la risposta tecnica è che i dati non escono dal dispositivo, che è esattamente l’oggetto di quelle policy. Se ti serve dimostrarlo invece di affermarlo, apri il pannello di rete mentre lo usi: non c’è niente da mostrare.

Perché non c’è un passaggio di scaricamento prima del risultato?

Perché non c’è nessun file. Il risultato è testo nella pagina, pronto da selezionare e copiare, e farti premere un bottone prima non aggiungerebbe niente. Dove uno strumento genera davvero un file, lo scaricamento sta alla fine e non come barriera all’inizio.