Steven
Steven5 min lasīšana

Sanāksmes, ko tiešām var atkal atrast: laika skalas laidiens

GeekBye v1.7.3 nomainīja sanāksmju dropdown pret īstu laika skalu — cilvēciski datumi, meklēšana, breadcrumb, kas pasaka, kurā sanāksmē atrodies. Zem virsmas: auto-izvēles sacensība, ekrānuzņēmums, kas vecāks par savu sanāksmi, un pieci Windows labojumi divdesmit astoņās minūtēs.

Inženierija
UX
Darbvirsma
GeekBye laidieni
Sanāksmes, ko tiešām var atkal atrast: laika skalas laidiens

Līdz 2026. gada janvārim GeekBye lietotājiem bija vēstures problēma. Lietotne viņu sanāksmes ierakstīja un analizēja bez aizķeršanās — un tad iešķiroja tās dropdown izvēlnē. Dropdown ir labs trim vienumiem. Līdz piecpadsmitajai sanāksmei "tā pagājušās otrdienas intervija" bija arheoloģiska ekspedīcija cauri vienādi izskatīgām rindām. v1.7.3 — 64 komiti no decembra vidus līdz 16. janvārim — ir laidiens, kurā sanāksmes kļuva par kaut ko, ko tiešām var atkal atrast.

(Viena grāmatvedības piezīme, jo git vēsture ir godīga pat tad, kad versiju numuri nav: v1.7.2 laidiena taga nav. Versija tika paaugstināta, bet nākamais tags, kas iznāca, bija v1.7.3, tāpēc v1.7.2 ēras Windows labojumi aizbrauca līdzi šajā laidienā.)

No dropdown līdz laika skalai

Galvenā izmaiņa ir viens pull request: 12 faili, +640 rindas, lielākā daļa no tām — jauns 381 rindas MeetingsTimeline komponents. Dropdown kļuva par ritināmu sanāksmju kartīšu laika skalu, sagrupētu četrās grupās — Today, Yesterday, This Week, Older (šodien, vakar, šonedēļ, vecākas) — ar datumiem, kas attēloti tā, kā cilvēks tos pateiktu: Today, 2:30 PM, Yesterday, 2:30 PM, Mon, 2:30 PM šai nedēļai un Jan 5, 2:30 PM tālāk. Cmd/Ctrl+K fokusē meklēšanas lauku, kas filtrē pēc nosaukuma. Sanāksmes detaļu skats kļuva par īstu navigācijas lapu, tāpēc navigācijas joslas atpakaļ un uz priekšu pogas beidzot kaut ko nozīmē, un breadcrumb pārstāja rādīt "Meetings / Meeting" un sāka rādīt "Meetings / Interview with John" (apgriezts ar daudzpunkti, jo kāds vienmēr nosauks sanāksmi kā romānu).

Divi mazi dzīves kvalitātes uzlabojumi nāca līdzi: dzēšanas poga sanāksmes skatā (kas pēc dzēšanas aizved atpakaļ uz laika skalu, nevis pamet tevi uz mirušas lapas), un auto-navigācija — kad klausīšanās sesija beidzas ar reālu transkripta saturu, panelis atveras tieši uz šīs sanāksmes detaļu lapas. Beidz zvanu — redzi sanāksmi. Sesijas, kas beidzas tukšas, tiek klusi izdzēstas, nevis piegružo laika skalu.

Sacensība, ko radi, uzlabojot navigāciju

Lūk, daļa, ko changelog tev nepastāsta. Vecajam sanāksmju sarakstam bija ieradums: katrā ielādē tas auto-izvēlējās jaunāko sesiju. Nekaitīgi, kamēr saraksts bija dropdown, ko reti aiztiec. Nāvējoši brīdī, kad sanāksmes kļuva par lapu, pa kuru navigē: uzklikšķini uz sanāksmes nr. 5, fonā pabeidzas refetch, un saraksts izpalīdzīgi izvēlas jaunāko sanāksmi — pārrakstot izvēli, ko izdarīji pirms divām sekundēm. Labojums nebija gudrāks sargs; tas bija auto-izvēles pilnīga izdzēšana. Jebkurš saraksts, kas izvēlas lietas lietotāja vietā, agri vai vēlu cīnīsies ar lietotāju.

Tās izņemšana atsedza otro sacensību. Auto-navigācija lec uz sanāksmi tajā pašā mirklī, kad tās sesija beidzas — kas var būt, pirms šī sesija ir pabeigusi rakstīt lokālajā SQLite datubāzē. Navigē par ātru, un tu nonāc pie sanāksmes, kas vēl neeksistē. Piegādātais labojums ir 500 milisekunžu aizkave pirms sesiju ielādes, ierodoties detaļu skatā, un navigācijas apstrādātājs nes savus drošības spilvenus — gaidīt loga did-finish-load plus 100ms, ja panelis tikko izveidots, 50ms, ja tas jau bija atvērts. Mūsu lasījums: sesijas beigu navigācija šķērso trīs laika domēnus — datubāzes rakstīšanu, loga ielādi un React montāžu — un katrs dabūja savu mazo aizkavi. Tas strādā, un mēs atklāti pateiksim, ka maģisko skaitļu kaudze ir godīgs parāds, nevis uzvara.

