Blog ·
Selecția cuprinde toată propoziția
Paisprezece propoziții numeau VM un container. Schimbarea cuvântului merge în engleză și se rupe în șapte limbi, deci ramura poartă toată propoziția.
De Provibr
Un container Proxmox este, în produsul nostru, un VPS. Clientul comandă unul, primește o mașină cu o adresă și un plan, iar fiecare ecran care vorbește despre servere vorbește corect despre el. Tipul din baza de date spune vm, și așa e bine: ceea ce s-a vândut este un server privat virtual.
Diferența trăiește cu un strat mai jos, în cuvinte. Un container nu are BIOS, nu are disc virtual în sensul în care are o mașină virtuală și nu are agent oaspete. O rundă anterioară notase, ca fir rămas, că o propoziție de pe o pagină de container spunea încă „mașina virtuală”. Erau paisprezece.
De ce cuvântul este unitatea greșită
Reparația evidentă este un loc rezervat acolo unde stă substantivul. Ceva de felul unei selecții pe tipul de resursă care dă „container” sau „mașină virtuală”, pusă în mijlocul propoziției.
În engleză merge. În germană se rupe, fiindcă articolul nu este același pentru cele două cuvinte. Se rupe la fel în spaniolă, franceză, italiană, portugheză și română, și se rupe mai tare în ucraineană, unde substantivul din acel loc trebuie să primească o desinență de caz pe care cuvântul înlocuit nu o are.
Puteți alerga după asta. Adăugați și o selecție pentru articol, apoi una pentru acordul adjectivului, și descoperiți pe urmă că ordinea firească a cuvintelor se schimbă. Ce ați construit în acel punct este un mic motor gramatical, condus de un traducător căruia nu i se dă voie să vadă propoziția.
Ramura poartă deci toată propoziția. O variantă pentru un container, una pentru tot restul, iar traducătorul scrie fiecare ca pe o propoziție în limba lui, în loc să umple un gol dintr-o propoziție engleză. Ramura generală este identică octet cu octet cu valoarea pe care a înlocuit-o, deci nimic din ce era deja corect nu s-a mișcat.
Ramura se numește container și nu lxc, fiindcă fila copiilor de siguranță folosea deja exact acel nume pentru exact acea întrebare, iar modelul ei de vizualizare numește câmpul la fel. Două scrieri ale aceleiași deosebiri într-un singur catalog costă puțin de fiecare dată și sunt o ghicitoare de fiecare dată: runda următoare trebuie să afle care dintre cele două se aplică aici.
O selecție ale cărei ramuri se potrivesc este invizibilă
Un test care verifică forma acestor chei, dacă se analizează, dacă ambele ramuri există, dacă argumentul se scrie la fel peste tot, trece pe o selecție ale cărei două ramuri spun exact același lucru. Acesta este tocmai defectul reparat aici, deci o verificare de formă valorează foarte puțin.
Garda desenează de aceea ambele ramuri, în toate cele nouă limbi, și cere ca ramura de container a unei propoziții engleze să nu mai conțină cuvântul pentru a cărui scoatere a fost scrisă. Cere de asemenea ca lista însăși să nu se fi golit în tăcere: o gardă peste o listă goală este cel mai ieftin verde din software.
Douăzeci și unu de teste, iar fiecare a fost dovedit făcându-l întâi să pice. Este aceeași formă ca garda peste cuvintele acoperirii copiilor de siguranță, și din același motiv: greșeala interesantă nu este o eroare de sintaxă, ci o propoziție impecabilă gramatical și falsă ca fapt.
Propoziția care nu a fost niciodată adevărată
Una dintre cele paisprezece nu era deloc o problemă de cuvinte.
Fila de rețea are un rând pentru cazul în care nu s-a observat încă nicio adresă. Spunea, în esență: nimic văzut încă, agentul oaspete trebuie să ruleze în mașina virtuală.
Pe un container acea propoziție se arată întotdeauna, fiindcă agentul nu citește deloc adrese pentru containere. Funcția de observare se întoarce cu o listă goală pentru acel fel de oaspete înainte să întrebe ceva. Propoziția stătea deci permanent, iar cât a stat acolo spunea două lucruri neadevărate: că asta s-ar putea schimba de îndată ce pornește ceva, și că lucrul care ar schimba-o este un agent oaspete, pe care un container nu îl are niciodată.
Nimeni nu mințise. Propoziția fusese scrisă pentru mașini virtuale, pentru ele era corectă, iar la ea se ajungea printr-un drum de cod care primise un al doilea apelant. Acesta este felul obișnuit în care un ecran ajunge să spună ceva fals: nu fiindcă cineva scrie un neadevăr, ci fiindcă o propoziție adevărată este arătată într-o situație despre care nu a fost niciodată vorba.
Ramura de container spune ce se întâmplă cu adevărat, anume că adresele dinăuntrul unui container nu sunt citite. Nu oferă nicio speranță că numărul apare mai târziu, fiindcă nu există niciuna.
| Propoziția veche | Ce era greșit la ea pe un container | |
|---|---|---|
| Promisiune | Nimic văzut încă | Nu se schimbă; codul nu se uită niciodată |
| Cauză | Agentul oaspete trebuie să ruleze | Containerele nu au unul |
| Remediu | Porniți agentul oaspete | Nu este nimic de pornit |
Două feluri în care măsurătoarea a ieșit verde din motivul greșit
Verificarea din browser pentru toate acestea a fost scrisă prima și a greșit de două ori, în feluri care merită numite fiindcă amândouă produc un rezultat trecut.
Prima: verificarea citea textul vizibil al paginii și căuta cuvântul „container”. L-a găsit. Stătea în numele planului de test, zz-k7-containerplan, semănat chiar de verificare, în timp ce propoziția de trei rânduri mai jos spunea încă „mașina virtuală”. Un test care seamănă un montaj și apoi caută în toată pagina un cuvânt pe care acel montaj îl conține își măsoară propria pregătire. Remediul este un cârlig pe elementul care poartă cu adevărat propoziția, ca afirmația să poată fi satisfăcută numai de lucrul despre care este vorba.
A doua era un defect adevărat pe care prima îl acoperise. Tipul care conduce selecția era derivat dintr-o variabilă a formularului de comandă care poartă o condiție despre amplasare, dacă planul are unde să ruleze. Un plan de container fără amplasare ieșea deci ca „nu este container”, iar pagina spunea „mașina virtuală” la o comandă de container. Tipul vine acum din tipul de calcul propriu al planului plus din ce a ales clientul, iar niciunul dintre ele nu știe nimic despre amplasare.
Aceasta este forma mai generală: o valoare care se nimerește să meargă mână în mână cu ceea ce vreți să știți nu este valoarea pe care o vreți. Se potrivește până în ziua în care nu se mai potrivește, iar în acea zi nu pică nimic, doar spune celălalt lucru.
Când două constante poartă același nume
Încă un lucru mic din aceeași rundă, într-o gardă cu totul diferită, fiindcă arată bine cum o verificare statică își poate pierde sprijinul.
Avem o gardă care rezolvă după nume, la nivelul întregului proiect, forma argumentelor constantelor de traducere partajate, astfel încât o cheie folosită cu un obiect partajat să rămână acoperită. Două componente diferite defineau fiecare o constantă where, cu conținut diferit. Garda, care rezolvă după nume, nu mai putea spune la care dintre cele două se referea un apel și le-a abandonat pe toate, inclusiv apeluri dintr-un al treilea fișier care nu avea de-a face cu niciuna.
Redenumirea uneia dintre ele a rezolvat. Lecția nu este despre denumire: este despre faptul că o gardă care rezolvă simboluri după nume între fișiere are un mod de ambiguitate, iar acel mod este tăcerea. Verificarea nu raportează „două candidate”, nu raportează nimic despre acele apeluri, iar numărul cheilor acoperite scade cu o cantitate la care nimeni nu se uită.
Ce a fost lăsat neatins, dinadins
Trei lucruri au rămas cum erau, iar scrierea motivului face parte din muncă.
O propoziție îi spune unui client că reinstalarea distruge tot ce se află pe discurile mașinii. Pe un container asta nu este o problemă de cuvinte: reinstalarea unui container păstrează, șterge sau exclude pe punct de montare, iar înlocuirea cinstită este o afirmație despre ce puncte de montare cad în ce grup. Aceea este un ecran și nu o traducere, și aparține rundei care îl va construi.
Un indiciu din formularul de comandă numește un câmp numele de gazdă al mașinii virtuale, într-un context în care lucrul numit este un cont de găzduire. Aceea este o decizie de conținut și nu o chestiune de containere, iar a pretinde altfel ar fi strecurat o schimbare de redactare într-o corectură de cuvinte.
Iar contorul de licențe spune mai departe VM, fiindcă asta numără. Unitatea pentru care i se facturează unui client nu este unitatea la care se uită un client, iar redenumirea ei în tăcere ar face ca o linie de factură să înceteze să se potrivească unui număr de pe o pagină.
Ce am consemna
- Puneți ramura în jurul propoziției, nu în jurul substantivului. Înlocuirea cuvântului merge în engleză și cade peste tot pe articole și cazuri.
- Refolosiți numele de ramură care există deja. Două scrieri ale unei deosebiri într-un catalog sunt o ghicitoare pentru fiecare rundă viitoare.
- Desenați ambele ramuri în test. O selecție ale cărei ramuri se potrivesc trece orice verificare care se uită doar la formă.
- Verificați față de un cârlig pe element, nu față de toată pagina. Un nume de montaj care conține cuvântul căutat este undă verde pentru nimic.
- O valoare corelată nu este valoarea. Derivarea unui tip de resursă dintr-un lucru care poartă o condiție de amplasare merge până când un plan nu are amplasare.
- O gardă care rezolvă după nume amuțește la un nume ambiguu. Nu raportează ambiguitatea, nu raportează nimic.
- O propoziție poate fi falsă fără ca cineva să fi scris un neadevăr. Adevărată pentru un caz, atinsă de un al doilea apelant, aceasta este calea obișnuită.
Ca să fie limpede ce este aceasta: cele paisprezece chei sunt în producție în toate cele nouă limbi și sub gardă. Șapte dintre acele limbi au trecut doar prin testul de desenare și nu pe la un al doilea cititor, iar nimic din toate acestea nu a fost rulat față de un Proxmox real în această rundă.
Din munca de platformă la Provibr. Ce diferă cu adevărat între cele două feluri de oaspete se află în mașină virtuală sau container pe Proxmox, iar de ce reinstalarea unui container este o înlocuire și nu o reparație se află în reinstalarea unui container este o înlocuire.