المدونة

كيف أبني 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، وقنوات البيانات معًا بالترتيب الصحيح.

ساعدني Copilot على تجميع هذه الأجزاء خطوة بخطوة: إعداد اتصال الندّ بالندّ، والحفاظ على الترتيب الحاسم الصحيح (إنشاء DataChannel قبل العرض، واستدعاء 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 العام. وهناك أيضًا توثيق لقرارات البنية المعمارية المتعلقة بالاقتران والإشارات وواجهات الخلفية.


مقالات أخرى