Steven
Steven4 minit bacaan

Mengapa Rakaman Skrin Menangkap Monitor yang Salah (dan Cara Kami Membetulkannya)

Pada persediaan dua monitor, GeekBye merakam dan menangkap tangkapan skrin paparan utama tak kira di skrin mana anda bekerja. Pembetulannya hanya satu fungsi kecil — tetapi versi pertamanya salah, dan semakan kod menemui sebabnya.

Rakaman Skrin
Multi-Paparan
Kejuruteraan
Keluaran GeekBye
Mengapa Rakaman Skrin Menangkap Monitor yang Salah (dan Cara Kami Membetulkannya)

Inilah pepijat yang hanya wujud jika anda memiliki dua monitor — sebab itulah ia hidup secara senyap buat seketika. Anda bekerja di skrin sisi, memulakan rakaman GeekBye, dan ia merakam monitor utama anda. Yang ada bar menu. Yang tidak anda pandang.

Kecacatan yang sama, lebih senyap dan lebih buruk, mengenai tangkapan skrin yang GeekBye hantar kepada AI sebagai konteks: tekan pintasan tangkapan skrin pada monitor kedua anda, dan AI mendapat gambar monitor pertama anda. Tiada petanda visual — pembantu itu cuma menjawab tentang skrin yang salah dan anda tertanya-tanya mengapa ia keliru. GeekBye v2.0.10 membetulkan kedua-duanya.

Dua saluran paip, satu nilai lalai yang malas

Tangkapan skrin pada desktop ialah dua laluan kod berasingan, dan kedua-duanya secara bebas telah memilih paparan utama:

  • Rakaman video menyenaraikan sumber skrin yang tersedia dan mengambil yang pertama — sources[0]. Pada macOS itu secara praktiknya sentiasa paparan utama. Tiada pemilih, tiada logik tentang di mana anda sebenarnya berada. Komen dalam kod kami sendiri secara literalnya menyebut "auto-select first screen source."
  • Tangkapan skrin menggunakan perintah screencapture macOS dengan bendera -m. Bendera itu mempunyai tepat satu makna: main display only (paparan utama sahaja). Ditulis mati.

Tiada satu pun daripada kedua-dua laluan itu pernah bertanya soalan yang penting: pengguna berada di skrin mana?

Satu perkara yang tidak pernah rosak, berbaloi dijelaskan kerana orang menyangka begitu: bertukar antara Spaces macOS pada monitor yang sama sentiasa berfungsi. Tangkapan berlaku pada peringkat paparan — ia mengambil apa jua Space yang kelihatan pada paparan yang dipilih. Pepijat ini tidak pernah tentang Spaces. Ia sentiasa tentang memilih paparan fizikal yang salah.

Pembetulan yang kelihatan jelas — dan ternyata salah

Isyarat yang betul kelihatan mudah: tangkap paparan tempat pengguna berada. Pelaksanaan pertama kami berpaut pada tetingkap overlay GeekBye — tangkap paparan mana pun tempat overlay itu berada.

Semakan kod membunuhnya, dengan betul. Overlay GeekBye dicipta sebagai tetingkap kawasan-kerja-penuh pada paparan utama, pada kedudukan (0,0). Ia hanya berpindah ke monitor lain jika anda secara fizikal menyeret pilnya ke sana — dan pintasan papan kekunci yang menolaknya ke sana sini terhad kepada dimensi paparan utama, jadi ia tidak boleh memindahkannya ke monitor kedua sama sekali. Berpaut tangkapan pada overlay bermakna: bagi setiap pengguna yang tidak kebetulan menyeret overlay ke skrin kerjanya, "pembetulan" itu kembali terus ke paparan utama. Ia hampir tidak membetulkan sesiapa pun — sambil kelihatan, dalam ujian pantas pada mesin pembangunan bermonitor tunggal, seolah-olah ia berfungsi.

Sauh yang betul ialah kursor. Di mana jua tetikus anda berada, itulah paparan tempat anda bekerja — dan ia betul untuk setiap cara sesuatu tangkapan bermula: pintasan papan kekunci mencetus di tempat anda menuding, dan mengklik butang Rakam meletakkan kursor anda pada paparan itu menurut takrifnya. Pembetulan akhirnya ialah fungsi dua baris: paparan paling hampir dengan kursor. Video memadankan sumber tangkapannya dengan id paparan itu; tangkapan skrin menghantar sempadan paparan itu kepada screencapture -R (segi empat tepat tertentu) dan bukannya bendera paparan-utama -m.

