Steven
Steven5 min de lectura

Per què la gravació de pantalla captura el monitor equivocat (i com ho vam corregir)

En una configuració de dos monitors, GeekBye gravava i feia captures de la pantalla principal sense importar en quina pantalla treballaves. La correcció era una petita funció — però la primera versió era errònia, i la revisió de codi va trobar per què.

Gravació de pantalla
Multi-pantalla
Enginyeria
Llançaments de GeekBye
Per què la gravació de pantalla captura el monitor equivocat (i com ho vam corregir)

Aquí teniu un bug que només existeix si tens dos monitors — per això va viure tranquil·lament durant un temps. Treballes a la pantalla lateral, inicies una gravació de GeekBye, i grava el teu monitor principal. El que té la barra de menú. El que no miraves.

El mateix defecte, més silenciós i pitjor, afectava les captures que GeekBye envia a la IA com a context: prem la drecera de captura al teu segon monitor, i la IA rep una imatge del primer. No hi ha cap senyal visual — l'assistent simplement respon sobre la pantalla equivocada i tu et quedes preguntant-te per què està confós. GeekBye v2.0.10 va corregir tots dos.

Dues canonades, un mateix valor per defecte gandul

La captura de pantalla a l'escriptori són dos camins de codi separats, i tots dos havien triat independentment la pantalla principal:

  • La gravació de vídeo enumerava les fonts de pantalla disponibles i agafava la primera — sources[0]. A macOS això és, a efectes pràctics, sempre la pantalla principal. Sense selector, sense cap lògica sobre on eres realment. El comentari al nostre propi codi deia literalment "auto-select first screen source."
  • Les captures feien servir l'ordre screencapture de macOS amb la bandera -m. Aquella bandera té exactament un significat: main display only (només pantalla principal). Escrit a foc.

Cap dels dos camins no es va fer mai la pregunta que importa: en quina pantalla és l'usuari?

Una cosa que mai no va estar trencada, que val la pena aclarir perquè la gent assumeix que sí: canviar entre Spaces de macOS al mateix monitor sempre va funcionar. La captura passa a nivell de pantalla — agafa el Space que sigui visible a la pantalla triada. El bug mai no va anar de Spaces. Sempre va anar de triar la pantalla física equivocada.

La correcció que semblava òbvia — i era errònia

El senyal correcte sembla fàcil: capturar la pantalla on l'usuari és. La nostra primera implementació es va ancorar a la finestra overlay de GeekBye — capturar la pantalla on visqui l'overlay.

La revisió de codi la va matar, encertadament. L'overlay de GeekBye es crea com una finestra a àrea de treball completa a la pantalla principal, a la posició (0,0). Només es mou a un altre monitor si arrossegues físicament la seva pastilla fins allà — i les dreceres de teclat que la desplacen la limiten a les dimensions de la pantalla principal, així que no poden moure-la a un segon monitor de cap manera. Ancorar la captura a l'overlay significava: per a cada usuari que no hagués arrossegat casualment l'overlay a la seva pantalla de treball, la "correcció" tornava directament a la pantalla principal. No hauria arreglat gairebé ningú — tot i que, en una prova ràpida en una màquina de desenvolupament d'un sol monitor, semblava que funcionava.

L'àncora correcta és el cursor. Allà on sigui el ratolí, aquella és la pantalla on treballes — i és correcta per a cada manera com comença una captura: una drecera de teclat es dispara allà on apuntes, i clicar el botó Gravar posa el cursor en aquella pantalla per definició. La correcció final és una funció de dues línies: la pantalla més propera al cursor. El vídeo fa coincidir la seva font de captura amb l'id d'aquella pantalla; les captures passen els límits d'aquella pantalla a screencapture -R (un rectangle específic) en lloc de la bandera -m de pantalla principal.

