Steven
Steven4 min lugemist

Miks ekraanisalvestus jäädvustab vale monitori (ja meie parandus)

Kahe monitoriga seadistuses salvestas ja pildistas GeekBye peamist ekraani, ükskõik millisel ekraanil sa parasjagu töötasid. Parandus oli üksainus väike funktsioon — kuid selle esimene versioon oli vale, ja koodiülevaatus püüdis kinni, miks.

Ekraanisalvestus
Mitu ekraani
Inseneritöö
GeekBye väljalasked
Miks ekraanisalvestus jäädvustab vale monitori (ja meie parandus)

Siin on viga, mis eksisteerib ainult siis, kui sul on kaks monitori — just seepärast elas see mõnda aega vaikselt. Töötad oma külgekraanil, käivitad GeekBye salvestuse, ja see salvestab su peamise monitori. Selle, kus on menüüriba. Selle, mida sa ei vaadanud.

Sama defekt, vaiksem ja halvem, tabas ekraanipilte, mida GeekBye saadab AI-le konteksti jaoks: vajuta oma teisel monitoril ekraanipildi kiirklahvi ja AI saab pildi su esimesest. Visuaalset märki pole — assistent lihtsalt vastab vale ekraani kohta ja sina jääd mõtlema, miks ta on segaduses. GeekBye v2.0.10 parandas mõlemad.

Kaks torustikku, üks laisk vaikeväärtus

Ekraani jäädvustus töölaual on kaks eraldi koodirada, ja mõlemad olid teineteisest sõltumatult valinud peamise ekraani:

  • Videosalvestus loetles saadaolevad ekraaniallikad ja võttis esimese — sources[0]. macOS-is on see praktiliselt alati peamine ekraan. Ei mingit valikut, ei mingit loogikat selle kohta, kus sa tegelikult olid. Kommentaar meie enda koodis ütles sõna otseses mõttes "auto-select first screen source."
  • Ekraanipildid kasutasid macOS screencapture käsku -m lipuga. Sellel lipul on täpselt üks tähendus: ainult peamine ekraan. Kõvasti sisse kodeeritud.

Kumbki rada ei küsinud kunagi seda küsimust, millel on tähtsust: millisel ekraanil kasutaja on?

Üks asi, mis polnud kunagi katki, mida tasub selgeks teha, sest inimesed eeldavad, et oli: macOS Spaces'ide vahel lülitumine samal monitoril töötas alati. Jäädvustus toimub ekraani tasandil — see haarab ükskõik millise Space'i, mis valitud ekraanil nähtav on. Viga ei olnud kunagi Spaces'ide pärast. See oli alati vale füüsilise ekraani valimise pärast.

Parandus, mis nägi ilmselge välja — ja oli vale

Õige signaal tundub lihtne: jäädvusta ekraan, millel kasutaja on. Meie esimene teostus toetus GeekBye ülekatte aknale — jäädvusta see ekraan, millel ülekate asub.

Koodiülevaatus tappis selle, ja õigustatult. GeekBye ülekate luuakse täis-tööala aknana peamisel ekraanil, positsioonil (0,0). See liigub teisele monitorile ainult siis, kui sa lohistad selle pilli füüsiliselt sinna — ja kiirklahvid, mis seda nihutavad, klammerduvad peamise ekraani mõõtmete külge, nii et need ei saa seda teisele monitorile üldse liigutada. Jäädvustuse sidumine ülekattega tähendas: iga kasutaja jaoks, kes juhtumisi ei lohistanud ülekatet oma tööekraanile, lahenes "parandus" otse tagasi peamisele ekraanile. See poleks parandanud peaaegu kellegi jaoks — nähes samal ajal ühe monitoriga arendusmasina kiires testis välja nii, nagu töötaks.

Õige ankur on kursor. Kus iganes su hiir on, see ongi ekraan, millel töötad — ja see on õige iga jäädvustuse alustamise viisi jaoks: kiirklahv käivitub seal, kuhu osutad, ja Record-nupu klõpsamine paneb su kursori sellele ekraanile juba definitsiooni järgi. Lõplik parandus on kaherealine funktsioon: kursorile lähim ekraan. Video sobitab oma jäädvustusallika selle ekraani id-ga; ekraanipildid annavad selle ekraani piirid käsule screencapture -R (kindel ristkülik) -m peamise ekraani lipu asemel.

Valisime teadlikult -R (selge ristkülik globaalsetes ekraanikoordinaatides) -D (ekraani indeks) asemel: OS-i ekraaniindeksil pole garanteeritud vastavust raamistiku ekraanijärjestusega, nii et indeks oleks järjekordne oletamismäng. Ristkülik tegelikest ekraanipiiridest on üheselt mõistetav — ja me kontrollisime lipu käitumist, kaasa arvatud negatiivseid koordinaate ekraanidele, mis on paigutatud peamisest vasakule, enne väljasaatmist päris mitme monitoriga stendil.

Miks see on hea õppeviga

  1. "Jäädvusta ekraan" varjab otsust. Ühe ekraani puhul pole otsust, nii et otsust ei kavandata kunagi — see jääb vaikeväärtuseks. Mitu monitori on koht, kus iga kaudne vaikeväärtus pinnale tuleb.
  2. Vaikselt-vale on halvem kui nähtavalt-vale. Videoviga häiris inimesi. Ekraanipildi viga eksitas AI-d, nähtamatult. Kui ehitad funktsioone, mis toidavad mudelile konteksti, tekitab vale sisend enesekindlalt vale väljundi ilma ühegi veata kusagil. Just neid rikkeid tasub kõige kõvemini jahtida.
  3. Parandus, mis läbib su masinal, võib teiste omal läbi kukkuda. Ülekattele seotud versioon töötas ühe monitori testis. Vea kogu mõte on mitu monitori — ja ülevaataja arutles akna tegeliku positsiooni üle, selle asemel et usaldada rohelist testi. Ülevaatus ei ole tempel töötaval koodil; see on teine mudel selle kohta, miks kood töötab.

GeekBye v2.0.10 toob kursoripõhise paranduse nii salvestusele kui ka ekraanipiltidele. Kui kasutad mitut ekraani, järgneb jäädvustus nüüd sulle.

Selle sarja naaberväljalasete jaoks vaata miks sinu AI-märkmik lõpetab salvestamise keset koosolekut (v2.0.9) ja miks AI-transkriptsioon kuuleb tehnilisi termineid valesti (v2.0.11). Selle kohta, kuidas ülekate kõnede ajal käitub, vaata kuidas jääda ekraanijagamise ajal nähtamatuks.