Кодим-пицца

Сәлем, Хабр. Біз өзіміздің алғашқы ішкі хакатонымызды стихиялық түрде өткіздік. Мен сіздермен 2 аптадан кейін дайындалу туралы өзімнің азаптарыммен және қорытындыларыммен, сондай-ақ болған жобалармен бөлісуді жөн көрдім.

Кодим-пицца

Маркетингке қызығушылық танытқандар үшін жалықтыратын бөлік

Мен шағын әңгімеден бастайын.

Сәуірдің басы. Біздің кеңседе бірінші MskDotNet қауымдастығы хакатоны өтуде. Татуин шайқасы бұл жолы галактикамызда қызу жүріп жатыр. сенбі. 20 команда. Пицца. Барлығы өте шынайы (дәлелдер). Үрлемелі R2-D2 залда қалқып жүр. Командалар картадағы ең қауіпті жарысты өту үшін ең дұрыс алгоритмдерді жазады. Біз алғашқы жарыстардың басталуын бастап жатырмыз. Печенье мен кофе - құтқарушы. Ұйымдастырушылар мен сенбі күні түскі астан кейін көп адам кетеді деп күткен едік. Бірақ жоқ. 12 сағаттық кодтау артта қалды. Финал. Бірдеңе құлады, бірдеңе басталмайды. Бірақ бәрі бақытты. Біздің команда жеңеді. Біз екі есе бақыттымыз.

Мен Slack-те қуанышымды бөлісіп жатырмын және ойыма: «Біз өзіміздің хакатонымызды өткізуіміз керек». Мен Саша қызмет көрсету станциясына хат жазып жатырмын. Тыныштық.

Таң. Мен кеңседе кофе ішемін. Мен Сашаның арт жағынан келе жатқанын көрдім. «Лиза, бұл керемет! Бізде 21 сәуірде маңызды күн бар. Қанекей мынаны істейік!» WTF!? Сондай тез? А? Не? Сәуір айының ортасында тәжірибеден өту үшін Сыктывкарға ұшуым керек. Және онымен тозаққа! Алайық.

2 апта қалды. Мен ешқашан хакатонның жалғыз ұйымдастырушысы болған емеспін. Ішкі болсын. Мен осы тақырыптағы мақалаларды оқыдым. Қатты. Бірнеше ай қажет. Бірнеше адам керек. Сізге тауар, сыйлықтар, шарттар, кесте, қызығушылық, мақсатты түсіну, бюджеттер туралы ойлану керек. Немесе өмірдің мәнін түсінетін шығар. Мен оны уақытында міндетті түрде орындамаймын. Ал сен оқып, дайындалып жатқанда бір апта өтіп кетіпті. Мақалаларды ұмытып, бірдеңе жасауға кірісетін кез келді.

1 апта ішінде ішкі хакатон өткізуге арналған бақылау парағын алыңыз

  • жоспар: Сіз жайбарақат отырыңыз және хакатонға не істеу керек екенін жазасыз. 30 минут.
  • Мақсаты: Қатысушылар Google Sheets қолданбасында жасағылары келетін жобаларды ұсынады және таңдайды. Негізгі тапсырма, 2 сағат.
  • Кесте: тізеңізде 3 үзіліс пен финалды ескере отырып, уақыттың қысқаша бөлігін жазасыз. 20 минут.
  • Командалар: Slack/mail/etc ішіндегі АТ арналарында қызмет көрсету станциясынан кестемен хакатон туралы хабарды жариялаңыз және хакатон үшін бөлек арна жасаңыз. Онда барлығы командаларға бөлінеді, ал шешім қабылдамағандар мұны хакатонның алғашқы 5 минутында жасайды. Негізгі тапсырма, 2 сағат.
  • Тоқаштар: сіз екі әзірлеушімен тауар ойлап табасыз, оны көрсету үшін дизайнерге бересіз және оны дайын аласыз. Негізгі тапсырма, 3 күн.
  • Хакатон: сіз кеңсеге келесіз, бәрін басынан үйлестіресіз, өз ісіңізбен айналысасыз, Reddit оқыңыз, ең бастысы, жаңа піскен пицца туралы әр үзіліс туралы хабарлаңыз, күннің батқанын суретке түсіріңіз, финалды жариялаңыз, бірге дауыс беріңіз және жеңімпазды таңдаңыз. 1 күн.
  • Жұлдызша астында: Әрине, сіз үнемі бәрі жақсы болатынын ойлайсыз. Әрине, сіздің хабарламаңызды бәрі бірдей көрмейді және кейбіреулермен жеке сөйлескеніңіз дұрыс. Әрине, егер біреу сізге көмектессе, бәрі 2 есе жеңіл болады (маған керемет Алена көмектесті).

