بيتزا كوديم

أهلا هبر. لقد عقدنا تلقائيًا أول هاكاثون داخلي لنا. قررت أن أشارككم آلامي واستنتاجاتي حول التحضير لها خلال أسبوعين، بالإضافة إلى المشاريع التي تبين أنها كذلك.

بيتزا كوديم

الجزء الممل للمهتمين بالتسويق

سأبدأ بقصة صغيرة.

بداية شهر أبريل. يُقام أول هاكاثون لمجتمع MskDotNet في مكتبنا. معركة تاتوين تجري على قدم وساق في مجرتنا هذه المرة. السبت. 20 فريقا. بيتزا. كل شيء صادق جدا (البراهين). تطفو لعبة R2-D2 القابلة للنفخ حول القاعة. تكتب الفرق الخوارزميات الأكثر صحة لاجتياز السباق الأكثر خطورة على الخريطة. نحن نتحرك انطلاق السباقات الأولى. ملفات تعريف الارتباط والقهوة هي المنقذة للحياة. توقعت أنا والمنظمون أن يغادر الكثير من الناس بعد الغداء يوم السبت. لكن لا. 12 ساعة من البرمجة متأخرة. الاخير. شيء ما يسقط، شيء لا يبدأ. لكن الجميع سعداء. فريقنا يفوز. نحن سعداء بشكل مضاعف.

أنا أشارك فرحتي في Slack وتتبادر إلى ذهني الفكرة: "نحن بحاجة إلى تنظيم هاكاثون خاص بنا". أكتب إلى محطة الخدمة لدينا ساشا. الصمت.

صباح. أشرب القهوة في المكتب. أرى ساشا يقترب من الخلف. "ليزا، هذا عظيم! لدينا تاريخ مهم في 21 أبريل. دعنا نقوم به! " ماهذا الهراء!؟ سريع جدا؟ أ؟ ماذا؟ أحتاج للسفر إلى سيكتيفكار للحصول على تدريب في منتصف أبريل. وإلى الجحيم معها! دعونا.

2 أسابيع اليسار. لم أكن أبدًا المنظم الوحيد للهاكاثون. فليكن داخليا. قرأت مقالات حول هذا الموضوع. قاسٍ. يستغرق عدة أشهر. هناك حاجة إلى عدة أشخاص. عليك أن تفكر في السلع، والجوائز، والشروط، والجدول الزمني، والفائدة، وفهم الهدف، والميزانيات. أو ربما حتى معرفة معنى الحياة. بالتأكيد لن أتمكن من الوصول في الوقت المناسب. وبينما كنت تقرأ وتستعد، كان قد مر أسبوع بالفعل. حان الوقت لنسيان المقالات والبدء في فعل شيء ما.

احصل على قائمتنا المرجعية لعقد هاكاثون داخلي خلال أسبوع واحد

  • خطة: تجلس بهدوء وتكتب قائمة بما يجب القيام به من أجل الهاكاثون. دقائق 30.
  • مهمة: يقترح المشاركون ويختارون المشاريع التي يريدون إنشاؤها في جداول بيانات Google. مهمة في الخلفية، ساعتان.
  • جدول المواعيد: على ركبتك تكتب توزيعًا قصيرًا للوقت، مع مراعاة 3 فترات راحة والأخيرة. دقائق 20.
  • الأوامر: نشر رسالة حول الهاكاثون مع جدول زمني من محطة الخدمة في قنوات تكنولوجيا المعلومات في Slack/mail/إلخ وإنشاء قناة منفصلة للهاكاثون. في ذلك، ينقسم الجميع إلى فرق، وأولئك الذين لم يحسموا أمرهم يفعلون ذلك في أول 5 دقائق من الهاكاثون. مهمة في الخلفية، ساعتان.
  • أرداف: تتوصل إلى سلع مع اثنين من المطورين، وتسلمها إلى المصمم ليعرضها، وتستلمها جاهزة. مهمة الخلفية، 3 أيام.
  • هاكاثون: تأتي إلى المكتب، وتنسق الجميع في البداية، وتمارس أعمالك، وتقرأ Reddit، والأهم من ذلك الإعلان عن كل استراحة حول البيتزا الطازجة، والتقاط صور لغروب الشمس، والإعلان عن النتيجة النهائية، والتصويت معًا واختيار الفائز. 1 اليوم.
  • تحت النجمة: بالطبع، أنت تفكر دائمًا في أن كل شيء يسير على ما يرام. بالطبع، لن يرى الجميع رسالتك ومن الأفضل التحدث مع البعض شخصيًا. بالطبع، إذا ساعدك شخص ما، فسيكون كل شيء أسهل مرتين (ساعدتني ألينا الرائعة).

