Jak wygraliśmy wewnętrzny hackaton, ucząc się skibidi, flossingu i javascriptu

VK ma fajną tradycję - wewnętrzny hackaton, w którym mogą brać udział tylko goście z VKontakte. O hackatonie opowiem w imieniu zespołu, który w tym roku zajął pierwsze miejsce i umarł na całego ze zmęczenia, ale udało mu się wypróbować detektor ruchu tanecznego do kamery fabularnej.

Jak wygraliśmy wewnętrzny hackaton, ucząc się skibidi, flossingu i javascriptu

Mam na imię Paweł, kieruję czołowym zespołem badawczym VKontakte i mam ciepły stosunek do hackatonów: jako uczestnik (Junction lub kilka deephacków), a ostatnio jako kurator (hakaton VK lub sprawa VKontakte w Junction - nawiasem mówiąc, był to pierwszy raz Uczestniczyłem tam w rosyjskiej firmie). Już czwarty rok organizujemy otwarty dla wszystkich Hackaton VK (ostatni raz, kiedy weszliśmy do Kwatery Głównej Ermitażu), a znaczna część naszego zespołu technicznego brała w nim udział przed dołączeniem do VK.

Wewnętrzny hackaton pozwala zespołowi dużo eksperymentować z platformą, testować różne pomysły i ogólnie dobrze się bawić. Istotną różnicą jest to, że rozwiązania można znacznie bardziej zintegrować z VK, co daje nam możliwość uzyskania ciekawych prototypów.

Hackaton odbywa się w Singer House przez cały dzień – w samym środku tygodnia Centrala zamienia się w ruch o północy. Zabawnie jest patrzeć, jak sprzątaczki rozglądają się rano ze zdziwieniem – zwykle puste biuro o 6 rano nagle okazuje się wypełnione kudłatymi ludźmi, którzy poruszają się jak zombie i krzyczą: „Zostało pięć godzin!” Albo kiedy o trzeciej nad ranem wchodzisz do kuchni i podczas zajęć śmierdzi jak w akademiku: napojami energetycznymi, pizzą i paniką. Dzieje się to oczywiście w zwykły dzień, ale jest to rzadkość na tak masową skalę.

Latem odbyły się trzy poprzednie wewnętrzne hackatony. W 2019 roku postanowiliśmy nie tracić czasu na drobiazgi i także zorganizować zimowy hackaton – dwa hackatony to o wiele lepsze niż jeden, bo to fajna okazja, aby poeksperymentować i wdrożyć pomysł, na który w zwykłym rytmie nie ma czasu. Zmieniły się także zasady: wcześniej zespół mógł liczyć maksymalnie trzy osoby, w tym roku są już cztery, ale jeden nie pisze kodu, a specjalizuje się w czym innym. Do zespołu można było zaprosić projektantów, menadżerów produktu, testerów, marketerów i innych chłopaków. W hackatonie wzięło udział łącznie 38 zespołów.

Dreamtim (dokładniej jeden z 38)

Doszliśmy do porozumienia z Danei i wspólnie przekonaliśmy Jegor и Tyoma dołączyć do drużyny. Zgodnie z oczekiwaniami my odpowiadaliśmy za modele, Egor za iOS, Tyoma za produkcję i projektowanie. Rozwój mobilny + projektowanie + trochę uczenia maszynowego i backendu to klucz do sukcesu hackatonu 2k19.

Jeszcze w tym roku pojawił się podział na ścieżki, których wcześniej nie było: Media (w których braliśmy udział), Komunikacja, Infrastruktura, Treść i Rozrywka. Mieliśmy potężnych konkurentów. Na przykład stale motywował nas starszy projektant VK Ilya, który wszedł do naszego pokoju i pokazał prototypy pomysłu swojego zespołu.

Pomysł

— Zdobywałem nagrody w prawie wszystkich hackatonach, w których brałem udział, i tego samego oczekiwałem od wewnętrznego hackatonu tej zimy. (Danya był pewny siebie)

Nasz pomysł (szczególnie Daniny) był początkowo taki: chcieliśmy zgłębić temat generowania muzyki + mieć wszystko na urządzeniu, w przeciwnym razie byłoby to „zbyt backendowe”. Hackaton rozpoczął się od burzy mózgów – zastanawialiśmy się, co moglibyśmy wymyślić. Tworzenie muzyki jest interesujące, ale chcę, aby było zależne od użytkownika. Jakieś przyciski? Może rysuj na ekranie i generuj na jego podstawie muzykę? W tym samym czasie dowiedzieliśmy się od chłopaków z zespołu muzycznego, jak dodać potrzebne nam utwory. Ale nadal nie wydawało się to całkiem w porządku. Sąsiednie zespoły z radością pracowały nad czymś na swoich laptopach, wywołując frustrację.

— A co jeśli rozpoznasz gitarę powietrzną, jakbyś grał na gitarze i w zależności od tego zagrasz brzmienie gitary? (Motyw)