Хакатон күні туралы аз қызықсыз бөлігі

Неліктен 21 сәуір? Бұл күн біз үшін маңызды. Тура бір жыл бұрын, 21 сәуірде біз Федералдық жарнамалық науқан басталғаннан кейінгі бірінші демалыста жүктемеге ұшырадық. Келесі күні, жексенбі күні біздің команда таңғы 8-ден бастап жұмыста болды. Содан кейін біз Trello-да жексенбі хакатон тақтасын жасадық және бір апталық ауысымдық жұмыс күніне 12 сағат басталды. Жағдайдың қиын болғаны сонша, тамақ ішуге де үлгермей, бізді басқа командалардың жігіттері тамақтандырды.

Кодим-пицца

Толығырақ оқиғаны мына жерден оқи аласыз Федор Овчинниковтың парақшасы (біздің бас директор). Содан бері біз көп өзгердік, бірақ қазір біз міндетті түрде күнді ұмытпаймыз.

Биылғы жылы біз бұл шараны ұрпақ жадында мәңгі қалдыруға тұрарлық деп шештік және ең жақсы дәстүр бойынша Додо тарихындағы 10 сағатқа созылған бірінші ішкі хакатонды ұйымдастырдық.

Хакатон жобаларының ең қызықсыз бөлігі

Жауапкершіліктен бас тарту: барлық сипаттамаларды жігіттердің өздері жазған, сондықтан мәтіннің авторы менікі емес.

Олег Learning (машина үйрену)

Дима Кочнев, Саша Андронов (@alexandronov)

Олар фотосуреттегі пиццаның қандай екенін білмей-ақ анықтайтын нейрондық желі жасамақ болған. Нәтижесінде біз өте қарапайым және ойыншық жасадық - ол 10 пиццаны таниды, біз бір күнде (~10 сағат) мүмкіндігінше барлығы қалай жұмыс істейтінін шамамен анықтадық.

Кодим-пицца

Атап айтқанда, саланың қарапайым әзірлеуші ​​​​бұл тақырыпты терең білмей-ақ дайын кітапханаларды алып, құжаттаманы оқып, өзінің нейрондық желісін жаттықтыра алатын деңгейге жеткенін түсіндік. Және бұл нақты мәселелерді шешу үшін жеткілікті жақсы жұмыс істейді.

Қолданылатын құралдар:

  • imageai — машиналық оқытумен және компьютерлік көрумен жұмыс істеуге арналған ыңғайлы және қарапайым кітапхана.
  • Біз екі үлгіні қолданып көрдік - ResNet50, Yolo.
  • Код, әрине, Python тілінде жазылған.

Бізде 11000 3 фотосурет болды, бірақ олардың 4/500-і дерлік қоқыс болып шықты, ал қалғандарының әртүрлі, сәйкес емес бұрыштары болды. Нәтижесінде біз дайын үлгіні алдық (ол жай ғана пиццаны қалай табуға болатынын біледі) және оның көмегімен біз қоқысты бөлдік. Әрі қарай, фотосуреттің тақырыбы пиццаның атауын қамтыды - сондықтан біз оны папкаларға бөлдік, бірақ атаулар шындыққа сәйкес келмейтіні анықталды және оны қолымызбен тазалауға тура келді. Соңында шамамен 600-10 фотосурет қалды, бұл шамалы сома екені анық, бірақ соған қарамастан бұл XNUMX пиццаны бір-бірінен бөлуге жеткілікті болды.

