Kako i zašto smo osvojili Big Data stazu na hakatonu Urban Tech Challenge

Moje ime je Dmitry. I želim da pričam o tome kako je naš tim stigao do finala Urban Tech Challenge hackathona na stazi Big Data. Odmah ću reći da ovo nije prvi hakaton na kojem sam učestvovao, niti prvi na kojem sam osvojio nagrade. S tim u vezi, u svojoj priči želim iznijeti neka opća zapažanja i zaključke u vezi s hackathon industrijom u cjelini, i dati svoje gledište za razliku od negativnih kritika koje su se pojavile na internetu odmah nakon završetka Urban Tech Challenge-a (za primjer ovo).

Dakle, prvo neka opšta zapažanja.

1. Iznenađujuće je da dosta ljudi naivno misli da je hakaton neka vrsta sportskog takmičenja u kojem pobjeđuju najbolji koderi. Ovo je pogrešno. Ne razmatram slučajeve kada sami organizatori hakatona ne znaju šta hoće (i to sam vidio). Ali, po pravilu, kompanija koja organizuje hakaton teži sopstvenim ciljevima. Njihova lista može biti drugačija: to može biti tehničko rješenje nekih problema, potraga za novim idejama i ljudima, itd. Ovi ciljevi često određuju format događaja, njegov tajming, online/offline, kako će zadaci biti formulisani (i da li će uopšte biti formulisani), da li će biti pregleda koda na hakatonu itd. Iz ove tačke gledišta ocjenjuju se i timovi i ono što su uradili. I pobjeđuju oni timovi koji najbolje dođu do tačke koja je potrebna kompaniji, a mnogi do toga dođu potpuno nesvjesno i slučajno, misleći da zaista učestvuju u sportskom takmičenju. Moja zapažanja pokazuju da bi organizatori, kako bi motivirali učesnike, trebali stvoriti barem privid sportskog ambijenta i jednakih uslova, inače će dobiti val negativnosti, kao u gornjoj recenziji. Ali mi skrećemo pažnju.

2. Otuda i sljedeći zaključak. Organizatori su zainteresovani da učesnici na hakaton dođu sa svojim radom, ponekad čak i posebno organizuju online dopisnu fazu u tu svrhu. Ovo omogućava jača izlazna rješenja. Koncept “vlastitog rada” je vrlo relativan; svaki iskusni programer može akumulirati hiljade linija koda iz svojih starih projekata u svom prvom urezivanju. I hoće li to biti unaprijed pripremljeni razvoj događaja? Ali u svakom slučaju, važi pravilo koje sam izrazio u obliku poznatog mema:

Kako i zašto smo osvojili Big Data stazu na hakatonu Urban Tech Challenge

Da biste pobijedili, morate imati nešto, neku vrstu konkurentske prednosti: sličan projekat koji ste radili u prošlosti, znanje i iskustvo u određenoj temi, ili gotov rad odrađen prije početka hakatona. Da, nije sportski. Da, ovo možda nije vrijedno uloženog truda (ovdje svako sam odlučuje da li se isplati kodirati 3 sedmice noću za nagradu od 100 hiljada, podijeljenu na cijeli tim, pa čak i uz rizik da je ne dobije). Ali, često je ovo jedina šansa da napredujete.

3. Izbor tima. Kao što sam primetio u hakatonskim razgovorima, mnogi ovom pitanju pristupaju prilično neozbiljno (iako je to najvažnija odluka koja će odrediti vaš rezultat na hakatonu). U mnogim oblastima aktivnosti (i u sportu i na hakatonima) vidio sam da se jaki ljudi ujedinjuju sa jakima, slabi sa slabima, pametni sa pametnim, pa, generalno, shvatite... Otprilike to se dešava u četovima: manje jaki programeri odmah bivaju uhvaćeni, ljudi koji nemaju vještine vrijedne za hackathon dugo vise u chatu i biraju tim po principu da bi ga samo neko preuzeo . Na nekim hakatonima se praktikuje nasumično dodeljivanje timova, a organizatori tvrde da nasumični timovi ne rade ništa lošije od postojećih. Ali, prema mojim zapažanjima, motivisani ljudi po pravilu sami pronalaze tim, ako neko mora biti raspoređen, onda često mnogi od njih ne dođu na hakaton.

