Baby Monitor Timmy ආරම්භ වූයේ සරල අදහසකින්: නිවසේ පෞද්ගලිකත්වයට ගරු කරන බිලිඳු මොනිටරයක්. ක්ලවුඩ් පටිගත කිරීම් නැහැ, ළදරු කාමරයෙන් පිටතට යන අනවශ්ය දත්ත මාර්ග නැහැ. බොහෝ දෙනා නොදකින දෙය නම්: මම සූරිච්හි තනි ව්යාපෘතියක් ලෙස Timmy ගොඩනඟන අතර, GitHub Copilot මගේ ඉතා වේගවත් යුගල ක්රමලේඛකයායි.
මිනිසා සහ AI එක්ව වැඩ කරන ආකාරය
කාර්ය බෙදීම පැහැදිලියි: විශේෂාංග නිර්වචනය කිරීම, ප්රමුඛතා සැකසීම සහ මෘදුකාංග ව්යුහය පිළිබඳ තීරණ ගැනීම මගේ කාර්යයයි. Copilot ක්රියාත්මක කිරීමට උදව් කරයි: කේත ලිවීම, පරීක්ෂණ එකතු කිරීම, දෝෂ ඇති තැන් හඳුනාගැනීම සහ නිකුත් කිරීමේ පියවර සූදානම් කිරීම.
සාමාන්ය ස්ප්රින්ට් එකක් මා සඳහා දළ වශයෙන් මෙසේය:
- විශේෂාංග විස්තරය: සීමා සහ අසාමාන්ය අවස්ථා ඇතුළුව, විශේෂාංගය කළ යුතු දේ මම විස්තර කරමි.
- ක්රියාත්මක කිරීම: Copilot කේත යෝජනා කරන අතර ව්යාපෘතියේ පවතින සම්මතයන් අනුගමනය කරයි.
- පරීක්ෂා කිරීම: ස්වයංක්රීය end-to-end පරීක්ෂණ emulators දෙකක ක්රියාත්මක වී සැබෑ බිලිඳු/දෙමාපිය සම්බන්ධතාවය පරීක්ෂා කරයි.
- බෙදාහැරීම: පරීක්ෂණ සාර්ථක වූ විට, Android සහ iOS ගොඩනැගීම් අදාළ යෙදුම් වෙළඳසැල් සහ පරීක්ෂණ නාලිකා සඳහා සූදානම් කෙරේ.
විශේෂාංග සහ දෝෂ නිවැරදි කිරීම් සඳහා මෙම චක්රය නැවත නැවත සිදු වේ. සෑම කේත පේළියක්ම මමම නොලියන නමුත්, මම තීරණය කරන්නේ කුමක්ද ගොඩනඟන්නේ, ඇයි එය ගොඩනඟන්නේද, සහ යෝජනාවක් Timmyට ගැළපේද යන්නයි.
සංකල්පයේ සිට WebRTC දක්වා
මූලික තාක්ෂණික කාර්යය ආරම්භයේ සිටම පැහැදිලි විය: දුරකථන දෙකක් අතර තත්යකාලීන ශබ්දය සහ වීඩියෝව. WebRTC පැහැදිලි තේරීම වුවත්, එය Flutter සමඟ ඒකාබද්ධ කිරීම සරල නොවේ: ICE candidates, SDP negotiation, TURN fallback සහ DataChannels නිවැරදි අනුපිළිවෙළට එකට ක්රියා කළ යුතුය.
Copilot මට ඒ කොටස් පියවරෙන් පියවර එකට ගොනු කිරීමට උදව් කළේය: peer connection සකස් කිරීම, වැදගත් අනුපිළිවෙළ නිවැරදිව තබා ගැනීම (offer එකට පෙර DataChannel, setRemoteDescription ට පෙර onTrack), සහ signaling සඳහා Firebase Firestore භාවිත කිරීම. ඉදිරියට යාමට පෙර සෑම කොටසක්ම emulators දෙකක ක්රියා කළ යුතු විය.
ECDH සමඟ ආරක්ෂිත යුගල කිරීම
වඩාත්ම වැදගත් විශේෂාංගවලින් එකක් වූයේ ආරක්ෂිත යුගල කිරීමේ පද්ධතියයි. උපාංග දෙකේ අනන්යතාව තහවුරු කිරීමට මධ්යම සේවාදායකයක් මත රඳා නොසිට, ඒවා එකිනෙකා කෙරෙහි විශ්වාසය තහවුරු කරගත යුතුය. විසඳුම වන්නේ Firebase හරහා ECDH P-256 යතුරු හුවමාරුවක් සහ මැදට ඇතුළු වී සිදු කරන ප්රහාර හඳුනාගන්නා දෘශ්ය සත්යාපන අංකයක් (SAS) එකට භාවිත කිරීමයි.
Copilot ගුප්තකේතන දාමය ක්රියාත්මක කිරීමට උදව් කළේය: යතුරු ජනනය, ප්රසිද්ධ යතුරු හුවමාරුව, හවුල් රහස ලබාගැනීම, SAS ගණනය කිරීම සහ පසුව ඇති සියලු signaling දත්ත සඳහා AES-256-GCM සංකේතනය. මම pairing key එක backend වෙත යවන්නේ නැහැ; Firestore document identifier එකක් ලෙස භාවිත වන්නේ එහි SHA-256 hash එක පමණි.
ආරක්ෂක විගණනය: දුර්වලතා සොයා නිවැරදි කිරීම
AI සහාය ඇති සංවර්ධනය මට වේගයෙන් ටයිප් කිරීම පමණක් නොවේ. එය ක්රමානුකූලව දෝෂ සෙවීමටත් උදව් කරයි. ඉලක්කගත ආරක්ෂක විගණන ස්ප්රින්ට් එකකදී, Copilot කේත පදනම විශ්ලේෂණය කර ගැටලු හයක් සොයාගත්තේය; මට නිවැරදි කිරීමට සිදු වූ ඒවා මෙසේය:
- signaling දත්ත සඳහා ආදාන සත්යාපනය නොමැති වීම
- ICE candidate හැසිරවීමේ ඇති විය හැකි race conditions
- නිසි ලෙස පිරිසිදු නොකළ පරණ session දත්ත
- අධික ලෙස ලිහිල් වූ Firestore ආරක්ෂක නීති
- certificate pinning පිළිබඳ අවශ්ය සැලකිල්ල නොදැක්වීම
- TURN credential flow තුළ ප්රමාණවත් නොවන දෝෂ හැසිරවීම
ගැටලු හයම එම ස්ප්රින්ට් එකේදී නිවැරදි කරන ලදී. Copilot ශක්තිමත් වන්නේ මෙහිදීය: ගොනු ගණනාවක් කියවීම, රටා සසඳීම සහ මට වඩාත් හොඳින් පරීක්ෂා කළ යුතු ස්ථාන සලකුණු කිරීම.
නැවත නැවත කළ ස්ප්රින්ට්: යෙදුම පරිණාමය වූ ආකාරය
Timmy වේගවත් නමුත් පැහැදිලි සීමාවන් ඇති ස්ප්රින්ට් හරහා වර්ධනය විය. ප්රධාන අදියර කිහිපයක්:
- v1.8: සම්පූර්ණ යුගල කිරීමේ ප්රතිනිර්මාණය — Firebase හරහා අක්ෂර 4ක කේතයක් සහ ECDH P-256 භාවිත කරන ක්රමය පැරණි සෘජු යතුරු ක්රමය වෙනුවට යොදාගැනිණි.
- v1.10: ආරක්ෂාව ශක්තිමත් කිරීමේ ස්ප්රින්ට් — දුර්වලතා හයේ විගණනය සහ නිවැරදි කිරීමේ චක්රය.
- v1.11: සියලු තිරවල dark mode, සහ ඔබ දැන් කියවන මුල්පිටුව හා බ්ලොග් එක.
- v1.12: දෙමාපිය තිරයේ විශාල යාවත්කාලීන කිරීම, රාත්රී දර්ශන මාදිලිය, සහ කැමරා frame විශ්ලේෂණය මඟින් චලන හඳුනාගැනීම.
සෑම ස්ප්රින්ට් එකක්ම එකම මූලික රටාව අනුගමනය කරයි: ඉලක්කය විස්තර කිරීම, යෝජනා සමාලෝචනය කිරීම, ස්වයංක්රීයව පරීක්ෂා කිරීම, ඉන්පසු පරීක්ෂකයන්ට නිකුත් කිරීම.
උපාංග අතර E2E පරීක්ෂා කිරීම
බිලිඳු මොනිටරයක් එක් උපාංගයකින් නිසි ලෙස පරීක්ෂා කළ නොහැක. මට බිලිඳු උපාංගයක් සහ දෙමාපිය උපාංගයක් අවශ්යයි. ව්යාපෘතිය ආරම්භ වූයේ එකවර ක්රියාත්මක වන Android emulators දෙකකින් වන අතර, දැන් එයට local iOS simulator සහ සැබෑ උපාංග පරීක්ෂා කිරීම්ද එක් කර ඇත. ස්වයංක්රීය Android පරීක්ෂණ script එක තවමත්:
- emulators දෙකෙහිම යෙදුම ස්ථාපනය කරයි
- උපාංග දෙකෙහිම pairing ක්රියාවලිය හරහා ගමන් කරයි
- ශබ්ද සහ වීඩියෝ සම්බන්ධතා ස්ථාපිත වූ බව තහවුරු කරයි
- push-to-talk, කැමරා පාලනය සහ අනෙකුත් විශේෂාංග පරීක්ෂා කරයි
emulators දෙකම එකම IP ලිපිනය බෙදාගන්නා බැවින් (10.0.2.15), STUN හරහා සෘජු peer-to-peer සම්බන්ධතාවයක් ඇති කළ නොහැක. සෑම පරීක්ෂණ ධාවනයක්ම Cloudflare TURN relay සේවාව හරහා යා යුතුය. එය කරදරකාරී වුවත් ප්රයෝජනවත්ය: සෑම වරකම වඩාත් සංකීර්ණ සම්බන්ධතා මාර්ගය පරීක්ෂා කෙරේ.
මා ඉගෙනගත් දේ
AI යුගල ක්රමලේඛකයෙකු සමඟ සම්පූර්ණ යෙදුමක් ගොඩනැඟීමෙන් මම කරුණු කිහිපයක් ඉගෙන ගත්තෙමි:
- ව්යුහය වෙනදාටත් වඩා වැදගත්ය. පැහැදිලි සම්මතයන් සහ හොඳින් ලේඛනගත කළ කේත පදනමක්, එකම රටාවට ගැළපෙන කේත යෝජනා කිරීමට AIට උපකාරී වේ. අපැහැදිලි බව ඉක්මනින්ම විශාල වියදමක් බවට පත් වෙයි.
- පරීක්ෂා කිරීම අත්හැරිය නොහැක. AI මඟින් ජනනය කළ කේතයටත් මිනිසුන් ලියූ කේතයට සමාන දැඩි පරීක්ෂාවක් අවශ්යයි. ස්වයංක්රීය E2E පරීක්ෂණ මඟින් අතින් පරීක්ෂා කරන විට පහසුවෙන් මඟහැරිය හැකි ගැටලු හඳුනාගත්තේය.
- මිනිසා ක්රියාවලියේ රැඳී සිටියි. සෑම ව්යුහ තීරණයක්ම, සෑම ආරක්ෂක තේරීමක්ම සහ සෑම නිෂ්පාදන සීමාවක්ම මා සතුවම පවතී. AI ක්රියාත්මක කිරීම වේගවත් කරයි, නමුත් විනිශ්චය ප්රතිස්ථාපනය නොකරයි.
- වේගය ගුණාත්මකභාවයට ඉඩ සලසයි. දින ගණනක් වෙනුවට පැය කිහිපයකින් විශේෂාංග නිකුත් වන නිසා, ඒවා තවදුරටත් ඔපමට්ටම් කිරීමට සහ දෝෂ නිවැරදි කිරීමට වැඩි වාර ගණනක් ලැබේ. වේගවත් වීම පමණින් ප්රතිඵලය හොඳ වන්නේ නැත.
ඉදිරියට
Baby Monitor Timmy අඛණ්ඩව පරිණාමය වෙයි. iOS නිකුතුව ඉතා ආසන්නයි; ඉන්පසු තවත් sensor විශේෂාංග සහ අඛණ්ඩ ආරක්ෂක ශක්තිමත් කිරීම් පැමිණේ. වැඩ ප්රවාහය සමානව පවතී: මම දිශාව සහ සීමා තීරණය කරමි, Copilot ඉක්මනින් ක්රියාත්මක කිරීමට සහ පරීක්ෂා කිරීමට උදව් කරයි.
ආරක්ෂාවට අදාළ ගොඩනැඟිලි කොටස් දැන් පැහැදිලි සීමා සහිත පොදු baby-monitor-timmy-core repositoryතුළ ඇත. pairing, signaling සහ backend interfaces පිළිබඳ ව්යුහ තීරණ ලේඛනගත කර ඇත්තේද එහිමය.