کدیم-پیتزا

سلام هابر ما به طور خودجوش اولین هکاتون داخلی خود را برگزار کردیم. تصمیم گرفتم دردها و نتیجه گیری هایم را در مورد آماده شدن برای آن در 2 هفته و همچنین پروژه هایی که به نتیجه رسیدند با شما در میان بگذارم.

کدیم-پیتزا

بخش خسته کننده برای کسانی که علاقه مند به بازاریابی هستند

من با یک داستان کوچک شروع می کنم.

آغاز ماه آوریل. اولین هکاتون انجمن MskDotNet در دفتر ما در حال برگزاری است. نبرد تاتوئین این بار در کهکشان ما در حال انجام است. شنبه. 20 تیم پیتزا. همه چیز بسیار صادقانه است (شواهد). یک R2-D2 بادی در اطراف سالن شناور است. تیم ها صحیح ترین الگوریتم ها را برای عبور از خطرناک ترین مسابقه روی نقشه می نویسند. ما در حال حرکت در راه اندازی اولین مسابقات هستیم. کوکی ها و قهوه نجات دهنده هستند. سازمان دهندگان و من انتظار داشتیم که بسیاری از مردم بعد از ناهار روز شنبه آنجا را ترک کنند. اما نه. 12 ساعت کد نویسی پشت سر. آخرین. چیزی می افتد، چیزی شروع نمی شود. اما همه خوشحال هستند. تیم ما برنده می شود. خوشحالیم مضاعف.

من شادی خود را در Slack به اشتراک می گذارم و این ایده به ذهنم خطور می کند: "ما باید هکاتون خودمان را انجام دهیم." من به ایستگاه خدمات ما ساشا می نویسم. سکوت

صبح. من در دفتر قهوه می نوشم. ساشا را می بینم که از پشت نزدیک می شود. "لیزا، این عالی است! ما یک تاریخ مهم در 21 آوریل داریم. بیا انجامش بدیم!" WTF!؟ خیلی سریع؟ آ؟ چی؟ من باید در اواسط آوریل برای یک دوره کارآموزی به Syktyvkar پرواز کنم. و به جهنم! اجازه دهید.

2 هفته مونده من هرگز تنها برگزار کننده هکاتون نبودم. بگذار داخلی باشد. من مقالاتی در این زمینه خواندم. سخت است. چندین ماه طول می کشد. به چند نفر نیاز است. شما باید در مورد کالا، جوایز، شرایط، برنامه، علاقه، درک هدف، بودجه فکر کنید. یا شاید حتی معنای زندگی را بفهمید. قطعا به موقع نمی رسم و در حالی که شما در حال مطالعه و آماده سازی بودید، یک هفته گذشته بود. وقت آن است که مقالات را فراموش کنید و شروع به انجام کاری کنید.

چک لیست ما را برای برگزاری هکاتون داخلی در 1 هفته دنبال کنید

  • برنامه ریزی کنید: شما آرام بنشینید و لیستی از کارهایی که برای هکاتون باید انجام دهید بنویسید. دقیقه 30.
  • کار: شرکت کنندگان پروژه هایی را که می خواهند در Google Sheets ایجاد کنند پیشنهاد و انتخاب می کنند. کار پس زمینه، 2 ساعت.
  • جدول زمانی: روی زانوی خود یک تفکیک زمان کوتاه می نویسید، با در نظر گرفتن 3 استراحت و نهایی. دقیقه 20.
  • تیم: در کانال های IT در Slack/mail/etc پیامی در مورد هکاتون با برنامه زمانبندی از ایستگاه خدمات منتشر کنید و یک کانال جداگانه برای هکاتون ایجاد کنید. در آن همه به تیم‌ها تقسیم می‌شوند و کسانی که بلاتکلیف هستند در 5 دقیقه اول هکاتون این کار را انجام می‌دهند. کار پس زمینه، 2 ساعت.
  • نان: شما با دو برنامه نویس کالا را تهیه می کنید، آن را برای رندر به طراح می دهید و آماده دریافت می کنید. کار پس زمینه، 3 روز.
  • هکاتون: شما به دفتر می آیید، در ابتدا همه را هماهنگ می کنید، به دنبال کسب و کار خود می روید، Reddit را می خوانید، مهمتر از همه، هر استراحتی را درباره پیتزای تازه اعلام می کنید، از غروب آفتاب عکس می گیرید، فینال را اعلام می کنید، با هم رای می دهید و برنده را انتخاب می کنید. روز 1.
  • زیر ستاره: البته مدام به این فکر می کنید که همه چیز خوب پیش برود. مطمئناً همه پیام شما را نخواهند دید و بهتر است با برخی حضوری صحبت کنید. البته، اگر کسی به شما کمک کند، همه چیز 2 برابر آسان تر می شود (النا فوق العاده به من کمک کرد).