Торды үйрету үшін NVIDIA Tesla K80 құрылғысында Azure-дегі ең арзан виртуалды машинаны алдық. Олар оны 100 дәуір бойы жаттықтырды, бірақ шағын деректер жиынтығы болғандықтан, желі 50 дәуірден кейін шамадан тыс қаныққандығы анық болды.

Шын мәнінде, барлық мәселе - жақсы деректердің болмауы.

Кодим-пицца

Біз терминдерді сәл шатастырған шығармыз, бірақ бізде бұл мәселелермен жұмыс істеу тәжірибесі жоқ екенін ескеру керек.

NOOBS үшін GUI (пиццаға тапсырыс беруге арналған консоль)

Миша Кумачев (Ceridan), Женя Биккинин, Женя Васильев

Біз гектерге арналған консольдік қосымшаның прототипін құрастырдық, соның арқасында терминал немесе пәрмен жолы арқылы пиццаға тапсырыс беруге, тіпті оны орналастыру құбырына біріктіруге және сәтті шығарылғаннан кейін кеңсеге пиццаны жеткізуге болады.

Кодим-пицца

Жұмыс бірнеше бөлікке бөлінді: біз мобильді қосымшаларға арналған API қалай жұмыс істейтінін анықтадық, өзіміздің CLI-ді жинадық. оклиф және біз жинаған пакеттің жариялануын теңшедік. Соңғы тапсырма хакатонның соңына қарай бірнеше жағымсыз минуттарды қамтыды. Барлығы біз үшін жергілікті түрде жұмыс істеді, тіпті пакеттің ескі жарияланған нұсқалары да жұмыс істеді, бірақ жаңалары (көбірек керемет мүмкіндіктер мен эмотикондарды қосқан) жұмыс істеуден бас тартты. Біз ненің дұрыс емес екенін анықтауға шамамен 40 минут жұмсадық, бірақ соңында бәрі сиқырлы түрде өздігінен жұмыс істеді).

Біздің хакатонға арналған максималды бағдарламамыз CLI арқылы кеңсеге пиццаға нақты тапсырыс беру болды. Біз сынақ стендінде барлығын ондаған рет жүгірдік, бірақ мен өндіріске командаларды енгізген кезде қолдарым әлі де дірілдеп тұрды.

Кодим-пицца

Нәтижесінде біз мұны жасадық!

Кодим-пицца

CourierGo

Антон Брожмелев (автор), Ваня Зверев, Глеб Лесников (энтропия), Андрей Сарафанов

Біз «Курьерге арналған қолданба» идеясын алдық.

Дайындық туралы мәлімет.Бастапқыда мен қосымшада қандай мүмкіндіктер болуы мүмкін деп ойладым? Келесі функционалдық тізім пайда болды:

  • Қолданба кодты пайдаланып жеткізу кассасына кіреді.
  • Қолданба бірден қол жетімді тапсырыстар мен қабылдануы қажет тапсырыстарды көрсетеді.
  • Курьер тапсырысты белгілеп, оны сапарға алып кетеді.
  • Оған болжамды уақыт және оның уақытында болған-келмегені көрсетіледі.
  • Клиентке курьердің кеткенін көрсетеді.
  • Клиентке картада курьерлік пункт пен болжамды уақыт көрсетіле бастайды.
  • Курьер клиентке қосымшадан чат арқылы жаза алады.
  • Клиент курьерге қосымшадан чат арқылы жаза алады.
  • Келуден бес минут бұрын клиент курьер жақын екендігі туралы хабарлама алады, дайын болыңыз.
  • Курьер өтініште оның келгенін және күтіп тұрғанын белгілейді.
  • Курьер қосымшадан бір рет басу арқылы қоңырау шалып, бұл туралы хабарлайды (өсіп жатыр, келді, т.б.)
  • Клиент тапсырысты қабылдайды және жеткізуді растау үшін өтінімнен немесе SMS-тен PIN-кодты енгізеді.(қол ретінде) Курьер кешігіп қалған жағдайда жеткізуді алдын ала аяқтай алмайды.
  • Тапсырыс жүйеде жеткізілді деп белгіленеді.