Što se tiče sastava tima, to je vrlo individualno i jako ovisi o zadatku. Mogao bih reći da je minimalno održiv sastav tima dizajner - front-end ili front-end - back-end. Ali takođe znam za slučajeve kada su pobedili timovi koji se sastoje samo od front-endera, koji su dodali jednostavan back-end u node.js, ili napravili mobilnu aplikaciju u React Native; ili samo od backendera koji su radili jednostavan raspored. Općenito, sve je vrlo individualno i ovisi o zadatku. Moj plan za odabir tima za hakaton bio je sljedeći: planirao sam okupiti tim ili se pridružiti timu kao što je front-end - back-end - dizajner (i sam sam front-end). I prilično brzo sam počeo da ćaskam sa python backenderom i dizajnerom koji je prihvatio poziv da nam se pridruži. Nešto kasnije pridružila nam se i jedna djevojka, poslovna analitičarka, koja je već imala iskustva sa pobjedom na hakatonu, i to je riješilo pitanje njenog pridruživanja. Nakon kratkog sastanka odlučili smo da se nazovemo U4 (URBAN 4, urbana četvorka) po analogiji sa fantastičnom četvorkom. I čak su stavili odgovarajuću sliku na avatar našeg telegram kanala.

4. Odabir zadatka. Kao što sam već rekao, morate imati konkurentsku prednost, na osnovu toga se bira zadatak za hakaton. Na osnovu ovoga, pogledavši lista zadataka i procenjujući njihovu složenost, rešili smo dva zadatka: katalog inovativnih preduzeća iz DPiIR-a i chatbot iz EFKO-a. Zadatak iz DPIiR-a je izabrao backender, zadatak iz EFKO-a sam izabrao, jer imao iskustvo pisanja chatbota u node.js i DialogFlow. Zadatak EFKO-a je uključivao i ML; imam određeno, ne baš veliko iskustvo u pranju novca. A prema uslovima problema, činilo mi se da je malo verovatno da će se rešiti pomoću ML alata. Taj osećaj je ojačao kada sam otišao na sastanak Urban Tech Challenge, gde su mi organizatori pokazali skup podataka o EFKO, gde je bilo oko 100 fotografija izgleda proizvoda (slikanih iz različitih uglova) i oko 20 klasa grešaka u izgledu. U isto vrijeme, oni koji su naručili zadatak željeli su postići uspješnost klasifikacije od 90%. Kao rezultat toga, pripremio sam prezentaciju rješenja bez ML-a, backender je pripremio prezentaciju na osnovu kataloga i zajedno smo ih nakon finalizacije prezentacija poslali na Urban Tech Challenge. Već u ovoj fazi je otkriven nivo motivacije i doprinosa svakog učesnika. Naš dizajner nije sudjelovao u raspravama, kasno je odgovarao, čak je u posljednjem trenutku u prezentaciji popunio podatke o sebi, općenito su se pojavile sumnje.

Kao rezultat toga, položili smo zadatak iz DPiIR-a i nimalo se nismo uznemirili što nismo položili EFKO, jer nam se zadatak, blago rečeno, učinio čudnim.

5. Priprema za hakaton. Kada se konačno saznalo da smo se kvalifikovali za hakaton, počeli smo sa pripremama. I ovdje ne zagovaram da se počne pisati kod sedmicu prije početka hakatona. U najmanju ruku, trebali biste imati spreman šablon, s kojim možete odmah početi s radom, bez potrebe za konfigurisanjem alata i bez naleta na greške neke lib-e koju ste odlučili isprobati prvi put na hackathonu. Znam priču o angular inženjerima koji su došli na hakaton i proveli 2 dana postavljajući projekt build, tako da sve treba pripremiti unaprijed. Namjeravali smo da rasporedimo odgovornosti na sljedeći način: backender piše pretraživače koji pretražuju internet i stavljaju sve prikupljene informacije u bazu podataka, dok ja pišem API u node.js koji ispituje ovu bazu podataka i šalje podatke naprijed. U tom smislu, unapred sam pripremio server koristeći express.js i pripremio front-end u reakciji. Ne koristim CRA, uvijek prilagođavam webpack za sebe i vrlo dobro znam kakve rizike to može predstavljati (sjetite se priče o angular programerima). U ovom trenutku, zatražio sam predloške interfejsa ili barem makete od našeg dizajnera kako bih imao ideju o tome šta ću izložiti. U teoriji, on bi također trebao napraviti svoje pripreme i koordinirati ih s nama, ali nikad nisam dobio odgovor. Kao rezultat toga, pozajmio sam dizajn iz jednog od mojih starih projekata. I krenulo je još brže, jer su svi stilovi za ovaj projekat već bili napisani. Otuda zaključak: dizajner nije uvijek potreban u timu))). Sa ovim razvojem smo došli na hakaton.

