Қалай және неге біз Urban Tech Challenge хакатонында Big Data трелігін жеңіп алдық

Менің атым Дмитрий. Мен біздің команданың Big Data трегінде Urban Tech Challenge хакатонының финалына қалай жеткені туралы айтқым келеді. Бірден айта кетейін, бұл мен қатысқан бірінші хакатон емес және жүлде алған алғашқы хакатон емес. Осыған байланысты, мен өзімнің әңгімемде жалпы хакатон индустриясына қатысты кейбір жалпы ескертулер мен қорытындыларды айтқым келеді және Urban Tech Challenge (үшін) аяқталғаннан кейін бірден желіде пайда болған теріс пікірлерге қарсы өз көзқарасымды айтқым келеді мысал бұл).

Сондықтан алдымен кейбір жалпы ескертулер.

1. Кейбір адамдар хакатонды ең жақсы кодерлер жеңетін спорттық жарыс деп санайтыны таңқаларлық. Бұл олай емес. Мен хакатонды ұйымдастырушылардың өздері не қалайтынын білмейтін жағдайларды қарастырмаймын (мен де көрдім). Бірақ, әдетте, хакатонды ұйымдастыратын компания өз мақсаттарын көздейді. Олардың тізімі әртүрлі болуы мүмкін: бұл кейбір мәселелердің техникалық шешімі, жаңа идеялар мен адамдарды іздеу және т.б. Бұл мақсаттар көбінесе іс-шараның форматын, оның уақытын, онлайн/офлайн режимін, тапсырмалардың қалай тұжырымдалатынын (және олар мүлде тұжырымдалатынын), хакатонда кодты қараудың болатындығын және т.б. анықтайды. Командалар да, олардың істегендері де осы тұрғыдан бағаланады. Ал компанияға қажетті нүктеге жақсы жеткен командалар жеңіске жетеді және көбісі спорттық жарысқа қатысып жатырмын деп ойлап, бұл нүктеге мүлдем бейсаналық және кездейсоқ жетеді. Менің байқауым көрсеткендей, қатысушыларды ынталандыру үшін ұйымдастырушылар кем дегенде спорттық ортаның сыртқы түрін және тең жағдай жасауы керек, әйтпесе олар жоғарыдағы шолудағыдай теріс толқынды алады. Бірақ біз шегінеміз.

2. Осыдан мынадай қорытынды шығады. Ұйымдастырушылар хакатонға қатысушылардың өз жұмыстарымен келуіне қызығушылық танытады, кейде бұл үшін арнайы онлайн хат алмасу кезеңін де ұйымдастырады. Бұл күштірек шығыс шешімдеріне мүмкіндік береді. «Өз жұмысы» ұғымы өте салыстырмалы; кез келген тәжірибелі әзірлеуші ​​өзінің бірінші міндеттемесінде өзінің ескі жобаларынан мыңдаған код жолдарын жинақтай алады. Ал бұл алдын ала дайындалған әзірлеме бола ма? Бірақ кез келген жағдайда, мен әйгілі мем түрінде айтқан ереже қолданылады:

Қалай және неге біз Urban Tech Challenge хакатонында Big Data трелігін жеңіп алдық

Жеңіске жету үшін сізде қандай да бір бәсекелестік артықшылық болуы керек: бұрын жасаған ұқсас жоба, белгілі бір тақырыптағы білім мен тәжірибе немесе хакатон басталғанға дейін дайын жұмыс. Иә, бұл спорт емес. Иә, бұл жұмсалған күш-жігерге тұрарлық емес болуы мүмкін (мұнда әркім 3 мың жүлде үшін түнде 100 апта кодтауға тұрарлық па, соны бүкіл командаға бөлінген, тіпті оны алмау қаупі бар ма) өзі шешеді. Бірақ, көбінесе, бұл алға шығудың жалғыз мүмкіндігі.

