
Kodėl ekrano įrašymas užfiksuoja ne tą monitorių (ir kaip mes tai ištaisėme)
Su dviejų monitorių konfigūracija GeekBye įrašinėdavo ir darydavo ekrano nuotraukas iš pagrindinio ekrano, nesvarbu, kuriame ekrane dirbote. Pataisa tilpo į vieną mažą funkciją — bet pirmoji jos versija buvo klaidinga, ir kodo peržiūra pagavo kodėl.
Štai klaida, kuri egzistuoja, tik jei turite du monitorius — todėl kurį laiką ji ir gyveno tyliai. Dirbate šoniniame ekrane, paleidžiate GeekBye įrašymą, o jis įrašo jūsų pagrindinį monitorių. Tą su meniu juosta. Tą, į kurį nežiūrėjote.
Tas pats defektas, tylesnis ir blogesnis, smogė ekrano nuotraukoms, kurias GeekBye siunčia AI kaip kontekstą: paspaudžiate nuotraukos spartųjį klavišą antrame monitoriuje, o AI gauna pirmojo vaizdą. Nėra jokio vizualaus ženklo — asistentas tiesiog atsako apie ne tą ekraną, o jūs stebitės, kodėl jis sutrikęs. GeekBye v2.0.10 ištaisė abu.
Du srautai, vienas tingus numatytasis pasirinkimas
Ekrano fiksavimas darbalaukyje — tai du atskiri kodo keliai, ir abu nepriklausomai pasirinko pagrindinį ekraną:
- Vaizdo įrašymas išvardydavo prieinamus ekrano šaltinius ir imdavo pirmąjį —
sources[0]. macOS sistemoje tai praktiškai visada pagrindinis ekranas. Jokio parinkiklio, jokios logikos apie tai, kur iš tikrųjų buvote. Komentaras mūsų pačių kode tiesiogine prasme sakė „auto-select first screen source" (automatiškai parinkti pirmąjį ekrano šaltinį). - Ekrano nuotraukos naudojo macOS komandą
screencapturesu vėliavėle-m. Ši vėliavėlė turi lygiai vieną reikšmę: tik pagrindinis ekranas. Įrašyta kietai.
Nė vienas kelias niekada neuždavė klausimo, kuris svarbus: kuriame ekrane yra naudotojas?
Vienas dalykas, kuris niekada nebuvo sugedęs, o jį verta išaiškinti, nes žmonės mano priešingai: perjungimas tarp macOS erdvių (Spaces) tame pačiame monitoriuje visada veikė. Fiksavimas vyksta ekrano lygmenyje — jis pagriebia tą erdvę, kuri matoma pasirinktame ekrane. Klaida niekada nebuvo apie erdves. Ji visada buvo apie ne to fizinio ekrano pasirinkimą.
Pataisa, kuri atrodė akivaizdi — ir buvo klaidinga
Teisingas signalas atrodo paprastas: užfiksuok ekraną, kuriame yra naudotojas. Pirmoji mūsų realizacija prisirišo prie GeekBye perdangos lango — fiksuok tą ekraną, kuriame gyvena perdanga.
Kodo peržiūra ją teisingai pribaigė. GeekBye perdanga sukuriama kaip viso darbo ploto langas pagrindiniame ekrane, pozicijoje (0,0). Į kitą monitorių ji persikelia tik tada, jei fiziškai nutempiate ten jos piliulę — o spartieji klavišai, kurie ją pastumdo, apkarpomi iki pagrindinio ekrano matmenų, tad jie negali perkelti jos į antrą monitorių išvis. Fiksavimo prisirišimas prie perdangos reiškė: kiekvienam naudotojui, kuris atsitiktinai nenutempė perdangos į savo darbinį ekraną, „pataisa" išsispręsdavo atgal į pagrindinį ekraną. Ji nebūtų ištaisiusi beveik nieko — o per greitą testą vieno monitoriaus kūrėjo mašinoje atrodytų, tarsi veikia.
Teisinga inkaravimosi vieta yra žymeklis. Kad ir kur būtų jūsų pelė, tai ir yra ekranas, kuriame dirbate — ir tai teisinga kiekvienam būdui, kaip prasideda fiksavimas: spartusis klavišas suveikia ten, kur rodote, o paspaudimas ant mygtuko „Įrašyti" pagal apibrėžimą padeda jūsų žymeklį tame ekrane. Galutinė pataisa — dviejų eilučių funkcija: ekranas, artimiausias žymekliui. Vaizdas suderina savo fiksavimo šaltinį su to ekrano id; nuotraukos perduoda to ekrano ribas į screencapture -R (konkretus stačiakampis) vietoj vėliavėlės -m (tik pagrindinis ekranas).
Sąmoningai pasirinkome -R (aiškų stačiakampį globaliose ekrano koordinatėse), o ne -D (ekrano indeksą): OS ekrano indeksas neturi garantuoto atitikimo su karkaso ekranų tvarka, tad indeksas būtų antras spėliojimo žaidimas. Stačiakampis iš tikrųjų ekrano ribų yra nedviprasmiškas — o vėliavėlės elgseną patikrinome, įskaitant neigiamas koordinates ekranams, esantiems kairiau nuo pagrindinio, tikrame kelių monitorių stende prieš išleisdami.
Kodėl tai gera pamokanti klaida
- „Užfiksuok ekraną" slepia sprendimą. Viename ekrane sprendimo nėra, tad sprendimas niekada nesuprojektuojamas — jis nustatomas pagal numatymą. Keli monitoriai yra ta vieta, kur išplaukia į paviršių kiekvienas numanomas numatytasis pasirinkimas.
- Tyliai-klaidinga blogiau nei matomai-klaidinga. Vaizdo klaida žmones erzino. Nuotraukos klaida klaidino AI, nematomai. Kai kuriate funkcijas, maitinančias modelį kontekstu, klaidingas įvestis pagamina užtikrintai klaidingą išvestį be jokios klaidos niekur. Būtent tokius gedimus verta medžioti atkakliausiai.
- Pataisa, praeinanti jūsų mašinoje, gali sugriūti kiekvieno kito. Prie perdangos pririšta versija veikė vieno monitoriaus teste. Visa klaidos esmė yra keli monitoriai — o peržiūrintis samprotavo apie tikrąją lango poziciją, o ne pasitikėjo žaliu testu. Peržiūra nėra antspaudas ant veikiančio kodo; tai antras modelis to, kodėl kodas veikia.
GeekBye v2.0.10 pristato žymekliu paremtą pataisą ir įrašymui, ir nuotraukoms. Jei naudojate kelis ekranus, fiksavimas dabar seka jus.
Gretimus šios serijos leidimus rasite kodėl jūsų AI užrašinė nustoja įrašinėti vidury susitikimo (v2.0.9) ir kodėl AI transkripcija iškraipo techninius terminus (v2.0.11). Apie tai, kaip perdanga elgiasi per skambučius, skaitykite kaip likti nematomam dalijantis ekranu.