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:
- Ominaisuuden kuvaus: Kuvaan, mitä ominaisuuden pitää tehdä, mukaan lukien reunatapaukset ja rajoitteet.
- Toteutus: Copilot ehdottaa koodia ja noudattaa projektin nykyisiä käytäntöjä.
- Testaus: Automaattiset päästä päähän -testit ajetaan kahdella emulaattorilla, ja ne tarkistavat todellisen vauva- ja vanhempilaitteen välisen yhteyden.
- 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:
- Signalointidatan syötevalidoinnin puuttuminen
- Mahdolliset kilpailutilanteet ICE-ehdokkaiden käsittelyssä
- Vanhentuneet istuntotiedot, joita ei siivottu kunnolla
- Liian sallivat Firestore-tietoturvasäännöt
- Varmenteen kiinnityksen puutteellinen huomiointi
- Puutteellinen virheenkäsittely TURN-tunnistetietojen käsittelyssä
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ä:
- v1.8: Parituksen täydellinen uudistus — 4-merkkinen koodi ja Firebasen kautta toteutettu ECDH P-256 korvasivat vanhan, suoraan avaimeen perustuneen ratkaisun.
- v1.10: Tietoturvan vahvistussprintti — kuuden haavoittuvuuden auditointi- ja korjauskierros.
- v1.11: Tumma tila kaikille näytöille sekä etusivu ja blogi, jota luet juuri nyt.
- v1.12: Vanhemman näytön suuri uudistus, pimeänäkötila ja liikkeentunnistus kamerakuvien analyysillä.
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:
- Asentaa sovelluksen molemmille emulaattoreille
- Etenee parituksen läpi molemmilla laitteilla
- Varmistaa, että ääni- ja videoyhteydet muodostuvat
- 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:
- Arkkitehtuuri on tärkeämpää kuin koskaan. Selkeät käytännöt ja hyvin dokumentoitu koodikanta auttavat tekoälyä ehdottamaan johdonmukaista koodia. Epäselvyys käy nopeasti kalliiksi.
- Testauksesta ei voi tinkiä. Tekoälyn tuottama koodi tarvitsee yhtä perusteellisen testauksen kuin ihmisen kirjoittama koodi. Automaattiset E2E-testit löysivät ongelmia, jotka olisi ollut helppo jättää huomaamatta manuaalisesti.
- Ihminen pysyy mukana päätöksenteossa. Kaikki arkkitehtuuripäätökset, tietoturvaan liittyvät kompromissit ja tuotteen rajaukset pysyvät minun vastuullani. Tekoäly nopeuttaa toteutusta, mutta ei korvaa harkintaa.
- Nopeus mahdollistaa laadun. Kun ominaisuuksia saadaan käyttöön tuntien eikä päivien kuluessa, aikaa jää enemmän viimeistelyyn ja virheiden korjaamiseen. Nopeus ei automaattisesti tarkoita laatua.
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.