الجزء الأقل مللاً بشأن موعد الهاكاثون

لماذا 21 أبريل؟ هذا اليوم مهم بالنسبة لنا. قبل عام بالضبط، في 21 أبريل، وقعنا تحت الضغط خلال عطلة نهاية الأسبوع الأولى بعد بدء الحملة الإعلانية الفيدرالية. في اليوم التالي، الأحد، كان فريقنا في العمل من الساعة 8 صباحًا. ثم أنشأنا لوحة Sundayhackathon في Trello وبدأنا أسبوعًا من العمل بنظام الورديات، 12 ساعة يوميًا. كان الوضع حرجًا للغاية لدرجة أنه لم يكن لدينا الوقت لتناول الطعام وتم إطعامنا من قبل رجال من فرق أخرى.

بيتزا كوديم

يمكنك قراءة قصة أكثر تفصيلاً على صفحة فيودور أوفتشينيكوف (رئيسنا التنفيذي). منذ ذلك الحين تغيرنا كثيرًا، لكننا الآن بالتأكيد لن ننسى التاريخ.

هذا العام، قررنا أن هذا الحدث يستحق أن يُخلد في ذاكرة الأجيال القادمة، وطبقًا لأفضل التقاليد، قمنا بتنظيم أول هاكاثون داخلي في تاريخ الدودو، والذي استمر لمدة 10 ساعات.

الجزء الأكثر مللاً في مشاريع الهاكاثون

إخلاء المسؤولية: جميع الأوصاف كتبها الرجال أنفسهم، لذا فإن تأليف النص ليس ملكي.

التعلم أوليغ (التعلم الآلي)

ديما كوشنيف، ساشا أندرونوف (@alexandronov)

لقد أرادوا إنشاء شبكة عصبية يمكنها تحديد نوع البيتزا الموجودة في الصورة دون أي معرفة. ونتيجة لذلك، صنعنا لعبة بسيطة جدًا - فهي تتعرف على 10 بيتزا، واكتشفنا تقريبًا كيف يعمل كل شيء، قدر الإمكان في يوم واحد (حوالي 10 ساعات).

بيتزا كوديم

على وجه الخصوص، أدركنا أن الصناعة قد وصلت إلى مستوى حيث يمكن للمطور العادي أن يأخذ المكتبات الجاهزة، وقراءة الوثائق وتدريب شبكته العصبية دون معرفة عميقة بالموضوع. وسوف تعمل بشكل جيد بما فيه الكفاية لحل المشاكل الحقيقية.

الأدوات المستخدمة:

  • imageai - مكتبة مريحة وبسيطة للعمل مع التعلم الآلي ورؤية الكمبيوتر.
  • لقد جربنا نموذجين - ResNet50، وYolo.
  • تمت كتابة الكود بالطبع بلغة بايثون.

كان لدينا 11000 صورة، لكن تبين أن حوالي 3/4 منها مجرد نفايات، والباقي بزوايا مختلفة وغير مناسبة. ونتيجة لذلك، أخذنا نموذجًا جاهزًا (يعرف ببساطة كيفية العثور على البيتزا) وبمساعدته قمنا بفصل سلة المهملات. بعد ذلك، تضمن عنوان الصورة اسم البيتزا - لذلك قمنا بفرزها في مجلدات، ولكن اتضح أن الأسماء لا تتطابق مع الواقع وكان علينا تنظيفها بأيدينا. في النهاية، بقي حوالي 500-600 صورة، من الواضح أن هذا مبلغ ضئيل، لكن مع ذلك، كان هذا كافيًا لفصل 10 بيتزا عن بعضها البعض.

لتدريب الشبكة، أخذنا أرخص جهاز افتراضي في Azure على NVIDIA Tesla K80. لقد تدربوا عليها لمدة 100 حقبة، لكن كان من الواضح أن الشبكة كانت مشبعة بشكل مفرط بعد 50 حقبة، بسبب وجود مجموعة بيانات صغيرة.

في الواقع، المشكلة برمتها هي عدم وجود بيانات جيدة.

بيتزا كوديم

