Salta al contenuto

Blog ·

Il verbo a quattro parole di distanza

Cambiare un pronome olandese riscrive verbi che non tocca. Una tabella di 84 parole che esce su ciò che non conosce, e l’accordo a quattro parole di distanza.

Di Provibr

L’olandese ha due modi di rivolgersi a un lettore. u è formale e je è informale, e la scelta non è soltanto una questione di cortesia: cambia il verbo e, a differenza dell’equivalente francese o tedesco, la forma che ne esce dipende da dove sta il verbo. Questo sito era andato alla deriva usandoli entrambi, quindi abbiamo deciso per je e convertito tutto. Sono due conversioni, perché il testo olandese vive in due posti che non hanno nulla in comune: 102 articoli markdown e un catalogo di messaggi con 18841 chiavi. La misurazione prima della prima conversione: 445 pronomi formali in 44 dei 102 articoli, di cui 362 semplici, 82 possessivi e uno riflessivo. Gli altri 58 erano già informali.

Se fosse una lingua in cui un pronome è soltanto un pronome, l’intera faccenda sarebbe un solo comando di sostituzione. Non lo è, e i guasti interessanti stanno tutti a valle di questo.

La tabella che saltava le cose in silenzio

L’olandese inverte il soggetto e il verbo in una domanda o dopo un elemento anteposto, e quando lo fa la desinenza del verbo sparisce. kunt u diventa kun je, non kunt je. Che la desinenza sparisca o meno dipende dalla radice: zet u resta zet je, ma schrijft u diventa schrijf je.

Lo script deve dunque sapere, per ogni parola che può stare davanti al pronome, che cosa succede a quella parola. La prima versione aveva una tabella dei verbi che avevo visto in un campione, e lasciava stare tutto il resto. Il risultato è stato che Duwt u creditnota's è diventato Duwt je creditnota's e Verlaagt u een tijdstempel è diventato Verlaagt je een tijdstempel. Entrambi sbagliati, entrambi dall’aria grammaticale, ed entrambi del tutto silenziosi. Lo script ha riportato un successo.

È lo stesso guasto che ha già morso questa base di codice in un dominio del tutto diverso: una protezione che percorreva l’albero sintattico del nostro sorgente legava un solo genere di dichiarazione di variabile e saltava ogni altro genere, così riportava migliaia di chiavi di traduzione coperte pur essendo cieca proprio al modello che usa l’intero pannello. Una tabella che salta in silenzio una forma sconosciuta sembra completa e non lo è.

La tabella contiene ora tutte le 84 parole che compaiono davvero davanti a un pronome formale, contate dal corpus invece che a memoria, e una parola sconosciuta è codice di uscita 1. Delle 84, 51 non cambiano nulla: congiunzioni, pronomi relativi e preposizioni, davanti alle quali il pronome è semplicemente il soggetto o l’oggetto. Due terzi della tabella esistono soltanto perché il terzo che conta non possa nascondersi dietro un valore predefinito.

Tre errori che soltanto la lettura ha trovato

Una volta che la tabella è stata esaustiva, dopo l’esecuzione tre frasi erano ancora sbagliate, e nessuna di loro è un problema di tabella. tegen u kan liegen era diventato tegen je kan liegen dove dovrebbe essere tegen jou kunt liegen: lì il pronome è l’oggetto di una preposizione e passa alla forma tonica. van u uw era diventato van je uw, perché il primo passaggio ha consumato la posizione che serviva a un passaggio successivo. E u zich era diventato je zich, dove il riflessivo del pronome informale è je je.

Ognuno di questi richiede di tenere in mente un’intera proposizione. Nessun passaggio su una finestra di due o tre parole può produrli, e nessun test che confronti conteggi di parole se ne accorgerebbe.

L’accordo a distanza

La scoperta del turno è una frase che è corretta con il pronome formale e sbagliata con quello informale, dove le due parole coinvolte distano quattro parole.

als u die heeft ingesteld è giusto. als je die heeft ingesteld è sbagliato; deve essere hebt. Il pronome e il verbo si accordano, e die sta in mezzo a loro, quindi un passaggio che pretende che il verbo segua direttamente il pronome non vede proprio nulla. Il passaggio che è scattato qui è quello che cambia il pronome, e non ha alcuna ragione di guardare più avanti nella proposizione.

Il controllo che chiude questa falla è un’espressione regolare sul testo finito: il pronome informale, fino a quattro parole in mezzo, poi uno di esattamente tre verbi. Ogni corrispondenza deve essere letta da una persona, e ciò che è stato letto e approvato viene annotato con la sua ragione; una corrispondenza nuova è codice di uscita 1.

Esattamente tre verbi, perché sono gli unici la cui forma di seconda persona differisce fra i due registri. I cinque vicini ovvi sono identici in entrambi, e includerli produceva quattro corrispondenze che non avrebbero mai potuto essere un difetto. Un controllo che produce righe su cui nessuno deve intervenire è un controllo che le persone smettono di leggere.

Fino a quattro parole, perché è ciò che il corpus contiene, e perché una distanza senza limite attraversa i confini di proposizione. Sei delle dieci corrispondenze sul catalogo finito erano corrette proprio perché il verbo aveva un altro soggetto.

Due protezioni, perché la mascheratura non si può condividere

Entrambi i corpi di testo hanno ora un controllo permanente, e sono file separati.

