Steven
Steven6 min čtení

Klidný software: Jak jsme zabili blikající přepínač a naučili chat říkat, v jakém je režimu

Dvě malá vydání GeekBye, žádné velké funkce — jen přepínač v nastavení, který přestal blikat, a chatovací asistent, který ti konečně řekne, jestli odpověděl v režimu schůzky, nebo v režimu kódování. Přesně tolik ve skutečnosti stojí „klidný software", jeden detail po druhém.

Produkt
Design
Inženýrství
Vydání GeekBye
Klidný software: Jak jsme zabili blikající přepínač a naučili chat říkat, v jakém je režimu

Ne každé vydání je válečný příběh. Některá jsou jen seznamem malých, téměř neviditelných věcí, které byly potichu špatně — takové ty věci, které nic nezhroutí, ale kvůli kterým aplikace působí trochu nedůvěryhodně, trochu roztřeseně, trochu ne-tvoje. GeekBye v2.0.3 a v2.0.5 byla dvě z nich. Žádné nové funkce. Jen klid.

„Klidný software" zní jako nálada. Ve skutečnosti je to hromada konkrétních rozhodnutí. Tady jsou tři z nich.

Přepínač, který se nedokázal rozhodnout

Byl tam jeden přepínač v nastavení — ten, který řídí obnovu zvuku — a při kliknutí blikal. Zapneš ho a na zlomek vteřiny ukáže zapnuto, pak skočí zpátky na vypnuto a nakonec se ustálí. Drobné vizuální zaškobrtnutí, ale oko ho zachytí a čte ho jako aplikace si není jistá, co dělá.

Příčinou je klasický souboj v UI zvaný optimistická aktualizace. Když klikneš na přepínač, aplikace má dvě možnosti: počkat, až se nastavení skutečně uloží, a teprve pak aktualizovat spínač (správné, ale působí to zpožděně), nebo spínač přehodit okamžitě a uložit na pozadí (působí to okamžitě). GeekBye dělalo to druhé — přehodit ihned —, ale zároveň znovu načítalo uloženou hodnotu, když se vrátila. Takže sled byl tento: klikneš, spínač se optimisticky přehodí na zapnuto, o chvíli později dorazí skutečná uložená hodnota a na jeden snímek se ty dvě neshodnou a spínač viditelně poskočí.

Oprava spočívá v tom, aby se optimistická a potvrzená hodnota čistě shodly — spínač se přikloní ke stavu, který sis zvolil, a přestane se sám sebe podezřívat, když se uložení potvrdí. Vedle toho v2.0.3 provedla neokázalou úpravu textů: popis obnovy zvuku byl zkrácen tak, aby ladil se sousedními řádky, a formulace v nastavení byly polidštěny. Nic z toho není funkce. Všechno dohromady je ten rozdíl mezi panelem nastavení, který působí naprogramovaně, a takovým, který působí pečlivě dopilovaně.

Prohlídka, která nechtěla odejít

Prohlídky pro nové uživatele jsou užitečné právě jednou. Problém je právě v té jednorázovosti: jakmile ji jednou vidíš, úvodní překryv, který nejde zavřít, se stane nepořádkem, jenž signalizuje tahle aplikace si pořád myslí, že jsi tu nový. v2.0.3 opravila oba konce toho — prohlídku produktu teď lze skrýt, a pokud ji opravdu chceš zpátky, je tu tlačítko Přehrát prohlídku znovu. Ukaž ji, když pomáhá, ustup z cesty, když ne, a nech uživatele, ať si ji vyvolá za svých podmínek. Respektovat, že uživatel už není nový, je svou vlastní malou formou klidu.

Asistent, který nechtěl říct, jak přemýšlí

Tohle byla ta věc, na které skutečně záleželo, a spojuje se s hlubším problémem, který jsme pronásledovali.

Asistent GeekBye odpovídá jinak podle kontextu. Na schůzce by „co si o tom myslíš?" mělo dostat konverzační odpověď zohledňující schůzku. Během kódování by stejná slova měla dostat odpověď technickou. Takže backend prožene otázku správným rámcem — říkejme mu režim schůzky nebo režim kódování — a to zarámování skutečně mění odpověď, kterou dostaneš.

Potíž: aplikace ti nikdy neřekla, který režim odpověděl. Takže když ti asistent dal odpověď s příchutí kódu na konverzační otázku — nebo odpověděl na programátorskou otázku, jako bys jen tlachal — vypadalo to, jako by se AI prostě spletla. Nespletla se; byla v tom druhém režimu a ty jsi neměl jak to poznat. Skrytý stav způsoboval, že správné chování vypadalo rozbitě. (Samotná logika režimů je větší kus práce — orchestrátor, který rozhoduje, jak odpovídat na neprogramátorské otázky během programovací relace — ale nic z toho ti není k ničemu, pokud nevidíš rozhodnutí, které učinil.)

v2.0.5 přidala do chatu odznak režimu pouze pro čtení: malý štítek ukazující, zda asistent odpověděl v režimu schůzky, nebo v režimu kódování. Právě to „pouze pro čtení" je celá pointa — není to ovládací prvek, který nastavuješ, je to okno do rozhodnutí, které systém už učinil. Přestaneš hádat, proč ti odpověď připadá mimo; vidíš rámec, ze kterého vzešla.