Bingo! Pomysł jest bojowy, a my mamy władzę, żeby wszystko świetnie zorganizować. Istnieje funkcja rozpoznawania ruchu poseneti jest bardzo w porządku (również przyjazna dla urządzeń mobilnych). Udawajmy!

Jak wygraliśmy wewnętrzny hackaton, ucząc się skibidi, flossingu i javascriptu Jak wygraliśmy wewnętrzny hackaton, ucząc się skibidi, flossingu i javascriptu

decyzja

Główne zadania to stworzenie siatki na urządzeniu (musi być prawdziwe) i nauczenie się rozpoznawania ruchów. Egor zaczął przenosić, Tyoma zaczął myśleć, jakie ruchy warto byłoby zastosować (tylko gitara – nudna), a Danya i ja zaczęliśmy je rozpoznawać. Ale to wymaga danych. Jaka jest różnica między PRO a amatorem? PRO posiada klaster z procesorem graficznym – to jedno, drugie – PRO będzie zbierać dane dla siebie, kiedy będzie tego potrzebować. Danya zorganizowała stoisko, na którym rejestrowano z kamery surowe współrzędne rozpoznanej postaci, a następnie - tańczyno! Tej nocy nauczyliśmy się tańczyć nitkowanie, skibidi и dudtsa.

Jak wygraliśmy wewnętrzny hackaton, ucząc się skibidi, flossingu i javascriptu
Jak wygraliśmy wewnętrzny hackaton, ucząc się skibidi, flossingu i javascriptu

Jako stanowisko do rejestracji ruchów wykorzystaliśmy służbowy laptop, który najpierw zarejestrował minę Daniego (wcześniej nie napisał ani jednej linijki w JS), gdy zobaczył kolejny niezrozumiały błąd JS.

Jak wygraliśmy wewnętrzny hackaton, ucząc się skibidi, flossingu i javascriptu

— Nie rozumiem, mam błąd poziomu: print zniknął w Pythonie! (Danya)

Nocny taniec (dosłownie)

W nocy kręciliśmy przed kamerą wiele godzin ciągłego ruchu. Sami to nagrali, a także złapali deweloperów, którzy weszli na podłogę i ZMUSZALI ich do TAŃCA. Dostaliśmy siedem różnych kombinacji – teraz musieliśmy nauczyć się je rozróżniać.

Jak wygraliśmy wewnętrzny hackaton, ucząc się skibidi, flossingu i javascriptu Jak wygraliśmy wewnętrzny hackaton, ucząc się skibidi, flossingu i javascriptu
Jak wygraliśmy wewnętrzny hackaton, ucząc się skibidi, flossingu i javascriptu Jak wygraliśmy wewnętrzny hackaton, ucząc się skibidi, flossingu i javascriptu

„Przychodziłem co trzy godziny, żeby sprawdzić, czy chłopaki żyją”. Pasza krzyknął: „Mamy zwrot!” - i Danya napięła się z całych sił. Następnie wszyscy tańczyli na fajce. Kiedy Daniiłowi zabrakło sił, Pasza otworzył okno i powiedział: „Chłopaki, musimy się odświeżyć”. (Madina)

Dane z figury poddano wstępnej obróbce: nogi wyrzucono na zewnątrz, głowę uśredniono i przeliczono na współrzędne biegunowe względem tułowia. Detektor ruchu przeszkoliliśmy za pomocą catboost – wykorzystując trzysekundowy fragment strumienia danych z modelu. Do tej nocy nie pracowaliśmy z biblioteką - okazała się bojowa i można ją umieścić na iOS.

Jak wygraliśmy wewnętrzny hackaton, ucząc się skibidi, flossingu i javascriptu

Uczyli klasyfikacji wieloklasowej, przy czym jedna lekcja była tak nudna, jak to tylko możliwe – po prostu kręciła się przed kamerą. Najtrudniej było nagrać ruch „skalny” – tak bezinteresownie kręciliśmy głowami, że po chwili zaczęło się kręcić. I wyciągnęli rękę z „kozą”, chociaż było to bezcelowe - posenet ma tylko jeden punkt na całej dłoni, nie widzi palców.

Jak wygraliśmy wewnętrzny hackaton, ucząc się skibidi, flossingu i javascriptu Jak wygraliśmy wewnętrzny hackaton, ucząc się skibidi, flossingu i javascriptu

— Około trzeciej w nocy Pasza wszedł do śpiwora i przez godzinę poruszał się wyłącznie w nim, skacząc jak prawdziwy kangur. (Madina)

Około 8 rano dopadł nas mały kryzys - wszystko się popsuło i nic nie działało, a potem nagle wszystko zaczęło działać samoistnie. Największym wyzwaniem okazało się wkręcenie obu modeli w aplikację – Egor zakończył montaż dosłownie pięć minut przed terminem. Oddajmy mu głos:

— Po znalezieniu pomysłu wszystko poszło bardzo dobrze i produktywnie. Chłopaki trenowali grid i tańczyli, a ja podłączyłem PoseNet do kamery fabularnej w JavaScript bezpośrednio w przeglądarce. Wstępne przebiegi testowe wypadły dobrze i były zaskakująco szybkie. Dlatego gdy rano okazało się, że WebGL w WebView nieoczekiwanie zawiesił się podczas pracy z teksturami za jakieś bzdury i nie było sposobu na znalezienie rozwiązania, prawie wpadłem w rozpacz. Ale było już za późno, żeby się poddać: paliliśmy się do tej myśli. Dlatego ostatkiem sił i ostatnią puszką Red Bulla przeciągnęliśmy na bieżąco alternatywny model oparty na CoreML do klienta iOS i zaczęliśmy natywnie śledzić pozy - aby następnie przesłać je do modelki z tańcami i uzyskaj wynik na wyjściu. Zasadniczo powtórzyliśmy pracę od nowa! Kolejnym wyzwaniem był drugi model, który nagle zaczął oczekiwać na wejściu ponad tysiąca argumentów! Xcode wygenerował dla niego interfejs, którego bezpośrednie użycie byłoby po prostu nierealne. Na szczęście moja wiedza o Objective-C mnie nie zawiodła i znaleziono eleganckie rozwiązanie. (Egor)

Pitchowanie

W piątek o godzinie 14:14 minął termin przesyłania filmu o projekcie – kilka zespołów nie zdążyło na czas i zostało zdyskwalifikowanych. A o 40:XNUMX mieliśmy prezentację dla kuratorów ścieżek związaną z produktem. Mieliśmy chłopaków z zespołu ds. wideo i muzyki i wydawało się, że podoba im się wszystko na boisku. Zajęliśmy drugie miejsce na naszym torze (chcieliśmy być pierwsi, bo mamy taki fajny projekt!) i znaleźliśmy się w finale (zakwalifikowały się dwie drużyny z naszego toru).

— W tym roku po raz pierwszy byłem kuratorem wewnętrznego hackatonu. Powiem z powściągliwością: ocena pracy była niezwykle trudna. Poziom wszystkich bez wyjątku drużyn był nie do wiary. Funkcja nie powinna być po prostu zaawansowana technologicznie, nie tylko „blisko produkcji”, a nie tylko „potencjalnie użyteczna dla naszych produktów”. Zwycięski projekt musi spełniać wszystkie te kryteria jednocześnie. Wygląda na to, że chłopakom się udało. (Andrew)

O 17:40 zagraliśmy ostatni mecz. Do tego czasu trzeba było przygotować kolejne demo, tym razem dla całego Zespołu, a jury było inne – dyrektor techniczny, dyrektor produktu i dyrektor marketingu.

O piątej wieczorem było już po wszystkim – poszliśmy do domu i położyliśmy się spać, nie wiedząc nic o wynikach.

Wyniki są w końcu

Wyniki ogłoszono dopiero w poniedziałek. Najpierw nagrodzili zwycięzców utworów (nie w naszym przypadku – przypomnę, że byliśmy drudzy), potem liderzy głosowania publiczności (nie my), a potem trzeci (i to też nie my), drugi (znowu nie my) i wreszcie my.

Oto projekty z którymi musieliśmy konkurować:

2. miejsce – responsywny asystent głosowy;
3 miejsce – kalendarium błędów wewnętrznych;
Nagroda People's Choice Award przypomina o nadchodzących spotkaniach na czacie.

— To najlepszy hackaton, w jakim kiedykolwiek brałem udział. Jazda była znacznie większa niż nawet na Junction. (Danya)

— Bardzo miło pracowało mi się z kolegami z zupełnie innego działu – nigdy wcześniej nie miałem styczności z uczeniem maszynowym, wydawało mi się to jakąś magią, ale teraz tak nie jest. (Egor)

— Bardzo fajnie było zostać częścią tak fajnego zespołu przy tak fajnym projekcie. W jeden dzień udało mi się zostać projektantem, kamerzystą, inżynierem dźwięku, montażystą, muzykiem i copywriterem! Tylko mnie udało się zasnąć. (Motyw)

Życie po hackatonie

Większość projektów powstających podczas hackatonów nie trafia do sprzedaży z różnych powodów: zmiany tematu, złożoności wdrożenia, czegoś nieprzewidzianego we wdrożeniu. Wewnętrzny hackaton nie jest wyjątkiem.

Niemniej jednak wymieniamy projekty, które ujrzały światło dzienne:

  • ulubieniec wszystkich Vinci;
  • sprawdzenie zgodności użytkownika, który rozpoczął się 14 lutego 2018 r.;
  • красивые plakaty dla krótkich wpisów;
  • oraz szereg funkcji wewnętrznych, o których chętnie porozmawialibyśmy, ale nie możemy :)

Jak wygraliśmy wewnętrzny hackaton, ucząc się skibidi, flossingu i javascriptu

Źródło: www.habr.com

Dodaj komentarz