3. Топты таңдау. Хакатон чаттарында байқағанымдай, көпшілігі бұл мәселеге немқұрайлы қарайды (бірақ бұл хакатондағы нәтижеңізді анықтайтын ең маңызды шешім). Көптеген қызмет салаларында (спортта да, хакатонда да) мен күшті адамдар күштімен, әлсіздер әлсізмен, ақылдылар ақылдылармен бірігетінін көрдім, жақсы, жалпы, сіз идеяны түсінесіз ... Чаттарда шамамен осылай болады: әлсіз программистер олар бірден ілінеді, хакатон үшін құнды дағдылары жоқ адамдар чатта ұзақ уақыт ілінеді және оны біреу қабылдаса деген принцип бойынша команда таңдайды. . Кейбір хакатондарда командаларға кездейсоқ тағайындау тәжірибесі қолданылады және ұйымдастырушылар кездейсоқ командалар бұрыннан бар командалардан жаман емес деп мәлімдейді. Бірақ менің байқауымша, мотивацияланған адамдар, әдетте, команданы өздері табады, егер біреу тағайындалуы керек болса, онда көбінесе олардың көпшілігі хакатонға келмейді.

Команданың құрамына келетін болсақ, бұл өте жеке және тапсырмаға өте тәуелді. Мен минималды өміршең команда құрамын дизайнер деп айта аламын - фронт-end немесе front-end - back-end. Бірақ мен тек фронт-эндерлерден тұратын командалар жеңіске жеткен, олар node.js-де қарапайым бэк-энд қосқан немесе React Native-де мобильді қосымша жасаған жағдайларды білемін; немесе қарапайым орналасуды жасаған қолдаушылардан ғана. Жалпы, бәрі өте жеке және тапсырмаға байланысты. Менің хакатонға команда таңдау жоспарым келесідей болды: мен команда жинауды немесе front-end - back-end - дизайнер сияқты командаға қосылуды жоспарладым (мен өзім фронт-эндмін). Бізге қосылуға шақыруды қабылдаған питон серверімен және дизайнермен тез сөйлесе бастадым. Біраз уақыттан кейін бізге хакатонда жеңіске жету тәжірибесі бар бизнес-аналитик қыз қосылды, бұл оның бізге қосылу мәселесін шешті. Қысқа кездесуден кейін біз фантастикалық төрттікке ұқсастық бойынша өзімізді U4 (URBAN 4, қалалық төрт) деп атауды шештік. Олар тіпті біздің телеграм каналымыздың аватарына сәйкес суретті де қойды.

4. Тапсырманы таңдау. Жоғарыда айтқанымдай, сізде бәсекелестік артықшылық болуы керек, хакатонға тапсырма осының негізінде таңдалады. Осыған сүйене отырып, қарап шықты тапсырмалар тізімі және олардың күрделілігін бағалай отырып, біз екі тапсырманы орындадық: DPiIR инновациялық кәсіпорындар каталогы және EFKO чатботы. DPIiR тапсырмасын қолдаушы таңдады, EFKO тапсырмасын мен таңдадым, себебі node.js және DialogFlow жүйелерінде чат-боттарды жазу тәжірибесі болды. EFKO тапсырмасы ML-ді де қамтыды; менің ML-де біршама, өте кең емес тәжірибем бар. Ал мәселенің шарттарына сәйкес, маған оны ML құралдарын қолдану арқылы шешу екіталай болып көрінді. Бұл сезім Urban Tech Challenge кездесуіне барған кезде күшейе түсті, онда ұйымдастырушылар маған EFKO туралы деректер жинағын көрсетті, онда өнім макеттерінің 100-ге жуық фотосуреттері (әр түрлі бұрыштардан түсірілген) және орналасу қателерінің 20-ға жуық класы бар. Сонымен қатар, тапсырмаға тапсырыс бергендер классификацияның 90% табыстылық деңгейіне қол жеткізгісі келді. Нәтижесінде мен ML-сіз шешімнің презентациясын дайындадым, бэкендер каталог негізінде презентация дайындады және бірге презентацияларды аяқтағаннан кейін біз оларды Urban Tech Challenge-ге жібердік. Қазірдің өзінде осы кезеңде әр қатысушының ынта деңгейі мен қосқан үлесі анықталды. Дизайнеріміз талқылауларға қатыспады, кеш жауап берді, тіпті соңғы сәтте тұсаукесерде өзі туралы ақпаратты толтырды, жалпы, күмән пайда болды.

