Кадзім-піца

Прывітанне, Хабр. Мы спантанна правялі першы ўнутраны хакатон. Вырашыла падзяліцца з вамі сваімі болямі і вывадамі аб падрыхтоўцы да яго за 2 тыдні, а таксама праектамі, якія атрымаліся.

Кадзім-піца

Сумная частка для тых, хто цікавіцца маркетынгам

Пачну з маленькай гісторыі.

Пачатак красавіка. У нашым офісе праходзіць першы хакатон MskDotNet Community. Бітва за Татуін у разгары, у нашай галактыцы на гэты раз. Субота. 20 каманд. Піца. Усё вельмі душэўна (пруфы). Надзіманы R2-D2 маячыць па зале. Каманды пішуць самыя правільныя алгарытмы, каб прайсці самую небяспечную гонку на мапе. Зрушваем запуск першых заездаў. Пячонкі і кава ратуюць. Мы з арганізатарамі чакалі, што ў суботу шмат хто сыдзе пасля абеду. Але не. 12 гадзін кодінга ззаду. Фінал. Нешта адвальваецца, нешта не запускаецца. Але ўсё шчаслівыя. Перамагае наша каманда. Мы шчаслівыя ўдвая.

Дзялюся радасцю ў Slack і ў галаву прыходзіць ідэя: "Трэба зрабіць свой хакатон". Пішу нашаму СТА Сашы. Цішыня.

Раніца. П'ю каву ў офісе. Бачу надыходзячага з-за спіны Сашу. «Ліза, гэта ж выдатна! У нас якраз 21 красавіка важная дата. Давай рабіць!» WTF!? Так хутка? А? Што? Мне трэба ляцець у Сыктыўкар на стажыроўку ў сярэдзіне красавіка. Ды і чорт з ім! Давай.

Застаецца 2 тыдні. Я ніколі не была аднаасобным арганізатарам хакатона. Няхай і ўнутранага. Чытаю артыкулы на гэтую тэму. Бляха. Трэба некалькі месяцаў. Трэба некалькі чалавек. Трэба прадумаць мерч, прызы, умовы, расклад, зацікавіць, зразумець мэту, бюджэты. А можа, нават разабрацца ў сэнсе жыцця. Я сапраўды не паспею. І пакуль ты чытаў і рыхтаваўся, ужо тыдзень прайшоў. Самы час забіць на артыкулы і пачаць нешта рабіць.

Ловіце наш чэкліст правядзення ўнутранага хакатона за 1 тыдзень

  • план: спакойна садзішся і пішаш спіс таго, што неабходна зрабіць для хакатона. 30 хвілін.
  • Задача: удзельнікі самі прапануюць і выбіраюць праекты, якія хочуць стварыць у Google Sheets. Фонавая задача, 2 гадзіны.
  • Расклад: на каленцы пішаш кароткую разбіўку па часе з улікам 3 перапынкаў і фіналу. 20 хвілін.
  • каманды: публікуеш паведамленне пра хакатон з раскладам ад СТА ў IT-каналах у Slack/пошце/etc і ствараеш асобны канал для хакатона. У ім усё разбіваюцца на каманды, а нявызначаныя робяць гэта ў першыя 5 хвілін хакатона. Фонавая задача, 2 гадзіны.
  • Плюшкі: прыдумляеш мерч з двума распрацоўшчыкамі, аддаеш дызайнеру ў адмалёўку, атрымліваеш гатовы. Фонавая задача, 3 дні.
  • Хакатон: прыходзіш у офіс, каардынуеш усіх у пачатку, займаешся сваімі справамі, чытаеш Reddit, з важным выглядам паведамляеш кожны перапынак пра свежую піцу, фатаграфуеш заход, аб'яўляеш пра фінал, разам галасуеце і выбіраеце пераможцу. 1 дзень.
  • Пад зорачкай: вядома, ты ўвесь час думаеш аб тым, каб усё прайшло добра. Вядома, не ўсе ўбачаць тваё паведамленне і з некаторымі лепш паразмаўляць асабіста. Вядома, калі табе будзе нехта дапамагаць, усё стане ў 2 разы прасцей (мне дапамагала выдатная Алёна).

Менш сумная частка пра дату хакатона

Чаму 21 красавіка? Гэты дзень значны для нас. Роўна год таму, 21 красавіка мы ўпалі пад нагрузкай падчас першых выходных пасля старту Федэральнай Рэкламнай Кампаніі. На наступны дзень, у нядзелю, нашая каманда была на працы з 8 раніцы. Тады мы стварылі ў Trello дошку sundayhackathon і пачаўся тыдзень пазменнай працы па 12 гадзін у дзень. Становішча было настолькі крытычным, што нам некалі было нават есці і нас падкормлівалі хлопцы з іншых каманд.

