Baby Monitor Timmy sadə bir fikirlə başladı: evdə məxfiliyə hörmət edən uşaq izləyicisi. Buludda heç bir qeyd yoxdur, uşaq otağından kənara gedən lazımsız məlumat axınları da yoxdur. Çoxlarının görmədiyi budur: Timmy-ni Sürixdə təkbaşına hazırlayıram və GitHub Copilot mənim çox çevik proqramlaşdırma tərəfdaşımdır.
İnsan–Süni İntellekt İş Axını
Bölgü aydındır: funksiyaları müəyyənləşdirir, prioritetləri təyin edir və arxitektura qərarlarını verirəm. Copilot isə icrada kömək edir: kod yazmaq, testlər əlavə etmək, xətaların mənbəyini daraltmaq və buraxılış addımlarını hazırlamaq.
Məndə tipik sprint təxminən belə görünür:
- Funksiya təsviri: Funksiyanın nə etməli olduğunu, kənar halları və məhdudiyyətləri də daxil olmaqla təsvir edirəm.
- İcra: Copilot kod təklif edir və layihədəki mövcud qaydalara əməl edir.
- Test: Avtomatlaşdırılmış end-to-end testlər iki emulyatorda işləyir və uşaq/valideyn arasında real bağlantını yoxlayır.
- Yayım: Testlər uğurla keçəndə Android və iOS versiyaları uyğun mağaza və sınaq kanalları üçün hazırlanır.
Bu dövr funksiyalar və səhv düzəlişləri üçün təkrarlanır. Hər sətri özüm yazmıram, amma nəyin hazırlanacağına, niyə hazırlanacağına və təklifin Timmy-yə uyğun olub-olmadığına mən qərar verirəm.
Konseptdən WebRTC-yə
Əsas texniki məsələ əvvəldən aydın idi: iki telefon arasında real vaxtda səs və video. WebRTC açıq seçim idi, amma onu Flutter ilə inteqrasiya etmək sadə deyil: ICE namizədləri, SDP danışıqları, TURN ehtiyat mexanizmi və DataChannel-lər düzgün ardıcıllıqla birlikdə işləməlidir.
Copilot bu hissələri addım-addım birləşdirməyə kömək etdi: peer connection qurmaq, kritik ardıcıllığı düzgün saxlamaq (offer-dən əvvəl DataChannel, setRemoteDescription-dan əvvəl onTrack) və siqnallaşmanı Firebase Firestore üzərində qurmaq. Növbəti addıma keçməzdən əvvəl hər hissə iki emulyatorda işləməli idi.
ECDH ilə təhlükəsiz qoşalaşdırma
Ən vacib funksiyalardan biri təhlükəsiz qoşalaşdırma sistemiidi. İki cihaz öz kimliyini təsdiqləyən mərkəzi serverə güvənmədən qarşılıqlı etibar yaratmalıdır. Həll yolu: Firebase vasitəsilə ECDH P-256 açar mübadiləsi və ortadakı şəxs hücumlarını aşkar edən vizual yoxlama nömrəsi (SAS).
Copilot kriptoqrafik zəncirin hazırlanmasına kömək etdi: açarın yaradılması, açıq açarların mübadiləsi, ortaq sirrin əldə olunması, SAS hesablanması və sonrakı bütün siqnallaşma məlumatları üçün AES-256-GCM şifrələməsi. Qoşalaşdırma açarını backend-ə göndərmirəm; Firestore sənədinin identifikatoru kimi yalnız onun SHA-256 heşi istifadə olunur.
Təhlükəsizlik auditi: zəiflikləri tapmaq və aradan qaldırmaq
Süni intellekt dəstəkli inkişaf mənim üçün sadəcə daha sürətli yazmaq deyil. O, həm də sistemli şəkildə xətaları axtarmağa kömək edir. Fokuslanmış təhlükəsizlik auditi sprintində Copilot kod bazasını analiz etdi və düzəltməli olduğum altı problemi tapdı:
- Siqnallaşma məlumatlarında giriş yoxlamasının olmaması
- ICE namizədlərinin emalında mümkün yarış şəraiti
- Düzgün təmizlənməyən köhnəlmiş sessiya məlumatları
- Həddindən artıq açıq Firestore təhlükəsizlik qaydaları
- Sertifikat pinning ilə bağlı nəzərə alınmalı məqamların olmaması
- TURN etimadnamələri axınında yetərsiz xəta emalı
Altı problemin hamısı eyni sprintdə aradan qaldırıldı. Copilot-un güclü tərəfi də budur: çoxlu faylı oxumaq, nümunələri müqayisə etmək və daha diqqətlə yoxlamalı olduğum yerləri qeyd etmək.
İterativ sprintlər: tətbiq necə inkişaf etdi
Timmy sürətli, amma sərhədləri dəqiq müəyyən edilmiş sprintlərlə böyüdü. Bir neçə mühüm mərhələ:
- v1.8: Qoşalaşdırmanın tam yenilənməsi — Firebase üzərindən 4 simvollu kod + ECDH P-256 köhnə birbaşa açar yanaşmasını əvəz etdi.
- v1.10: Təhlükəsizliyin gücləndirilməsi sprinti — altı zəiflik üzrə audit və düzəliş dövrü.
- v1.11: Bütün ekranlarda qaranlıq rejim, üstəlik hazırda oxuduğunuz ana səhifə və bloq.
- v1.12: Valideyn ekranının əsaslı yenilənməsi, gecəgörmə rejimi və kamera kadrlarının təhlili ilə hərəkət aşkarlanması.
Hər sprint eyni əsas sxemlə gedir: məqsədi təsvir et, təklifləri nəzərdən keçir, avtomatik test et, sonra test istifadəçilərinə göndər.
Cihazlar arasında E2E testləri
Uşaq izləyicisini bir cihazda düzgün test etmək olmaz. Mənə bir uşaq cihazı və bir valideyn cihazı lazımdır. Layihə eyni anda işləyən iki Android emulyatoru ilə başladı və indi bu dövrə yerli iOS simulyatoru və real cihaz yoxlamaları da əlavə olunub. Avtomatlaşdırılmış Android test skripti hələ də:
- Tətbiqi hər iki emulyatora quraşdırır
- Hər iki cihazda qoşalaşdırma mərhələlərindən keçir
- Səs və video bağlantılarının qurulduğunu yoxlayır
- Push-to-talk, kamera idarəetməsi və digər funksiyaları test edir
Hər iki emulyator eyni IP ünvanını paylaşdığı üçün (10.0.2.15), STUN vasitəsilə birbaşa peer-to-peer bağlantı mümkün deyil. Hər test işə salınması Cloudflare TURN releysi üzərindən keçməlidir. Bu, bezdiricidir, amma faydalıdır: ən mürəkkəb bağlantı yolu hər dəfə test edilir.
Öyrəndiklərim
Süni intellekt proqramlaşdırma tərəfdaşı ilə tam tətbiq hazırlamaq mənə bir neçə şey öyrətdi:
- Arxitektura hər zamankından daha vacibdir. Aydın qaydalar və yaxşı sənədləşdirilmiş kod bazası süni intellektin ardıcıl kod təklif etməsinə kömək edir. Qeyri-müəyyənlik tez baha başa gəlir.
- Test mütləqdir. Süni intellektin yaratdığı kod da insanın yazdığı kod kimi ciddi test olunmalıdır. Avtomatlaşdırılmış E2E testləri əl ilə yoxlayarkən asanlıqla gözdən qaça biləcək problemləri tutdu.
- İnsan prosesdə qalır. Hər arxitektura qərarı, hər təhlükəsizlik kompromisi və məhsulun hər sərhədi məndə qalır. Süni intellekt icranı sürətləndirir, amma mühakiməni əvəz etmir.
- Sürət keyfiyyətə imkan yaradır. Funksiyalar günlər əvəzinə saatlar içində yayımlandığı üçün, cilalama və səhv düzəltmək üçün daha çox iterasiya qalır. Sürətli olmaq avtomatik olaraq yaxşı olmaq demək deyil.
Gələcəyə baxış
Baby Monitor Timmy inkişaf etməyə davam edir. iOS buraxılışı yaxındır; ondan sonra əlavə sensor funksiyaları və davamlı təhlükəsizlik gücləndirmələri gələcək. İş axını oxşar qalır: istiqaməti və sərhədləri mən müəyyən edirəm, Copilot isə tez tətbiq etməyə və yoxlamağa kömək edir.
Təhlükəsizlik baxımından vacib əsas komponentlər indi aydın şəkildə ayrılmış sərhədlər daxilində ictimai baby-monitor-timmy-core repozitoriyasındayerləşir. Qoşalaşdırma, siqnallaşma və backend interfeysləri ilə bağlı arxitektura qərarları da orada sənədləşdirilib.