Vam triar -R (un rectangle explícit en coordenades globals de pantalla) per damunt de -D (un índex de pantalla) deliberadament: l'índex de pantalla del sistema operatiu no té cap correspondència garantida amb l'ordre de pantalles del framework, així que un índex seria un segon joc d'endevinar. Un rectangle a partir dels límits reals de la pantalla és inequívoc — i vam verificar el comportament de la bandera, incloses les coordenades negatives per a pantalles situades a l'esquerra de la principal, en un equip multi-monitor real abans de publicar.

Per què aquest és un bon bug per aprendre

  1. "Captura la pantalla" amaga una decisió. En una sola pantalla no hi ha decisió, així que la decisió mai no es dissenya — es deixa per defecte. El multi-monitor és on aflora cada valor per defecte implícit.
  2. Fallar en silenci és pitjor que fallar de manera visible. El bug de vídeo molestava la gent. El bug de captura enganyava la IA, invisiblement. Quan construeixes funcions que alimenten context a un model, una entrada errònia produeix una sortida errònia amb confiança i sense cap error enlloc. Aquestes són les fallades que cal caçar amb més ganes.
  3. Una correcció que passa a la teva màquina pot fallar a la de tothom altre. La versió ancorada a l'overlay funcionava en una prova d'un sol monitor. Tot el sentit del bug són múltiples monitors — i el revisor va raonar sobre la posició real de la finestra en lloc de fiar-se de la prova verda. La revisió no és un segell sobre codi que funciona; és un segon model de per què el codi funciona.

GeekBye v2.0.10 publica la correcció basada en el cursor tant per a la gravació com per a les captures. Si fas servir múltiples pantalles, ara la captura et segueix.

Per als llançaments veïns d'aquesta sèrie, mira per què el teu assistent de notes amb IA deixa de gravar a mitja reunió (v2.0.9) i per què la transcripció amb IA sent malament els termes tècnics (v2.0.11). Per a com es comporta l'overlay durant les trucades, mira com mantenir-te invisible mentre comparteixes pantalla.

Articles Relacionats

L''anatomia d''enviar programari a la perfecció: com la revisió de codi va detectar allò que les proves no podien
Steven
Steven7 min de lectura

L''anatomia d''enviar programari a la perfecció: com la revisió de codi va detectar allò que les proves no podien

Al llarg de la sèrie GeekBye v2, passa sempre el mateix: una correcció supera totes les proves a la màquina del desenvolupador i, tot seguit, la revisió de codi demostra que hauria fallat per a gairebé tothom. Aquest és el flux de treball darrere de nou llançaments: la porta de revisió, les deteccions primer-la-correcció i la disciplina de provar-abans-d'enviar que converteix "a mi em funciona" en "funciona".

Enginyeria
Procés
Revisió de codi
Una variable CSS, cinc rondes de revisió i una cadena d'eines de Swift que va mentir
Steven
Steven8 min de lectura

Una variable CSS, cinc rondes de revisió i una cadena d'eines de Swift que va mentir

GeekBye v2.0.7 va fer que tota la superposició fos translúcida de manera ajustable — cosa que sona com un canvi de CSS d'una línia i que en absolut ho va ser. La història de veritat és el que va detectar la revisió de codi: dues superfícies que es negaven a esvair-se, una barra de gravació que es veia malament amb la mateixa opacitat i un binari compilat que va oscil·lar 672 bytes perquè la nostra pròpia documentació va indicar a un revisor la versió de Swift equivocada.

Enginyeria
Disseny
Build
Transcripció en directe quan el tallafocs bloqueja els WebSockets
Steven
Steven5 min de lectura

Transcripció en directe quan el tallafocs bloqueja els WebSockets

A les xarxes corporatives els encanta permetre HTTPS i matar en silenci les actualitzacions de WebSocket. Això trenca silenciosament la transcripció en temps real. GeekBye v2.0.8 recorre automàticament a un transport purament HTTPS — i publicar-ho va destapar un bug que hauria fet inútil tota la funció.

Transcripció
Xarxes
Enginyeria