Kako i zašto smo pobijedili na stazi Big Data na hackathonu Urban Tech Challenge

Moje ime je Dmitry. I želim govoriti o tome kako je naš tim stigao do finala hackathona Urban Tech Challenge na stazi Big Data. Odmah ću reći da ovo nije prvi hackathon na kojem sam sudjelovao, a ni prvi na kojem sam osvojio nagrade. S tim u vezi, u svojoj priči želim iznijeti neka opća zapažanja i zaključke vezane uz hackathon industriju u cjelini, te dati svoje gledište nasuprot negativnim recenzijama koje su se pojavile na internetu odmah nakon završetka Urban Tech Challengea (za primjer ovo).

Dakle, prvo neka opća opažanja.

1. Iznenađujuće je da dosta ljudi naivno misli da je hackathon nekakvo sportsko natjecanje gdje pobjeđuju najbolji koderi. To je pogrešno. Ne uzimam u obzir slučajeve kada sami organizatori hackathona ne znaju što žele (i to sam vidio). Ali, u pravilu, tvrtka koja organizira hackathon slijedi svoje ciljeve. Njihov popis može biti drugačiji: to može biti tehničko rješenje nekih problema, potraga za novim idejama i ljudima itd. Ti ciljevi često određuju format događaja, njegovo vrijeme, online/offline, kako će zadaci biti formulirani (i hoće li uopće biti formulirani), hoće li biti pregleda koda na hackathonu itd. S ove točke gledišta ocjenjuju se i timovi i ono što su učinili. A pobjeđuju oni timovi koji najbolje pogode točku koja je potrebna tvrtki, a mnogi do te točke dođu potpuno nesvjesno i slučajno, misleći da se stvarno natječu u sportu. Moja zapažanja pokazuju da bi organizatori za motiviranje sudionika trebali stvoriti barem privid sportskog okruženja i jednakih uvjeta, inače će na njih doći val negativnosti, kao u gornjem osvrtu. Ali skrenuli smo.

2. Iz toga slijedi sljedeći zaključak. Organizatori su zainteresirani da sudionici dolaze na hackathon s vlastitim radom, ponekad čak i posebno organiziraju pozornicu za online dopisivanje u tu svrhu. To omogućuje jača izlazna rješenja. Koncept "vlastitog rada" vrlo je relativan; svaki iskusni programer može akumulirati tisuće redaka koda iz svojih starih projekata u svom prvom predanju. I hoće li to biti unaprijed pripremljen razvoj događaja? Ali u svakom slučaju vrijedi pravilo koje sam izrazio u obliku poznatog mema:

Kako i zašto smo pobijedili na stazi Big Data na hackathonu Urban Tech Challenge

Da biste pobijedili, morate imati nešto, neku vrstu konkurentske prednosti: sličan projekt koji ste radili u prošlosti, znanje i iskustvo u određenoj temi ili gotov rad odrađen prije početka hackathona. Da, nije sportski. Da, ovo možda nije vrijedno uloženog truda (ovdje svatko odlučuje za sebe isplati li se kodirati 3 tjedna noću za nagradu od 100 tisuća, podijeljenu na cijeli tim, pa čak i uz rizik da je ne dobijete). No, često je to jedina prilika za napredak.

3. Odabir tima. Kao što sam primijetio u hackathon chatovima, mnogi ovom pitanju pristupaju prilično neozbiljno (iako je ovo najvažnija odluka koja će odrediti vaš rezultat na hackathonu). U mnogim područjima djelovanja (i u sportu i na hackathonima) vidio sam da su jaki ljudi skloni udruživanju s jakima, slabi sa slabima, pametni s pametnima, pa, općenito, shvaćate... Otprilike tako se i događa u chatovima: manje jaki programeri ih odmah pohvataju, ljudi koji nemaju nikakve vještine vrijedne za hackathon dugo vise na chatu i biraju tim po principu kad bi tko uzeo . Na nekim hackathonima prakticira se nasumično raspoređivanje timova, a organizatori tvrde da nasumični timovi ne rade ništa lošije od postojećih. No, prema mojim zapažanjima, motivirani ljudi u pravilu sami pronađu tim, ako se netko mora zadužiti, onda često mnogi od njih ne dođu na hackathon.

