Wie wir einen internen Hackathon gewonnen haben, indem wir Skibidi, Zahnseide und Javascript gelernt haben

VK hat eine coole Tradition – einen internen Hackathon, an dem nur Leute von VKontakte teilnehmen können. Ich erzähle Ihnen im Namen des Teams vom Hackathon, das dieses Jahr den ersten Platz belegte und völlig an Müdigkeit starb, es aber schaffte, einen Tanzbewegungsdetektor für die Story-Kamera auszuprobieren.

Wie wir einen internen Hackathon gewonnen haben, indem wir Skibidi, Zahnseide und Javascript gelernt haben

Ich heiße PaulIch leite das Top-VKontakte-Forschungsteam und hege eine herzliche Haltung gegenüber Hackathons: als Teilnehmer (Junction oder eine Reihe von Deephacks) und kürzlich als Kurator (VK-Hackathon oder VKontakte-Fall bei Junction – das war übrigens das erste Mal). Ich habe dort teilgenommen (russische Firma). Wir veranstalten zum vierten Mal den VK-Hackathon, der allen offen steht (das letzte Mal, dass wir das Hauptquartier der Eremitage betreten haben), und ein erheblicher Teil unseres technischen Teams hat daran teilgenommen, bevor er zu VK kam.

Ein interner Hackathon ermöglicht es dem Team selbst, viel mit der Plattform zu experimentieren, verschiedene Ideen zu testen und ganz allgemein Spaß zu haben. Ein wichtiger Unterschied besteht darin, dass Lösungen viel stärker in VK integriert werden können, was uns die Möglichkeit gibt, interessante Prototypen zu erstellen.

Der Hackathon findet den ganzen Tag über im Singer House statt – mitten in der Woche verwandelt sich das Headquarter in eine Mitternachtsbewegung. Es ist lustig zu sehen, wie sich die Reinigungskräfte morgens überrascht umschauen – ein normalerweise um 6 Uhr morgens leeres Büro ist plötzlich voller zottiger Menschen, die sich wie Zombies bewegen und rufen: „Noch fünf Stunden!“ Oder wenn man um drei Uhr morgens in die Küche kommt und es während der Sitzungen nach Studentenwohnheimen riecht: Energydrinks, Pizza und Panik. Das passiert natürlich an einem gewöhnlichen Tag, aber in einem so großen Ausmaß kommt es selten vor.

Im Sommer fanden bereits drei interne Hackathons statt. Im Jahr 2019 haben wir beschlossen, keine Zeit mit Kleinigkeiten zu verschwenden und auch einen Winter-Hackathon zu veranstalten – zwei Hackathons sind viel besser als einer, denn das ist eine coole Gelegenheit, eine Idee zu experimentieren und umzusetzen, für die im gewohnten Rhythmus nicht genug Zeit bleibt. Auch die Regeln haben sich geändert: Früher durfte ein Team maximal aus drei Leuten bestehen, dieses Jahr sind es vier, aber einer schreibt keinen Code, sondern ist auf etwas anderes spezialisiert. Es war möglich, Designer, Produktmanager, Tester, Vermarkter und andere Leute in das Team einzuladen. Insgesamt nahmen 38 Teams an diesem Hackathon teil.

Dreamtim (genauer gesagt einer von 38)

Wir haben uns geeinigt Danei und gemeinsam haben wir überzeugt Egor и Tyoma tritt dem Team bei. Wie erwartet waren die Models für uns zuständig, Egor für iOS, Tyoma für Produktion und Design. Mobile Entwicklung + Design + ein wenig maschinelles Lernen und Backend sind der Schlüssel zum Erfolg beim 2k19-Hackathon.

Auch in diesem Jahr erschien eine Aufteilung in Tracks, die es vorher nicht gab: Medien (an denen wir beteiligt waren), Kommunikation, Infrastruktur, Content und Entertainment. Wir hatten starke Konkurrenten. Wir wurden zum Beispiel ständig vom leitenden Designer von VK motiviert Ilya, der in unseren Raum kam und Prototypen der Idee seines Teams zeigte.

Idee

