Baby Monitor Timmy ની શરૂઆત એક સરળ વિચારથી થઈ: ઘરનું ખાનગીપણું જાળવે એવો બેબી મોનિટર. કોઈ ક્લાઉડ રેકોર્ડિંગ નહીં, નર્સરીમાંથી બહાર જતાં બિનજરૂરી ડેટા માર્ગો નહીં. ઘણા લોકોને ખબર નથી કે હું ઝ્યુરિખમાં Timmy ને એકલા પ્રોજેક્ટ તરીકે બનાવું છું, અને GitHub Copilot મારો ખૂબ ઝડપી પેર પ્રોગ્રામર છે.
માનવ-AI વર્કફ્લો
ભાગવટો સ્પષ્ટ છે: ફીચર્સ હું નક્કી કરું છું, પ્રાથમિકતાઓ ગોઠવું છું અને આર્કિટેક્ચર અંગેના નિર્ણયો લઉં છું. Copilot અમલીકરણમાં મદદ કરે છે: કોડ લખવામાં, ટેસ્ટ ઉમેરવામાં, બગ્સને ચોક્કસ કરવામાં અને રિલીઝના પગલાં તૈયાર કરવામાં.
મારા માટે સામાન્ય સ્પ્રિન્ટ અંદાજે આવું હોય છે:
- ફીચરનું વર્ણન: હું એ ફીચરે શું કરવું જોઈએ તે વર્ણવું છું, જેમાં એજ કેસ અને મર્યાદાઓ પણ સામેલ હોય છે.
- અમલીકરણ: Copilot કોડ સૂચવે છે અને પ્રોજેક્ટની હાલની રીત-રિવાજોનું પાલન કરે છે.
- ટેસ્ટિંગ: ઓટોમેટેડ એન્ડ-ટુ-એન્ડ ટેસ્ટ બે ઇમ્યુલેટર પર ચાલે છે અને બાળક/વાલી વચ્ચેનું સાચું કનેક્શન તપાસે છે.
- વિતરણ: ટેસ્ટ પાસ થાય પછી Android અને iOS બિલ્ડ યોગ્ય સ્ટોર અને ટેસ્ટિંગ ટ્રૅક માટે તૈયાર થાય છે.
ફીચર્સ અને બગફિક્સ માટે આ ચક્ર ફરી ફરી ચાલે છે. હું દરેક લાઇન જાતે લખતો નથી, પણ હું નક્કી કરું છું કે શું બનાવવું છે, શા માટે તે બનાવવું છે, અને કોઈ સૂચન Timmy માટે યોગ્ય છે કે નહીં.
વિચારથી WebRTC સુધી
કેન્દ્રિય ટેકનિકલ કામ શરૂઆતથી સ્પષ્ટ હતું: બે ફોન વચ્ચે રિયલ-ટાઇમ ઑડિયો અને વિડિયો. WebRTC સ્પષ્ટ પસંદગી હતી, પરંતુ તેને Flutter સાથે જોડવું સહેલું નથી: ICE candidates, SDP negotiation, TURN fallback અને DataChannels ને યોગ્ય ક્રમમાં સાથે કામ કરવું પડે છે.
Copilot એ મને આ ભાગો એક પછી એક ગોઠવવામાં મદદ કરી: peer connection સેટ કરવું, જરૂરી ક્રમ સાચો રાખવો (offer પહેલાં DataChannel, setRemoteDescription પહેલાં onTrack), અને Firebase Firestore પર signaling મૂકવું. આગળ વધતા પહેલાં દરેક ભાગ બે ઇમ્યુલેટર પર ચાલવો જરૂરી હતો.
ECDH સાથે સુરક્ષિત પેરિંગ
સૌથી મહત્વપૂર્ણ ફીચર્સમાંનું એક હતું સુરક્ષિત પેરિંગ સિસ્ટમ. બે ડિવાઇસે પોતાની ઓળખની ખાતરી માટે કેન્દ્રીય સર્વર પર આધાર રાખ્યા વગર પરસ્પર વિશ્વાસ સ્થાપિત કરવો પડે છે. તેનો ઉકેલ: Firebase મારફતે ECDH P-256 key exchange, સાથે visual verification number (SAS), જે man-in-the-middle હુમલા શોધે છે.
Copilot એ ક્રિપ્ટોગ્રાફિક ક્રમ અમલમાં મૂકવામાં મદદ કરી: key generation, public key exchange, shared secret derivation, SAS computation અને પછીના તમામ signaling data માટે AES-256-GCM encryption. હું backend ને pairing key મોકલતો નથી; ફક્ત તેનો SHA-256 hash Firestore document identifier તરીકે વપરાય છે.
સિક્યુરિટી ઑડિટ: નબળાઈઓ શોધવી અને ઠીક કરવી
AI સહાયિત ડેવલપમેન્ટ મારા માટે માત્ર ઝડપથી ટાઇપિંગ નથી. તે વ્યવસ્થિત રીતે બગ્સ શોધવામાં પણ મદદ કરે છે. એક કેન્દ્રિત સિક્યુરિટી ઑડિટ સ્પ્રિન્ટમાં Copilot એ કોડબેઝનું વિશ્લેષણ કર્યું અને શોધ્યા છ મુદ્દા જે મને ઠીક કરવા જરૂરી હતા:
- signaling data માટે input validation નહોતું
- ICE candidate હેન્ડલિંગમાં સંભવિત race conditions
- જૂનો session data જે યોગ્ય રીતે સાફ થતો નહોતો
- Firestore security rules બહુ ઢીલા હતા
- certificate pinning અંગેની વિચારણા નહોતી
- TURN credential flow માં પૂરતું error handling નહોતું
આ તમામ છ મુદ્દા એ જ સ્પ્રિન્ટમાં ઠીક થયા. Copilot અહીં મજબૂત છે: ઘણી ફાઇલો વાંચવી, પેટર્ન સરખાવવાં અને મને વધુ નજીકથી તપાસવાની જરૂર હોય એવી જગ્યાઓ બતાવવી.
ક્રમશઃ સ્પ્રિન્ટ્સ: ઍપ કેવી રીતે વિકસતી ગઈ
Timmy ઝડપભરી, પણ સ્પષ્ટ મર્યાદાવાળી સ્પ્રિન્ટ્સથી વિકસ્યો. કેટલાક મહત્વના તબક્કા:
- v1.8: પેરિંગનું સંપૂર્ણ નવીનીકરણ — Firebase પર 4-અક્ષરનો કોડ + ECDH P-256 એ જૂની direct-key પદ્ધતિને બદલી.
- v1.10: સિક્યુરિટી મજબૂતીકરણ સ્પ્રિન્ટ — છ નબળાઈઓનું ઑડિટ અને સુધારાનો ચક્ર.
- v1.11: બધી સ્ક્રીન પર ડાર્ક મોડ, સાથે તમે હમણાં વાંચી રહ્યા છો તે હોમપેજ અને બ્લોગ.
- v1.12: વાલીની સ્ક્રીનમાં મોટું સુધારણું, night vision mode અને કેમેરા ફ્રેમ વિશ્લેષણ દ્વારા motion detection.
દરેક સ્પ્રિન્ટ આ જ મૂળભૂત રીત અનુસરે છે: લક્ષ્ય વર્ણવો, સૂચનોની સમીક્ષા કરો, ઓટોમેટિક ટેસ્ટ કરો અને પછી ટેસ્ટર્સને મોકલો.
ડિવાઇસીસ વચ્ચે E2E ટેસ્ટિંગ
બેબી મોનિટરનું યોગ્ય ટેસ્ટિંગ એક ડિવાઇસ પર થઈ શકતું નથી. મને એક બાળકનું ડિવાઇસ અને એક વાલીનું ડિવાઇસ જોઈએ. પ્રોજેક્ટની શરૂઆત એક સાથે ચાલતા બે Android ઇમ્યુલેટરથી થઈ હતી અને હવે તેમાં local iOS simulator અને real-device checks પણ ઉમેરાયા છે. ઓટોમેટેડ Android ટેસ્ટ સ્ક્રિપ્ટ હજી પણ:
- બંને ઇમ્યુલેટર પર ઍપ ઇન્સ્ટોલ કરે છે
- બંને ડિવાઇસ પર પેરિંગની પ્રક્રિયામાંથી પસાર થાય છે
- ઑડિયો અને વિડિયો કનેક્શન બન્યાં છે તેની ચકાસણી કરે છે
- push-to-talk, કેમેરા કંટ્રોલ અને અન્ય ફીચર્સ ટેસ્ટ કરે છે
બંને ઇમ્યુલેટરનો IP address એકસરખો હોવાથી (10.0.2.15), STUN મારફતે સીધું પિયર-ટુ-પિયર કનેક્શન શક્ય નથી. દરેક ટેસ્ટ રન Cloudflare TURN રિલે મારફતે જ કરવો પડે છે. આ થોડું કંટાળાજનક છે, પણ ઉપયોગી પણ છે: દર વખતે સૌથી જટિલ કનેક્શન માર્ગનું ટેસ્ટિંગ થાય છે.
શું શીખ્યો
AI પેર પ્રોગ્રામર સાથે સંપૂર્ણ ઍપ બનાવતાં મને કેટલીક બાબતો શીખવા મળી:
- આર્કિટેક્ચર પહેલાં કરતાં વધુ મહત્વનું છે. સ્પષ્ટ રીત-રિવાજો અને સારી રીતે દસ્તાવેજિત કોડબેઝ AI ને એકસરખો કોડ સૂચવવામાં મદદ કરે છે. અસ્પષ્ટતા ઝડપથી મોંઘી પડે છે.
- ટેસ્ટિંગમાં સમાધાન ચાલતું નથી. AI દ્વારા બનેલા કોડને પણ માનવ દ્વારા લખાયેલા કોડ જેટલું જ કડક ટેસ્ટિંગ જોઈએ. ઓટોમેટેડ E2E ટેસ્ટે એવી સમસ્યાઓ પકડી જે હાથેથી ટેસ્ટ કરતાં સરળતાથી રહી જાત.
- માનવ પ્રક્રિયામાં રહે છે. દરેક આર્કિટેક્ચરનો નિર્ણય, દરેક સિક્યુરિટી trade-off અને પ્રોડક્ટની દરેક મર્યાદા મારી પાસે જ રહે છે. AI અમલીકરણ ઝડપી કરે છે, પણ નિર્ણયશક્તિની જગ્યાએ નથી આવતું.
- ઝડપ ગુણવત્તા શક્ય બનાવે છે. ફીચર્સ દિવસોની બદલે કલાકોમાં રિલીઝ થાય છે એટલે સુધારણા અને બગ ફિક્સિંગ માટે વધુ iterations મળે છે. ઝડપી હોવું આપોઆપ સારું હોવું નથી.
આગળ શું
Baby Monitor Timmy સતત વિકસતું રહે છે. iOS રિલીઝ નજીક છે; ત્યારબાદ વધારાના sensor features અને સતત સિક્યુરિટી મજબૂતીકરણ આવશે. વર્કફ્લો સરખો જ રહે છે: હું દિશા અને મર્યાદાઓ નક્કી કરું છું, Copilot ઝડપથી અમલીકરણ અને તપાસમાં મદદ કરે છે.
સિક્યુરિટી સંબંધિત બિલ્ડિંગ બ્લોક્સ હવે સ્પષ્ટ મર્યાદાઓ માં જાહેર baby-monitor-timmy-core repository. ત્યાં પેરિંગ, signaling અને backend interfaces વિશેના આર્કિટેક્ચર નિર્ણયો પણ દસ્તાવેજિત છે.