السبت، 11 يوليو 2026

لا يمكنك اختبار الوحدات من أجل الذوق

أعمل على تطوير تطبيق "على المدى الطويل" حيث يخوض العداؤون جولات جري افتراضية على مسارات شهيرة حول العالم. يحسب التطبيق المسافة التي قطعتها على تطبيق سترافا ويرسم بيانيًا إجمالي المسافة التي قطعتها كتقدم على مسارات تمتد عبر بلدان أو قارات. الهدف هو توفير الإلهام والتحفيز على المدى الطويل؛ فالحياة ماراثون وليست سباق سرعة. قد تمر بشهر أو موسم سيئ، لكنك ستظل تحرز تقدمًا في رحلتك الافتراضية حول العالم.

يعرض التطبيق تقدمك على خرائط تفاعلية، مما يتيح للمستخدمين استكشاف أماكنهم بأنفسهم. لطالما رغبت في إثراء الخرائط بمعالم سياحية أو مواقع تاريخية مثيرة للاهتمام. بالنسبة للمسارات التي أعرفها، يمكنني إنشاء قوائم مماثلة بنفسي، لكن هذا لا ينطبق على المسارات التي تمتد عبر بلدان لا أعرفها. لذلك، بدأت البحث عن مصدر بيانات لنقاط الاهتمام التي يمكنني بناء نظام بيانات عليها. خلال هذه الرحلة، واجهت تحديات تتعلق بالذوق والتحيزات، وكافحت حالة هلوسة. ظننتُ في البداية أن الذكاء الاصطناعي سيكون الميزة الأساسية، لكنه انتهى به الأمر مجرد عنصر داعم إلى جانب الإشارات الأخرى وأساسيات معالجة البيانات.
مجموعة البيانات والأدوات#
كانت GeoNames نقطة انطلاق بديهية، فهي مصدر بيانات شامل يضم مواقع وفئات وروابط. يمكن تحميل مجموعة البيانات الكاملة وهي مرخصة بموجب رخصة المشاع الإبداعي. لذا، شرعتُ مع صديقي كلود في بناء مسار بيانات لتحويل البيانات الخام إلى نقاط اهتمام ذات صلة لمستخدمي In the Long Run.
استخدمنا لغة بايثون للبرمجة (لأنها تتمتع بدعم مكتبي ممتاز للمهام المطلوبة)، وخزنّا البيانات المُعالجة محليًا كملفات Apache Parquet، واستخدمنا DuckDB كطبقة استعلام.1 كانت هذه تجربتي الأولى مع كل من Parquet وDuckDB، لكنني وجدتُ سهولة استخدام كليهما، وقد عرّفني كلود على ميزاتهما خطوة بخطوة (وكان معظم العمل على DuckDB باستخدام لغة SQL التي أتقنها جيدًا). ​​عمومًا، أجد أن إضافة أداة أو اثنتين جديدتين أو تقنيتين إلى أي مشروع هي أفضل طريقة للتعلم. إذا كانت جميع التقنيات جديدة عليك، فسيكون تعلمها صعباً للغاية وقد يجعلك تتخلى عن المشروع تماماً. تُغيّر برامج الذكاء الاصطناعي هذه المعادلة إلى حد ما، ولكن حتى مع ذلك، أجد أن إلمامي بمعظم التقنيات المستخدمة يُتيح لي توجيه البرنامج بشكل أفضل واتخاذ قرارات مدروسة بدلاً من اتباعه بشكل أعمى.
قبل البدء بالتنفيذ، وضعتُ خطة مشروع مع كلود، مُحددين فيها الخطوات المختلفة لخط سير العمل ومهام تطوير الميزات. ومع تقدمنا، أنشأنا مواصفات/خطة لكل خطوة، بحيث يُمكننا تطويرها وتحسينها كلما اكتسبنا المزيد من المعرفة من العمل السابق. هذا يعني أيضًا أنه يُمكنني بدء جلسات جديدة مع الوكيل لكل مرحلة. إن تلخيص نتائج المراحل السابقة في سياق موجز وتعليمات للخطوة التالية يُؤدي إلى استجابات أسرع وأفضل (أجد أن السياقات الكبيرة تُقلل من جودة عمل الوكيل بسرعة).

ليست هناك تعليقات:

إرسال تعليق

القوائم المترابطة المتضمنة (Intrusive linked lists)

القوائم المتصلة المتداخلة (Intrusive linked lists) هي نوع من القوائم المتصلة التي تكون فيها روابط الربط مُضمَّنةً داخل البنية نفسها التي يجر...