Što se tiče sastava tima, on je vrlo individualan 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đer znam za slučajeve kada su pobijedili timovi koji su se sastojali 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 hackathon je bio sljedeći: planirao sam okupiti tim ili se pridružiti timu tipa front-end - back-end - dizajner (i sam sam front-end). I vrlo brzo sam počeo razgovarati s python backenderom i dizajnerom koji je prihvatio poziv da nam se pridruži. Nešto kasnije nam se pridružila djevojka, poslovna analitičarka, koja je već imala iskustva s pobjedama na hackathonu, i to je presudilo da nam se pridruži. Nakon kratkog sastanka odlučili smo se nazvati U4 (URBAN 4, urbana četvorka) po analogiji s 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 temelju toga se bira zadatak za hackathon. Na temelju ovoga, pogledavši lista zadataka i procjenjujući njihovu složenost, odlučili smo se za dva zadatka: katalog inovativnih poduzeća iz DPiIR-a i chatbot iz EFKO-a. Zadatak iz DPIiR-a je izabrao backender, zadatak iz EFKO-a sam izabrao ja, jer imao iskustva s pisanjem chatbota u node.js i DialogFlow. Zadatak EFKO također je uključivao ML; imam određeno, ne baš opsežno iskustvo u ML-u. I prema uvjetima problema, činilo mi se da je malo vjerojatno da će se riješiti pomoću ML alata. Taj se osjećaj pojačao kada sam otišao na Urban Tech Challenge susret, gdje su mi organizatori pokazali skup podataka o EFKO-u, gdje je bilo oko 100 fotografija izgleda proizvoda (snimljenih iz različitih kutova) i oko 20 klasa pogrešaka izgleda. A pritom su naručitelji zadatka željeli postići uspješnost klasifikacije od 90%. Kao rezultat toga, pripremio sam prezentaciju rješenja bez ML-a, backender je pripremio prezentaciju na temelju kataloga, te smo zajedno, nakon finaliziranja prezentacija, poslali na Urban Tech Challenge. Već u ovoj fazi pokazala se razina motivacije i doprinosa svakog sudionika. Naš dizajner nije sudjelovao u raspravama, kasno je odgovarao, čak je u posljednjem trenutku ispunio podatke o sebi u prezentaciji, općenito su se pojavile sumnje.

Kao rezultat toga, prošli smo zadatak iz DPiIR-a i uopće nismo bili uzrujani što nismo prošli EFKO, jer nam se zadatak činio, blago rečeno, čudnim.

5. Priprema za hackathon. Kada se konačno saznalo da smo se kvalificirali za hackathon, krenuli smo s pripremama. I ovdje ne zagovaram početak pisanja koda tjedan dana prije početka hackathona. Minimalno biste trebali imati spreman boilerplate s kojim možete odmah početi raditi, bez potrebe za konfiguriranjem alata i bez naletanja na bugove neke lib-e koju ste odlučili isprobati prvi put na hackathonu. Znam priču o Angular inženjerima koji su došli na hackathon i proveli 2 dana postavljajući projekt build, tako da sve treba pripremiti unaprijed. Namjeravali smo rasporediti odgovornosti na sljedeći način: backender piše alate za indeksiranje koji pretražuju internet i stavljaju sve prikupljene informacije u bazu podataka, dok ja pišem API u node.js koji postavlja upite ovoj bazi podataka i šalje podatke naprijed. S tim u vezi, unaprijed sam pripremio server koristeći express.js i pripremio front-end u reactu. Ne koristim CRA, webpack uvijek prilagodim sebi i jako dobro znam kakve to rizike može predstavljati (sjetite se priče o angular developerima). U ovom trenutku zatražio sam predloške sučelja ili barem modele od našeg dizajnera kako bih imao ideju o tome što bih postavio. U teoriji bi i on trebao napraviti svoje pripreme i uskladiti ih s nama, ali nikad nisam dobio odgovor. Kao rezultat toga, posudio sam dizajn iz jednog od mojih starih projekata. I počelo je funkcionirati još brže, budući da su svi stilovi za ovaj projekt već bili napisani. Stoga zaključak: dizajner nije uvijek potreban u timu))). Došli smo do hackathona s ovim razvojem događaja.