Кадзім-піца

Больш дэталёвы аповяд вы можаце прачытаць на старонцы Фёдара Аўчыннікава (нашага СЕА). З тых часоў, мы шматлікае памянялі, але дату зараз сапраўды не забудземся.

У гэтым годзе мы вырашылі, што гэтую падзею варта ўвекавечыць у памяці нашчадкаў і ў лепшых традыцыях зладзілі першы ў гісторыі Дадо ўнутраны хакатон, які доўжыўся 10 гадзін.

Самая нянудная частка пра праекты хакатона

Disclaimer: усе апісанні пісалі самі хлопцы, так што аўтарства тэксту не маё.

Алег Лёрнінг (машын лернінг)

Дзіма Кочнеў, Саша Андронаў (@alexandronov)

Хацелі зрабіць нейрасетку, якая б вызначала што за піца на фатаграфіі без якіх-небудзь ведаў. У выніку зрабілі вельмі простую і цацачную - яна распазнае 10 піц, прыкладна разабраліся як усё ўладкована, наколькі гэта магчыма за дзень (~10 гадзін).

Кадзім-піца

У прыватнасці, мы зразумелі, што індустрыя дайшла да ўзроўню, калі звычайны распрацоўшчык можа ўзяць гатовыя бібліятэкі, прачытаць дакументацыю і навучыць сваю нейрасетку без глыбокіх ведаў прадмета. І яна будзе дастаткова добра працаваць для вырашэння рэальных задач.

Інструменты, якія выкарыстоўвалі:

  • imageai - Зручная і простая бібліятэка для працы з машынным навучаннем і кампутарным зрокам.
  • Мадэлі паспрабавалі дзве ResNet50, Yolo.
  • Код пісалі, зразумела, на пітоне.

У нас было 11000 фотак, але сярод іх амаль 3/4 аказаліся смеццем, а ў астатніх – розныя, непрыдатныя ракурсы. У выніку мы ўзялі гатовую мадэль (якая проста ўмее знаходзіць піцу) і з яе дапамогай аддзялілі самы трэш. Далей, у назве фоткі была назва піцы - так мы расклалі па тэчках, але аказалася, што назвы не супадаюць з рэчаіснасцю і тут ужо прыйшлося рукамі падчысціць. У выніку засталося каля 500-600 фота, зразумела, што гэта нікчэмная колькасць, але тым не менш, гэтага аказалася дастаткова, каб аддзяліць 10 піц адну ад іншай.

Для навучання сеткі ўзялі самую танную віртуалку ў Azure на NVIDIA Tesla K80. На ёй навучалі ў 100 эпох, але было бачна, што сетка перанасыцілася ўжо пасля 50 эпох, з-за таго, што быў маленькі датасет.

Уласна - уся праблема ў адсутнасці добрых дадзеных.

Кадзім-піца

Мы, магчыма, крыху наблыталі ў тэрмінах, але трэба ўлічваць, што ў нас увогуле няма досведу ў працы з усімі гэтымі справамі.

GUI for NOOBS (кансолька для замовы піцы)

Міша Кумачоў (Ceridan), Жэня Бікінін, Жэня Васільеў

Мы сабралі прататып кансольнага прыкладання для гікаў, дзякуючы якому можна замовіць піцу праз тэрмінал ці камандны радок, ці нават убудаваць у deploy pipeline і пры паспяховым рэлізе дастаўляць піцу ў офіс.

Кадзім-піца

Праца разбілася на некалькі частак: разбіраліся, як уладкованы наш API для мабільных прыкладанняў, збіралі свой уласны CLI з дапамогай oclif і настройвалі публікацыю сабранага намі пакета. З апошняй задачай было звязана некалькі непрыемных хвілін бліжэй да канца хакатона. У нас усё працавала лакальна і нават працавалі старыя апублікаваныя версіі пакета, але новыя (у якіх было дададзена больш клёвых фіч і смайлікаў) працаваць адмаўляліся. Мы патрацілі хвілін 40, каб зразумець, што ж пайшло не так, але ў выніку ўсё магічным чынам само зарабіла).

Нашай праграмай максімум на хакатон быў сапраўдны заказ піцы ў офіс праз нашу CLI. Мы дзясятак разоў усё праганялі на тэставым стэндзе, але ў мяне ўсё роўна трэсліся рукі, калі я забіваў каманды на продзе.

Кадзім-піца

Як вынік - мы ўсё ж зрабілі гэта!

Кадзім-піца

CourierGo

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

Узялі ідэю "Дадатак для кур'ера".