Detail, který dělá ten odznak poctivým

Tady je inženýrské rozhodnutí, které stojí za předání dál, protože je to přesně to, co odlišuje na-koleně-přišroubovaný indikátor od důvěryhodného.

Informace o režimu přichází z backendu jako součást streamované odpovědi — malý rámec mode v proudu událostí odesílaných serverem. Jenže starší klient, který předchází této funkci, by nevěděl, co rámec mode je; v lepším případě ho ignoruje, v horším vykreslí něco zpřeházeného. Klient proto ohlásí svou schopnost: pošle hlavičku požadavku, která říká umím zobrazit odznak režimu, a backend vysílá rámec mode jen klientům, kteří ji poslali. Staré klienty nikdy nedostanou signál, se kterým si neporadí; nové klienty dostanou přesně ten rámec, o který požádaly.

Je to jednohlavičkové podání ruky a je to rozdíl mezi „přidali jsme funkci" a „přidali jsme funkci, aniž bychom rozbili kohokoli, kdo ještě neaktualizoval." Stejná revize dotáhla i zbytek chování: odznak se sám vymaže při resetu a při změně kontextu konverzace (zastaralý štítek režimu je svou vlastní malou lží) a zobrazuje se jen v zobrazení chatu, kam patří.

Co nás naučila dvě vydání „bez funkcí"

  1. Roztřesenost je signál důvěry. Blikající přepínač, poskakující spínač, štítek, který se drží o snímek déle, než má — žádné z toho není chyba ve smyslu pádu, ale každé šeptá tahle aplikace to nemá tak úplně pod kontrolou. Klid je nepřítomnost těch šepotů a zasloužíš si ho jednou souběžnou chybou po druhé.
  2. Skrytý režim způsobuje, že správné chování vypadá jako chyba. Asistent dělal správnou věc a byl za to obviňován, čistě proto, že uživatel neviděl ten rámec. Když tvůj systém učiní neviditelné rozhodnutí, které mění výstup, ukaž to rozhodnutí — odznak pouze pro čtení je často celé řešení.
  3. Nové funkce by měly být neviditelné pro klienty, kteří je neumějí použít. Podání ruky přes hlavičku schopnosti znamená, že signál o režimu dosáhne jen klientů, kteří ho umějí vykreslit. Zpětná kompatibilita není kontrola verze přišroubovaná dodatečně; je to klient, který říká, čemu rozumí, a server, který tu odpověď respektuje.

Tohle jsou vydání, o kterých nikdo nepíše titulky changelogu, a jsou velkou částí toho, proč GeekBye v2 působí tak, jak působí. O vydání, na kterém byl tento klid postaven, viz co skutečně obnáší verze 2 (v2.0.0). O práci na spolehlivosti vedle toho den, kdy si naše aplikace udělala DDoS sama na sebe (v2.0.1) a proč tvůj AI zapisovač poznámek přestane nahrávat uprostřed schůzky (v2.0.9).

Související články

Jedna proměnná CSS, pět kol revize a Swift toolchain, který lhal
Steven
Steven6 min čtení

Jedna proměnná CSS, pět kol revize a Swift toolchain, který lhal

GeekBye v2.0.7 udělal celý overlay nastavitelně průsvitným — což zní jako jednořádková změna v CSS a rozhodně nebylo. Skutečný příběh je to, co odhalila revize kódu: dvě plochy, které odmítaly zprůhlednět, nahrávací lišta, jež vypadala špatně při stejné neprůhlednosti, a zkompilovaná binárka, která poskočila o 672 bajtů, protože naše vlastní dokumentace řekla revidujícímu špatnou verzi Swiftu.

Inženýrství
Design
Build
Vaše Mac aplikace získá přístup k mikrofonu — a pak ho při každém spuštění zapomene
Steven
Steven5 min čtení

Vaše Mac aplikace získá přístup k mikrofonu — a pak ho při každém spuštění zapomene

GeekBye požádal o oprávnění k mikrofonu, udělili jste ho a fungovalo to. Při dalším spuštění: pryč. A aplikace se v Nastavení systému → Mikrofon vůbec neobjevila. Viníkem byla bezpečnostní funkce macOS, která aplikaci tiše spouštěla z cesty, jež mizí — tady je diagnóza a oprava pomocí jediné výzvy.

macOS
Oprávnění
Inženýrství
Co Skutečně Obnáší Verze 2: 206 Commitů Poctivých Stavů
Steven
Steven6 min čtení

Co Skutečně Obnáší Verze 2: 206 Commitů Poctivých Stavů

GeekBye v2 nebylo vydání s novými funkcemi. Bylo to 206 commitů namířených k jediné myšlence: aplikace by nikdy neměla lhát o svém vlastním stavu. Tady je, co to stojí — včetně jednořádkové chyby v lockfile, která nás málem zastavila předtím, než jsme z toho všeho vůbec něco vydali.

Spolehlivost
Inženýrství
Vydání