Baby Monitor Timmy byrjaði með einfaldri hugmynd: barnapía sem virðir friðhelgi einkalífsins heima. Engar skýjaupptökur, engar óþarfa gagnaleiðir út úr barnaherberginu. Það sem margir sjá ekki er að ég þróa Timmy einn í Zürich, og GitHub Copilot er mjög fljótur forritunarfélagi minn.
Samspil manns og gervigreindar
Verkaskiptingin er skýr: Ég skilgreini eiginleika, set forgangsröðun og tek ákvarðanir um hugbúnaðarhönnun. Copilot hjálpar við útfærsluna: skrifar kóða, bætir við prófum, þrengir leitina að villum og undirbýr skref fyrir útgáfu.
Dæmigerð vinnulota hjá mér lítur nokkurn veginn svona út:
- Lýsing á eiginleika: Ég lýsi því sem eiginleikinn á að gera, þar á meðal jaðartilvikum og takmörkunum.
- Útfærsla: Copilot leggur til kóða og fylgir þeim venjum sem þegar eru í verkefninu.
- Prófanir: Sjálfvirk enda-til-enda-próf keyra á tveimur hermum og athuga raunverulega tengingu milli barns- og foreldratækis.
- Dreifing: Þegar prófin standast eru Android- og iOS-smíðar undirbúnar fyrir réttu verslanirnar og prófunarrásirnar.
Þessi hringrás endurtekur sig fyrir nýja eiginleika og villuleiðréttingar. Ég skrifa ekki hverja línu sjálfur, en ég ákveð hvað er þróað, hvers vegna það er þróað og hvort tillaga henti Timmy.
Frá hugmynd að WebRTC
Meginverkefnið tæknilega séð var skýrt frá upphafi: hljóð og mynd í rauntíma milli tveggja síma. WebRTC var augljóst val, en samþætting þess við Flutter er ekki einföld: ICE-biðlar, SDP-samningaviðræður, TURN-varaleið og DataChannel-rásir þurfa að virka saman í réttri röð.
Copilot hjálpaði mér að tengja þessa hluta saman skref fyrir skref: setja upp peer-tengingu, halda réttri röð á lykilatriðum (DataChannel á undan offer, onTrack á undan setRemoteDescription), og setja merkjasamskipti í Firebase Firestore. Hver hluti þurfti að virka á tveimur hermum áður en ég hélt áfram.
Örugg pörun með ECDH
Einn mikilvægasti eiginleikinn var öruggt pörunarkerfi. Tvö tæki þurfa að koma á gagnkvæmu trausti án þess að reiða sig á miðlægan þjón til að staðfesta auðkenni þeirra. Lausnin er ECDH P-256-lyklaskipti í gegnum Firebase ásamt sjónrænu staðfestingarnúmeri (SAS) sem greinir árásir milliliða.
Copilot hjálpaði við að útfæra dulritunarkeðjuna: lyklagerð, skipti á opinberum lyklum, afleiðslu sameiginlegs leyndarmáls, útreikning SAS og AES-256-GCM-dulkóðun allra merkjagagna sem á eftir koma. Ég sendi ekki pörunarlykilinn til bakendans; aðeins SHA-256-tætigildi hans er notað sem auðkenni Firestore-skjals.
Öryggisúttekt: Að finna og laga veikleika
Þróun með aðstoð gervigreindar snýst fyrir mig ekki bara um hraðari innslátt. Hún hjálpar líka við markvissa villuleit. Í einni einbeittri vinnulotu fyrir öryggisúttekt greindi Copilot kóðagrunninn og fann sex atriði sem ég þurfti að laga:
- Vantaði inntaksstaðfestingu fyrir merkjagögn
- Möguleg kapphlaup við meðhöndlun ICE-biðla
- Úrelt setugögn sem voru ekki hreinsuð almennilega
- Firestore-öryggisreglur sem voru of rúmar
- Ekki hafði verið tekið nægilegt tillit til festingar vottorða
- Ófullnægjandi villumeðhöndlun í ferli fyrir TURN-skilríki
Öll sex atriðin voru lagfærð í sömu vinnulotunni. Hér er Copilot sterkur: að lesa margar skrár, bera saman mynstur og merkja staði sem ég þarf að skoða nánar.
Endurteknar vinnulotur: Hvernig appið þróaðist
Timmy þróaðist í hröðum en skýrt afmörkuðum vinnulotum. Nokkur áfangaskref:
- v1.8: Heildarendurskoðun á pörun — kóði með 4 táknum og ECDH P-256 í gegnum Firebase komu í stað eldri aðferðar með beinum lykli.
- v1.10: Vinnulota til að herða öryggi — úttekt á veikleikunum sex og lagfæring þeirra.
- v1.11: Dökk stilling á öllum skjám, auk heimasíðunnar og bloggsins sem þú ert að lesa núna.
- v1.12: Mikil endurskoðun á foreldraskjánum, nætursjónarstilling og hreyfiskynjun með greiningu á myndrömmum úr myndavélinni.
Hver vinnulota fylgir sama grunnmynstri: lýsa markmiðinu, fara yfir tillögur, prófa sjálfvirkt og senda síðan til prófara.
E2E-prófanir milli tækja
Ekki er hægt að prófa barnavöktunarforrit almennilega á einu tæki. Ég þarf eitt barnatæki og eitt foreldratæki. Verkefnið hófst með tveimur Android-hermum sem keyrðu samtímis. Nú bætast við staðbundinn iOS-hermir og prófanir á raunverulegum tækjum. Sjálfvirka Android-prófunarforritið gerir enn eftirfarandi:
- Setur upp appið á báðum hermunum
- Fer í gegnum pörun á báðum tækjum
- Staðfestir að hljóð- og myndtengingar komist á
- Prófar ýta-til-að-tala-virkni, stjórnun myndavélar og aðra eiginleika
Þar sem báðir hermarnir deila sama IP-vistfangi (10.0.2.15), er bein jafningjatenging í gegnum STUN ómöguleg. Hver prófunarkeyrsla þarf að fara í gegnum Cloudflare TURN-miðlarann. Það er hvimleitt, en gagnlegt: flóknasta tengileiðin er prófuð í hvert skipti.
Það sem ég lærði
Að þróa heilsteypt app með gervigreind sem forritunarfélaga kenndi mér ýmislegt:
- Hugbúnaðarhönnun skiptir meira máli en nokkru sinni. Skýrar venjur og vel skjalfestur kóðagrunnur hjálpa gervigreindinni að leggja til samræmdan kóða. Óskýrleiki verður fljótt dýrkeyptur.
- Ekki má slá af kröfum um prófanir. Kóði sem gervigreind býr til þarf sömu ströngu prófanir og kóði sem fólk skrifar. Sjálfvirku E2E-prófin fundu vandamál sem hefði verið auðvelt að missa af við handvirkar prófanir.
- Manneskjan er áfram með í ferlinu. Sérhver ákvörðun um hugbúnaðarhönnun, hvert öryggissjónarmið og hver mörk vörunnar eru áfram á mína ábyrgð. Gervigreind flýtir fyrir útfærslunni, en kemur ekki í stað dómgreindar.
- Hraði skapar svigrúm fyrir gæði. Þar sem hægt er að gefa eiginleika út á nokkrum klukkustundum í stað nokkurra daga, gefst meira svigrúm til að fínpússa þá og laga villur. Hraði tryggir ekki sjálfkrafa gæði.
Fram undan
Baby Monitor Timmy heldur áfram að þróast. iOS-útgáfan er að verða tilbúin; eftir það koma fleiri skynjaraeiginleikar og áframhaldandi herðing öryggis. Verkferlið verður svipað: Ég set stefnu og mörk, Copilot hjálpar við útfærslu og yfirferð á skjótan hátt.
Öryggistengdu byggingareiningarnar eru nú afmarkaðar með skýrum mörkum í opinbera baby-monitor-timmy-core-kóðasafninu. Þar eru einnig skráðar ákvarðanir um hugbúnaðarhönnun varðandi pörun, merkjasamskipti og bakendaviðmót.