בלוג

איך אני בונה את Baby Monitor Timmy עם GitHub Copilot

בינה מלאכותית עוזרת לי להתקדם מהר יותר. האחריות על Timmy עדיין נשארת אצלי.

Baby Monitor Timmy התחיל מרעיון פשוט: מוניטור תינוק שמכבד את הפרטיות בבית. בלי הקלטות בענן ובלי נתיבי מידע מיותרים שיוצאים מחדר התינוק. מה שאנשים רבים אינם רואים הוא שאני בונה את Timmy כפרויקט של אדם אחד בציריך, ו- GitHub Copilot הוא שותף התכנות המהיר מאוד שלי.

תהליך העבודה בין אדם לבינה מלאכותית

החלוקה ברורה: אני מגדיר פיצ'רים, קובע סדרי עדיפויות ומקבל החלטות ארכיטקטוניות. Copilot עוזר במימוש: כתיבת קוד, הוספת בדיקות, איתור ממוקד של תקלות והכנת שלבי ההפצה.

ספרינט טיפוסי אצלי נראה בערך כך:

  1. תיאור הפיצ'ר: אני מתאר מה הפיצ'ר אמור לעשות, כולל מקרי קצה ואילוצים.
  2. מימוש: Copilot מציע קוד ופועל לפי המוסכמות הקיימות בפרויקט.
  3. בדיקות: בדיקות מקצה לקצה אוטומטיות רצות על שני אמולטורים ובודקות את החיבור האמיתי בין המכשיר שבצד התינוק למכשיר שבצד ההורה.
  4. הפצה: כשהבדיקות עוברות, מכינים גרסאות Android ו-iOS לחנות המתאימה ולמסלולי הבדיקה המתאימים.

המחזור הזה חוזר על עצמו עבור פיצ'רים ותיקוני באגים. אני לא כותב בעצמי כל שורת קוד, אבל אני מחליט מה בונים, למה בונים אותו, והאם הצעה מתאימה ל-Timmy.

מהרעיון ל-WebRTC

המשימה הטכנית המרכזית הייתה ברורה מההתחלה: אודיו ווידאו בזמן אמת בין שני טלפונים. WebRTC הייתה הבחירה המתבקשת, אבל השילוב שלה עם Flutter אינו פשוט: מועמדי ICE, משא ומתן על SDP, מעבר ל-TURN כמסלול חלופי ו-DataChannels צריכים לעבוד יחד בסדר הנכון.

Copilot עזר לי לחבר את החלקים האלה צעד אחר צעד: להגדיר את חיבור העמיתים, לשמור על הסדר הקריטי הנכון (DataChannel לפני offer, ‏onTrack לפני setRemoteDescription), ולהעביר את האיתות דרך Firebase Firestore. כל חלק היה צריך לרוץ על שני אמולטורים לפני שהמשכתי הלאה.

צימוד מאובטח עם ECDH

אחד הפיצ'רים הקריטיים ביותר היה מערכת הצימוד המאובטח. שני מכשירים צריכים ליצור אמון הדדי בלי להסתמך על שרת מרכזי שיאשר את זהותם. הפתרון: החלפת מפתחות ECDH P-256 דרך Firebase, בשילוב מספר אימות חזותי (SAS) שמזהה התקפות אדם-בתווך.

Copilot עזר לממש את השרשרת הקריפטוגרפית: יצירת מפתחות, החלפת מפתחות ציבוריים, גזירת סוד משותף, חישוב SAS והצפנת AES-256-GCM לכל נתוני האיתות בהמשך. אני לא שולח את מפתח הצימוד למערכת צד השרת; רק גיבוב SHA-256 שלו משמש כמזהה מסמך ב-Firestore.

ביקורת אבטחה: איתור ותיקון חולשות

פיתוח בסיוע בינה מלאכותית הוא לא רק הקלדה מהירה יותר בשבילי. הוא גם עוזר בחיפוש שיטתי אחר באגים. בספרינט ביקורת אבטחה ממוקד, Copilot ניתח את בסיס הקוד ומצא שש בעיות שהייתי צריך לתקן:

כל שש הבעיות תוקנו באותו ספרינט. כאן Copilot חזק: קריאה של קבצים רבים, השוואת דפוסים וסימון מקומות שאני צריך לבדוק מקרוב יותר.

ספרינטים איטרטיביים: איך האפליקציה התפתחה

Timmy התפתח דרך ספרינטים מהירים אך מוגדרים היטב. כמה אבני דרך:

כל ספרינט פועל לפי אותו דפוס בסיסי: מתארים את המטרה, בודקים את ההצעות, בודקים אוטומטית ואז משחררים לבודקים.

בדיקות E2E בין מכשירים

אי אפשר לבדוק מוניטור תינוק כמו שצריך במכשיר אחד. צריך מכשיר אחד בצד התינוק ומכשיר אחד בצד ההורה. הפרויקט התחיל עם שני אמולטורי Android שפעלו במקביל, וכיום התהליך כולל גם בדיקות מקומיות בסימולטור iOS ובמכשירים אמיתיים. סקריפט הבדיקה האוטומטי של Android עדיין:

  1. מתקין את האפליקציה על שני האמולטורים
  2. מנווט בתהליך הצימוד בשני המכשירים
  3. מוודא שנוצרו חיבורי אודיו ווידאו
  4. בודק דיבור בלחיצה, שליטה במצלמה ופיצ'רים נוספים

מכיוון ששני האמולטורים חולקים את אותה כתובת IP (10.0.2.15), חיבור עמית-לעמית ישיר באמצעות STUN אינו אפשרי. כל הרצת בדיקה חייבת לעבור דרך ממסר Cloudflare TURN. זה מעצבן, אבל שימושי: נתיב החיבור המורכב ביותר נבדק בכל פעם.

מה למדתי

בניית אפליקציה מלאה עם מתכנת שותף מבוסס בינה מלאכותית לימדה אותי כמה דברים:

מבט קדימה

Baby Monitor Timmy ממשיך להתפתח. גרסת iOS קרובה; אחריה יגיעו פיצ'רים נוספים של חיישנים והקשחת אבטחה מתמשכת. תהליך העבודה נשאר דומה: אני קובע את הכיוון והגבולות, ו-Copilot עוזר לממש ולבדוק במהירות.

אבני הבניין הנוגעות לאבטחה מאורגנות כעת לפי גבולות ברורים במאגר הציבורי מאגר baby-monitor-timmy-core. שם מתועדות גם ההחלטות הארכיטקטוניות הנוגעות לצימוד, לאיתות ולממשקי צד השרת.


מאמרים נוספים