Blog ·
O etichetă care supraviețuiește unei redenumiri
Un autocolant de server este un document public. Ce scriem pe el, de ce codul QR nu conține un URL și cum se verifică un tabel de coduri de bare.
De Provibr
Un autocolant de pe un server este un document public. Călătorește într-o dubă de curierat, este citit de personalul de remote hands care lucrează pentru o firmă cu care nu ați contractat niciodată, iar în cele din urmă mașina este scoasă din uz și autocolantul ajunge la fier vechi împreună cu șasiul. Orice este tipărit pe el este, pe durata vieții mașinii, publicat.
Observația aceasta singură hotărăște aproape tot ce ține de conținutul unei etichete de centru de date și exclude cea mai mare parte din ce pun oamenii pe ele.
Ce se află pe ea și ce nu
Trei lucruri: un localizator opac, numărul de revizie al acestei tipăriri și același localizator din nou în formă citibilă de om, grupat câte patru, ca cineva să îl poată tasta atunci când codul nu se lasă scanat.
Nu se află pe ea: numele clientului, organizația, numărul de serie, codul de inventar, rackul în care stă acum, hostname-ul, un logo sau vreun jeton de orice fel. O etichetă este o identitate, nu o fișă.
Rackul este cel despre care se ceartă lumea, pentru că scrierea lui pe autocolant este comodă exact până la prima mutare a mașinii. Atunci autocolantul afirmă cu încredere o locație greșită, iar o locație greșită care pare autoritară este mai rea decât niciuna. Cu un nivel mai jos, acesta este și motivul pentru care o poziție din rack nu primește autocolant: o poziție U nu este un lucru, ci o coordonată, și încetează să însemne ce a însemnat în clipa în care unitatea de start a rackului este corectată.
De ce codul QR nu conține un URL
Implicitul pentru orice are un cod QR este să codifice un link. Noi codificăm localizatorul gol, din trei motive, în ordinea greutății lor.
Un autocolant supraviețuiește unui hostname. Un cont care se mută mai târziu pe propriul domeniu ar avea altfel o mie de etichete tipărite care indică o adresă ce nu îl mai servește, iar nimeni nu retipărește o mie de etichete.
Un URL spune mai mult decât un localizator. Numește platforma, iar pe domeniul propriu al unui client îl numește pe client. Aceasta este exact categoria de informație de care eticheta trebuie să fie liberă: un URL nu este o scurtătură, este un câmp în plus, și este câmpul cu cei mai mulți privitori.
Și există exact o singură cale de intrare. O cameră de telefon, un scaner USB care tastează într-un câmp și un om care copiază de mână produc toate același șir în aceeași casetă. Un URL ar crea o a patra formă pe care doar camera o produce vreodată, iar o a patra formă este un al patrulea lucru de greșit.
Localizatorul nu este un jeton la purtător
Aceasta este partea care face restul sigur. Deținerea localizatorului nu vă aduce nimic.
O scanare este o acțiune obișnuită, autentificată. Poarta de organizație se aplică, permisiunea de citire este verificată, interogarea este delimitată la cont și abia apoi serverul spune dacă localizatorul acesta există aici. Un localizator dintr-un alt cont produce exact același răspuns ca unul inventat de cineva: necunoscut. Unul revocat primește un refuz propriu, pentru că acela este un alt fapt, iar persoana care ține autocolantul merită să știe care dintre ele este.
Nu există nici prefix de furnizor. O schemă în față ar lăsa software-ul să deosebească autocolantul nostru de codul de bare pe care producătorul l-a lipit deja și i-ar spune oricui găsește autocolantul cărei platforme îi aparține. Forma face treaba aceea în tăcere: un localizator are șaisprezece caractere dintr-un alfabet cunoscut, iar orice nu are forma aceea este căutat drept cod de inventar sau număr de serie, lucru de care fluxul de scanare are oricum nevoie pentru codul de bare al producătorului și pentru cineva care citește un număr de pe carcasă.
Șaisprezece caractere și de ce șaisprezece
Alfabetul este Crockford base32: cifrele și literele fără I, L, O și U. I și L se confundă cu cifra unu, iar O cu zero; U este scos de standard pentru a evita obscenitățile accidentale. Îl urmăm pentru că alte două coduri din acest produs o fac deja, iar două alfabete ar fi un defect care își așteaptă momentul.
Șaisprezece caractere dintr-un alfabet de treizeci și două înseamnă optzeci de biți. Lungimea nu a fost aleasă pentru ghicire, pentru că ghicitul nu aduce nimic: căutarea este autorizată oricum. A fost aleasă pentru coliziuni. Optzeci de biți fac neglijabil un duplicat pe milioane de etichete, așa că indexul unic de dedesubt nu forțează niciodată o reîncercare pe care un utilizator să o observe. Șaisprezece este și cam cel mai lung șir pe care cineva îl copiază în patru grupe de câte patru fără să greșească.
Normalizarea se aplică la tot ce intră: tăierea spațiilor de la capete, trecerea la majuscule, eliminarea spațiilor și a cratimelor, apoi transformarea lui I și L în unu și a lui O în zero. Nimeni care tastează de pe un autocolant nu ar trebui să fie nevoit să știe că literele acelea lipsesc. U nu are, în mod deliberat, nicio transformare: nicio cifră nu îi seamănă, așa că un U este o greșeală de tastare autentică și își are locul într-un refuz, nu într-o substituție tăcută.
Code 128, scris de mână și verificat, nu crezut
Codul QR folosește o bibliotecă aflată deja în lockfile pentru autentificarea în doi factori: fără dependențe de execuție și cu un randor care produce SVG fără să atingă un canvas sau un DOM. Refolosirea ei bate scrierea unui al doilea codificator QR.
Pentru Code 128 nu exista aici un asemenea pachet. Candidații care fac treaba târăsc după ei un strat de desenare țintit spre un canvas sau spre un browser, adică singurul lucru pe care un SVG randat pe server nu are voie să îl aibă, și sunt cu două ordine de mărime mai mari decât este lucrul în realitate. Code 128 este mic: un tabel de modele, un caracter de start, o sumă de control modulo o sută trei și un caracter de stop. Sunt vreo două sute de linii și niciun lanț de aprovizionare pentru un tabel care nu s-a schimbat din 1981.
Problema cu tastarea unui tabel standard dintr-o specificație este că o greșeală în el eșuează în tăcere. SVG-ul arată perfect, testele trec, iar luni mai târziu un scaner dintr-un centru de date citește un alt caracter. Așa că tabelul este verificat prin patru invarianți independenți și un decodor, toate în fișierul de test:
- O sută șase modele în afara caracterului de stop, fiecare cu exact șase elemente care însumează unsprezece module.
- Paritate pară în bare. Fiecare caracter Code 128 are o sumă pară pe cele trei bare ale sale; aceasta este proprietatea pe care un scaner o folosește ca să afle în ce sens citește și se verifică pentru toate cele o sută șase. O singură cifră tastată greșit strică fie asta, fie suma de mai sus.
- Lățimi de element între unu și patru și toate cele o sută șase modele distincte.
- Caracterul de stop, singurul model cu șapte elemente și treisprezece module.
- Un decodor în test care citește înapoi lățimile de bară generate și trebuie să recupereze șirul de intrare, inclusiv caracterul de control.
Un tabel care supraviețuiește la patru invarianți independenți și la un dus-întors nu este „probabil corect”, iar distincția aceasta este tot motivul pentru care au fost scriși.
Am rămas în subset B în loc să comutăm automat. Eticheta poartă majuscule și cifre, pe care subset B le acoperă dintr-o singură trecere. Subset C ar înjumătăți perechile numerice, dar un localizator nu este o secvență numerică, așa că o comutare automată ar fi o ramură care nu se declanșează niciodată.
Aranjarea colii este o consecință a codului de bare
Douăzeci și patru de etichete pe o pagină A4, trei pe orizontală și opt pe verticală. Numărul acela nu este o preferință de proiectare, este aritmetică ce curge în sens invers.
Un Code 128 de șaisprezece caractere are două sute unsprezece module lățime: unsprezece pentru start, unsprezece pentru fiecare caracter, unsprezece pentru caracterul de control și treisprezece pentru stop. Adăugați două zone liniștite de câte zece module și vă trebuie două sute treizeci și unu de module pe lățime. Pragul practic pentru un scaner obișnuit este un modul de un sfert de milimetru, sub care citirea trece de la fiabilă la ocazională. Sunt cincizeci și opt de milimetri de cod de bare.
Patru coloane pe un A4 dau o etichetă de aproximativ cincizeci și doi de milimetri lățime și un modul aproape de două zecimi de milimetru: o coală care arată mai ordonat și nu se citește pe un culoar rece. Trei pe opt dau o etichetă de șaptezeci pe treizeci și șapte de milimetri, o lățime utilizabilă de șaizeci și patru și un modul de 0,277 milimetri. Numărul decurge din cod, nu invers. Pagina este în mod deliberat plină, cu marginea în interiorul fiecărei etichete, nu în jurul grilei, așa că un driver de imprimantă nu are niciodată nimic de scalat, iar scalarea este singurul lucru pe care un cod de bare nu îl tolerează.
Pragul acela este o constantă în sursă, nu un comentariu, așa că un test măsoară lățimea de modul a SVG-ului randat față de el. O schimbare de aranjare care strânge codul de bare prea subțire este un test roșu în loc de o plângere de pe culoar.
O singură etichetă activă pentru fiecare obiect
Retipăririle sunt cazul obișnuit, așa că invariantul îl poartă baza de date, nu codul. Doi indecși unici parțiali, unul pentru mașini și unul pentru rackuri, singurele două lucruri care poartă o etichetă, permit cel mult o etichetă care nu a fost revocată. Fără ei, o retipărire care eșuează la jumătate lasă două autocolante valabile pe o singură mașină, și nimeni nu poate spune care este cel real. O a doua pereche păstrează revizia unică pe obiect, așa că o retipărire numără în sus și nu se repetă niciodată. Trei cifre sunt plafonul: numărul trebuie să rămână lizibil, iar o mie de retipăriri ale unei singure mașini nu este o problemă de etichetare.
Ce am nota
- Tratați autocolantul drept publicat și hotărâți ce ajunge pe el întrebând cine îl citește peste cinci ani.
- Codificați identificatorul, nu un link. El supraviețuiește unei schimbări de domeniu, unei reînnoiri de marcă și unei achiziții; un URL nu supraviețuiește niciuneia.
- Faceți identificatorul lipsit de valoare în sine, astfel încât un autocolant pierdut să fie o problemă de logistică, nu una de securitate.
- Verificați un tabel de standard cu invarianți și un dus-întors, pentru că acea clasă de greșeli nu eșuează niciodată zgomotos.
- Derivați aranjarea de tipărire din cel mai mic modul lizibil și fixați pragul acela drept o constantă pe care un test o poate măsura.
Pentru cinste față de poziția noastră: munca la centrul de date se află în spatele unui indicator de lansare oprit implicit, cu o setare pentru fiecare organizație peste el, așa că aceasta este descrierea unui proiect și nu un anunț. Două lucruri sunt explicit nedovedite. Matricea QR nu a fost decodificată de o implementare independentă, pentru că în depozitul acesta nu există decodor. Și nimic nu a fost tipărit pe hârtie și scanat pe un culoar, singurul test care contează cu adevărat pentru un cod de bare. Același raționament despre ce are voie să știe o componentă apare și în alte părți aici: datele de autentificare rămân pe gazdă și agentul se conectează numai spre exterior.
Din munca la centrul de date de la Provibr. Ce oprește două persoane să revendice aceeași unitate de rack se află în singura limită reală a ocupării unui rack.