Перадгісторыя пра падрыхтоўку.Першапачаткова я прыкінуў, а якія ўвогуле фічы могуць быць у дадатку? Узнік прыкладна такі спіс функцыяналу:

  • Дадатак лагініцца ў касу дастаўкі па кодзе.
  • У дадатку адразу бачныя даступныя замовы, замовы якія трэба браць.
  • Кур'ер адзначае замову і бярэ ў паездку.
  • Яму паказваецца разліковы час і паспявае ён ці не.
  • Кліенту паказвае, што кур'ер выехаў.
  • Кліенту пачынае паказваць кропку кур'ера на карце і разліковы час.
  • Кур'ер можа напісаць кліенту ў чат з прыкладання.
  • Кліент можа напісаць кур'еру ў чат з прыкладання.
  • За пяць хвілін да прыезду кліенту прыходзіць паведамленне, што кур'ер блізка, будзьце гатовыя.
  • Кур'ер адзначае ў дадатку, што ён пад'ехаў і чакае.
  • Кур'ер тэлефануе з дадатку адным клікам і паведамляе, што (паднімаецца, падышоў і да т.п.)
  • Кліент прымае заказ і ўводзіць пінкод з прыкладання або СМС для пацверджання дастаўкі. (як подпіс) Каб кур'ер не мог завяршыць дастаўку загадзя, калі спазняецца.
  • Заказ адзначаецца ў сістэме дастаўленым.

Плюс пара альтэрнатыўных сцэнарыяў:

  • Кур'ер можа адзначыць заказ недастаўленым і выбраць прычыну.
  • Кур'ер пры спазненні можа выдаць адной кнопкай электронны сертыфікат праз СМС. Або сертыфікат прыходзіць аўтаматам пры незахаванні тэрміна дастаўкі.

Адчуванне перспектыўнасці і патрэбнасці дадзенага праекту, вядома зараджала.

На наступны дзень схадзілі з камандай на абед і абмеркавалі, як будзе выглядаць мінімальны функцыянал дадатку.

