Naar de inhoud

Blog ·

De select staat om de hele zin

Veertien zinnen noemden een container een VM. Het woord verwisselen werkt in het Engels en breekt in zeven talen, dus de tak draagt de hele zin.

Door Provibr

Een Proxmox-container is in ons product gewoon een VPS. De klant bestelt er een, krijgt een machine met een adres en een plan, en elk scherm dat over servers praat, praat er correct over. Het type in de database zegt vm, en dat klopt: wat er verkocht is, is een virtuele privéserver.

Het verschil zit één laag dieper, in de woorden. Een container heeft geen BIOS, geen virtuele schijf in de zin waarin een virtuele machine er een heeft, en geen gastagent. Een eerdere ronde noteerde als los eindje dat één zin op een containerpagina nog steeds "de VM" zei. Het waren er veertien.

Waarom het woord de verkeerde eenheid is

De voor de hand liggende reparatie is een plaatshouder waar het zelfstandig naamwoord staat. Zoiets als een select op de resourcesoort die "container" of "VM" oplevert, midden in de zin gezet.

In het Engels werkt dat. In het Duits breekt het, want het lidwoord is voor die twee woorden niet hetzelfde. Het breekt op dezelfde manier in het Spaans, Frans, Italiaans, Portugees en Roemeens, en het breekt harder in het Oekraïens, waar het zelfstandig naamwoord op die plek een naamvalsuitgang moet krijgen die het vervangen woord niet heeft.

Je kunt daar achteraan lopen. Voeg ook een select voor het lidwoord toe, dan een voor de bijvoeglijke overeenkomst, en ontdek dan dat de natuurlijke woordvolgorde verandert. Wat je op dat punt gebouwd hebt is een kleine grammaticamotor, aangestuurd door een vertaler die de zin niet mag zien.

De tak draagt dus de hele zin. Eén variant voor een container, één voor al het andere, en de vertaler schrijft elk van beide als een zin in zijn eigen taal in plaats van een gat in een Engelse zin te vullen. De algemene tak is byte voor byte gelijk aan de waarde die hij verving, dus er is niets verschoven wat al klopte.

De tak heet container en niet lxc, want het backuptabblad gebruikte precies die naam al voor precies die vraag, en zijn viewmodel noemt het veld net zo. Twee schrijfwijzen van hetzelfde onderscheid binnen één catalogus is elke keer een kleine kostenpost en elke keer een gok: de volgende ronde moet uitzoeken welke van de twee hier van toepassing is.

Een select waarvan de takken het eens zijn is onzichtbaar

Een test die de vorm van deze sleutels toetst, of ze parsen, of beide takken bestaan, of het argument overal hetzelfde geschreven is, slaagt op een select waarvan de twee takken precies hetzelfde zeggen. Dat is exact het defect dat hier gerepareerd wordt, dus een vormcontrole is hier weinig waard.

De bewaking rendert daarom beide takken, in alle negen talen, en eist dat de containertak van een Engelse zin het woord niet meer bevat dat hij geschreven is om te verwijderen. Ze eist ook dat de lijst zelf niet stil is leeggelopen: een bewaking over een lege lijst is het goedkoopste groen in de software.

Eenentwintig tests, en elk daarvan is bewezen door hem eerst te laten falen. Het is dezelfde vorm als de bewaking op de backupdekkingswoorden, en om dezelfde reden: de interessante fout is geen syntaxfout, maar een zin die grammaticaal perfect en feitelijk onwaar is.

De zin die nooit waar was

Een van de veertien was helemaal geen woordkeuzeprobleem.

Het netwerktabblad heeft een regel voor wanneer er nog geen adressen zijn waargenomen. Die luidde in feite: nog niets gezien, de gastagent moet in de VM draaien.

Op een container wordt die zin altijd getoond, want de agent leest voor containers helemaal geen adressen. De waarnemingsfunctie keert voor die gastsoort met een lege lijst terug voordat ze iets vraagt. De zin stond er dus permanent, en zolang hij er stond zei hij twee dingen die niet waar waren: dat dit kon veranderen zodra er iets gestart werd, en dat het ding dat het zou veranderen een gastagent is, die een container nooit krijgt.

Niemand had gelogen. De zin was geschreven voor virtuele machines, hij klopte voor die machines, en hij werd bereikt door een codepad dat er een tweede aanroeper bij had gekregen. Dat is de gewone manier waarop een scherm iets onwaars gaat zeggen: niet doordat iemand een onwaarheid schrijft, maar doordat een ware zin getoond wordt in een situatie waar hij nooit over ging.

De containertak zegt wat werkelijk het geval is, namelijk dat adressen binnen een container niet gelezen worden. Hij biedt geen hoop dat het getal later verschijnt, want die is er niet.

Oude zinWat er op een container mis mee was
BelofteNog niets gezienHet verandert niet; de code kijkt nooit
OorzaakDe gastagent moet draaienContainers hebben er geen
ReparatieStart de gastagentEr valt niets te starten

Twee manieren waarop de meting om de verkeerde reden groen werd

De browsercontrole hiervoor is als eerste geschreven en was twee keer fout, op manieren die het waard zijn benoemd te worden omdat ze allebei een geslaagde uitslag opleveren.