ربما قد خلطنا بين المصطلحات قليلاً، لكن يجب أن نأخذ في الاعتبار أنه ليس لدينا أي خبرة على الإطلاق في العمل بكل هذه الأمور.

واجهة المستخدم الرسومية لـ NOOBS (وحدة التحكم لطلب البيتزا)

ميشا كوماتشيف (سيريدان) ، زينيا بيكينين، زينيا فاسيليف

لقد قمنا بتجميع نموذج أولي لتطبيق وحدة التحكم للمهوسين، والذي بفضله يمكنك طلب البيتزا من خلال المحطة أو سطر الأوامر، أو حتى دمجها في خط أنابيب النشر، وبعد الإصدار الناجح، قم بتوصيل البيتزا إلى المكتب.

بيتزا كوديم

تم تقسيم العمل إلى عدة أجزاء: اكتشفنا كيفية عمل واجهة برمجة التطبيقات الخاصة بنا لتطبيقات الهاتف المحمول، وقمنا بتجميع واجهة سطر الأوامر (CLI) الخاصة بنا باستخدام أوكليف وقمنا بتكوين نشر الحزمة التي جمعناها. تضمنت المهمة الأخيرة بضع دقائق غير سارة قرب نهاية الهاكاثون. كل شيء كان يعمل محليًا بالنسبة لنا، وحتى الإصدارات القديمة المنشورة من الحزمة عملت، لكن الإصدارات الجديدة (التي أضافت المزيد من الميزات والرموز الرائعة) رفضت العمل. لقد أمضينا حوالي 40 دقيقة في محاولة اكتشاف الخطأ الذي حدث، ولكن في النهاية سار كل شيء بطريقة سحرية من تلقاء نفسه).

كان برنامجنا الأقصى للهاكاثون عبارة عن طلب حقيقي للبيتزا إلى المكتب من خلال CLI الخاص بنا. لقد قمنا بتشغيل كل شيء عشرات المرات على منصة الاختبار، لكن يدي كانت لا تزال ترتجف عندما أدخلت الأوامر في الإنتاج.

بيتزا كوديم

ونتيجة لذلك، فعلنا ذلك أخيرا!

بيتزا كوديم

CourierGo

أنطون بروجميليف (مؤلف)، فانيا زفيريف، جليب ليسنيكوف (الكون) ، أندريه سارافانوف

لقد أخذنا فكرة "تطبيق البريد السريع".

خلفية عن التحضير.في البداية، تساءلت عن نوع الميزات التي يمكن أن تكون موجودة في التطبيق؟ ظهرت قائمة الوظائف التالية:

  • يقوم التطبيق بتسجيل الدخول إلى سجل التسليم النقدي باستخدام الرمز.
  • يعرض التطبيق على الفور الطلبات المتاحة والأوامر التي يجب اتخاذها.
  • يلاحظ الساعي الطلب ويأخذه في الرحلة.
  • يظهر له الوقت المقدر وما إذا كان في الوقت المحدد أم لا.
  • يوضح للعميل أن الساعي قد غادر.
  • يبدأ العميل في إظهار نقطة الساعي على الخريطة والوقت المقدر.
  • يمكن للساعي الكتابة إلى العميل في الدردشة من التطبيق.
  • يمكن للعميل الكتابة إلى الساعي عبر الدردشة من التطبيق.
  • قبل خمس دقائق من الوصول، يتلقى العميل رسالة مفادها أن البريد السريع قد اقترب، كن مستعدا.
  • يشير الساعي في الطلب إلى أنه وصل وينتظر.
  • يتصل الساعي من التطبيق بنقرة واحدة ويبلغ عن (ارتفاع، وصل، الخ)
  • يقبل العميل الطلب ويقوم بإدخال رمز PIN من التطبيق أو رسالة نصية قصيرة لتأكيد التسليم (كتوقيع) حتى لا يتمكن الساعي من إكمال التسليم مقدمًا إذا تأخر.
  • يتم وضع علامة على الطلب بأنه تم تسليمه في النظام.

بالإضافة إلى اثنين من السيناريوهات البديلة:

  • يمكن لشركة التوصيل وضع علامة على الطلب على أنه لم يتم تسليمه وتحديد السبب.
  • إذا تأخرت، يمكن لشركة التوصيل إصدار شهادة إلكترونية عبر رسالة نصية قصيرة بكبسة زر واحدة. أو تصل الشهادة تلقائيًا في حالة عدم الالتزام بالموعد النهائي للتسليم.

