Steven
Steven4 min lasīšana

Kāpēc ekrāna ieraksts tver nepareizo monitoru (un mūsu labojums)

Divu monitoru iestatījumā GeekBye ierakstīja un fotografēja galveno displeju neatkarīgi no tā, uz kura ekrāna jūs strādājāt. Labojums bija viena maza funkcija — bet tās pirmā versija bija nepareiza, un koda pārskate noķēra, kāpēc.

Ekrāna ierakstīšana
Vairāki displeji
Inženierija
GeekBye laidieni
Kāpēc ekrāna ieraksts tver nepareizo monitoru (un mūsu labojums)

Lūk, kļūda, kas pastāv tikai tad, ja jums pieder divi monitori — tāpēc tā kādu laiku klusi dzīvoja. Jūs strādājat uz sānu displeja, sākat GeekBye ierakstu, un tas ieraksta jūsu galveno monitoru. To ar izvēlņu joslu. To, uz kura jūs neskatījāties.

Tas pats defekts, klusāks un ļaunāks, skāra ekrānuzņēmumus, ko GeekBye sūta AI kontekstam: nospiediet ekrānuzņēmuma īsinājumtaustiņu uz otrā monitora, un AI saņem pirmā attēlu. Nav nekādas vizuālas pazīmes — asistents vienkārši atbild par nepareizo ekrānu, un jūs paliekat neizpratnē, kāpēc tas ir apjucis. GeekBye v2.0.10 salaboja abus.

Divi konveijeri, viens slinks noklusējums

Ekrāna tveršana darbvirsmā ir divi atsevišķi koda ceļi, un abi neatkarīgi bija izvēlējušies galveno displeju:

  • Video ierakstīšana uzskaitīja pieejamos ekrāna avotus un paņēma pirmo — sources[0]. macOS tas praktiski vienmēr ir galvenais displejs. Nekādas izvēlnes, nekādas loģikas par to, kur jūs patiesībā atradāties. Komentārs mūsu pašu kodā burtiski teica "auto-select first screen source."
  • Ekrānuzņēmumi izmantoja macOS screencapture komandu ar -m karogu. Šim karogam ir tieši viena nozīme: tikai galvenais displejs. Iekodēts cieti.

Neviens ceļš nekad neuzdeva svarīgo jautājumu: uz kura ekrāna atrodas lietotājs?

Viena lieta, kas nekad nebija salauzta, ko vērts noskaidrot, jo cilvēki pieņem, ka tā ir: pārslēgšanās starp macOS Spaces uz tā paša monitora vienmēr darbojās. Tveršana notiek displeja līmenī — tā satver jebkuru Space, kas redzama izvēlētajā displejā. Kļūda nekad nebija par Spaces. Tā vienmēr bija par nepareizā fiziskā displeja izvēli.

Labojums, kas izskatījās acīmredzams — un bija nepareizs

Pareizais signāls šķiet vienkāršs: tvert displeju, uz kura lietotājs atrodas. Mūsu pirmā implementācija balstījās uz GeekBye pārklājuma logu — tvert to displeju, uz kura atrodas pārklājums.

Koda pārskate to nogalināja, un pareizi. GeekBye pārklājums tiek izveidots kā pilna darba apgabala logs uz galvenā displeja, pozīcijā (0,0). Tas pārvietojas uz citu monitoru tikai tad, ja jūs fiziski aizvelkat tā piluli turp — un īsinājumtaustiņi, kas to pabīda, tiek piesaistīti galvenā displeja izmēriem, tāpēc tie nevar to pārvietot uz otru monitoru vispār. Tveršanas piesaiste pārklājumam nozīmēja: katram lietotājam, kurš nejauši neaizvilka pārklājumu uz sava darba ekrāna, "labojums" atrisinājās tieši atpakaļ uz galveno displeju. Tas nebūtu salabojis gandrīz nevienam — vienlaikus ātrā testā uz viena monitora izstrādes datora izskatoties, ka tas darbojas.

Pareizā piesaiste ir kursors. Lai kur atrastos jūsu pele, tas ir displejs, uz kura strādājat — un tas ir pareizi katram tveršanas sākšanas veidam: īsinājumtaustiņš nostrādā tur, kur norādāt, un klikšķis uz pogas Record pēc definīcijas novieto kursoru uz šī displeja. Galīgais labojums ir divu rindu funkcija: displejs vistuvāk kursoram. Video saskaņo savu tveršanas avotu ar šī displeja id; ekrānuzņēmumi nodod šī displeja robežas komandai screencapture -R (konkrēts taisnstūris), nevis -m galvenā displeja karogam.

Mēs apzināti izvēlējāmies -R (skaidru taisnstūri globālajās ekrāna koordinātēs), nevis -D (displeja indeksu): OS displeja indeksam nav garantētas atbilstības ietvara displeju secībai, tāpēc indekss būtu vēl viena minēšanas spēle. Taisnstūris no faktiskajām displeja robežām ir nepārprotams — un mēs pārbaudījām šī karoga uzvedību, ieskaitot negatīvas koordinātes displejiem, kas novietoti pa kreisi no galvenā, uz īsta vairāku monitoru stenda pirms piegādes.

Kāpēc šī ir laba mācību kļūda

  1. "Tvert ekrānu" slēpj lēmumu. Uz viena displeja nav lēmuma, tāpēc lēmums nekad netiek izprojektēts — tas tiek atstāts noklusējumam. Vairāki monitori ir tur, kur parādās katrs netiešais noklusējums.
  2. Klusi nepareizs ir sliktāk par redzami nepareizu. Video kļūda kaitināja cilvēkus. Ekrānuzņēmuma kļūda maldināja AI, neredzami. Kad būvējat funkcijas, kas baro kontekstu modelim, nepareiza ievade rada pārliecinoši nepareizu izvadi bez kļūdas nekur. Tieši šīs kļūmes ir vērts medīt vissīvāk.
  3. Labojums, kas iztur uz jūsu datora, var izgāzties uz visu pārējo. Pārklājumam piesaistītā versija darbojās viena monitora testā. Visa kļūdas būtība ir vairāki monitori — un recenzents spriedelēja par loga īsto pozīciju, nevis uzticējās zaļajam testam. Pārskate nav zīmogs uz strādājoša koda; tā ir otrs modelis par to, kāpēc kods strādā.

GeekBye v2.0.10 piegādā uz kursoru balstīto labojumu gan ierakstīšanai, gan ekrānuzņēmumiem. Ja lietojat vairākus displejus, tveršana tagad seko jums.

Par šīs sērijas kaimiņu laidieniem lasiet kāpēc jūsu AI piezīmju rīks pārtrauc ierakstīšanu sapulces vidū (v2.0.9) un kāpēc AI transkripcija pārprot tehniskos terminus (v2.0.11). Par to, kā pārklājums uzvedas zvanu laikā, lasiet kā palikt neredzamam ekrāna kopīgošanas laikā.