6. Radite na hakatonu. Prvi put sam video svoj tim uživo tek na otvaranju hakatona u Centralnom distributivnom centru. Sastali smo se, razgovarali o rješenju i fazama rada na problemu. I iako smo nakon otvaranja morali ići autobusom do Crvenog oktobra, otišli smo kući na spavanje, dogovorivši se da na mjesto stignemo do 9.00. Zašto? Organizatori su očigledno željeli da izvuku maksimum iz učesnika, pa su dogovorili upravo takav raspored. Ali, prema mom iskustvu, možete normalno kodirati bez spavanja jednu noć. Što se tiče drugog, više nisam siguran. Hakaton je maraton, potrebno je adekvatno izračunati i planirati svoju snagu. Štaviše, imali smo pripreme.

Kako i zašto smo osvojili Big Data stazu na hakatonu Urban Tech Challenge

Dakle, nakon spavanja, u 9.00 sjedili smo na šestom spratu Dewocracy. Tada je naš dizajner neočekivano najavio da nema laptop i da će raditi od kuće, a mi ćemo komunicirati telefonom. Ovo je bila posljednja kap. I tako smo sa četvorke prešli na trojku, iako nismo mijenjali ime tima. Opet, ovo nije bio veliki udarac za nas, već sam imao dizajn iz starog projekta. Općenito, u početku je sve išlo prilično glatko i po planu. Ubacili smo u bazu podataka (odlučili smo da koristimo neo4j) skup podataka o inovativnim kompanijama od organizatora. Počeo sam da kucam, zatim uzeo node.js, i onda su stvari počele da kvare. Nikada ranije nisam radio sa neo4j-om, i prvo sam tražio ispravan drajver za ovu bazu podataka, onda sam shvatio kako da napišem upit, a onda sam bio iznenađen kada sam otkrio da ova baza podataka, kada je upitana, vraća entitete u oblik niza čvornih objekata i njihovih rubova. One. kada sam zatražio organizaciju i sve podatke o njoj preko TIN-a, umjesto jednog objekta organizacije, vraćen mi je dugačak niz objekata koji sadrže podatke o ovoj organizaciji i odnosima između njih. Napisao sam maper koji je prošao kroz cijeli niz i zalijepio sve objekte prema njihovoj organizaciji u jedan objekat. Ali u borbi, kada je tražena baza podataka od 8 hiljada organizacija, to je izvršeno izuzetno sporo, oko 20 - 30 sekundi. Počeo sam da razmišljam o optimizaciji... A onda smo stali na vreme i prešli na MongoDB, i trebalo nam je oko 30 minuta. Ukupno je izgubljeno oko 4 sati na neo5j.

Upamtite, nikada ne nosite tehnologiju na hakaton koji vam nije poznat, može doći do iznenađenja. Ali, generalno, osim ovog neuspjeha, sve je išlo po planu. I već ujutro 9. decembra imali smo potpuno funkcionalnu aplikaciju. Za ostatak dana planirali smo da mu dodamo dodatne funkcije. Ubuduće mi je sve išlo relativno glatko, ali bekender je imao gomilu problema sa zabranom svojih crawlera u pretraživačima, u neželjenoj poruci agregatora pravnih lica, koja je dolazila na prva mesta rezultata pretrage prilikom traženja za svaku konkretnu kompaniju. Ali bolje je da on sam ispriča o tome. Prva dodatna funkcija koju sam dodao bila je pretraga po punom imenu. generalni direktor VKontakte. Trebalo je nekoliko sati.