كان الشعور بالوعد وضرورة هذا المشروع، بالطبع، مفعمًا بالحيوية.

في اليوم التالي ذهبنا لتناول الغداء مع الفريق وناقشنا الشكل الأدنى لوظائف التطبيق.

ونتيجة لذلك، تم تشكيل القائمة التالية لما يجب القيام به في الهاكاثون:

  • تسجيل الدخول إلى السجل النقدي التسليم.
  • عرض الموقف الحالي.
  • إرسال البيانات إلى واجهة برمجة التطبيقات الخارجية (الإحداثيات، استلام الطلب، تسليم الطلب).
  • تلقي البيانات من واجهة برمجة التطبيقات الخارجية (طلبات البريد السريع الحالية).
  • أرسل حدثًا يشير إلى أنك قد تلقيت الطلب للتسليم/التسليم.
  • عرض الموقع الحالي للساعي على الخريطة على الموقع.

يبدو أن العمل الرئيسي يكمن في إنشاء الواجهة الخلفية، أي التطبيق نفسه (بعد المناقشات، اخترنا ReactNative لتطوير التطبيق، أو بالأحرى إطار العمل الخاص به - expo.io، والذي يسمح لك بعدم كتابة التعليمات البرمجية الأصلية على الإطلاق). فيما يتعلق بالواجهة الخلفية، كان هناك أمل في البداية في فانيا زفيريف، حيث كان يتمتع بخبرة في العمل مع قالب الخدمة الخاص بنا وk8s (أي الوظيفة التي تولىها). قمت أنا وأندريه سارافانوف بجولة في ReactNative.

قررت أن أحاول إنشاء مستودع عمل للمشروع نفسه على الفور. في الساعة 12 ليلاً، اكتشفت أن تحديد الموقع الجغرافي في الخلفية لا يعمل بشكل جيد في ReactNative، إذا لم تكتب كودًا أصليًا، فسوف أشعر بالإحباط قليلاً. ثم تركت الأمر عندما أدركت أنني لم أقرأ الوثائق الخاصة بإطار عمل Expo.io، بل بوثائق ReactNative. نتيجة لذلك، خلال المساء، فهمت بالفعل كيفية الحصول على الوضع الحالي في Expo.io ورسم شاشات منفصلة (لتسجيل الدخول، وعرض الطلب، وما إلى ذلك).

بيتزا كوديم

في الصباح، في hackathon، استدرجوا Gleb إلى مشروعهم الواعد للغاية. وسرعان ما توصلوا إلى خطة لما يجب القيام به.

بيتزا كوديم

لقد ارتكبنا خطأ عندما حاولنا، وفقًا لقالب المشروع، التواصل ليس عبر HTTP، ولكن عبر GRPC، حيث لم يكن أحد يعرف كيفية إنشاء عميل GRPC لجافا سكريبت. وفي النهاية، بعد أن أمضينا حوالي ساعة ونصف في هذا الأمر، تخلينا عن هذه الفكرة. ولهذا السبب، بدأ الرجال في إعادة صياغة الخادم النهائي من GRPC إلى WebApi على الواجهة الخلفية. وبعد نصف ساعة، تمكنا أخيرًا من إعداد اتصال بين التطبيق والواجهة الخلفية. ولكن في الوقت نفسه، كان Gleb على وشك الانتهاء من النشر إلى k8s بالإضافة إلى النشر التلقائي للالتزام بالسيد. 🙂

لقد اخترنا MySQL كوحدة تخزين حتى لا نخاطر بقاعدة البيانات على الأقل (كانت لدينا أفكار حول CosmosDb).

بيتزا كوديم

وخلاصة القول:

  • تم تنفيذ حفظ الإحداثيات الحالية للساعي من التطبيق إلى قاعدة البيانات.
  • لقد قمنا بتثبيت RabbitMQ واشتركنا في رسائل حول قيام شركة التوصيل باستلام طلب من أجل عرض الطلب على الفور من شركة التوصيل في التطبيق.
  • لقد بدأنا في حفظ وقت تسليم الطلب في قاعدة بياناتنا بعد أن ضغطت شركة التوصيل على زر في التطبيق. لم يكن لدينا الوقت لإضافة حدث إرسال مرة أخرى إلى rebbit الذي تم تسليم الطلب فيه.
  • لقد قمت بعرض خريطة على صفحة الطلب الحالي على موقع الويب مع الموقع الحالي للساعي. لكن هذه الوظيفة ظلت غير مكتملة بعض الشيء، حيث لم يكن من الممكن تكوين CORS في البيئة لتلقي الإحداثيات من خدمتنا الجديدة.