6. Rad na hackathonu. Svoj tim sam prvi put uživo vidio tek na otvaranju hackathona u Centralnom distribucijskom centru. Sastali smo se, razgovarali o rješenju i fazama rada na problemu. I premda smo nakon otvaranja morali ići autobusom do Crvenog listopada, otišli smo doma na spavanje, dogovorivši se da na mjesto dođemo do 9.00. Zašto? Organizatori su očito htjeli izvući maksimum iz sudionika pa su posložili upravo takav raspored. Ali, prema mom iskustvu, možete normalno kodirati bez spavanja jednu noć. Što se tiče drugog, više nisam siguran. Hackathon je maraton, potrebno je dobro izračunati i planirati svoju snagu. Štoviše, imali smo pripreme.

Kako i zašto smo pobijedili na stazi Big Data na hackathonu Urban Tech Challenge

Dakle, nakon spavanja, u 9.00 smo sjedili na šestom katu 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 zadnja kap. I tako smo s četvorke prešli na trojku, iako nismo mijenjali ime ekipe. 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. U bazu podataka (odlučili smo koristiti neo4j) učitali smo skup podataka o inovativnim tvrtkama od organizatora. Počeo sam slagati, zatim se prihvatio node.js, a onda su stvari počele zakazati. Nikad prije nisam radio s neo4j i isprva sam tražio radni upravljački program za ovu bazu podataka, onda sam smislio kako napisati upit, a onda sam bio iznenađen kada sam otkrio da ova baza podataka, kada se postavi upit, vraća entitete u oblik niza čvornih objekata i njihovih rubova. Oni. kada sam tražio organizaciju i sve podatke o njoj po PIB-u, umjesto jednog objekta organizacije, vraćen mi je dugačak niz objekata koji sadrže podatke o toj organizaciji i međusobnim odnosima. Napisao sam maper koji je prošao kroz cijeli niz i zalijepio sve objekte prema njihovoj organizaciji u jedan objekt. Ali u borbi, kada se traži baza podataka od 8 tisuća organizacija, izvršena je izuzetno sporo, oko 20 - 30 sekundi. Počeo sam razmišljati o optimizaciji... I onda smo stali na vrijeme i prebacili se na MongoDB, a trebalo nam je oko 30 minuta. Ukupno je izgubljeno oko 4 sati na neo5j.

Upamtite, nikad ne nosite tehnologiju na hackathon s kojom niste upoznati, može biti iznenađenja. No, generalno, osim ovog neuspjeha, sve je išlo po planu. I već 9. prosinca ujutro imali smo potpuno funkcionalnu aplikaciju. Za ostatak dana planirali smo mu dodati dodatne značajke. Ubuduće mi je sve išlo relativno glatko, ali backender je imao hrpu problema sa zabranom njegovih crawlera u tražilicama, u spamu agregatora pravnih osoba, koji je dolazio na prva mjesta rezultata pretraživanja prilikom zahtjeva za svaku konkretnu tvrtku. Ali bolje je da on sam o tome priča. Prva dodatna značajka koju sam dodao bila je pretraga po punom imenu. Generalni direktor VKontakte. Trajalo je nekoliko sati.