بخش کمتر خسته کننده در مورد تاریخ هکاتون

چرا 21 آوریل؟ این روز برای ما مهم است. دقیقا یک سال پیش، در 21 آوریل، ما در اولین آخر هفته پس از شروع کمپین تبلیغاتی فدرال زیر بار رفتیم. روز بعد یکشنبه تیم ما از ساعت 8 صبح سر کار بود. سپس یک تابلوی sundayhackathon در Trello ایجاد کردیم و یک هفته شیفت کاری آغاز شد، 12 ساعت در روز. شرایط به قدری بحرانی بود که حتی وقت غذا خوردن نداشتیم و بچه های تیم های دیگر به ما غذا می دادند.

کدیم-پیتزا

شما می توانید داستان مفصل تر را در صفحه فئودور اووچینیکوف (مدیر عامل ما). از آن زمان تا کنون تغییرات زیادی کرده ایم، اما اکنون قطعا تاریخ را فراموش نخواهیم کرد.

امسال به این نتیجه رسیدیم که این رویداد ارزش ماندگاری در یاد و خاطره آیندگان را داشته باشد و طبق بهترین سنت ها اولین هکاتون داخلی در تاریخ دودو را برگزار کردیم که 10 ساعت به طول انجامید.

خسته کننده ترین بخش در مورد پروژه های هکاتون

سلب مسئولیت: تمام توضیحات توسط خود بچه ها نوشته شده است، بنابراین نویسندگی متن متعلق به من نیست.

Oleg Learning (یادگیری ماشینی)

دیما کوچنف، ساشا آندرونوف (@alexandronov)

آنها می خواستند یک شبکه عصبی بسازند که بدون هیچ دانشی مشخص کند که چه نوع پیتزایی در یک عکس وجود دارد. در نتیجه، ما یک بسیار ساده و اسباب‌بازی درست کردیم - 10 پیتزا را تشخیص می‌دهد، ما تقریباً فهمیدیم که همه چیز چگونه کار می‌کند، تا آنجا که ممکن است در یک روز (~ 10 ساعت).

کدیم-پیتزا

به طور خاص، ما متوجه شدیم که صنعت به سطحی رسیده است که یک توسعه‌دهنده معمولی می‌تواند کتابخانه‌های آماده را بگیرد، اسناد را بخواند و شبکه عصبی خود را بدون دانش عمیق از موضوع آموزش دهد. و به اندازه کافی برای حل مشکلات واقعی کار خواهد کرد.

ابزار مورد استفاده:

  • imageai - یک کتابخانه راحت و ساده برای کار با یادگیری ماشین و بینایی کامپیوتر.
  • ما دو مدل را امتحان کردیم - ResNet50، Yolo.
  • کد البته به زبان پایتون نوشته شده بود.

ما 11000 عکس داشتیم، اما تقریباً 3/4 آنها زباله بودند و بقیه دارای زوایای مختلف و نامناسب بودند. در نتیجه، ما یک مدل آماده (که به سادگی می داند چگونه پیتزا پیدا کند) را برداشتیم و با کمک آن سطل زباله را جدا کردیم. بعد، عنوان عکس شامل نام پیتزا بود - بنابراین ما آن را در پوشه‌ها مرتب کردیم، اما معلوم شد که نام‌ها با واقعیت مطابقت ندارند و مجبور شدیم آن را به صورت دستی تمیز کنیم. در نهایت حدود 500-600 عکس باقی مانده بود، معلوم است که این مقدار ناچیز است، اما با این وجود، برای جدا کردن 10 پیتزا از یکدیگر کافی بود.

برای آموزش شبکه، ارزان‌ترین ماشین مجازی Azure را در NVIDIA Tesla K80 گرفتیم. آنها 100 دوره روی آن آموزش دیدند، اما مشخص بود که شبکه پس از 50 دوره بیش از حد اشباع شده است، زیرا یک مجموعه داده کوچک وجود دارد.