La ragione è che trovare il testo corrente è un problema diverso nei due casi. In markdown si mascherano i blocchi di codice, il codice in riga e le destinazioni dei collegamenti. In un catalogo di messaggi si mascherano il nome dell’argomento, la parola di stile, le etichette dei rami e i tag di testo formattato della sintassi dei segnaposto, tenendo però il testo dentro un ramo, perché quel testo è olandese e un pronome che vi si trova conta. Quella mascheratura è un camminatore di parentesi graffe e non un’espressione regolare, per la stessa ragione per cui lo è la protezione dei segnaposto qui accanto: un ramo il cui testo è una sola parola sembra esattamente un argomento.

Ciò che le due protezioni condividono è una sola regola, e vive in un unico file così che non possano andare alla deriva: un pronome maiuscolo conta soltanto a inizio frase.

Quella regola è una misurazione, non una comodità. Negli articoli dieci corrispondenze nude sopravvivono alla conversione e tutte e dieci stanno in mezzo a una frase: cinque unità rack dal capitolo sui datacenter, cinque la lettera stessa, da un alfabeto che la omette di proposito. Nel catalogo ce ne sono 61, di cui 54 in mezzo a una frase, sei come etichetta e una come unità nel nome di un campo. Tutte e 61 sono state lette e nessuna è un pronome. Scriverlo come un elenco di nomi di file avrebbe mancato la seconda grafia della stessa idea; scriverlo come una forma le prende entrambe.

Il flag di insensibilità alle maiuscole su quel modello è stato dimenticato una volta, il che rendeva invisibile un pronome maiuscolo a inizio frase: esattamente la forma che compare in un’intestazione o dopo un punto fermo. Un test sonda con casi noti l’ha colto subito. Una protezione senza una sonda è una protezione di cui ci si fida invece di metterla alla prova.

Due modi di essere vacuamente verdi

Verificare la conversione del catalogo in un browser ha prodotto due falsi verdi, e sono la metà trasferibile di questo turno.

Una pagina dietro un flag di rollout risponde con una pagina di errore, e una pagina di errore non contiene alcun pronome formale. Due schermate del pannello sono chiuse così e la scansione ha riportato zero rilevamenti su entrambe, il che si legge in modo identico a una pagina pulita. A renderlo visibile è stato un limite inferiore sul numero di caratteri: la risposta chiusa era di 173 caratteri, e con i flag accesi le stesse due schermate erano di 1335 e 557. La scansione di una pagina vuota e la scansione di una pagina pulita danno lo stesso numero.

E il server di sviluppo tiene il catalogo in cache. La prima esecuzione rotta di proposito, quella che dovrebbe andare rossa così da sapere che il controllo funziona, era verde, perché il file scambiato veniva servito soltanto dopo un riavvio. Una prova rossa che è verde per una ragione senza rapporto è peggio di nessuna prova rossa: certifica il controllo.

Che cosa annoteremmo

  1. Un pronome in una lingua flessiva non è una stringa. Cambiarlo riscrive parole che non tocca.
  2. Una tabella esaustiva batte una campionata, e la differenza si vede soltanto quando esce su ciò che non conosce.
  3. Due terzi di una buona tabella possono non fare nulla. Esistono perché il resto non possa nascondersi dietro un valore predefinito.
  4. Una finestra di due parole non può vedere una proposizione. Certi errori hanno bisogno di un lettore e non c’è modo di aggirarlo.
  5. L’accordo può agire a distanza. Il nostro era di quattro parole, e nessun passaggio della catena guardava così lontano.
  6. Limiti un controllo alle forme che possono davvero differire. Cinque verbi in più hanno significato quattro righe su cui nessuno poteva intervenire.
  7. Un controllo che produce righe su cui non si può agire viene saltato, il che è peggio del non averlo.
  8. Annoti le corrispondenze approvate con la loro ragione, e fallisca su una nuova. Il silenzio non è un risultato.
  9. Una pagina chiusa si scansiona pulita. Metta un limite inferiore sulla dimensione di ciò che ha scansionato.
  10. Dimostri la prova rossa. Una cache di sviluppo ha reso verde la nostra e non avrebbe certificato nulla.

Per chiarezza su che cosa sia: la conversione degli articoli ha fatto 491 sostituzioni su 44 file, con un diff di esattamente 306 righe messe e 306 tolte e nulla toccato fuori dall’albero dei sorgenti olandesi; la conversione del catalogo ha fatto 169 sostituzioni su 115 chiavi, con il conteggio delle chiavi invariato a 18841 e nello stesso ordine, e il delta di caratteri dell’intero file riconciliato lettera per lettera. Entrambi i corpi misurano ora zero pronomi formali, e l’invariante di parola che confronta ogni coppia di parole che non sia la forma di cortesia ha riportato zero differenze ed è stato dimostrato rosso tre volte. Non dimostrato: un solo lettore, nessun secondo madrelingua, nessuna misurazione di accessibilità, e il testo del percorso di errore di tre schermate chiuse non è mai stato generato in un browser.

Dal lavoro di piattaforma su Provibr. Che cosa fanno nove cataloghi a un insieme di controlli fissi si trova in sedicimila chiavi, nove lingue, uno script di trasformazione che ha danneggiato tre articoli a cui non era mai stato puntato si trova in uno script di conversione dal raggio troppo ampio, e un’altra protezione che non riusciva a vedere la cosa per cui era stata scritta si trova in un plurale vago non è un numero.

Inizi con un host e un agente

Crei un account, installi l’agente con un solo comando e colleghi il suo primo host Proxmox. Il periodo di prova dura 14 giorni e non chiede alcun dato di pagamento.