Tako se na stranici tvrtke u našoj aplikaciji pojavio avatar generalnog direktora, poveznica 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 želio napraviti analitiku. Ali nakon dugog traženja opcija (bilo je mnogo nijansi s korisničkim sučeljem), odlučio sam se za najjednostavniju agregaciju organizacija prema šifri gospodarske djelatnosti. Već navečer, zadnjih sati, postavljao sam predložak 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, pretraživači su nastavili raditi, backender je eksperimentirao s NLP-om kako bi razlikovao inovativne tekstove od neinovativnih))). Ali već se bližilo vrijeme završne prezentacije.

7. Prezentacija. Iz vlastitog iskustva mogu reći da biste trebali prijeći na pripremu prezentacije otprilike 3 do 4 sata prije nego što je termin. Pogotovo ako se radi o videu, njegovo snimanje i montaža oduzima dosta vremena. Trebali smo imati video. I imali smo posebnu osobu koja se time bavila, a rješavala je i niz drugih organizacijskih pitanja. U tom smislu, nismo se odvraćali od kodiranja do zadnjeg trenutka.

8. Visina. Nije mi se svidjelo što su prezentacije i finale održani odvojenim radnim danom (ponedjeljak). Ovdje se najvjerojatnije nastavila politika organizatora da iz sudionika iscijede maksimum. Nisam planirao odsustvovati s posla, htio sam samo doći na finale, iako je ostatak moje ekipe uzeo slobodan dan. Međutim, emocionalna uronjenost u hackathon već je bila tolika da sam u 8 ujutro u chatu svog tima (radnog tima, ne tima hackathona) napisao da dan uzimam o vlastitom trošku i otišao u centralu ured za parcele. Pokazalo se da naš problem ima mnogo čistih podatkovnih znanstvenika, a to je uvelike utjecalo na pristup rješavanju problema. Mnogi su imali dobar DS, ali nitko nije imao radni prototip, mnogi nisu mogli zaobići zabrane svojih pretraživača u tražilicama. Bili smo jedini tim s funkcionalnim prototipom. I znali smo kako riješiti problem. Na kraju smo osvojili stazu, iako smo imali veliku sreću što smo odabrali najmanje natjecateljski zadatak. Gledajući terene na drugim stazama, shvatili smo da tamo nećemo imati šanse. Također želim reći da smo imali puno sreće s žirijem, pomno su provjerili kod. I, sudeći po recenzijama, to se nije dogodilo u svim stazama.

9. Završni. Nakon što su nas nekoliko puta pozvali u žiri na code review, mi smo, misleći da smo konačno riješili sve probleme, otišli na ručak u Burger King. Tamo su nas opet pozvali organizatori, morali smo brzo spakirati narudžbe i vratiti se.

Organizator nam je pokazao u koju prostoriju trebamo ući, a po ulasku smo se našli na treningu javnog nastupa za pobjedničke timove. Dečki koji su trebali nastupiti na pozornici bili su dobro nabijeni, svi su izašli kao pravi showmani.

I moram priznati, u finalu, u pozadini najjačih ekipa iz drugih staza, izgledali smo blijedo, pobjedu u nominaciji državni kupac sasvim zasluženo odnijela je ekipa iz tehnološke staze nekretnina. Mislim da su ključni čimbenici koji su pridonijeli našoj pobjedi na stazi bili: dostupnost gotove praznine, zahvaljujući kojoj smo bili u mogućnosti brzo napraviti prototip, prisutnost "istaknutih stvari" u prototipu (traga za izvršnim direktorima na društvenim mrežama) i NLP vještina našeg backendera, što je također jako zainteresiralo žiri.

Kako i zašto smo pobijedili na stazi Big Data na hackathonu Urban Tech Challenge

I na kraju tradicionalno hvala svima koji su nas podržali, žiriju naše staze, Evgeniyu Evgrafievu (autoru problema koji smo rješavali na hackathonu) i naravno organizatorima hackathona. Ovo je bio možda najveći i najcool hackathon na kojem sam ikad sudjelovao, mogu samo poželjeti dečkima da zadrže tako visok standard i u budućnosti!

Izvor: www.habr.com

Dodajte komentar