Steven
Steven5 min lugemist

Koosolekud, mille päriselt üles leiad: ajajoone väljalase

GeekBye v1.7.3 asendas koosolekute rippmenüü päris ajajoonega — inimlikud kuupäevad, otsing ja leivapuru, mis ütleb, millises koosolekus sa oled. Pinna all: automaatvaliku võidujooks, kuupildistus, mis on oma koosolekust vanem, ja viis Windowsi parandust kahekümne kaheksa minutiga.

Arendus
UX
Töölaud
GeekBye väljalasked
Koosolekud, mille päriselt üles leiad: ajajoone väljalase
  1. aasta jaanuariks oli GeekBye kasutajatel ajalooprobleem. Rakendus salvestas ja analüüsis nende koosolekuid kenasti — ja toimetas need siis rippmenüüsse. Rippmenüü sobib kolmele kirjele. Viieteistkümnendaks koosolekuks oli "see intervjuu eelmisest teisipäevast" arheoloogiline ekspeditsioon läbi ühesuguste ridade. v1.7.3 — 64 commitit detsembri keskpaigast 16. jaanuarini — on väljalase, kus koosolekud muutusid millekski, mille päriselt üles leiad.

(Üks raamatupidamismärkus, sest git-ajalugu on aus ka siis, kui versiooninumbrid pole: v1.7.2 väljalasketag'i ei eksisteeri. Versioon sai küll tõstetud, aga järgmine tag, mis tarniti, oli v1.7.3, nii et v1.7.2-ajastu Windowsi parandused sõitsid selles väljalaskes kaasa.)

Rippmenüüst ajajooneks

Peamine muudatus on üks pull request: 12 faili, +640 rida, enamik neist uus 381-realine MeetingsTimeline komponent. Rippmenüüst sai keritav koosolekukaartide ajajoon, grupeerituna nelja ämbrisse — Today, Yesterday, This Week, Older (täna, eile, sel nädalal, vanemad) — kuupäevadega, mis on renderdatud nii, nagu inimene neid ütleks: Today, 2:30 PM, Yesterday, 2:30 PM, Mon, 2:30 PM selle nädala kohta ja Jan 5, 2:30 PM kaugemal. Cmd/Ctrl+K fokuseerib otsingukasti, mis filtreerib pealkirja järgi. Koosoleku detailvaade muutus päris navigatsioonileheks, nii et navbari edasi-tagasi nupud tähendavad viimaks midagi, ja leivapuru ei ütle enam "Meetings / Meeting", vaid "Meetings / Interview with John" (kärbitud ellipsiga, sest keegi nimetab oma koosoleku alati nagu romaani).

Kaasa tarniti kaks väikest elukvaliteedi tükki: kustutamisnupp koosolekuvaate sees (mis pärast kustutamist navigeerib su tagasi ajajoonele, selmet jätta sind surnud lehele) ja automaatne navigeerimine — kui kuulamissessioon lõpeb päris transkriptisisuga, avaneb töölaud otse selle koosoleku detaillehel. Lõpeta kõne, näe koosolekut. Tühjalt lõppevad sessioonid kustutatakse vaikselt, selmet ajajoont risustada.

Võidujooks, mille lood navigeerimist parandades

Siin on osa, mida muudatuste logi sulle ei räägi. Vanal koosolekunimekirjal oli harjumus: igal laadimisel valis see automaatselt uusima sessiooni. Kahjutu, kui nimekiri oli rippmenüü, mida sa harva puudutasid. Saatuslik hetkel, mil koosolekutest sai leht, kus navigeerid: klõpsa koosolekule nr 5, taustal lõpeb refetch ja nimekiri valib abivalmilt uusima koosoleku — kirjutades üle valiku, mille tegid kaks sekundit tagasi. Parandus polnud kavalam kaitsemehhanism; see oli automaatvaliku täielik kustutamine. Iga nimekiri, mis valib asju kasutaja eest, hakkab lõpuks kasutajaga võitlema.

Selle eemaldamine paljastas teise võidujooksu. Automaatne navigeerimine hüppab koosolekusse hetkel, mil selle sessioon lõpeb — mis võib olla enne, kui see sessioon on lõpetanud kirjutamise kohalikku SQLite'i andmebaasi. Navigeeri liiga kiiresti ja jõuad koosolekuni, mida veel ei eksisteeri. Tarnitud parandus on 500-millisekundiline viivitus enne sessioonide laadimist detailvaatesse saabudes, ja navigeerimiskäsitlejal on omad kindlustused — oota akna did-finish-load sündmust pluss 100ms, kui töölaud just loodi, 50ms, kui see oli juba avatud. Meie tõlgendus: sessioonilõpu-navigeerimine ületab kolm ajastusdomeeni — andmebaasikirjutuse, akna laadimise ja Reacti mount'i — ja igaüks neist sai oma väikese viivituse. See töötab, ja ütleme otse: virn maagilisi numbreid on aus võlg, mitte võit.

Kuvatõmmis, mis on oma koosolekust vanem

Veel üks eeldus suri selles väljalaskes: "kuvatõmmis kuulub sessioonile siis ja ainult siis, kui see tehti selle ajal." Täiesti loogiline. Vale. Päris kasutajad vajutavad Cmd+H töökuulutusel, päevakorral, koodil, mida nad kohe arutama hakkavad — enne Start-i vajutamist. Report-vaheleht sobitas kuvatõmmiseid sessiooni ajavahemikuga rangelt, nii et need ettevalmistuspildid kadusid raportist, mille jaoks need tehti. Parandus laiendas sobitusakent 60 sekundi võrra enne sessiooni algust. (Ajavahemiku-masinavärk ise on vanem — see tarniti vaikselt v1.6.15-s; v1.7.3 panus on õpetada sellele, et koosolekud algavad natuke enne seda, kui nad algavad.)

Viis parandust kahekümne kaheksa minutiga

Selle väljalaske sõjalugu pole üldse ajajoones — see on Windowsi onboarding-overlay's, ja see on õpikunäide "paranda parandust" ketist: viis commitit sama hommiku kella 10:50 ja 11:18 vahel.

GeekBye põhiaken kasutab hiire läbilaskmist — hooki, mis lülitab Electroni setIgnoreMouseEvents iga hiireliigutuse peal, et klõpsud kukuksid läbi läbipaistvate alade. Windowsi onboarding'u ajal võitles see hook õpetuse overlay'ga ja sammul, kus ilmub töölauaaken, rakendus hangus. Parandus üks: pane hook onboarding'u ajal mitte midagi tegema. Rahu desarmeerimise kaudu.

Ainult et nüüd ei reageerinud onboarding'u nupud, sest sündmuste edastamine saatis klõpsud töölauaaknale overlay all. Parandused kaks ja kolm nokitsesid forward: false kallal wizard'i kaupa. Siis tuli commit, mis leidis tegeliku juurpõhjuse: kui töölauaaken avaneb, lähtestab selle lohistamiskäsitleja põhiakna läbiklõpsatavasse režiimi — ja esimene parandus oli muutnud passthrough-hoogi passiivseks, mis tähendas, et sekkumist ei jäänud korrigeerima mitte miski. Päris parandus pööras strateegia ümber: hook kinnitab nüüd onboarding'u ajal aktiivselt setIgnoreMouseEvents(false) iga hiireliigutuse peal, just sellepärast, et väline kood võib selle igal hetkel lähtestada. See kustutas ka 75 rida varasemaid wizard'i-põhiseid workaround'e.

Ja isegi siis tuli viies commit, sest sisendisõja võitmine pole z-järjekorra sõja võitmine: overlay ja töölaud istusid mõlemad samal always-on-top tasemel ning Windows tõstab esile selle akna, mis saab fookuse. Overlay kolis kõrgemale aknatasemele ja tõstab end viivitusega uuesti esile pärast töölaua ilmumist. Kaar on meeldejätmist väärt: passiivne parandus, mis desarmeerib su ainsa kaitsja, on hullem kui algne võitlus.

Kolm asja, mida see väljalase meile õpetas

  1. Navigeerimisuuendused toovad olekuvead pinnale. Automaatvaliku võidujooks eksisteeris enne v1.7.3-e; rippmenüü lihtsalt ei lasknud sul seda tunda. Hetkel, mil koosolekutest sai leht, kus tahtlikult navigeerid, muutus iga kooditükk, mis valis asju sinu eest, veaks.
  2. Ajapiirid kasutaja kavatsuse ümber vajavad lõtku. Sessioonid, salvestused, raportid — kasutajad tegutsevad natuke enne ja pärast masina ametlikku akent. 60-sekundiline kuvatõmmisepuhver on üks rida, mis peegeldab, kuidas inimesed päriselt käituvad.
  3. Ära kunagi tee oma korrigeerivat koodi passiivseks. Windowsi hangumine nõudis viit parandust, sest parandus üks lülitas välja ainsa mehhanismi, mis oleks saanud välisele sekkumisele vastu töötada. Kui mõni teine kood võib su invariandi igal hetkel lõhkuda, on su töö seda pidevalt uuesti kinnitada, mitte taanduda.

Eelmise peatüki jaoks v1 loos — kahe brändiga rakenduse ehitamine sellest samast koodibaasist — vaata üks koodibaas, kaks rakendust: white-label ilma forkimata (v1.7.1); ja kogu kaare jaoks tarkvara täiuslikkuseni tarnimise anatoomia.