Нәтижесінде біз DPiIR тапсырмасын тапсырдық және EFKO-дан өте алмағанымызға мүлде ренжіген жоқпыз, өйткені тапсырма бізге біртүрлі болып көрінді, жұмсақтап айтқанда.

5. Хакатонға дайындық. Ақыры хакатонға қатысуға рұқсат алғанымыз белгілі болған соң, дайындықты бастадық. Бұл жерде мен хакатон басталардан бір апта бұрын код жазуды ұсынбаймын. Кем дегенде, сізде құралдарды конфигурацияламай-ақ және хакатонда алғаш рет көруді шешкен кейбір lib қателеріне тап болмай, бірден жұмыс істей бастауға болатын қазандық дайын болуы керек. Мен хакатонға келіп, жобаны құрастыруға 2 күн жұмсаған бұрыштық инженерлер туралы оқиғаны білемін, сондықтан бәрін алдын-ала дайындау керек. Біз жауапкершілікті келесідей бөлуді көздедік: сервер интернетті тексеріп, барлық жиналған ақпаратты дерекқорға салатын тексеріп шығушыларды жазады, ал мен осы дерекқорды сұрайтын және деректерді алдыңғы жаққа жіберетін node.js ішінде API жазамын. Осыған байланысты мен экспресс.js көмегімен серверді алдын ала дайындап, реакцияда фронталды дайындадым. Мен CRA қолданбаймын, мен әрқашан өзім үшін веб-пакетті реттеймін және бұл қандай қауіп төндіретінін жақсы білемін (бұрыштық әзірлеушілер туралы оқиғаны есте сақтаңыз). Осы кезде мен дизайнерден интерфейс үлгілерін немесе кем дегенде макеттерді сұрадым. Теориялық тұрғыдан ол да өз дайындығын жасап, бізбен үйлестіруі керек, бірақ мен ешқашан жауап алмадым. Нәтижесінде дизайнды ескі жобаларымның бірінен алдым. Бұл жобаның барлық стильдері бұрыннан жазылғандықтан, ол тезірек жұмыс істей бастады. Бұдан шығатын қорытынды: дизайнер әрқашан командаға қажет емес))). Біз хакатонға осы оқиғалармен келдік.

6. Хакатондағы жұмыс. Мен өз командамды алғаш рет тікелей эфирде Орталық тарату орталығындағы хакатонның ашылуында көрдім. Біз кездесіп, мәселені шешу жолдары мен жұмыс кезеңдерін талқыладық. Ашылғаннан кейін Қызыл Октябрьге автобуспен бару керек болса да, сағат 9.00-ге дейін жетуге келісіп, үйге ұйықтауға кеттік. Неліктен? Ұйымдастырушылар қатысушылардан барынша пайда алғысы келген сияқты, сондықтан олар дәл осындай кестені ұйымдастырды. Бірақ менің тәжірибемде сіз бір түн ұйықтамай-ақ кодтай аласыз. Екіншісіне келетін болсақ, мен сенімді емеспін. Хакатон - бұл марафон, сіз өз күшіңізді дұрыс есептеп, жоспарлауыңыз керек. Оның үстіне бізде дайындық болды.

Қалай және неге біз Urban Tech Challenge хакатонында Big Data трелігін жеңіп алдық

