
Ko patiesībā prasa otrā versija: 206 komiti godīgu stāvokļu
GeekBye v2 nebija funkciju laidiens. Tie bija 206 komiti, kas tēmēti uz vienu ideju: lietotne nekad nedrīkst melot par savu paša stāvokli. Lūk, ko tas maksā — ieskaitot vienas rindas bloķēšanas faila kļūdu, kas gandrīz liedza mums to visu izlaist.
Vairums "otrās versijas" laidienu ir kaudze jaunu funkciju ar lielāku skaitli virsū. GeekBye v2 bija pretējais. Tas izlaida gandrīz nekādu jaunu lietotājam redzamu funkcionalitāti. Tā 206 komiti bija tēmēti uz vienu, negreznu ideju:
Lietotne nekad nedrīkst rādīt jums stāvokli, kas nav patiess.
Tas izklausās pašsaprotami, līdz saskaita, cik daudzos veidos darbvirsmas lietotne klusībā melo. Tā rāda ķeksīti pie augšupielādes, kas vēl joprojām notiek. Tā saka "savienots" pār soketu, kas nomira pirms minūtes. Tā klusē, kamēr jūsu transkripts tiek nomests uz grīdas. Neviena no šīm nav avārija. Tās ir sliktākas par avārijām, jo lietotne izskatās kārtībā, kamēr ir kļūdas — un jūs to uzzināt tikai vēlāk, kad ieraksta, kas jums bija vajadzīgs, tur nav.
v2 bija laidiens, kurā mēs devāmies medīt katru no šiem sīkajiem meliem.
Meli, ko ienīdām visvairāk: augšupielāde, kas "izdevās"
GeekBye var dublēt jūsu ierakstus Google Drive. v1 versijā savienojums ar Drive tika uztverts kā fona detaļa — ja tas darbojās, lieliski; ja ne, kļūme bija lielākoties neredzama. Lietotne turpināja izskatīties savienota. Jūs pieņēmāt, ka jūsu ieraksti ir drošībā. Dažreiz tie nebija.
v2 pārbūvēja to ap godīgiem savienojuma stāvokļiem. Drive tagad vienmēr ir vienā no dažiem skaidriem, patiesiem stāvokļiem — savienots, savienojas atkārtoti, atvienots — un lietotne pārraida katru šī stāvokļa izmaiņu visam interfeisam tajā pašā mirklī, kad tā notiek. Kad savienojums ir nokritis, globāls atkārtotas savienošanās baneris to pasaka jums visur, skaidri. Lietotne vairs neizliekas, ka augšupielāde izdevās, kad tā neizdevās. Ja jūsu dublējums šobrīd nevar notikt, jūs to zināt šobrīd — nevis nākamnedēļ, kad dodaties meklēt failu.
Zem virsmas tā ir neliela arhitektūra, nevis sauklis: viens patiesības avots savienojumam, notikums, kas izplatās uz katru interfeisa daļu, kad tas mainās, un baneris, kas nolasa tieši no šī stāvokļa. Nav ceļa, kur savienojums ir nokritis un interfeiss izskatās kārtībā, jo tie nolasa no vienas un tās pašas patiesības.
Zaudētā ieraksta meli
Otrais lielais godīguma labojums bija ieraksta atgūšana. Reāllaika transkripcijai vajadzīgs dzīvs savienojums. v1 versijā, ja šis savienojums sesijas vidū uz brīdi pazuda — Wi-Fi mirkšķis, tunelis, VPN atkārtota savienošanās — audio pārtraukuma laikā varēja vienkārši pazust. Transkriptam būtu caurums, un nekas jums to nepateiktu.
v2 mainīja līgumu: audio tiek saglabāts lokāli savienojuma pārtraukuma laikā un vēlāk saskaņots. Kad saite nokrīt, GeekBye tur audio drošībā jūsu datorā; kad tā atgriežas, šis buferētais audio tiek nosūtīts un iešūts transkriptā pareizajā vietā. Sliktas trīsdesmit tīkla sekundes vairs nemaksā jums trīsdesmit sekundes sapulces. Tas ir pamatakmens, uz kura vēlākie uzticamības laidieni tieši būvēja — atkārtotas savienošanās un buferēšanas mašinērija rakstā kāpēc jūsu AI piezīmju rīks apstājas sliktā Wi-Fi ir tā pati ideja, tikai nostiprināta.
Uznirstošo paziņojumu vētras meli
Ir smalkāka negodība tajā, kā lietotnes ziņo par nepatikšanām: tās pārziņo. Viens ļodzīgs tīkla mirklis var izmest to pašu kļūdu piecas reizes, un pēkšņi jums ir kaudze identisku sarkanu paziņojumu, kas aprok to vienu ziņu, kurai ir nozīme. Arī tas nav godīgi — tas ir troksnis, kas izliekas par informāciju.
Tāpēc v2 pievienoja pa kategorijām atslēgtu uznirstošo paziņojumu droselēšanu un kļūdu novirzīšanu. Kļūdas tiek grupētas pēc tā, kas tās patiesībā ir, un katra kategorija ir ātruma ierobežota, tāpēc viena pamatproblēma rada vienu skaidru ziņu, nevis šķautu. Ātruma ierobežojuma problēma novirzās uz ātruma ierobežojuma ziņu; savienojuma problēma novirzās uz savienojuma ziņu. Lietotne pasaka jums, kas ir patiess, vienu reizi — tā pati disciplīna, kas vēlāk neļāva 429 maskēties par izrakstīšanos rakstā diena, kad mūsu lietotne DDoS-oja pati sevi.
Skaitlis 206 ir tas, kas skaitās
Godīgi stāvokļi, atkārtotas savienošanās baneris, ieraksta atgūšana, uznirstošo paziņojumu novirzīšana — tās ir četras idejas. Laidiens bija 206 komiti. Kur aizgāja pārējie?
Tajā negreznajā garajā astē, ko "nekad nerādi viltus stāvokli" patiesībā prasa. Katra vieta, kur vecais interfeiss varēja izkrist no sinhronizācijas ar realitāti, bija jāatrod un jāpārsavieno tā, lai tā lasītu no patiesības, nevis no novecojuša kopijas. Katrs atkārtotas savienošanās ceļš bija jāliek atjaunināt koplietojamo stāvokli, nevis minēt lokāli. Desmitiem sīku uzticamības labojumu ierakstīšanā, transkripcijā un augšupielādēs — katrs no tiem aizverot konkrētu spraugu, kur lietotne varēja izskatīties pareiza, kamēr bija kļūdaina.
Lūk, ko īsts "otrās versijas" laidiens maksā, kad mērķis ir uzticēšanās, nevis funkcijas. Nav neviena virsraksta komita. Ir 206 sīki, un laidiens tikai jūtas kā viena lieta — mierīga — jo visi 206 velk vienā virzienā.
Laidiens gandrīz netika izlaists
Lūk kara stāsts, un tas ir labs, jo tas ir par to, kā mūsu paša lietotne meloja mums.
Kad izlaižat laidienu, versijas paaugstināšanas skripts iespiež jauno numuru pa visu projektu. v2.0.0 tas atjaunināja lietotnes versiju — bet package-lock.json, npm precīzais atkarību reģistrs, palika norādot uz veco versiju, 1.9.0. Lokāli viss bija kārtībā; neviens pārinstalē atkarības tikai lai būvētu. Bet CI palaiž npm ci, un npm ci visa uzdevums ir atteikties turpināt, ja bloķēšanas fails nesakrīt ar manifestu. Tā ir stingrības iezīme — un tā darīja tieši to, kas tai vajadzēja, salaužot būvējumu lielākajam laidienam, ko jebkad bijām izlaiduši.
Tad zem tā izpeldēja otra, viltīgāka. Jaunāks npm bija izmetis izvēles pārejošu atkarību — encoding pakotni, ko ievelk node-fetch — no bloķēšanas faila kā nevajadzīgu. Tikai mūsu CI tīrajai instalācijai tā tiešām bija vajadzīga, tāpēc instalācija salūza tādā veidā, kam nebija nekāda sakara ar mūsu kodu un viss sakars ar to, ka reģistrs bija smalki kļūdains.
Abi bija vienas rindas labojumi: pārsinhronizēt bloķēšanas failu ar īsto versiju, atjaunot izmesto ierakstu. Abi ir arī perfekti, pazemojoši piemēri tieši tam, par ko bija v2 — stāvoklis, kas apgalvoja, ka ir patiess, bet nebija. Bloķēšanas failam ir jābūt godīgam ierakstam par to, no kā lietotne ir atkarīga. Kad tas novirzījās no realitātes, būvējums darīja tieši to, ko mūsu lietotne tagad dara lietotājiem: tas atteicās izlikties, ka viss ir kārtībā. Izrādās, ka uzticamības laidiena izlaišana ir uzticamības problēma līdz pašai apakšai.
Trīs lietas, ko mums iemācīja v2
- Bīstamās kļūmes ir klusās. Avārija pati sevi pieteic. Viltus "savienots", fantoma veiksmīga augšupielāde, transkripts ar neredzamu caurumu — tie maksā jums uzticēšanos tieši tāpēc, ka nekas neizskatās nepareizi. Medī klusos melus.
- Godīgums ir arhitektūra, nevis ziņa. Jūs nevarat pieskrūvēt "saki patiesību" interfeisam kā baneri. Banerim ir jālasa no tā paša vienīgā patiesības avota kā visam pārējam, citādi tas kļūst par vēl vienu lietu, kas var būt kļūdaina. Viena patiesība, izplatīta — nekad divas kopijas, kas var nesakrist.
- Otrā versija, kas ir sava skaitļa vērta, ir lielākoties neredzama. Ja jūsu v2 ir funkciju saraksts, tas ir v1.5 ar mārketingu. Īsts v2 ir 206 komiti, uz ko neviens nevar norādīt atsevišķi, kas saskaitās produktā, kurš vienkārši pārstāj jums melot.
GeekBye v2.0.0 ir pamats, uz kura ir būvēts katrs laidiens kopš tā. Par to, ko šis pamats nes, skatiet kāpēc jūsu AI piezīmju rīks apstājas sliktā Wi-Fi, diena, kad mūsu lietotne DDoS-oja pati sevi (v2.0.1), un reāllaika transkripcija, kad ugunsmūris bloķē WebSockets (v2.0.8). Par to mieru, kam tas viss kalpoja, kas jauns GeekBye v2.