— Ich habe bei fast allen Hackathons, an denen ich teilgenommen habe, Preise gewonnen, und das Gleiche habe ich auch vom internen Hackathon diesen Winter erwartet. (Danya war von sich selbst überzeugt)

Unsere (speziell Daninas) Idee war ursprünglich diese: Wir wollten das Thema Musikgenerierung erkunden + alles auf dem Gerät haben, sonst wäre es „zu Backend“. Der Hackathon begann mit einem Brainstorming – wir überlegten, was wir uns einfallen lassen könnten. Musik zu generieren ist interessant, aber ich möchte es benutzerabhängig machen. Ein paar Knöpfe? Vielleicht auf dem Bildschirm zeichnen und darauf basierend Musik generieren? Gleichzeitig haben wir von den Jungs vom Musikteam gelernt, wie wir die benötigten Titel hinzufügen können. Aber es schien immer noch nicht ganz richtig zu sein. Benachbarte Teams arbeiteten fröhlich an ihren Laptops und sorgten für Frust.

— Was wäre, wenn Sie eine Luftgitarre erkennen, als würden Sie eine Gitarre spielen, und abhängig davon den Klang der Gitarre spielen? (Tema)

Bingo! Die Idee ist militant und wir haben die Macht, alles großartig zu arrangieren. Zur Bewegungserkennung gibt es Posenet, und sie ist sehr gut (auch mobilfreundlich). Lass uns so tun als ob!

Wie wir einen internen Hackathon gewonnen haben, indem wir Skibidi, Zahnseide und Javascript gelernt haben Wie wir einen internen Hackathon gewonnen haben, indem wir Skibidi, Zahnseide und Javascript gelernt haben

Lösung

Die Hauptaufgaben bestehen darin, ein Raster auf dem Gerät zu erstellen (es muss real sein) und zu lernen, Bewegungen zu erkennen. Egor fing an zu portieren, Tyoma begann darüber nachzudenken, welche Bewegungen interessant wären (nur eine Gitarre – langweilig) und Danya und ich begannen, sie zu erkennen. Dafür sind aber Daten erforderlich. Was ist der Unterschied zwischen einem PRO und einem Amateur? PRO verfügt über einen Cluster mit einer GPU – das ist eine Sache, zwei – PRO sammelt Daten für sich selbst, wenn es sie benötigt. Danya organisierte einen Stand, an dem rohe Koordinatendaten einer erkannten Figur von einer Kamera aufgezeichnet wurden, und dann – Tanzen! In dieser Nacht lernten wir, mit Zahnseide zu tanzen, skibidi и dudtsa.

Wie wir einen internen Hackathon gewonnen haben, indem wir Skibidi, Zahnseide und Javascript gelernt haben
Wie wir einen internen Hackathon gewonnen haben, indem wir Skibidi, Zahnseide und Javascript gelernt haben

Als Ständer zum Aufzeichnen von Bewegungen verwendeten wir einen Arbeitslaptop, der zunächst Danis Gesicht aufzeichnete (er hatte zuvor noch keine einzige Zeile in JS geschrieben), als ihm ein weiterer unverständlicher JS-Fehler auffiel.

Wie wir einen internen Hackathon gewonnen haben, indem wir Skibidi, Zahnseide und Javascript gelernt haben

– Ich verstehe nicht, ich habe einen Levelfehler: print ist in Python verschwunden! (Danya)

Nachttanz (im wahrsten Sinne des Wortes)

Wir haben nachts viele Stunden ununterbrochener Bewegung vor der Kamera gefilmt. Sie haben es selbst aufgenommen und auch die Entwickler erwischt, die auf den Boden gewandert sind und sie zum TANZEN ZWANGEN. Wir bekamen sieben verschiedene Kombinationen – nun mussten wir lernen, sie zu unterscheiden.

Wie wir einen internen Hackathon gewonnen haben, indem wir Skibidi, Zahnseide und Javascript gelernt haben Wie wir einen internen Hackathon gewonnen haben, indem wir Skibidi, Zahnseide und Javascript gelernt haben
Wie wir einen internen Hackathon gewonnen haben, indem wir Skibidi, Zahnseide und Javascript gelernt haben Wie wir einen internen Hackathon gewonnen haben, indem wir Skibidi, Zahnseide und Javascript gelernt haben