Сондықтан, ұйықтап болған соң, сағат 9.00-де біз Dewocracy-дің алтыншы қабатында отырдық. Содан дизайнеріміз күтпеген жерден ноутбук жоқ екенін және үйде отырып жұмыс істейтінін, телефон арқылы сөйлесетінін хабарлады. Бұл соңғы тамшы болды. Осылайша, біз команда атын өзгертпесе де, төрттен үшке айналдық. Тағы да, бұл біз үшін үлкен соққы емес, менде ескі жобаның дизайны болды. Жалпы, бастапқыда бәрі қалыпты және жоспарға сәйкес өтті. Біз дерекқорға (біз neo4j пайдалануды шештік) ұйымдастырушылардан инновациялық компаниялардың деректер жинағын жүктедік. Мен теруді бастадым, содан кейін node.js файлын алдым, содан кейін нәрселер дұрыс істемей бастады. Мен бұрын ешқашан neo4j-мен жұмыс істеген емеспін және алдымен осы дерекқор үшін жұмыс істейтін драйверді іздедім, содан кейін мен сұрауды қалай жазу керектігін түсіндім, содан кейін бұл дерекқордың сұралған кезде, нысандарды қайтаратынына таң қалдым. түйін объектілерінің массивінің пішіні және олардың шеттері. Анау. Мен ұйымды және ол туралы барлық деректерді СТН бойынша сұрағанымда, бір ұйым нысанының орнына маған осы ұйым және олардың арасындағы байланыстар туралы деректері бар нысандардың ұзын массиві қайтарылды. Мен бүкіл массив арқылы өтіп, барлық нысандарды ұйымына сәйкес бір нысанға жапсыратын карта құрастырушыны жаздым. Бірақ шайқаста 8 мың ұйымның деректер базасын сұраған кезде ол өте баяу орындалды, шамамен 20-30 секунд. Мен оңтайландыру туралы ойлана бастадым ... Содан кейін біз уақытында тоқтап, MongoDB-ге ауыстық, бұл бізге 30 минуттай кетті. Барлығы neo4j-де 5 сағатқа жуық уақыт жоғалды.

Есіңізде болсын, ешқашан технологиямен таныс емес хакатонға бармаңыз, тосын сыйлар болуы мүмкін. Бірақ, жалпы алғанда, бұл сәтсіздіктен басқа, бәрі жоспар бойынша өтті. 9 желтоқсан күні таңертең бізде толық жұмыс істейтін өтініш болды. Күннің қалған бөлігінде біз оған қосымша мүмкіндіктер қосуды жоспарладық. Болашақта мен үшін бәрі салыстырмалы түрде біркелкі болды, бірақ бэкендер іздеу жүйелерінде, заңды тұлғалардың агрегаторларының спамдарында іздеушілеріне тыйым салумен байланысты көптеген мәселелерге тап болды, олар сұрау кезінде іздеу нәтижелерінің бірінші орындарында пайда болды. әрбір нақты компания үшін. Бірақ бұл туралы оның өзі айтқаны жақсы. Мен қосқан бірінші қосымша функция толық аты бойынша іздеу болды. ВКонтакте бас директоры. Бірнеше сағатқа созылды.

Сонымен, біздің өтінімдегі компанияның бетінде бас директордың аватары, оның ВКонтакте парақшасына сілтеме және басқа да деректер пайда болды. Бұл торттағы жақсы шие болды, бірақ ол бізге жеңіс сыйламаған шығар. Содан кейін мен аналитика жүргізгім келді. Бірақ опцияларды ұзақ іздегеннен кейін (UI-де көптеген нюанстар болды), мен экономикалық белсенділік коды бойынша ұйымдарды ең қарапайым біріктіру туралы шешім қабылдадым. Кешке, соңғы сағаттарда мен инновациялық өнімдерді көрсетуге арналған үлгіні дайындадым (біздің қолданбада Өнімдер мен қызметтер бөлімі болуы керек), бірақ сервер бұған дайын емес еді. Сонымен қатар, деректер базасы секіріп, шектен шығып кетті, сканерлер жұмысын жалғастырды, бэкендер инновациялық мәтіндерді жаңашыл емес мәтіндерден ажырату үшін NLP-пен тәжірибе жасады))). Бірақ соңғы тұсаукесер уақыты жақындап қалды.