در واقع، کل مشکل کمبود داده های خوب است.

کدیم-پیتزا

ممکن است اصطلاحات را کمی اشتباه گرفته باشیم، اما باید در نظر داشته باشیم که اصلاً تجربه ای در کار با همه این موارد نداریم.

رابط کاربری گرافیکی برای NOOBS (کنسول برای سفارش پیتزا)

میشا کوماچف (سریدن، ژنیا بیکینین، ژنیا واسیلیف

ما یک نمونه اولیه از یک برنامه کنسول را برای گیک‌ها گردآوری کرده‌ایم که به لطف آن می‌توانید از طریق ترمینال یا خط فرمان پیتزا سفارش دهید یا حتی آن را در خط لوله استقرار ادغام کنید و پس از انتشار موفقیت‌آمیز، پیتزا را به دفتر تحویل دهید.

کدیم-پیتزا

کار به چندین بخش تقسیم شد: ما متوجه شدیم که API ما برای برنامه های تلفن همراه چگونه کار می کند، CLI خودمان را با استفاده از آن مونتاژ کردیم. اوکلیف و انتشار بسته ای که جمع آوری کردیم را پیکربندی کرد. آخرین کار مربوط به چند دقیقه ناخوشایند تا پایان هکاتون بود. همه چیز به صورت محلی برای ما کار می‌کرد، و حتی نسخه‌های منتشر شده قدیمی بسته کار می‌کردند، اما نسخه‌های جدید (که ویژگی‌ها و شکلک‌های جالب‌تری را اضافه می‌کردند) از کار کردن خودداری کردند. ما حدود 40 دقیقه تلاش کردیم تا بفهمیم چه چیزی اشتباه بوده است، اما در نهایت همه چیز به طور جادویی خود به خود کار کرد).

حداکثر برنامه ما برای هکاتون سفارش واقعی پیتزا به دفتر از طریق CLI ما بود. ما همه چیز را ده ها بار روی میز آزمایش اجرا کردیم، اما وقتی دستورات را وارد تولید کردم، هنوز دستانم می لرزید.

کدیم-پیتزا

در نتیجه بالاخره این کار را کردیم!

کدیم-پیتزا

CourierGo