У выніку ўтварыўся наступны спіс таго, што трэба было паспець зрабіць на хакатоне:

  • Лагін у касу дастаўкі.
  • Паказвае бягучае становішча.
  • Адправіць дадзеныя ў знешнюю апі (каардынаты, узяў заказ, даставіў заказ).
  • Атрымаць дадзеныя з вонкавага апі (бягучыя заказы кур'ера).
  • Адправіць эвент аб тым што ўзяў замову на дастаўку/даставіў.
  • Паказвае бягучае становішча кур'ера на карце ў сайце.

Асноўная праца, як бачылася, мелася быць у стварэнні бэкенда, самога прыкладанні (пасля абмеркаванняў абралі ReactNative для распрацоўкі прыкладання, дакладней абвязку над ім — expo.io, якая дазваляе наогул не пісаць натыўнага кода). У плане бэкенда першапачаткова была надзея на Ваню Зверава, як дасведчанага ў працы з нашым шаблонам сэрвісу і k8s (якую працу на сябе ён і ўзяў). ReactNative ўзялі пакратаць я і Андрэй Сарафанаў.

Я вырашыў спрабаваць адразу стварыць працоўны рэпазітар для самога праекту. У 12 ночы я натыкнуўся, на тое, што ў ReactNative дрэнна працуе геолокация ў бэкграўндзе, калі не пісаць натыўны код, крыху фрустраваўся. Потым адпусціла, калі зразумеў, што чытаю дакументацыю не expo.io фрэймворка, а ReactNative. У выніку за вечар мне ўжо было зразумела, як атрымаць у expo.io бягучае становішча, і маляваць асобныя экраны (для лагіна, адлюстраванні замовы і да т.п.).

Кадзім-піца

З раніцы на хакатоне прыцягнулі Глеба ў свой звышперспектыўны праект. Хутка накідалі план таго, што трэба зрабіць.

Кадзім-піца

Здзейснілі памылку, калі ў адпаведнасці з шаблонам праекту спрабавалі зрабіць зносіны не праз HTTP, а праз GRPC, бо ніхто не ўмеў збіраць GRPC-кліента для JavaScript. У выніку, патраціўшы на гэта прыкладна паўтары гадзіны, кінулі гэтую ідэю. З-за гэтага хлопцы і на беку пачалі перарабляць гатовы сервер з GRPC на WebApi. Праз падлогу гадзіны, нарэшце, мы змаглі наладзіць зносіны прыкладання з бэкендом, пра цуд. Але ў гэты ж час Глеб амаль дабіваў дэплой у k8s і плюс аўтадэплой па коміце ў майстар. 🙂

Як сховішча мы абралі MySQL каб не рызыкаваць хаця б з базай (былі думкі пра CosmosDb).

Кадзім-піца

У выніку:

  • Рэалізавалі захаванне бягучых каардынат кур'ера з дадатку ў базу.
  • Прыкруцілі RabbitMQ і падпісаліся на паведамленні аб узяцці кур'ерам замовы, каб адразу ж адлюстроўваць замову ў кур'ера ў дадатку.
  • Пачалі захоўваць сабе ў базу час аб дастаўцы замовы, пасля таго як кур'ер націскаў кнопку ў дадатку. Не паспелі дадаць адпраўку падзеі назад у рабіт аб тым, што замова дастаўлены.
  • Я зрабіў паказ карты на старонцы currentorder на сайце з бягучым палажэннем кур'ера. Але гэты функцыянал застаўся ледзь-ледзь недаробленым, бо на асяроддзі не атрымалася наладзіць CORS для атрымання каардынат з нашага новага сэрвісу.

M87

Рома Букін, Гоша Палявы (georgepolevoy), Арцём Трафімушкін

Мы жадалі рэалізаваць OpenID Connect правайдэр, бо на дадзены момант у нас выкарыстоўваецца пратакол аўтэнтыфікацыі ўласнай распрацоўкі, і гэта стварае шэраг цяжкасцяў: кастамныя кліенцкія бібліятэкі, няёмкая праца са боку вонкавых партнёраў, магчыма праблемы з бяспекай (усёткі OAuth2.0 і OpenID Connect у эталоннай рэалізацыі можна лічыць бяспечнымі, а вось наконт нашага рашэння - я не ўпэўнены).

Кадзім-піца

Мы зрабілі асобны сэрвіс, які эмулюе сэрвіс захоўвання персанальных дадзеных, каб стварыць маленькую мадэль Country-Agnostic правайдэра аўтэнтыфікацыі, які хадзіў бы па персанальныя дадзеныя ў асобны сэрвіс (гэта ў перспектыве дало б магчымасць мець адзін сэрвіс, з дапамогай якога можна было б залагініцца з уліковай запісам у любой краіне, і пры гэтым адпавядаць GDPR і іншым ФЗ). Гэтую частку мы зрабілі, як і правайдэр, і паспяхова іх увязалі адзін з адным. Далей трэба было зрабіць API, які быў бы абаронены токенамі, якія выдае правайдэр, падтрымліваць іх інтраспекцыю праз правайдэр і аддаваць абароненыя дадзеныя, калі запыт задавальняў бы палітыкам аўтарызацыі (правяраем, што карыстач аўтэнтыфікаваны па схеме Bearer, у яго токене ўтрымоўваецца вызначаны самога карыстача ёсць пермішэн, які дазваляе выкананне выкліку). Гэтая частка таксама была выканана. Апошнім кампанентам быў JavaScript кліент, якому выдаваўся б токен, з дапамогай якога той выклікаў бы абаронены API. Гэтую частку мы зрабіць не паспелі. Гэта значыць была гатова ўся функцыянальная частка, але не была гатова фронт-эндная частка для дэманстрацыі працаздольнасці ўсёй сістэмы.

Э-Э-Э (цацка)

Дзіма Афончанка, Саша Канавалаў

Мы зрабілі міні-цацку на юньку дзе жвавыя ручкі накідваюць каўбаску на піцу. У выпадку, калі ты няправільна накінуў каўбаску, на экране з'яўляецца сумны надпіс "Забракавана", а ў выпадку, калі ўся каўбаска накінута правільна, то з'яўляецца выпадковы факт аб піцы.

Кадзім-піца

Хацелі зрабіць другі ўзровень з накідваннем таматаў, але не паспелі.

Кадзім-піца

Кароткі працяг: хто ж перамог?

Перад хакатонам мы размаўлялі з хлопцамі і я пыталася, які прыз яны хацелі б атрымаць, калі выйграюць. Аказалася, што самым каштоўным прызам будзе "дарога ў прод".

Кадзім-піца

Таму, у хуткім часе чакайце ад нас анонс гульні з ручкамі, якія накідваюць пеперонькі на піцу.

Як мог заўважыць уважлівы чытач, перамагла каманда "Э-Э-Э (цацка)". Віншуем хлопцаў!

Толькі зарэгістраваныя карыстачы могуць удзельнічаць у апытанні. Увайдзіце, Калі ласка.

Які праект вам больш спадабаўся?

  • Алег Лёрнінг (машын лернінг)

  • GUI for NOOBS

  • CourierGo

  • M87

  • Э-Э-Э

Прагаласавалі 5 карыстальнікаў. Устрымаліся 3 карыстальніка.

Крыніца: habr.com

Дадаць каментар