
Derfor tar skjermopptaket opp feil skjerm (og fiksen vår)
Med to skjermer tok GeekBye opp og skjermdumpet den primære skjermen uansett hvilken skjerm du jobbet på. Fiksen var én liten funksjon — men den første versjonen var feil, og kodegjennomgangen fanget hvorfor.
Her er en bug som bare finnes hvis du eier to skjermer — og det er derfor den levde stille en stund. Du jobber på sideskjermen din, starter et GeekBye-opptak, og det tar opp den primære skjermen din. Den med menylinjen. Den du ikke så på.
Samme defekt, stillere og verre, rammet skjermbildene GeekBye sender til AI-en som kontekst: trykk på skjermbilde-hurtigtasten på den andre skjermen din, og AI-en får et bilde av den første. Det finnes ikke noe visuelt tegn — assistenten svarer bare om feil skjerm, og du sitter igjen og lurer på hvorfor den er forvirret. GeekBye v2.0.10 fikset begge.
To pipelines, én lat standard
Skjermopptak på skrivebordet er to separate kodeveier, og begge hadde uavhengig av hverandre valgt den primære skjermen:
- Videoopptak listet opp de tilgjengelige skjermkildene og tok den første —
sources[0]. På macOS er det i praksis alltid hovedskjermen. Ingen velger, ingen logikk om hvor du faktisk var. Kommentaren i vår egen kode sa bokstavelig talt "auto-select first screen source." - Skjermbilder brukte macOS-kommandoen
screencapturemed flagget-m. Det flagget har nøyaktig én betydning: kun hovedskjermen. Hardkodet.
Ingen av veiene stilte noen gang spørsmålet som betyr noe: hvilken skjerm er brukeren på?
Én ting som aldri var ødelagt, verdt å oppklare fordi folk antar at den var det: å bytte mellom macOS Spaces på samme skjerm fungerte alltid. Opptaket skjer på skjermnivå — det tar det Space som er synlig på den valgte skjermen. Buggen handlet aldri om Spaces. Den handlet alltid om å velge feil fysisk skjerm.
Fiksen som så åpenbar ut — og var feil
Riktig signal virker enkelt: fang skjermen brukeren er på. Vår første implementasjon forankret seg i GeekByes overlay-vindu — fang den skjermen overlayet lever på.
Kodegjennomgangen drepte det, med rette. GeekByes overlay opprettes som et vindu over hele arbeidsområdet på den primære skjermen, i posisjon (0,0). Det flytter bare til en annen skjerm hvis du fysisk drar pillen dit — og hurtigtastene som dytter det rundt, låses til den primære skjermens mål, så de kan ikke flytte det til en annen skjerm i det hele tatt. Å forankre opptaket i overlayet betød: for hver bruker som ikke tilfeldigvis dro overlayet over på arbeidsskjermen sin, løste "fiksen" seg rett tilbake til den primære skjermen. Den ville nesten ikke ha fikset noe for noen — mens den, i en rask test på en utviklingsmaskin med én skjerm, så ut til å fungere.
Riktig anker er markøren. Uansett hvor musen din er, er det skjermen du jobber på — og det er riktig for enhver måte et opptak starter på: en hurtigtast utløses der du peker, og å klikke på Record-knappen plasserer markøren din på den skjermen per definisjon. Den endelige fiksen er en tolinjers funksjon: skjermen nærmest markøren. Video matcher opptakskilden sin til den skjermens id; skjermbilder sender den skjermens grenser til screencapture -R (et bestemt rektangel) i stedet for -m-hovedskjermflagget.
Vi valgte -R (et eksplisitt rektangel i globale skjermkoordinater) fremfor -D (en skjermindeks) bevisst: OS-ets skjermindeks har ingen garantert samsvar med rammeverkets skjermrekkefølge, så en indeks ville vært nok et gjettespill. Et rektangel fra de faktiske skjermgrensene er entydig — og vi verifiserte flaggets oppførsel, inkludert negative koordinater for skjermer plassert til venstre for den primære, på et ekte oppsett med flere skjermer før utsending.
Hvorfor denne er en god lærebug
- "Fang skjermen" skjuler en beslutning. På én skjerm finnes det ingen beslutning, så beslutningen designes aldri — den blir en standard. Flere skjermer er der hver implisitte standard kommer til overflaten.
- Stille-feil er verre enn synlig-feil. Videobuggen irriterte folk. Skjermbilde-buggen villedet AI-en, usynlig. Når du bygger funksjoner som mater kontekst til en modell, produserer et feil input et selvsikkert feil output uten noen feil noe sted. Det er de feilene det er verdt å jakte hardest på.
- En fiks som går gjennom på maskinen din, kan feile på alle andres. Den overlay-forankrede versjonen fungerte i en test med én skjerm. Hele poenget med buggen er flere skjermer — og gjennomgåeren resonnerte om vinduets virkelige posisjon i stedet for å stole på den grønne testen. Gjennomgang er ikke et gummistempel på fungerende kode; det er en andre modell av hvorfor koden fungerer.
GeekBye v2.0.10 leverer den markørbaserte fiksen for både opptak og skjermbilder. Kjører du flere skjermer, følger opptaket nå etter deg.
For nabolanseringene i denne serien, se derfor slutter AI-notattakeren din å ta opp midt i møtet (v2.0.9) og derfor hører AI-transkripsjon tekniske termer feil (v2.0.11). For hvordan overlayet oppfører seg under samtaler, se hvordan du forblir usynlig under skjermdeling.