Baby Monitor Timmy ilianza na wazo rahisi: kifuatiliaji cha mtoto kinachoheshimu faragha nyumbani. Hakuna rekodi kwenye wingu, wala data isiyo ya lazima inayotumwa nje ya chumba cha mtoto. Kitu ambacho watu wengi hawaoni ni kwamba ninajenga Timmy peke yangu huko Zurich, na GitHub Copilot ni mshirika wangu wa kuandika programu mwenye kasi sana.
Mfumo wa Kazi wa Binadamu na AI
Mgawanyo uko wazi: mimi hufafanua vipengele, huweka vipaumbele, na hufanya maamuzi ya usanifu. Copilot husaidia utekelezaji: kuandika msimbo, kuongeza majaribio, kubaini chanzo cha hitilafu, na kuandaa hatua za kutoa toleo.
Kwa kawaida, awamu fupi ya kazi huenda hivi kwangu:
- Maelezo ya kipengele: Ninaeleza kile ambacho kipengele kinapaswa kufanya, pamoja na hali za kipekee na vikwazo.
- Utekelezaji: Copilot hupendekeza msimbo na hufuata kanuni zilizopo za mradi.
- Majaribio: Majaribio ya kiotomatiki ya mwanzo hadi mwisho huendeshwa kwenye emula mbili na hukagua muunganisho halisi kati ya kifaa cha mtoto na kifaa cha mzazi.
- Usambazaji: Majaribio yakifaulu, matoleo ya Android na iOS huandaliwa kwa ajili ya duka husika na mikondo inayofaa ya majaribio.
Mzunguko huu hurudiwa kwa vipengele na marekebisho ya hitilafu. Siandiki kila mstari mwenyewe, lakini mimi huamua nini kinajengwa, kwa nini kinajengwa, na kama pendekezo linafaa Timmy.
Kutoka Wazo Hadi WebRTC
Kazi kuu ya kiufundi ilikuwa wazi tangu mwanzo: kusambaza sauti na video kwa wakati halisi kati ya simu mbili. WebRTC ilikuwa chaguo dhahiri, lakini kuiunganisha na Flutter si rahisi: ICE candidates, mazungumzo ya SDP, TURN fallback na DataChannels vyote lazima vifanye kazi pamoja kwa mpangilio sahihi.
Copilot ilinisaidia kuunganisha sehemu hizo hatua kwa hatua: kusanidi peer connection, kudumisha mpangilio muhimu (DataChannel kabla ya offer, onTrack kabla ya setRemoteDescription), na kuweka signaling kwenye Firebase Firestore. Kila sehemu ilipaswa kufanya kazi kwenye emula mbili kabla sijahamia sehemu iliyofuata.
Uoanishaji Salama kwa ECDH
Mojawapo ya vipengele muhimu zaidi ilikuwa mfumo salama wa kuoanisha vifaa. Vifaa viwili vinahitaji kuaminiana bila kutegemea seva kuu kuthibitisha utambulisho wao. Suluhisho ni ubadilishanaji wa funguo kwa ECDH P-256 kupitia Firebase, pamoja na nambari ya uthibitishaji inayoonekana (SAS), ambayo hugundua mashambulizi ya mtu aliye katikati (man-in-the-middle).
Copilot ilinisaidia kutekeleza mnyororo wa kriptografia: kutengeneza funguo, kubadilishana funguo za umma, kupata siri ya pamoja, kukokotoa SAS, na kutumia usimbaji fiche wa AES-256-GCM kwa data yote ya signaling inayofuata. Situmi ufunguo wa kuoanisha kwenda kwenye backend; ni thamani yake ya hashi ya SHA-256 pekee inayotumika kama kitambulisho cha hati ya Firestore.
Ukaguzi wa Usalama: Kutambua na Kurekebisha Udhaifu
Kwangu, kutumia AI kutengeneza programu si njia ya kuandika kwa kasi zaidi tu. Pia husaidia kutafuta hitilafu kwa utaratibu. Katika awamu maalumu ya ukaguzi wa usalama, Copilot ilichanganua msingi wa msimbo na kugundua masuala sita niliyohitaji kurekebisha:
- Ukosefu wa uthibitishaji wa data ya ingizo kwenye signaling
- Uwezekano wa race conditions katika kushughulikia ICE candidates
- Data za session zilizopitwa na wakati ambazo hazikuwa zinasafishwa ipasavyo
- Sheria za usalama za Firestore zilizokuwa na ruhusa nyingi sana
- Kutokuwepo kwa mambo ya kuzingatia kuhusu certificate pinning
- Ushughulikiaji wa hitilafu usiotosha katika mchakato wa vitambulisho vya TURN
Masuala yote sita yalirekebishwa katika awamu hiyo hiyo. Hapa ndipo Copilot ina uwezo mkubwa: kusoma faili nyingi, kulinganisha mifumo, na kuonyesha sehemu ninazohitaji kuchunguza kwa makini zaidi.
Awamu za Hatua kwa Hatua: Jinsi Programu Ilivyokua
Timmy ilikua kupitia awamu fupi na za haraka za kazi, kila moja ikiwa na mipaka iliyo wazi. Baadhi ya hatua muhimu ni:
- v1.8: Usanifu mpya kamili wa uoanishaji — msimbo wa vibambo 4 pamoja na ECDH P-256 kupitia Firebase vilichukua nafasi ya mbinu ya zamani ya kutumia ufunguo moja kwa moja.
- v1.10: Awamu ya kuimarisha usalama — ukaguzi wa udhaifu sita na mzunguko wa kuzirekebisha.
- v1.11: Hali ya giza kwenye skrini zote, pamoja na ukurasa wa mwanzo na blogu unayosoma sasa.
- v1.12: Maboresho makubwa ya skrini ya mzazi, hali ya kuona gizani, na utambuzi wa mwendo kupitia uchanganuzi wa fremu za kamera.
Kila awamu hufuata utaratibu uleule wa msingi: kueleza lengo, kupitia mapendekezo, kufanya majaribio ya kiotomatiki, kisha kupeleka toleo kwa wanaolijaribu.
Majaribio ya E2E Kwenye Vifaa Mbalimbali
Huwezi kujaribu kifuatiliaji cha mtoto ipasavyo kwenye kifaa kimoja. Ninahitaji kifaa kimoja kinachotumika upande wa mtoto na kingine upande wa mzazi. Mradi ulianza kwa kutumia emula mbili za Android kwa wakati mmoja. Sasa majaribio hayo yanaongezewa ukaguzi kwenye simulator ya iOS inayoendeshwa ndani ya kompyuta na kwenye vifaa halisi. Hati ya kiotomatiki ya majaribio ya Android bado hufanya yafuatayo:
- Husakinisha programu kwenye emula zote mbili
- Hupitia hatua za kuoanisha kwenye vifaa vyote viwili
- Huthibitisha kuwa miunganisho ya sauti na video imeanzishwa
- Hujaribu kipengele cha bonyeza ili kuzungumza (push-to-talk), udhibiti wa kamera na vipengele vingine
Kwa kuwa emula zote mbili zinashiriki anwani sawa ya IP (10.0.2.15), muunganisho wa moja kwa moja kati ya vifaa kupitia STUN hauwezekani. Kila jaribio lazima lipitie seva ya Cloudflare TURN inayopitisha mawasiliano. Hilo linaudhi, lakini lina manufaa: njia ngumu zaidi ya muunganisho hujaribiwa kila mara.
Nilichojifunza
Kutengeneza programu kamili huku nikitumia AI kama mshirika wa kuandika programu kumenifundisha mambo machache:
- Usanifu ni muhimu zaidi kuliko wakati wowote. Kanuni zilizo wazi na msingi wa msimbo ulioandikwa vizuri katika nyaraka huisaidia AI kupendekeza msimbo unaolingana. Mambo yasiyoelezwa wazi huleta gharama haraka.
- Majaribio ni ya lazima. Msimbo unaotengenezwa na AI unahitaji majaribio makali kwa kiwango kilekile kama msimbo unaoandikwa na binadamu. Majaribio ya kiotomatiki ya E2E yaligundua matatizo ambayo yangekuwa rahisi kutoyaona wakati wa majaribio ya kawaida ya mtu.
- Binadamu hubaki akihusika. Kila uamuzi wa usanifu, kila uamuzi unaopima manufaa na gharama za usalama, na kila mpaka wa bidhaa unabaki kuwa jukumu langu. AI huharakisha utekelezaji, lakini haichukui nafasi ya uamuzi wa busara.
- Kasi huwezesha ubora. Kwa sababu vipengele hutolewa ndani ya saa badala ya siku, kunakuwa na nafasi ya kurudia kazi mara nyingi zaidi ili kuboresha programu na kurekebisha hitilafu. Kasi pekee haihakikishi ubora.
Mtazamo wa Mbele
Baby Monitor Timmy inaendelea kuboreka. Toleo la iOS linakaribia; baada yake kutakuwa na vipengele vya ziada vya vihisi na uimarishaji endelevu wa usalama. Mfumo wa kazi unabaki sawa: mimi huweka mwelekeo na mipaka, huku Copilot ikisaidia kutekeleza na kukagua kazi kwa haraka.
Vipengele vya msingi vinavyohusiana na usalama sasa vimewekwa kwa mipaka iliyo wazi katika hifadhi ya umma ya baby-monitor-timmy-core. Humo pia ndipo maamuzi ya usanifu kuhusu uoanishaji, signaling na violesura vya backend yameandikwa.