„Ich kam alle drei Stunden vorbei, um zu sehen, ob die Jungs noch am Leben waren.“ Pascha rief: „Wir haben einen Dreh- und Angelpunkt!“ - und Danya beugte sich mit aller Kraft vor. Dann tanzten alle Pfeife. Als Daniil keine Kraft mehr hatte, öffnete Pascha das Fenster und sagte: „Leute, wir müssen uns frisch machen.“ (Madina)

Die Daten der Figur wurden vorverarbeitet: Die Beine wurden ausgestreckt, der Kopf wurde gemittelt und in Polarkoordinaten relativ zum Rumpf umgewandelt. Wir haben den Bewegungsmelder mit Catboost trainiert – anhand eines dreisekündigen Ausschnitts des Datenstroms aus dem Modell. Bis heute Abend hatten wir noch nicht mit der Bibliothek gearbeitet – es stellte sich heraus, dass es sich um eine Kampfbibliothek handelte, und man kann sie in iOS laden.

Wie wir einen internen Hackathon gewonnen haben, indem wir Skibidi, Zahnseide und Javascript gelernt haben

Sie lehrten die Klassifizierung in mehreren Klassen, wobei eine Klasse so langweilig wie möglich war – nur das Herumhängen vor der Kamera. Am schwierigsten war es, die „Rock“-Bewegung aufzuzeichnen – wir schüttelten so selbstlos den Kopf, dass sie nach einer Weile anfing, sich zu drehen. Und sie streckten eine Hand mit einer „Ziege“ aus, obwohl das sinnlos war – Posenet hat auf der ganzen Hand nur einen Punkt, es sieht keine Finger.

Wie wir einen internen Hackathon gewonnen haben, indem wir Skibidi, Zahnseide und Javascript gelernt haben Wie wir einen internen Hackathon gewonnen haben, indem wir Skibidi, Zahnseide und Javascript gelernt haben

— Gegen 3 Uhr morgens kletterte Pascha in einen Schlafsack und bewegte sich eine Stunde lang ausschließlich darin und hüpfte wie ein echtes Känguru. (Madina)

Gegen 8 Uhr morgens wurden wir von einer kleinen Krise erfasst – alles war kaputt und nichts funktionierte, aber dann begann plötzlich alles von alleine zu funktionieren. Die größte Herausforderung erwies sich darin, beide Modelle in die Anwendung einzuschrauben – Egor beendete die Montage buchstäblich fünf Minuten vor Ablauf der Frist. Erteilen wir ihm das Wort:

— Nachdem wir die Idee gefunden hatten, lief alles sehr gut und produktiv. Die Jungs trainierten das Gitter und tanzten, und ich habe PoseNet in JavaScript direkt im Browser an die Story-Kamera angehängt. Erste Testläufe funktionierten gut und waren überraschend schnell. Als sich am Morgen herausstellte, dass WebGL in WebView beim Arbeiten mit Texturen aus irgendeinem Grund unerwartet abstürzte und es keine Möglichkeit gab, eine Lösung zu finden, geriet ich fast in Verzweiflung. Doch zum Aufgeben war es zu spät: Wir brannten von der Idee. Deshalb haben wir mit letzter Kraft und mit der letzten Dose Red Bull unterwegs ein alternatives Modell auf CoreML-Basis in den iOS-Client gezogen und begonnen, Posen nativ zu verfolgen – um sie dann mit Tänzen an das Modell zu senden und erhalten Sie ein Ergebnis am Ausgang. Im Wesentlichen haben wir die Arbeit noch einmal wiederholt! Eine weitere Herausforderung war das zweite Modell, das plötzlich mehr als tausend Argumente als Eingabe erwartete! Xcode hat dafür eine Schnittstelle generiert, deren direkte Verwendung einfach unrealistisch wäre. Glücklicherweise ließen mich meine Kenntnisse von Objective-C nicht im Stich und es wurde eine elegante Lösung gefunden. (Egor)