Dakle, na stranici kompanije u našoj aplikaciji pojavio se avatar generalnog direktora, link na njegovu stranicu VKontakte i neki drugi podaci. Bila je to lijepa trešnja na torti, iako nam možda nije donijela pobjedu. Zatim sam htio napraviti neku analitiku. Ali nakon dugog traženja opcija (bilo je mnogo nijansi s korisničkim sučeljem), odlučio sam se na najjednostavnije agregiranje organizacija prema šifri ekonomske aktivnosti. Već u večernjim satima, zadnjih sati, slagao sam šablon za prikaz inovativnih proizvoda (u našoj aplikaciji bi trebao postojati odjeljak Proizvodi i usluge), iako backend nije bio spreman za to. U isto vrijeme, baza podataka je naglo rasla, crawleri su nastavili raditi, backender je eksperimentirao s NLP-om kako bi razlikovao inovativne tekstove od neinovativnih))). Ali vrijeme za završnu prezentaciju se već bližilo.

7. Prezentacija. Iz vlastitog iskustva mogu reći da biste trebali prijeći na pripremu prezentacije otprilike 3 do 4 sata prije isteka. Pogotovo ako uključuje video, njegovo snimanje i montaža oduzima dosta vremena. Trebali smo imati video. I imali smo posebnu osobu koja se time bavila, ali i rješavala niz drugih organizacionih pitanja. S tim u vezi, nismo se odvlačili od kodiranja do posljednjeg trenutka.

8. Pitch. Nije mi se svidjelo što se prezentacije i finale održavaju posebnim radnim danom (ponedjeljak). Ovdje se, najvjerovatnije, nastavila politika organizatora da iz učesnika izvuku maksimum. Nisam planirao da se odmaram od posla, samo sam želeo da dođem do finala, iako je ostatak tima uzeo slobodan dan. Međutim, emocionalno uživljavanje u hakaton je već bilo toliko da sam u 8 ujutro u chatu svog tima (radnog, a ne hakatonskog tima) napisao da uzimam dan o svom trošku i otišao u centralni ured za parcele. Ispostavilo se da naš problem ima puno naučnika čistih podataka, a to je u velikoj mjeri uticalo na pristup rješavanju problema. Mnogi su imali dobar DS, ali niko nije imao prototip koji radi, mnogi nisu mogli zaobići zabrane svojih crawlera u pretraživačima. Bili smo jedini tim sa prototipom koji radi. I znali smo kako da riješimo problem. Na kraju smo pobijedili na stazi, iako smo imali veliku sreću da smo odabrali najmanje konkurentski zadatak. Gledajući terene na drugim stazama, shvatili smo da tu nećemo imati šanse. Takođe želim da kažem da smo imali veliku sreću sa žirijem, oni su pomno proveravali šifru. I, sudeći po recenzijama, to se nije dogodilo na svim stazama.

9. Final. Nakon što su nas nekoliko puta zvali u žiri na pregled koda, mi smo, misleći da smo konačno riješili sve probleme, otišli na ručak u Burger King. Tamo su nas ponovo pozvali organizatori, morali smo brzo spakovati narudžbe i vratiti se nazad.

Organizator nam je pokazao u koju prostoriju treba da uđemo, a po ulasku smo se našli na govornom treningu za pobjedničke ekipe. Momci koji su trebali nastupiti na bini su bili dobro napunjeni, svi su izašli kao pravi šoumeni.

I moram priznati da smo u finalu, na pozadini najjačih timova sa drugih staza, izgledali bledo, a pobeda u nominaciji državnog kupca sasvim zasluženo je pripala timu sa staze za nekretnine. Mislim da su ključni faktori koji su doprinijeli našoj pobjedi na stazi bili: dostupnost gotovog blanka, zbog kojeg smo uspjeli brzo napraviti prototip, prisustvo “highlighta” u prototipu (potraga za direktorima na društvenim mrežama) i NLP vještinama našeg backendera, što je također jako zainteresiralo žiri.

Kako i zašto smo osvojili Big Data stazu na hakatonu Urban Tech Challenge

I na kraju tradicionalno hvala svima koji su nas podržali, žiriju naše staze Evgeniju Evgrafjevu (autoru problema koji smo rešili na hakatonu) i naravno organizatorima hakatona. Ovo je bio možda najveći i najkul hakaton na kojem sam ikada učestvovao, mogu samo poželjeti momcima da zadrže ovako visok standard i ubuduće!

izvor: www.habr.com

Dodajte komentar