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, तसेच man-in-the-middle हल्ले ओळखणारा दृश्य पडताळणी क्रमांक (SAS).
क्रिप्टोग्राफिक साखळी अंमलात आणण्यात Copilot ने मदत केली: key generation, public key exchange, shared secret derivation, SAS computation आणि नंतरच्या सर्व signaling डेटासाठी AES-256-GCM encryption. मी pairing key backend कडे पाठवत नाही; Firestore document identifier म्हणून फक्त त्याचा SHA-256 hash वापरला जातो.
सुरक्षा ऑडिट: कमतरता शोधणे आणि दुरुस्त करणे
AI-सहाय्यित विकास म्हणजे माझ्यासाठी फक्त जलद टायपिंग नाही. तो पद्धतशीरपणे बग शोधण्यातही मदत करतो. एका केंद्रित सुरक्षा ऑडिट स्प्रिंटमध्ये Copilot ने कोडबेस तपासला आणि सहा समस्या शोधल्या ज्या मला दुरुस्त कराव्या लागल्या:
- signaling डेटासाठी इनपुट व्हॅलिडेशन नसणे
- ICE candidate हाताळणीत संभाव्य race conditions
- योग्यरीत्या साफ न होणारा जुना session डेटा
- अतिशय मोकळे 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: पालकांच्या स्क्रीनची मोठी सुधारणा, नाईट व्हिजन मोड आणि कॅमेरा फ्रेम विश्लेषणाद्वारे हालचाल ओळखणे.
प्रत्येक स्प्रिंटचा मूलभूत क्रम तोच असतो: उद्दिष्ट सांगा, सूचना तपासा, स्वयंचलित चाचणी करा आणि मग परीक्षकांकडे पाठवा.
डिव्हाइसदरम्यान E2E चाचणी
एका डिव्हाइसवर बेबी मॉनिटरची योग्य चाचणी करता येत नाही. मला एक बाळाचे डिव्हाइस आणि एक पालकांचे डिव्हाइस लागते. प्रकल्पाची सुरुवात एकाच वेळी चालणाऱ्या दोन Android एम्युलेटरने झाली आणि आता स्थानिक iOS simulator व प्रत्यक्ष डिव्हाइस तपासण्यांनी ती प्रक्रिया पूरक केली आहे. स्वयंचलित Android चाचणी स्क्रिप्ट अजूनही:
- दोन्ही एम्युलेटरवर अॅप इंस्टॉल करते
- दोन्ही डिव्हाइसवर पेअरिंगमधून पुढे जाते
- ऑडिओ आणि व्हिडिओ कनेक्शन झाले असल्याची खात्री करते
- push-to-talk, कॅमेरा नियंत्रण आणि इतर फीचर्सची चाचणी करते
दोन्ही एम्युलेटरचा IP पत्ता एकच असल्याने (10.0.2.15), STUN द्वारे थेट peer-to-peer कनेक्शन शक्य नाही. प्रत्येक चाचणी रनला Cloudflare TURN relay मधून जावे लागते. ते त्रासदायक आहे, पण उपयुक्तही आहे: सर्वांत गुंतागुंतीचा कनेक्शन मार्ग प्रत्येक वेळी तपासला जातो.
मी काय शिकलो
AI पेअर प्रोग्रामरसह पूर्ण अॅप तयार करताना मला काही गोष्टी शिकायला मिळाल्या:
- आर्किटेक्चर पूर्वीपेक्षा अधिक महत्त्वाचे आहे. स्पष्ट पद्धती आणि चांगल्या प्रकारे दस्तऐवजीकरण केलेला कोडबेस AI ला सुसंगत कोड सुचवायला मदत करतो. संदिग्धता लवकरच महाग पडते.
- चाचणी अपरिहार्य आहे. AI ने तयार केलेल्या कोडचीही मानवाने लिहिलेल्या कोडइतकीच कठोर चाचणी आवश्यक आहे. स्वयंचलित E2E चाचण्यांनी असे प्रश्न पकडले, जे हाताने चाचणी करताना सहज सुटले असते.
- मानव प्रक्रियेतच राहतो. प्रत्येक आर्किटेक्चर निर्णय, प्रत्येक सुरक्षा तडजोड आणि उत्पादनाची प्रत्येक सीमा माझ्याकडेच राहते. AI अंमलबजावणी जलद करते, पण विवेकाची जागा घेत नाही.
- वेगामुळे दर्जा शक्य होतो. फीचर्स दिवसांऐवजी तासांत उपलब्ध होत असल्याने, बारकावे सुधारण्यासाठी आणि बग दुरुस्तीसाठी अधिक पुनरावृत्ती करता येतात. जलद म्हणजे आपोआप चांगले असे नाही.
पुढे पाहताना
Baby Monitor Timmy सतत विकसित होत आहे. iOS रिलीज जवळ आले आहे; त्यानंतर अतिरिक्त सेन्सर फीचर्स आणि सातत्याने सुरक्षा मजबूत करण्याचे काम येईल. कार्यपद्धती तशीच राहील: दिशा आणि मर्यादा मी ठरवतो, तर Copilot जलद अंमलबजावणी व तपासणी करण्यात मदत करते.
सुरक्षेशी संबंधित मूलभूत घटक आता स्पष्ट सीमांमध्ये सार्वजनिक baby-monitor-timmy-core repositoryमध्ये आहेत. पेअरिंग, signaling आणि backend interfaces यांभोवतीचे आर्किटेक्चर निर्णयही तिथे दस्तऐवजीकरण केलेले आहेत.