7. Презентация. Өз тәжірибемнен айта аламын, сіз презентацияны мерзімінен 3-4 сағат бұрын дайындауға ауысуыңыз керек. Әсіресе, егер ол бейнені қамтитын болса, оны түсіру және өңдеу көп уақытты алады. Бізде видео болуы керек еді. Бізде осымен айналысатын, сонымен қатар басқа да бірқатар ұйымдастырушылық мәселелерді шешетін арнайы адам болды. Осыған байланысты біз соңғы сәтке дейін кодтаудан өзімізді алаңдатпадық.

8. Қадам. Маған презентациялар мен финалдардың бөлек жұмыс күні (дүйсенбі) өткені ұнамады. Бұл жерде, сірә, ұйымдастырушылардың қатысушыларды барынша сығып алу саясаты жалғаса берді. Мен жұмыстан демалыс алуды жоспарлаған жоқпын, мен тек финалға келгім келді, бірақ менің командамның қалған бөлігі демалыс күнін алған. Дегенмен, хакатонға эмоционалды енудің жоғары болғаны сонша, таңғы сағат 8-де мен өзімнің командамның чатына (хакатон командасы емес, жұмыс тобы) күнді өз қаражатыммен өткізіп жатқанымды жаздым да, орталыққа бардым. алаңға арналған кеңсе. Біздің мәселемізде көптеген таза деректер ғалымдары болды және бұл мәселені шешу тәсіліне қатты әсер етті. Көптеген адамдарда жақсы DS болды, бірақ ешкімде жұмыс істейтін прототипі болмады, көпшілігі іздеу жүйелерінде өздерінің тексеріп шығушыларының тыйымдарынан айналып өте алмады. Біз жұмыс істейтін прототипі бар жалғыз команда болдық. Ал біз мәселені қалай шешуге болатынын білдік. Соңында біз жарыс жолында жеңіске жеттік, бірақ біз ең аз бәсекеге қабілетті тапсырманы таңдадық. Басқа тректердегі алаңдарға қарап, ол жерде мүмкіндік болмайтынын түсіндік. Сондай-ақ, қазылар алқасының жолы болғанын айтқым келеді, олар кодты мұқият тексерді. Ал, шолуларға қарағанда, бұл барлық тректерде болған жоқ.

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

Ұйымдастырушы бізге қай бөлмеге кіру керектігін көрсетті, ал кіргеннен кейін жеңімпаз командалар үшін ораторлық шеберлік сабағына тап болдық. Сахнаға шығуы тиіс жігіттер жақсы жігерленіп, барлығы нағыз шоумен болып шықты.

Мойындауым керек, финалда басқа тректердің ең мықты командалары фонында біз бозарған едік, мемлекеттік тапсырыс беруші номинациясында жеңіс жылжымайтын мүлік саласындағы техникалық трек командасына әбден лайық болды. Менің ойымша, біздің жолда жеңіске жетуімізге ықпал еткен негізгі факторлар мыналар болды: дайын бланктің болуы, соның арқасында біз прототипті тез жасай алдық, прототипте «ерекше сәттердің» болуы (бас директорларды іздеу). әлеуметтік желілерде) және біздің қолдаушымыздың NLP дағдылары , бұл қазылар алқасын да қатты қызықтырды.

Қалай және неге біз Urban Tech Challenge хакатонында Big Data трелігін жеңіп алдық

Қорытындылай келе, бізді қолдағандардың барлығына, трегіміздің қазылар алқасына, Евгений Евграфиевке (хакатонда біз шешкен мәселенің авторы) және, әрине, хакатонды ұйымдастырушыларға дәстүрлі алғысымызды білдіреміз. Бұл, бәлкім, мен қатысқан ең үлкен хакатон болды, мен жігіттерге болашақта осындай жоғары стандартты ұстануды тілеймін!

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

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