Blogi

Näin rakennan Baby Monitor Timmy -sovellusta GitHub Copilotin avulla

Tekoäly auttaa minua etenemään nopeammin. Vastuu Timmystä pysyy silti minulla.

Baby Monitor Timmy sai alkunsa yksinkertaisesta ajatuksesta: itkuhälyttimestä, joka kunnioittaa kodin yksityisyyttä. Ei pilvitallenteita eikä tarpeettomia tiedonkulkureittejä lastenhuoneesta ulospäin. Moni ei tiedä, että rakennan Timmyä yksin Zürichissä, ja GitHub Copilot on erittäin nopea pariohjelmoijani.

Ihmisen ja tekoälyn työnkulku

Työnjako on selkeä: minä määrittelen ominaisuudet, asetan prioriteetit ja teen arkkitehtuuripäätökset. Copilot auttaa toteutuksessa: koodin kirjoittamisessa, testien lisäämisessä, virheiden rajaamisessa ja julkaisuvaiheiden valmistelussa.

Tyypillinen sprintti etenee minulla suunnilleen näin:

  1. Ominaisuuden kuvaus: Kuvaan, mitä ominaisuuden pitää tehdä, mukaan lukien reunatapaukset ja rajoitteet.
  2. Toteutus: Copilot ehdottaa koodia ja noudattaa projektin nykyisiä käytäntöjä.
  3. Testaus: Automaattiset päästä päähän -testit ajetaan kahdella emulaattorilla, ja ne tarkistavat todellisen vauva- ja vanhempilaitteen välisen yhteyden.
  4. Jakelu: Kun testit menevät läpi, Android- ja iOS-versiot valmistellaan asianmukaisiin sovelluskauppoihin ja testauskanaviin.

Tämä sykli toistuu ominaisuuksien ja virheenkorjausten yhteydessä. En kirjoita jokaista riviä itse, mutta päätän mitä rakennetaan, miksi se rakennetaan ja sopiiko ehdotus Timmyyn.

Konseptista WebRTC:hen

Keskeinen tekninen tehtävä oli alusta asti selvä: reaaliaikainen ääni ja video kahden puhelimen välillä. WebRTC oli ilmeinen valinta, mutta sen integrointi Flutteriin ei ole yksinkertaista: ICE-ehdokkaiden, SDP-neuvottelun, TURN-varayhteyden ja DataChannelien on toimittava yhdessä oikeassa järjestyksessä.

Copilot auttoi kokoamaan nämä osat vaihe vaiheelta: vertaisyhteyden käyttöönotossa, kriittisen järjestyksen säilyttämisessä (DataChannel ennen offer-viestiä, onTrack ennen setRemoteDescriptionia) sekä signaloinnin toteuttamisessa Firebase Firestoressa. Jokaisen osan piti toimia kahdella emulaattorilla ennen kuin siirryin eteenpäin.

Suojattu paritus ECDH:lla

Yksi kriittisimmistä ominaisuuksista oli suojattu paritusjärjestelmä. Kahden laitteen täytyy muodostaa keskinäinen luottamus ilman, että ne luottavat keskitetyn palvelimen vahvistavan niiden henkilöllisyyden. Ratkaisu on Firebasen kautta toteutettu ECDH P-256 -avaintenvaihto yhdistettynä visuaaliseen vahvistusnumeroon (SAS), joka havaitsee välimieshyökkäykset.

Copilot auttoi toteuttamaan kryptografisen ketjun: avainten luonnin, julkisten avainten vaihdon, jaetun salaisuuden johtamisen, SAS-laskennan ja AES-256-GCM-salauksen kaikelle myöhemmälle signalointidatalle. En lähetä paritusavainta taustajärjestelmään; vain sen SHA-256-tiivistettä käytetään Firestore-dokumentin tunnisteena.

Tietoturva-auditointi: haavoittuvuuksien löytäminen ja korjaaminen

Tekoälyavusteinen kehitys ei ole minulle vain nopeampaa kirjoittamista. Se auttaa myös järjestelmällisessä virheiden etsimisessä. Kohdennetussa tietoturva-auditointisprintissä Copilot analysoi koodikantaa ja löysi kuusi ongelmaa jotka minun piti korjata:

Kaikki kuusi korjattiin samassa sprintissä. Tässä Copilot on vahva: se lukee monta tiedostoa, vertaa malleja ja merkitsee kohdat, jotka minun pitää tarkistaa tarkemmin.

Iteratiiviset sprintit: näin sovellus kehittyi

Timmy kasvoi nopeissa, mutta selkeästi rajatuissa sprinteissä. Muutamia virstanpylväitä:

Jokainen sprintti noudattaa samaa perusmallia: kuvaile tavoite, käy ehdotukset läpi, testaa automaattisesti ja toimita sitten testaajille.

E2E-testaus eri laitteilla

Itkuhälytintä ei voi testata kunnolla yhdellä laitteella. Tarvitsen yhden vauvalaitteen ja yhden vanhemman laitteen. Projekti alkoi kahdella samanaikaisesti toimivalla Android-emulaattorilla, ja nyt testauskokonaisuutta täydentävät paikallinen iOS-simulaattori ja oikeilla laitteilla tehtävät tarkistukset. Automaattinen Android-testiskripti tekee yhä seuraavaa:

  1. Asentaa sovelluksen molemmille emulaattoreille
  2. Etenee parituksen läpi molemmilla laitteilla
  3. Varmistaa, että ääni- ja videoyhteydet muodostuvat
  4. Testaa push-to-talk-toimintoa, kameran ohjausta ja muita ominaisuuksia

Koska molemmilla emulaattoreilla on sama IP-osoite (10.0.2.15), suora vertaisyhteys STUNin kautta ei ole mahdollinen. Jokaisen testiajon on kuljettava Cloudflare TURN -välityspalvelimen kautta. Se on ärsyttävää, mutta hyödyllistä: monimutkaisin yhteyspolku testataan joka kerta.

Mitä opin

Kokonaisen sovelluksen rakentaminen tekoälypariohjelmoijan kanssa opetti minulle muutaman asian:

Katse eteenpäin

Baby Monitor Timmy kehittyy jatkuvasti. iOS-julkaisu on lähellä; sen jälkeen vuorossa ovat lisäanturitoiminnot ja jatkuva tietoturvan vahvistaminen. Työnkulku pysyy samankaltaisena: minä asetan suunnan ja rajat, Copilot auttaa toteuttamaan ja tarkistamaan nopeasti.

Tietoturvan kannalta olennaiset rakennuspalikat ovat nyt selkeästi rajattuina julkisessa baby-monitor-timmy-core-koodivarastossa. Siellä dokumentoidaan myös paritukseen, signalointiin ja taustajärjestelmän rajapintoihin liittyvät arkkitehtuuripäätökset.


Lisää artikkeleita