Ekrānuzņēmums, kas vecāks par savu sanāksmi

Vēl viens pieņēmums šajā laidienā nomira: "ekrānuzņēmumi pieder sesijai tad un tikai tad, ja tie uzņemti tās laikā." Pilnīgi loģiski. Aplami. Īsti lietotāji spiež Cmd+H uz darba sludinājuma, darba kārtības, koda, ko grasās apspriest — pirms Start nospiešanas. Report cilne ekrānuzņēmumus pieskaņoja sesijas laika diapazonam strikti, tāpēc šie sagatavošanās ekrānuzņēmumi pazuda no atskaites, kurai tie bija uzņemti. Labojums paplašināja pieskaņošanas logu par 60 sekundēm pirms sesijas sākuma. (Pati laika diapazona mašinērija ir vecāka — tā klusi iznāca v1.6.15; v1.7.3 ieguldījums ir iemācīt tai, ka sanāksmes sākas mazliet pirms tās sākas.)

Pieci labojumi divdesmit astoņās minūtēs

Šī laidiena kara stāsts nemaz nav laika skalā — tas ir Windows ievadapmācības pārklājumā, un tā ir hrestomātiska "labo labojumu" ķēde: pieci komiti starp 10:50 un 11:18 vienā rītā.

GeekBye galvenais logs izmanto peles caurlaidību — hook, kas pārslēdz Electron setIgnoreMouseEvents katrā peles kustībā, lai klikšķi izkristu cauri caurspīdīgajām zonām. Ievadapmācības laikā uz Windows šis hook cīnījās ar pamācības pārklājumu, un solī, kur parādās paneļa logs, lietotne sasala. Pirmais labojums: likt hook nedarīt neko, kamēr ievadapmācība ir aktīva. Miers caur atbruņošanos.

Tikai tagad ievadapmācības pogas nereaģēja, jo notikumu pārsūtīšana klikšķus veda uz paneļa logu zem pārklājuma. Otrais un trešais labojums knibinājās ar forward: false katram vednim atsevišķi. Tad nāca komits, kas atrada īsto cēloni: kad paneļa logs atveras, vilkšanas apstrādātājs atiestata galveno logu klikšķu caurlaides režīmā — un pirmais labojums bija padarījis caurlaidības hook pasīvu, kas nozīmēja, ka nekas vairs nevarēja izlabot iejaukšanos. Īstais labojums apgrieza stratēģiju: hook tagad ievadapmācības laikā aktīvi no jauna uzspiež setIgnoreMouseEvents(false) katrā peles kustībā — tieši tāpēc, ka ārējais kods to jebkurā brīdī var atiestatīt. Tas arī izdzēsa 75 rindas agrāko katra vedņa apvedceļu.

Un pat tad bija piektais komits, jo uzvara ievades karā nav uzvara z-kārtas karā: pārklājums un panelis abi sēdēja vienā always-on-top līmenī, un Windows paceļ to logu, kas dabū fokusu. Pārklājums pārcēlās uz augstāku loga līmeni un ar aizkavi paceļ sevi no jauna pēc paneļa parādīšanās. Šo loku ir vērts atcerēties: pasīvs labojums, kas atbruņo tavu vienīgo aizstāvi, ir sliktāks par sākotnējo cīņu.

Trīs lietas, ko šis laidiens mums iemācīja

  1. Navigācijas uzlabojumi izceļ stāvokļa kļūdas. Auto-izvēles sacensība eksistēja pirms v1.7.3; dropdown vienkārši nekad neļāva to sajust. Brīdī, kad sanāksmes kļuva par lapu, pa kuru apzināti navigē, katrs koda gabals, kas izvēlējās lietas tavā vietā, kļuva par kļūdu.
  2. Laika robežām ap lietotāja nodomu vajag brīvgājienu. Sesijas, ieraksti, atskaites — lietotāji rīkojas mazliet pirms un pēc mašīnas oficiālā loga. 60 sekunžu ekrānuzņēmumu buferis ir viena rinda, kas atspoguļo, kā cilvēki patiesībā uzvedas.
  3. Nekad nepadari savu koriģējošo kodu pasīvu. Windows sasalums prasīja piecus labojumus, jo pirmais izslēdza vienīgo mehānismu, kas varēja neitralizēt ārējo iejaukšanos. Ja kāds cits kods jebkurā brīdī var salauzt tavu invariantu, tavs darbs ir to nepārtraukti uzspiest no jauna, nevis nolikt ieročus.

Par iepriekšējo nodaļu v1 stāstā — divu zīmolotu lietotņu būvēšanu no šīs vienas koda bāzes — skati viena koda bāze, divas lietotnes: kā veidot white-label bez forkošanas (v1.7.1); un visai lokai — programmatūras piegādes līdz pilnībai anatomiju.