Блог

Як я ствараю Baby Monitor Timmy з GitHub Copilot

ШІ дапамагае мне рухацца хутчэй. Але адказнасць за Timmy усё роўна застаецца за мной.

Baby Monitor Timmy пачаўся з простай ідэі: відэаняня, якая паважае прыватнасць дома. Ніякіх запісаў у воблаку, ніякіх непатрэбных шляхоў перадачы даных з дзіцячага пакоя. Чаго многія не бачаць: я ствараю Timmy як самастойны праект у Цюрыху, і GitHub Copilot — мой вельмі хуткі напарнік па праграмаванні.

Як працуюць разам чалавек і ШІ

Падзел выразны: я вызначаю функцыі, расстаўляю прыярытэты і прымаю архітэктурныя рашэнні. Copilot дапамагае з рэалізацыяй: піша код, дадае тэсты, дапамагае лакалізаваць памылкі і рыхтуе крокі да рэлізу.

Звычайны спрынт у мяне выглядае прыкладна так:

  1. Апісанне функцыі: Я апісваю, што мусіць рабіць функцыя, у тым ліку нестандартныя выпадкі і абмежаванні.
  2. Рэалізацыя: Copilot прапануе код і прытрымліваецца існых правілаў праекта.
  3. Тэставанне: Аўтаматызаваныя скразныя тэсты запускаюцца на двух эмулятарах і правяраюць рэальнае злучэнне паміж дзіцячай і бацькоўскай прыладамі.
  4. Распаўсюджванне: Калі тэсты праходзяць, зборкі Android і iOS рыхтуюцца для патрэбнай крамы і каналаў тэставання.

Гэты цыкл паўтараецца для новых функцый і выпраўленняў памылак. Я не пішу кожны радок сам, але вырашаю, што будзе створана, чаму гэта трэба ствараць і ці падыходзіць прапанова для Timmy.

Ад ідэі да WebRTC

Галоўная тэхнічная задача была зразумелая ад пачатку: аўдыё і відэа ў рэальным часе паміж двума тэлефонамі. WebRTC быў відавочным выбарам, але інтэграваць яго з Flutter няпроста: кандыдаты ICE, узгадненне SDP, рэзервовае злучэнне праз TURN і DataChannels павінны працаваць разам у правільнай паслядоўнасці.

Copilot дапамагаў мне паступова злучыць гэтыя часткі: наладзіць peer connection, захаваць крытычную паслядоўнасць (DataChannel перад offer, onTrack перад setRemoteDescription) і размясціць сігналізацыю ў Firebase Firestore. Кожная частка мусіла працаваць на двух эмулятарах, перш чым я ішоў далей.

Бяспечнае спалучэнне з ECDH

Адной з самых крытычна важных функцый была сістэма бяспечнага спалучэння прылад. Дзве прылады павінны ўсталяваць узаемны давер, не абапіраючыся на цэнтральны сервер, які пацвярджаў бы іх асобу. Рашэнне: абмен ключамі ECDH P-256 праз Firebase разам з візуальным нумарам праверкі (SAS), які выяўляе атакі «чалавек пасярэдзіне».

Copilot дапамог рэалізаваць крыптаграфічны ланцужок: генерацыю ключоў, абмен публічнымі ключамі, атрыманне агульнага сакрэту, разлік SAS і шыфраванне AES-256-GCM усіх наступных даных сігналізацыі. Я не адпраўляю ключ спалучэння на бэкенд; толькі яго хэш SHA-256 выкарыстоўваецца як ідэнтыфікатар дакумента Firestore.

Аўдыт бяспекі: пошук і выпраўленне ўразлівасцяў

Распрацоўка з дапамогай ШІ для мяне — гэта не толькі хутчэйшы набор кода. Яна таксама дапамагае сістэмна шукаць памылкі. Падчас мэтанакіраванага спрынту па аўдыце бяспекі Copilot прааналізаваў кодавую базу і выявіў шэсць праблем якія мне трэба было выправіць:

Усе шэсць былі выпраўленыя ў тым жа спрынце. Тут Copilot асабліва моцны: ён чытае шмат файлаў, параўноўвае шаблоны і пазначае месцы, якія мне трэба ўважліва праверыць.

Ітэрацыйныя спрынты: як развівалася праграма

Timmy рос праз хуткія, але выразна абмежаваныя спрынты. Некалькі вех:

Кожны спрынт ідзе па адной базавай схеме: апісаць мэту, прагледзець прапановы, аўтаматычна пратэставаць, а потым адправіць тэстарам.

E2E-тэставанне на розных прыладах

Нельга належным чынам пратэставаць відэаняню на адной прыладзе. Мне патрэбныя дзіцячая і бацькоўская прылады. Праект пачынаўся з двух адначасова запушчаных эмулятараў Android, а цяпер гэты цыкл дапаўняюць праверкі ў лакальным сімулятары iOS і на рэальных прыладах. Аўтаматызаваны скрыпт Android па-ранейшаму:

  1. Усталёўвае праграму на абодва эмулятары
  2. Праходзіць спалучэнне на абедзвюх прыладах
  3. Правярае, што аўдыё- і відэазлучэнні ўсталяваны
  4. Тэстуе push-to-talk, кіраванне камерай і іншыя функцыі

Паколькі абодва эмулятары маюць адзін IP-адрас (10.0.2.15), прамое злучэнне peer-to-peer праз STUN немагчыма. Кожны запуск тэсту мусіць праходзіць праз рэтранслятар Cloudflare TURN. Гэта нязручна, але карысна: кожны раз тэстуецца найбольш складаны шлях злучэння.

Чаму я навучыўся

Стварэнне поўнай праграмы з ШІ-напарнікам па праграмаванні навучыла мяне некалькім рэчам:

Што далей

Baby Monitor Timmy працягвае развівацца. Рэліз для iOS ужо блізка; пасля яго з'явяцца дадатковыя функцыі датчыкаў і далейшае ўмацаванне бяспекі. Працэс застаецца падобным: я задаю кірунак і межы, а Copilot дапамагае хутка рэалізоўваць і правяраць.

Важныя для бяспекі кампаненты цяпер знаходзяцца ў выразна акрэсленых межах у публічным рэпазіторыі baby-monitor-timmy-core. Там таксама задакументаваныя архітэктурныя рашэнні наконт спалучэння прылад, сігналізацыі і бэкенд-інтэрфейсаў.


Больш артыкулаў