De eerste: de controle las de zichtbare tekst van de pagina en zocht het woord "container". Ze vond het. Het stond in de naam van het testplan, zz-k7-containerplan, gezaaid door de controle zelf, terwijl de zin drie regels lager nog steeds "de VM" zei. Een test die een fixture zaait en daarna de hele pagina afzoekt op een woord dat die fixture bevat, meet zijn eigen opstelling. De reparatie is een haak op het element dat de zin werkelijk draagt, zodat de bewering alleen waargemaakt kan worden door het ding waar ze over gaat.

De tweede was een echt defect dat de eerste verborgen had gehouden. De soort die de select aanstuurt werd afgeleid uit een variabele van het bestelformulier die een voorwaarde over plaatsing draagt, of het plan ergens kán draaien. Een containerplan zonder plaatsing kwam er daardoor uit als "geen container", en de pagina zei "de VM" op een containerbestelling. De soort komt nu uit de eigen rekensoort van het plan plus wat de klant koos, en geen van beide weet iets van plaatsing.

Dat is de bredere vorm: een waarde die toevallig samenloopt met wat je wilt weten is niet de waarde die je wilt. Ze is het eens tot de dag dat ze het niet is, en op die dag faalt er niets, ze zegt alleen het andere.

Als twee constanten dezelfde naam dragen

Nog iets kleins uit dezelfde ronde, in een heel andere bewaking, omdat het goed laat zien hoe een statische controle haar houvast kan verliezen.

We hebben een bewaking die de argumentvorm van gedeelde vertaalconstanten projectbreed op naam herleidt, zodat een sleutel die met een gedeeld object gebruikt wordt toch gedekt is. Twee verschillende componenten definieerden elk een constante where, met verschillende inhoud. De bewaking, die op naam herleidt, kon niet meer zeggen welke van de twee een aanroep bedoelde, en gaf ze allemaal op, ook aanroepen in een derde bestand dat met geen van beide iets te maken had.

Eén van de twee hernoemen loste het op. De les gaat niet over naamgeving: ze gaat erover dat een bewaking die symbolen op naam over bestanden heen herleidt een dubbelzinnigheidsstand kent, en dat die stand stilte is. De controle meldt niet "twee kandidaten", ze meldt over die aanroepen helemaal niets, en het aantal gedekte sleutels daalt met een hoeveelheid waar niemand naar kijkt.

Wat bewust is blijven staan

Drie dingen zijn gebleven zoals ze waren, en opschrijven waarom hoort bij het werk.

Eén zin vertelt een klant dat opnieuw installeren alles op de schijven van de machine vernietigt. Op een container is dat geen woordprobleem: een container opnieuw installeren behoudt, wist of sluit uit per aankoppelpunt, en de eerlijke vervanging is een uitspraak over welke aankoppelpunten in welke groep vallen. Dat is een scherm en geen vertaling, en het hoort bij de ronde die het bouwt.

Een aanwijzing op het bestelformulier noemt een veld de hostnaam van de virtuele machine, in een context waar het ding dat benoemd wordt een hostingaccount is. Dat is een contentbesluit en geen containervraag, en doen alsof het dat wel was zou een tekstwijziging in een woordreparatie hebben binnengesmokkeld.

En de licentieteller blijft VM zeggen, want dat is wat hij telt. De eenheid waarvoor een klant gefactureerd wordt is niet de eenheid waar een klant naar kijkt, en hem stilletjes hernoemen zou een factuurregel laten ophouden te kloppen met een getal op een pagina.

Wat we zouden opschrijven

  1. Zet de tak om de zin, niet om het zelfstandig naamwoord. Woordvervanging werkt in het Engels en sneuvelt overal elders op lidwoorden en naamvallen.
  2. Hergebruik de taknaam die al bestaat. Twee schrijfwijzen van één onderscheid in één catalogus is een gok voor elke volgende ronde.
  3. Render beide takken in de test. Een select waarvan de takken het eens zijn slaagt voor elke controle die alleen naar de vorm kijkt.
  4. Toets tegen een haak op het element, niet tegen de hele pagina. Een fixturenaam die het woord bevat dat je zoekt is groen licht voor niets.
  5. Een waarde die samenloopt is de waarde niet. Een resourcesoort afleiden uit iets dat een plaatsingsvoorwaarde draagt werkt tot een plan geen plaatsing heeft.
  6. Een bewaking die op naam herleidt valt stil als een naam dubbelzinnig is. Ze meldt de dubbelzinnigheid niet, ze meldt niets.
  7. Een zin kan onwaar zijn zonder dat iemand een onwaarheid schreef. Waar voor één geval, bereikt door een tweede aanroeper, is de gewone route.

Voor de duidelijkheid over wat dit is: de veertien sleutels staan live in alle negen talen en zijn bewaakt. Zeven van die talen zijn alleen door de rendertest gegaan en niet langs een tweede lezer, en niets hiervan is in deze ronde tegen een echte Proxmox gedraaid.

Uit het platformwerk aan Provibr. Wat er werkelijk verschilt tussen de twee gastsoorten staat in VM of container op Proxmox, en waarom een container opnieuw installeren een vervanging is en geen reparatie staat in een container opnieuw installeren is een vervanging.

Begin met één host en één agent

Maak een account aan, installeer de agent met één commando en koppel je eerste Proxmox-host. De proefperiode loopt 14 dagen en vraagt geen betaalgegevens.