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 ማዘጋጀት፣ ወሳኙን ቅደም ተከተል ትክክል ማድረግ (DataChannel ከoffer በፊት፣ onTrack ከsetRemoteDescription በፊት)፣ እና signalingን በFirebase Firestore ላይ ማስቀመጥ። ወደ ቀጣዩ ከመሄዴ በፊት እያንዳንዱ ክፍል በሁለት emulator ላይ መሥራት ነበረበት።
በECDH የተጠበቀ ማጣመር
በጣም ወሳኝ ከነበሩት ባህሪያት አንዱ የተጠበቀ የማጣመር ሥርዓት ነበር። ሁለት መሣሪያዎች ማንነታቸውን የሚያረጋግጥ ማዕከላዊ አገልጋይ ሳይኖር በእርስ በርስ መተማመን ማቋቋም አለባቸው። መፍትሔው፦ በFirebase በኩል የECDH P-256 ቁልፍ ልውውጥ፣ ከመካከለኛ-ሰው ጥቃቶችን ከሚለይ የእይታ ማረጋገጫ ቁጥር (SAS) ጋር።
Copilot የምስጠራ ሂደቱን ለመተግበር ረድቶኛል፦ ቁልፍ መፍጠር፣ የይፋ ቁልፎችን መለዋወጥ፣ የጋራ ምስጢር ማመንጨት፣ SASን ማስላት እና በኋላ ለሚላኩ የምልክት ልውውጥ ውሂቦች በሙሉ AES-256-GCM ምስጠራን መጠቀም። የማጣመሪያ ቁልፉን ወደ ጀርባ አገልግሎቱ አልልክም፤ የSHA-256 ሃሽ ብቻ የFirestore ሰነድ መለያ ሆኖ ጥቅም ላይ ይውላል።
የደህንነት ምርመራ፦ ተጋላጭነቶችን መፈለግና ማስተካከል
በAI የታገዘ ልማት ለእኔ ፈጣን መተየብ ብቻ አይደለም። ስህተቶችን በሥርዓት ለመፈለግም ያግዛል። ትኩረት በተሰጠበት የደህንነት ምርመራ ስፕሪንት ውስጥ Copilot የኮድ መሠረቱን ተንትኖ ማስተካከል የነበረብኝን ስድስት ችግሮች አገኘ፦
- በsignaling ውሂብ ላይ የጎደለ የግቤት ማረጋገጫ
- በICE candidate አያያዝ ውስጥ ሊፈጠሩ የሚችሉ የውድድር ሁኔታዎች
- በትክክል ያልተጸዱ ያረጁ የsession ውሂቦች
- ከመጠን በላይ ፈቃደኛ የነበሩ የFirestore የደህንነት ደንቦች
- የcertificate pinning አስፈላጊነት በበቂ ሁኔታ አለመታሰቡ
- በTURN credential ሂደት ውስጥ ያልበቃ የስህተት አያያዝ
ስድስቱም በዚያው ስፕሪንት ተስተካክለዋል። Copilot የሚጠነክርበት ቦታ ይህ ነው፦ ብዙ ፋይሎችን ማንበብ፣ አሰራሮችን ማነጻጸር እና በጥልቀት መመርመር ያለብኝን ቦታ ማመልከት።
ተደጋጋሚ ስፕሪንቶች፦ መተግበሪያው እንዴት እንዳደገ
Timmy በፈጣን ነገር ግን ግልጽ ወሰን ባላቸው ስፕሪንቶች አደገ። አንዳንድ ዋና ደረጃዎች፦
- v1.8: የማጣመር ሙሉ ዳግም ንድፍ — 4-ቁምፊ ኮድ + ECDH P-256 በFirebase በኩል የድሮውን ቀጥተኛ-ቁልፍ አቀራረብ ተክቷል።
- v1.10: የደህንነት ማጠናከሪያ ስፕሪንት — የስድስት-ተጋላጭነት ምርመራ እና የጥገና ዑደት።
- v1.11: በሁሉም ማያ ገጾች ላይ የጨለማ ሁነታ፣ እንዲሁም አሁን የምታነቡት መነሻ ገጽና ብሎግ።
- v1.12: የወላጅ ማያ ገጽ ትልቅ ማሻሻያ፣ የሌሊት እይታ ሁነታ፣ እና በካሜራ ፍሬሞች ትንተና የሚሠራ የእንቅስቃሴ ማወቂያ።
እያንዳንዱ ስፕሪንት ተመሳሳይ መሠረታዊ አሰራር ይከተላል፦ ግቡን መግለጽ፣ ጥቆማዎችን መገምገም፣ በራስ-ሰር መሞከር፣ ከዚያም ለሞካሪዎች መላክ።
በመሣሪያዎች መካከል የE2E ሙከራ
የሕፃን መቆጣጠሪያን በአንድ መሣሪያ ብቻ በትክክል መሞከር አይቻልም። አንድ የሕፃን መሣሪያ እና አንድ የወላጅ መሣሪያ ያስፈልገኛል። ፕሮጀክቱ በአንድ ጊዜ በሚሠሩ ሁለት Android emulator ተጀምሮ፣ አሁን ይህንን ሂደት በአካባቢያዊ iOS simulator እና በእውነተኛ መሣሪያ ፍተሻዎች ያሟላል። ራስ-ሰር የAndroid የሙከራ ስክሪፕቱ አሁንም፦
- መተግበሪያውን በሁለቱም emulator ላይ ይጭናል
- በሁለቱም መሣሪያዎች ላይ በማጣመር ሂደት ያልፋል
- የድምፅና የቪዲዮ ግንኙነቶች መቋቋማቸውን ያረጋግጣል
- push-to-talkን፣ የካሜራ መቆጣጠሪያን እና ሌሎች ባህሪያትን ይፈትሻል
ሁለቱም emulator ተመሳሳይ 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 ውስጥ ይገኛሉ። ስለ ማጣመር፣ የምልክት ልውውጥ እና የጀርባ አገልግሎት በይነገጾች የተደረጉ የሥርዓት አወቃቀር ውሳኔዎችም እዚያ ተመዝግበዋል።