وبلاگ

چگونه 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 و DataChannelها باید به ترتیب درست با هم کار کنند.

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قرار دارند. تصمیم‌های معماری مربوط به جفت‌سازی، سیگنال‌دهی و رابط‌های بک‌اند نیز همان‌جا مستند شده‌اند.


مقاله‌های بیشتر