M87

روما بوكين، غوشا بوليفوي (جورجيبوليفوي) ، أرتيوم تروفيموشكين

أردنا تنفيذ مزود OpenID Connect، لأننا نستخدم حاليًا بروتوكول مصادقة من تصميمنا الخاص، وهذا يخلق عددًا من الصعوبات: مكتبات العملاء المخصصة، والعمل غير المريح من جانب الشركاء الخارجيين، ومشاكل الأمان المحتملة (بعد كل شيء) ، OAuth2.0 وOpenID Connect في التنفيذ المرجعي يمكن اعتبارهما آمنين، لكنني لست متأكدًا من الحل الذي نقدمه).

بيتزا كوديم

لقد أنشأنا خدمة منفصلة تحاكي خدمة تخزين البيانات الشخصية من أجل إنشاء نموذج صغير لا يتوافق مع البلد لموفر المصادقة الذي سينتقل إلى خدمة منفصلة للبيانات الشخصية (وهذا من شأنه أن يجعل من الممكن في المستقبل الحصول على خدمة واحدة مع حيث يمكن تسجيل الدخول من خلال تسجيل حساب في أي بلد، وفي الوقت نفسه الالتزام باللائحة العامة لحماية البيانات والقوانين الفيدرالية الأخرى). لقد قمنا بهذا الجزء، كما فعل المزود، ونجحنا في ربطهم ببعضهم البعض. بعد ذلك، كان من الضروري إنشاء واجهة برمجة التطبيقات (API) التي ستكون محمية بواسطة الرموز المميزة الصادرة عن الموفر، ودعم الاستبطان من خلال الموفر وإرجاع البيانات المحمية إذا كان الطلب يلبي سياسات التفويض (نتحقق من مصادقة المستخدم وفقًا لمخطط Bearer ، رمزه يحتوي على نطاق معين + y المستخدم نفسه لديه إذن يسمح بإجراء المكالمة). تم الانتهاء من هذا الجزء أيضا. كان المكون الأخير هو عميل JavaScript، والذي سيتم منحه رمزًا مميزًا، وبمساعدته سيتم استدعاء واجهة برمجة التطبيقات المحمية. لم يكن لدينا الوقت للقيام بهذا الجزء. أي أن الجزء الوظيفي بأكمله كان جاهزًا، لكن الجزء الأمامي لم يكن جاهزًا لإظهار وظائف النظام بأكمله.

E-E-E (لعبة)

ديما أفونشينكو، ساشا كونوفالوف

لقد صنعنا لعبة صغيرة على اليوكا حيث تقوم الأيدي المرحة برمي النقانق على البيتزا. إذا وضعت النقانق بشكل غير صحيح، تظهر رسالة حزينة "مرفوض" على الشاشة، وإذا تم وضع كل النقانق بشكل صحيح، تظهر حقيقة عشوائية حول البيتزا.

بيتزا كوديم

أردنا أن نجعل المستوى الثاني هو رمي الطماطم، لكن لم يكن لدينا الوقت.

بيتزا كوديم

استمرار قصير: من فاز؟

قبل الهاكاثون، تحدثنا مع الشباب وسألتهم عن الجائزة التي يرغبون في الحصول عليها إذا فازوا. وتبين أن الجائزة الأكثر قيمة ستكون "الطريق إلى الغذاء".

بيتزا كوديم

لذلك توقعوا أن نعلن عن لعبة الأيدي التي تضع الفلفل على البيتزا قريباً.

وكما لاحظ القارئ اليقظ، فاز فريق "E-E-E (لعبة)". تهنئة لكم يا شباب!

يمكن للمستخدمين المسجلين فقط المشاركة في الاستطلاع. تسجيل الدخول، من فضلك.

ما هو المشروع الذي أعجبك أكثر؟

  • التعلم أوليغ (التعلم الآلي)

  • واجهة المستخدم الرسومية لـ NOOBS

  • CourierGo

  • M87

  • إيييي

صوت 5 مستخدمًا. امتنع 3 مستخدما عن التصويت.

المصدر: www.habr.com

إضافة تعليق