آنتون بروژملف (نویسنده)، وانیا زورف، گلب لسنیکوف (واحد اندازهگیری ترمودینامیکآندری سارافانوف

ما ایده "برنامه پیک" را گرفتیم.

پیشینه در مورد آماده سازیدر ابتدا، من تعجب کردم که چه نوع ویژگی هایی می تواند در برنامه باشد؟ لیست عملکرد زیر ظاهر شد:

  • برنامه با استفاده از کد وارد صندوق تحویل می شود.
  • برنامه بلافاصله سفارشات موجود و سفارشاتی که باید انجام شوند را نشان می دهد.
  • پیک سفارش را یادداشت می کند و در سفر می برد.
  • زمان تخمینی و اینکه آیا به موقع است یا نه به او نشان داده می شود.
  • به مشتری نشان می دهد که پیک ترک کرده است.
  • مشتری شروع به نشان دادن نقطه پیک روی نقشه و زمان تخمینی می کند.
  • پیک می تواند در چت از برنامه برای مشتری بنویسد.
  • مشتری می تواند از طریق چت از برنامه به پیک بنویسد.
  • پنج دقیقه قبل از ورود، مشتری پیامی دریافت می کند که پیک نزدیک است، آماده باشید.
  • پیک در برنامه یادداشت می کند که وارد شده و منتظر است.
  • پیک با یک کلیک از برنامه تماس می گیرد و گزارش می دهد که (در حال افزایش است، رسیده است و غیره)
  • مشتری سفارش را می پذیرد و یک پین کد از اپلیکیشن یا پیامک برای تایید تحویل وارد می کند.(به عنوان امضا) تا در صورت تاخیر پیک نتواند از قبل تحویل را تکمیل کند.
  • سفارش به عنوان تحویل در سیستم علامت گذاری شده است.

به علاوه چند سناریوی جایگزین:

  • پیک می‌تواند سفارش را به‌عنوان تحویل‌نشده علامت‌گذاری کند و دلیل آن را انتخاب کند.
  • در صورت تأخیر پیک می تواند با یک دکمه از طریق پیامک گواهی الکترونیکی صادر کند. یا در صورت عدم رعایت مهلت تحویل، گواهی به صورت خودکار می رسد.

احساس نوید و ضرورت این پروژه البته انرژی بخش بود.

روز بعد با تیم به ناهار رفتیم و در مورد اینکه حداقل عملکرد برنامه چگونه خواهد بود صحبت کردیم.

در نتیجه، لیست زیر از کارهایی که باید در هکاتون انجام شود تشکیل شد:

  • وارد صندوق تحویل شوید.
  • نمایش موقعیت فعلی
  • ارسال داده ها به یک API خارجی (مختصات، دریافت سفارش، تحویل سفارش).
  • دریافت داده ها از API خارجی (سفارش های پیک فعلی).
  • رویدادی را ارسال کنید که نشان دهد شما سفارش را برای تحویل / تحویل گرفته اید.
  • نمایش موقعیت فعلی پیک بر روی نقشه در وب سایت.

کار اصلی، همانطور که به نظر می رسید، در ایجاد backend، خود برنامه بود (پس از بحث، ReactNative را برای توسعه برنامه یا بهتر بگوییم چارچوب آن را انتخاب کردیم - expo.io، که به شما امکان می دهد اصلاً کد بومی ننویسید). از نظر باطن، در ابتدا امیدی به وانیا زورف وجود داشت، زیرا او در کار با الگوی خدمات ما و k8s (که این شغل را بر عهده گرفت) تجربه داشت. آندری سارافانوف و من ReactNative را برای چرخش انتخاب کردیم.

تصمیم گرفتم بلافاصله یک مخزن کار برای خود پروژه ایجاد کنم. در ساعت 12 شب با این واقعیت مواجه شدم که موقعیت جغرافیایی در پس زمینه در ReactNative به خوبی کار نمی کند، اگر کد بومی ننویسید، کمی ناامید شدم. سپس وقتی متوجه شدم که مستندات فریمورک expo.io را نمی‌خوانم، بلکه ReactNative را می‌خوانم، رها کردم. در نتیجه، در طول شب من قبلاً فهمیدم که چگونه می توانم موقعیت فعلی را در expo.io به دست بیاورم و صفحه های جداگانه بکشم (برای ورود به سیستم، نمایش سفارش و غیره).

کدیم-پیتزا

در صبح در هکاتون، آنها گلب را به پروژه فوق‌العاده امیدوارکننده خود جذب کردند. آنها به سرعت طرحی را ارائه کردند که باید انجام شود.

کدیم-پیتزا

هنگامی که مطابق با الگوی پروژه، سعی کردیم نه از طریق HTTP، بلکه از طریق GRPC ارتباط برقرار کنیم، اشتباه کردیم، زیرا هیچ کس نمی دانست چگونه یک کلاینت GRPC برای جاوا اسکریپت بسازد. در نهایت پس از صرف حدود یک ساعت و نیم روی این موضوع، این ایده را کنار گذاشتیم. به همین دلیل، بچه‌های بک‌اند شروع به بازسازی سرور تمام‌شده از GRPC به WebApi کردند. بعد از نیم ساعت بالاخره توانستیم ارتباط بین برنامه و باطن را برقرار کنیم. اما در همان زمان، گلب تقریباً در حال تکمیل استقرار روی k8s و به علاوه استقرار خودکار یک commit به استاد بود. 🙂

ما MySQL را به‌عنوان ذخیره‌سازی انتخاب کردیم تا حداقل با بانک اطلاعاتی ریسک نکنیم (ما افکاری در مورد CosmosDb داشتیم).

کدیم-پیتزا

به طور خلاصه:

  • اجرای ذخیره مختصات فعلی پیک از برنامه به پایگاه داده.
  • ما RabbitMQ را نصب کردیم و در پیام هایی در مورد دریافت سفارش توسط پیک مشترک شدیم تا بلافاصله سفارش را از پیک در برنامه نمایش دهیم.
  • پس از اینکه پیک دکمه ای را در برنامه فشار داد، زمان تحویل سفارش را در پایگاه داده خود ذخیره کردیم. ما وقت نداشتیم ارسال یک رویداد را به rebbit اضافه کنیم که سفارش تحویل داده شد.
  • من یک نقشه در صفحه سفارش فعلی در وب سایت با موقعیت فعلی پیک ایجاد کردم. اما این عملکرد کمی ناتمام ماند، زیرا پیکربندی CORS در محیط برای دریافت مختصات از سرویس جدید ما ممکن نبود.

M87

روما بوکین، گوشا پولوی (جورجپلوی، آرتیوم تروفیموشکین

ما می‌خواستیم یک ارائه‌دهنده OpenID Connect را پیاده‌سازی کنیم، زیرا در حال حاضر از یک پروتکل احراز هویت طراحی شده خودمان استفاده می‌کنیم و این مشکلاتی را ایجاد می‌کند: کتابخانه‌های مشتری سفارشی، کار ناخوشایند از طرف شرکای خارجی، مشکلات امنیتی احتمالی (بعد از همه) ، OAuth2.0 و OpenID Connect در پیاده سازی مرجع را می توان ایمن در نظر گرفت، اما من در مورد راه حل ما مطمئن نیستم).

کدیم-پیتزا

ما یک سرویس جداگانه شبیه سازی سرویسی برای ذخیره داده های شخصی ساختیم تا یک مدل کوچک Country-Agnostic از یک ارائه دهنده احراز هویت ایجاد کنیم که به یک سرویس جداگانه برای داده های شخصی می رود (این امر در آینده امکان داشتن یک سرویس با که می توان با ثبت حساب در هر کشوری وارد شد و در عین حال با GDPR و سایر قوانین فدرال مطابقت داشت). ما این بخش را نیز مانند ارائه دهنده انجام دادیم و با موفقیت آنها را با یکدیگر پیوند دادیم. در مرحله بعد، لازم بود یک API ایجاد شود که توسط توکن‌های صادر شده توسط ارائه‌دهنده محافظت شود، از درون‌نگری آن‌ها از طریق ارائه‌دهنده پشتیبانی کند و در صورتی که درخواست با خط‌مشی‌های مجوز مطابقت داشت، داده‌های محافظت شده را بازگرداند (ما بررسی می‌کنیم که کاربر طبق طرح حامل احراز هویت شده باشد. ، توکن او شامل یک محدوده مشخص + y کاربر خود مجوزی دارد که اجازه می دهد تماس برقرار شود). این قسمت هم تکمیل شد. آخرین مؤلفه یک کلاینت جاوا اسکریپت بود که یک توکن به آن داده می شد و با کمک آن یک API محافظت شده فراخوانی می کرد. ما وقت نکردیم این قسمت را انجام دهیم. یعنی کل قسمت عملکردی آماده بود، اما قسمت جلویی برای نشان دادن عملکرد کل سیستم آماده نبود.

E-E-E (اسباب بازی)

دیما آفونچنکو، ساشا کونوالوف

ما یک اسباب‌بازی کوچک روی یونکا ساختیم که در آن دست‌های دم‌باز سوسیس روی پیتزا می‌اندازند. اگر سوسیس را اشتباه بپوشید، پیام غم انگیز "رد شد" روی صفحه ظاهر می شود، و اگر همه سوسیس به درستی پوشیده شده باشد، یک واقعیت تصادفی در مورد پیتزا ظاهر می شود.

کدیم-پیتزا

می‌خواستیم با پرتاب گوجه‌فرنگی سطح دومی بسازیم، اما وقت نداشتیم.

کدیم-پیتزا

ادامه کوتاه: چه کسی برنده شد؟

قبل از هکاتون، ما با بچه ها صحبت کردیم و از من پرسیدم که اگر برنده شوند، دوست دارند چه جایزه ای دریافت کنند. معلوم شد که ارزشمندترین جایزه "جاده به غذا" خواهد بود.

کدیم-پیتزا

بنابراین، انتظار دارید به زودی یک بازی با دست هایی که فلفل روی پیتزا می گذارند را معرفی کنیم.

همانطور که یک خواننده توجه ممکن است متوجه شود، تیم "E-E-E (اسباب بازی)" برنده شد. تبریک میگم بچه ها

فقط کاربران ثبت نام شده می توانند در نظرسنجی شرکت کنند. ورود، لطفا.

کدام پروژه را بیشتر دوست داشتید؟

  • Oleg Learning (یادگیری ماشینی)

  • رابط کاربری گرافیکی برای NOOBS

  • CourierGo

  • M87

  • E-E-E

5 کاربر رای دادند. 3 کاربر رای ممتنع دادند.

منبع: www.habr.com

اضافه کردن نظر