Блог

Како го развивам Baby Monitor Timmy со GitHub Copilot

ВИ ми помага да работам побрзо. Одговорноста за Timmy сепак останува кај мене.

Baby Monitor Timmy започна со едноставна идеја: бебефон што ја почитува приватноста во домот. Без снимки во облакот и без непотребно испраќање податоци надвор од детската соба. Она што многумина не го знаат е дека го развивам Timmy самостојно во Цирих, а GitHub Copilot е мојот многу брз партнер во програмирањето.

Работниот процес човек–ВИ

Поделбата е јасна: јас ги дефинирам функциите, ги поставувам приоритетите и носам архитектонски одлуки. Copilot помага со имплементацијата: пишување код, додавање тестови, стеснување на причините за грешки и подготовка на чекорите за издавање.

Еден типичен спринт кај мене приближно изгледа вака:

  1. Опис на функцијата: Опишувам што треба да прави функцијата, вклучително и граничните случаи и ограничувањата.
  2. Имплементација: Copilot предлага код и ги следи постојните правила на проектот.
  3. Тестирање: Автоматизирани end-to-end тестови работат на два емулатори и ја проверуваат вистинската врска меѓу уредот за бебето и родителскиот уред.
  4. Дистрибуција: Кога тестовите ќе поминат, Android и iOS верзиите се подготвуваат за соодветната продавница и каналите за тестирање.

Овој циклус се повторува за функции и поправки на грешки. Не ја пишувам секоја линија сам, но јас одлучувам што се развива, зошто се развива и дали предлогот одговара на Timmy.

Од концепт до WebRTC

Главната техничка задача беше јасна уште од почетокот: аудио и видео во реално време меѓу два телефона. WebRTC беше очигледен избор, но неговото интегрирање со Flutter не е едноставно: ICE кандидати, SDP преговарање, TURN резервна опција и DataChannels мора да работат заедно во правилен редослед.

Copilot ми помогна чекор по чекор да ги поврзам тие делови: да ја поставам peer конекцијата, да го задржам точниот редослед на критичните чекори (DataChannel пред понудата, onTrack пред setRemoteDescription) и сигнализацијата да ја поставам на Firebase Firestore. Секој дел мораше да работи на два емулатори пред да продолжам понатаму.

Безбедно спарување со ECDH

Една од најкритичните функции беше системот за безбедно спарување. Двата уреда треба да воспостават меѓусебна доверба без да се потпираат на централен сервер што ќе го потврди нивниот идентитет. Решението е размена на клучеви со ECDH P-256 преку Firebase, во комбинација со визуелен број за потврда (SAS) што открива напади со посредник (man-in-the-middle).

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. Таму се документирани и архитектонските одлуки за спарувањето, сигнализацијата и интерфејсите на заднинскиот систем.


Повеќе статии