Сонымен қатар бірнеше балама сценарийлер:

  • Курьер тапсырысты жеткізілмеген деп белгілеп, себебін таңдай алады.
  • Егер сіз кешігіп қалсаңыз, курьер бір түйме арқылы SMS арқылы электронды анықтама бере алады. Немесе жеткізу мерзімі орындалмаса, сертификат автоматты түрде келеді.

Бұл жобаның уәдесі мен қажеттілігі, әрине, қуат берді.

Келесі күні біз командамен түскі асқа бардық және қолданбаның минималды функционалдығы қандай болатынын талқыладық.

Нәтижесінде хакатонда не істеу керектігінің келесі тізімі қалыптасты:

  • Жеткізу кассасына кіріңіз.
  • Ағымдағы орынды көрсету.
  • Сыртқы API-ге деректерді жіберу (координаттар, тапсырысты алды, тапсырысты жеткізді).
  • Сыртқы API деректерін алыңыз (ағымдағы курьерлік тапсырыстар).
  • Жеткізу/жеткізілген тапсырысты қабылдағаныңызды көрсететін оқиғаны жіберіңіз.
  • Веб-сайттағы картада курьердің ағымдағы орнын көрсетіңіз.

Негізгі жұмыс, көрінгендей, серверді, қосымшаның өзін жасауда жатыр (талқылаулардан кейін біз қосымшаны әзірлеу үшін ReactNative-ті таңдадық, дәлірек айтсақ, оның негізін - expo.io, бұл жергілікті кодты мүлдем жазбауға мүмкіндік береді). Бэкпендіге келетін болсақ, бастапқыда Ваня Зверевте үміт болды, өйткені ол біздің қызмет үлгісімен және k8s (ол бұл жұмысты атқарды) жұмыс жасауда тәжірибелі болды. Андрей Сарафанов екеуміз ReactNative-ді айналдыруға алдық.

Мен жобаның өзі үшін бірден жұмыс репозиторийін жасауға тырысуды шештім. Түнгі 12-де мен фондық режимде геолокация ReactNative-де жақсы жұмыс істемейтінін көрдім, егер сіз жергілікті кодты жазбасаңыз, мен біраз ренжідім. Содан кейін мен expo.io құрылымының емес, ReactNative құжаттамасын оқып жатқанымды түсінген кезде жібердім. Нәтижесінде, кеш барысында мен expo.io сайтындағы ағымдағы позицияны қалай алу керектігін және бөлек экрандарды (логин, тапсырысты көрсету және т.б. үшін) қалай салу керектігін түсіндім.

Кодим-пицца

Таңертең хакатонда олар Глебті өздерінің керемет перспективалы жобасына тартты. Олар тез арада не істеу керектігін жоспарлады.

Кодим-пицца

Біз жоба үлгісіне сәйкес HTTP арқылы емес, GRPC арқылы байланысуға тырысқанда қателестік, өйткені JavaScript үшін GRPC клиентін құруды ешкім білмеді. Ақырында, бұған бір жарым сағаттай уақыт жұмсаған соң, біз бұл идеядан бас тарттық. Осыған байланысты, артқы жағындағы жігіттер дайын серверді GRPC-тен WebApi-ге дейін қайта жасай бастады. Жарты сағаттан кейін біз қолданба мен сервер арасындағы байланысты орната алдық. Бірақ сонымен бірге Глеб k8-ге орналастыруды және оған қоса мастерге міндеттемені автоматты түрде орналастыруды аяқтауға жақын болды. 🙂

Біз MySQL-ті ең болмағанда дерекқорға тәуекел етпеу үшін сақтау ретінде таңдадық (бізде CosmosDb туралы ойлар болды).

Кодим-пицца

Нәтижесінде:

  • Қолданбадан дерекқорға курьердің ағымдағы координаттарын сақтау жүзеге асырылды.
  • Біз RabbitMQ орнаттық және курьерден тапсырысты қолданбада дереу көрсету үшін тапсырысты алып жатқаны туралы хабарламаларға жазылдық.
  • Курьер қолданбадағы түймені басқаннан кейін біз тапсырысты жеткізу уақытын дерекқорымызға сақтай бастадық. Тапсырыс жеткізілді деген реббитке оқиғаны жіберуді қосуға уақытымыз болмады.
  • Мен курьердің ағымдағы орнымен веб-сайттағы ағымдағы тапсырыс бетінде картаны көрсеттім. Бірақ бұл функция сәл аяқталмаған күйінде қалды, өйткені біздің жаңа қызметімізден координаттарды алу үшін ортада CORS конфигурациялау мүмкін болмады.