Kami memilih -R (segi empat tepat eksplisit dalam koordinat skrin global) berbanding -D (sebuah indeks paparan) secara sengaja: indeks paparan OS tiada padanan terjamin dengan susunan paparan rangka kerja, jadi indeks akan menjadi permainan teka kedua. Segi empat tepat daripada sempadan paparan sebenar tiada kesamaran — dan kami mengesahkan gelagat bendera itu, termasuk koordinat negatif untuk paparan yang diletakkan di kiri paparan utama, pada pentas multi-monitor sebenar sebelum dikeluarkan.

Mengapa ini pepijat yang baik untuk belajar

  1. "Tangkap skrin" menyembunyikan satu keputusan. Pada satu paparan tiada keputusan, jadi keputusan itu tidak pernah direka bentuk — ia dilalaikan. Multi-monitor ialah tempat setiap nilai lalai tersirat timbul ke permukaan.
  2. Salah secara senyap lebih buruk daripada salah secara jelas. Pepijat video menjengkelkan orang. Pepijat tangkapan skrin mengelirukan AI, secara tak kelihatan. Apabila anda membina ciri yang menyuap konteks kepada sesuatu model, input yang salah menghasilkan output yang salah dengan penuh yakin tanpa sebarang ralat di mana-mana. Itulah kegagalan yang paling berbaloi diburu bersungguh-sungguh.
  3. Pembetulan yang lulus pada mesin anda boleh gagal pada mesin orang lain. Versi yang berpaut pada overlay berfungsi dalam ujian bermonitor tunggal. Seluruh intipati pepijat ini ialah berbilang monitor — dan penyemak menaakul tentang kedudukan sebenar tetingkap itu dan bukannya mempercayai ujian hijau. Semakan bukanlah cop getah pada kod yang berfungsi; ia model kedua tentang mengapa kod itu berfungsi.

GeekBye v2.0.10 mengeluarkan pembetulan berasaskan kursor untuk kedua-dua rakaman dan tangkapan skrin. Jika anda menggunakan berbilang paparan, tangkapan kini mengikut anda.

Untuk keluaran jiran dalam siri ini, lihat mengapa AI notetaker anda berhenti merakam di pertengahan mesyuarat (v2.0.9) dan mengapa transkripsi AI tersalah dengar istilah teknikal (v2.0.11). Untuk bagaimana overlay berkelakuan semasa panggilan, lihat cara kekal halimunan semasa perkongsian skrin.

Artikel Berkaitan

Anatomi Menghantar Perisian ke Tahap Sempurna: Bagaimana Semakan Kod Menangkap Apa yang Ujian Tidak Mampu
Steven
Steven6 minit bacaan

Anatomi Menghantar Perisian ke Tahap Sempurna: Bagaimana Semakan Kod Menangkap Apa yang Ujian Tidak Mampu

Sepanjang siri GeekBye v2, perkara yang sama terus berlaku: satu pembaikan lulus setiap ujian pada mesin pembangun, dan kemudian semakan kod membuktikan ia akan gagal untuk hampir semua orang. Inilah aliran kerja di sebalik sembilan keluaran — pintu semakan, tangkapan pembaikan-dahulu, dan disiplin uji-sebelum-hantar yang menukar "ia berfungsi untuk saya" kepada "ia berfungsi".

Kejuruteraan
Proses
Semakan Kod
Satu Pemboleh Ubah CSS, Lima Pusingan Semakan, dan Rantaian Alat Swift Yang Menipu
Steven
Steven7 minit bacaan

Satu Pemboleh Ubah CSS, Lima Pusingan Semakan, dan Rantaian Alat Swift Yang Menipu

GeekBye v2.0.7 menjadikan keseluruhan overlay lut sinar boleh laras — yang kedengaran seperti perubahan CSS satu baris tetapi sama sekali bukan. Kisah sebenarnya ialah apa yang ditangkap oleh semakan kod: dua permukaan yang enggan pudar, bar rakaman yang kelihatan salah pada opacity yang sama, dan binari terkompil yang berubah-ubah 672 bait kerana dokumentasi kami sendiri memberitahu penyemak versi Swift yang salah.

Kejuruteraan
Reka Bentuk
Binaan
Pepijat fon telinga: apabila orang yang bercakap lenyap daripada transkrip kami
Steven
Steven6 minit bacaan

Pepijat fon telinga: apabila orang yang bercakap lenyap daripada transkrip kami

Transkripsi dua saluran berfungsi dengan sempurna pada pembesar suara komputer riba dan fon kepala over-ear. Kemudian seseorang memasang fon telinga, dan orang yang mereka ajak bercakap begitu sahaja lenyap daripada transkrip — kerana Chromium senyap-senyap membisukan audio kami pada saat mereka bercakap. Sebelas pembaikan gagal. Yang kedua belas mengubah keseluruhan seni bina.

Kejuruteraan
Audio
Transkripsi