Pitchen

Am Freitag um 14 Uhr lief die Frist zum Hochladen eines Videos über das Projekt – mehrere Teams schafften es nicht rechtzeitig und wurden disqualifiziert. Und um 14:40 Uhr hatten wir einen Pitch vor den Track-Kuratoren zum Thema Produkt. Wir hatten Leute vom Video- und Musikteam und ihnen schien alles am Spielfeld zu gefallen. Wir belegten in unserer Strecke den zweiten Platz (wir wollten Erster werden, weil wir so ein cooles Projekt haben!) und landeten im Finale (zwei Teams aus unserer Strecke qualifizierten sich).

— Dieses Jahr war ich zum ersten Mal Kurator eines internen Hackathons. Ich muss mit Zurückhaltung sagen: Es war äußerst schwierig, die Arbeit zu bewerten. Das Niveau aller Teams war ausnahmslos unglaublich. Eine Funktion sollte nicht nur technologisch fortgeschritten sein, nicht nur „nahe der Produktion“ und nicht nur „potenziell nützlich für unsere Produkte“. Das Gewinnerprojekt muss alle diese Kriterien gleichzeitig erfüllen. Es scheint, dass es den Jungs gelungen ist. (Andrew)

Um 17:40 Uhr hatten wir unseren letzten Pitch. Zu diesem Zeitpunkt war es notwendig, eine weitere Demo vorzubereiten, dieses Mal für das gesamte Team, und die Jury bestand aus einer anderen: dem technischen Direktor, dem Produktdirektor und dem Marketingdirektor.

Um fünf Uhr abends war alles vorbei – wir gingen nach Hause ins Bett, ohne etwas über die Ergebnisse zu wissen.

Die Ergebnisse sind endlich

Die Ergebnisse wurden erst am Montag bekannt gegeben. Zuerst wurden die Gewinner der Titel ausgezeichnet (nicht unser Fall – ich möchte Sie daran erinnern, wir waren Zweite), dann die Anführer der Publikumsabstimmung (nicht wir) und dann der Dritte (und das sind auch nicht wir), der zweitens (wieder nicht wir) und schließlich wir.

Hier sind die Projekte, mit denen wir konkurrieren mussten:

2. Platz – reaktionsschneller Sprachassistent;
3. Platz – Zeitleiste interner Fehler;
Der People's Choice Award erinnert an bevorstehende Chat-Meetings.

— Das ist der beste Hackathon, an dem ich je teilgenommen habe. Es gab viel mehr Verkehr als selbst in Junction. (Danya)

— Ich habe es wirklich genossen, mit Kollegen aus einer völlig anderen Abteilung zusammenzuarbeiten – ich hatte noch nie zuvor mit maschinellem Lernen zu tun gehabt, es kam mir wie eine Art Magie vor, aber jetzt ist es nicht mehr so. (Egor)

— Es war sehr cool, Teil eines so coolen Teams mit einem so coolen Projekt zu werden. An einem Tag habe ich es geschafft, Designer, Videofilmer, Toningenieur, Redakteur, Musiker und Texter zu sein! Ich war auch der Einzige, der schlafen konnte. (Tema)

Leben nach dem Hackathon

Die meisten bei Hackathons entwickelten Projekte schaffen es aus verschiedenen Gründen nicht in den Verkauf: Fokusveränderung, Komplexität der Umsetzung, Unvorhergesehenes bei der Umsetzung. Ein interner Hackathon ist keine Ausnahme.

Dennoch listen wir die Projekte auf, die das Licht der Welt erblickten:

  • jedermanns Liebling Vinci;
  • Benutzerkompatibilitätsprüfung, das am 14. Februar 2018 gestartet wurde;
  • красивые Poster für kurze Einträge;
  • und eine Reihe interner Funktionen, über die wir gerne sprechen würden, aber nicht können :)

Wie wir einen internen Hackathon gewonnen haben, indem wir Skibidi, Zahnseide und Javascript gelernt haben

Source: habr.com

Kommentar hinzufügen