M87

Рома Букин, Гоша Полевой (Георгеполевой), Артём Трофимушкин

Біз OpenID Connect провайдерін іске асырғымыз келді, өйткені қазіргі уақытта біз өз дизайнымыздың аутентификация протоколын қолданамыз және бұл бірқатар қиындықтарды тудырады: тапсырыс берушінің кітапханалары, сыртқы серіктестер тарапынан ыңғайсыз жұмыс, ықтимал қауіпсіздік мәселелері (ақыр соңында). Анықтамалық іске асырудағы , OAuth2.0 және OpenID Connect қауіпсіз деп санауға болады, бірақ мен шешімімізге сенімді емеспін).

Кодим-пицца

Жеке деректерге арналған бөлек қызметке өтетін аутентификация провайдерінің шағын елдік-агностикалық үлгісін жасау үшін жеке деректерді сақтау қызметін эмуляциялайтын бөлек қызметті жасадық (бұл болашақта бір қызметтің болуын мүмкін етеді). ол кез келген елде тіркелгіні тіркеу арқылы жүйеге кіре алады және сонымен бірге GDPR және басқа федералды заңдарға сәйкес келеді). Біз бұл бөлікті провайдер сияқты орындадық және оларды бір-бірімен сәтті байланыстырдық. Әрі қарай, провайдер шығарған таңбалауыштармен қорғалатын, провайдер арқылы олардың интроспекциясын қолдайтын және сұрау авторизация саясаттарын қанағаттандыратын болса, қорғалған деректерді қайтаратын API құру қажет болды (біз Bearer схемасына сәйкес пайдаланушы аутентификацияланғанын тексереміз) , оның таңбалауышы белгілі бір аумақты қамтиды + y Пайдаланушының өзі қоңырау шалуға мүмкіндік беретін рұқсаты бар). Бұл бөлім де аяқталды. Соңғы компонент JavaScript клиенті болды, оған таңбалауыш беріледі, оның көмегімен ол қорғалған API деп атайды. Бұл бөлімді орындауға уақытымыз болмады. Яғни, бүкіл функционалдық бөлік дайын болды, бірақ алдыңғы бөлік бүкіл жүйенің функционалдығын көрсетуге дайын болмады.

E-E-E (ойыншық)

Дима Афонченко, Саша Коновалов

Біз юнкаға мини-ойыншық жасадық, онда пиццаға қолдар шұжық лақтырады. Егер сіз шұжықты дұрыс қоймасаңыз, экранда қайғылы «Қабылданбаған» хабары пайда болады, ал егер барлық шұжық дұрыс салынған болса, пицца туралы кездейсоқ факт пайда болады.

Кодим-пицца

Біз қызанақ лақтыру арқылы екінші деңгей жасағымыз келді, бірақ бізде уақыт болмады.

Кодим-пицца

Қысқаша жалғасы: кім жеңді?

Хакатон алдында біз жігіттермен сөйлесіп, егер олар жеңсе, қандай сыйлық алғылары келетінін сұрадым. Ең бағалы сыйлық «тамаққа апарар жол» болатыны белгілі болды.

Кодим-пицца

Сондықтан жақын арада пиццаға бұрыш салатын қолдармен ойынды жариялауды күтіңіз.

Мұқият оқырман байқаған болар, «E-E-E (ойыншық)» командасы жеңіске жетті. Құттықтаймыз жігіттер!

Сауалнамаға тек тіркелген пайдаланушылар қатыса алады. Кіру, өтінемін.

Сізге қай жоба көбірек ұнады?

  • Олег Learning (машина үйрену)

  • NOOBS үшін GUI

  • CourierGo

  • M87

  • Ух

5 пайдаланушы дауыс берді. 3 пайдаланушы қалыс қалды.

Ақпарат көзі: www.habr.com

пікір қалдыру