Kodim-Pizza

Hallo Habr. Wir haben spontan den ersten internen Hackathon durchgeführt. Ich habe beschlossen, Ihnen meine Sorgen und Schlussfolgerungen zur Vorbereitung darauf in zwei Wochen sowie die daraus resultierenden Projekte mitzuteilen.

Kodim-Pizza

Der langweilige Teil für Marketinginteressierte

Ich beginne mit einer kleinen Geschichte.

Anfang April. Unser Büro veranstaltet den ersten MskDotNet-Community-Hackathon. Der Kampf um Tatooine ist in vollem Gange, diesmal in unserer Galaxie. Samstag. 20 Mannschaften. Pizza. Es ist alles sehr gefühlvollBeweise). Ein aufblasbarer R2-D2 ragt im Raum auf. Die Teams schreiben die korrektesten Algorithmen, um das gefährlichste Rennen auf der Karte zu bestehen. Wir verschieben den Start der ersten Rennen. Kekse und Kaffee sparen. Die Organisatoren und ich gingen davon aus, dass viele Leute am Samstag nach dem Mittagessen abreisen würden. Aber nein. 12 Stunden Codierung liegen hinter uns. Das endgültige. Etwas fällt ab, etwas startet nicht. Aber alle sind glücklich. Unser Team gewinnt. Wir freuen uns doppelt.

Ich teile meine Freude über Slack und mir kommt die Idee: „Wir müssen unseren eigenen Hackathon machen.“ Ich schreibe an unsere Tankstelle Sasha. Schweigen.

Morgen. Ich trinke Kaffee im Büro. Ich sehe Sasha von hinten auf mich zukommen. „Lisa, das ist großartig! Der 21. April ist für uns ein wichtiges Datum. Lass es uns tun! WTF!? So schnell? A? Was? Ich muss Mitte April für ein Praktikum nach Syktyvkar fliegen. Ja, zum Teufel mit ihm! Lasst uns.

Es sind noch 2 Wochen übrig. Ich war noch nie der alleinige Organisator eines Hackathons. Lassen Sie und intern. Ich habe Artikel zu diesem Thema gelesen. Zinn. Es dauert mehrere Monate. Es werden mehrere Personen benötigt. Sie müssen über Merchandise, Preise, Bedingungen und Zeitplan nachdenken, Interesse wecken, das Ziel und die Budgets verstehen. Und vielleicht sogar den Sinn des Lebens verstehen. Ich werde es definitiv nicht schaffen. Und während Sie gelesen und vorbereitet haben, war bereits eine Woche vergangen. Es ist Zeit, die Artikel zu bewerten und etwas zu unternehmen.

Schauen Sie sich unsere einwöchige interne Hackathon-Checkliste an

  • Planen: Setzen Sie sich ruhig hin und schreiben Sie eine Liste, was für den Hackathon erledigt werden muss. 30 Minuten.
  • Aufgabe: Die Teilnehmer schlagen selbst Projekte vor und wählen sie aus, die sie in Google Sheets erstellen möchten. Hintergrundaufgabe, 2 Stunden.
  • Planen: Auf deinem Knie schreibst du eine kurze Zeitaufstellung unter Berücksichtigung von 3 Pausen und dem Finale. 20 Minuten.
  • Befehle: Veröffentlichen Sie eine Nachricht über einen Hackathon mit einem Zeitplan von der Tankstelle in IT-Kanälen in Slack/Mail/etc und erstellen Sie einen separaten Kanal für den Hackathon. Darin werden alle in Teams eingeteilt, und die Unentschlossenen tun dies in den ersten 5 Minuten des Hackathons. Hintergrundaufgabe, 2 Stunden.
  • Gebäck: Du entwickelst zusammen mit zwei Entwicklern Merch, übergibst es dem Designer zum Rendern und bereitest es vor. Hintergrundaufgabe, 3 Tage.
  • Hackathon: Du kommst ins Büro, koordinierst zu Beginn alle, gehst deinen Geschäften nach, liest Reddit, berichtest vor allem über jede Pause über frische Pizza, fotografierst den Sonnenuntergang, verkündest das Finale, stimmst gemeinsam ab und wählst den Gewinner. 1 Tag.
  • Unter dem Sternchen: Natürlich denkst du ständig daran, dass alles gut läuft. Natürlich wird nicht jeder Ihre Nachricht sehen und es ist besser, mit einigen persönlich zu sprechen. Wenn dir jemand hilft, wird natürlich alles 2-mal einfacher (die wundervolle Alena hat mir geholfen).

Der weniger langweilige Teil am Hackathon-Termin

Warum 21. April? Dieser Tag ist für uns bedeutsam. Vor genau einem Jahr, am 21. April, gerieten wir am ersten Wochenende nach Beginn der Bundeswerbekampagne unter Last. Am nächsten Tag, Sonntag, war unser Team ab 8 Uhr bei der Arbeit. Dann erstellten wir das Sundayhackathon-Board in Trello und begannen eine Woche Schichtarbeit mit 12 Stunden am Tag. Die Situation war so kritisch, dass wir nicht einmal Zeit zum Essen hatten und von Jungs aus anderen Teams gefüttert wurden.

Kodim-Pizza

Eine ausführlichere Geschichte können Sie unter lesen Seite von Fjodor Owtschinnikow (unser CEO). Seitdem hat sich bei uns viel verändert, aber jetzt werden wir das Datum bestimmt nicht vergessen.

In diesem Jahr haben wir beschlossen, dass dieses Ereignis im Gedächtnis der Nachwelt verewigt werden soll, und haben in bester Tradition den ersten internen Hackathon in der Geschichte von Dodo veranstaltet, der 10 Stunden dauerte.

Das Langweiligste an Hackathon-Projekten

Haftungsausschluss: Alle Beschreibungen wurden von den Jungs selbst verfasst, daher liegt die Urheberschaft des Textes nicht bei mir.

Oleg Lerning (maschinelles Lernen)

Dima Kochnev, Sasha Andronov (@alexandronov)

Wir wollten ein neuronales Netzwerk erstellen, das ohne Wissen feststellen kann, welche Art von Pizza auf dem Foto zu sehen ist. Als Ergebnis haben sie ein sehr einfaches und spielerisches Gerät entwickelt – es erkennt 10 Pizzen und hat grob herausgefunden, wie alles funktioniert, und zwar so weit wie möglich an einem Tag (~ 10 Stunden).

Kodim-Pizza

Insbesondere haben wir festgestellt, dass die Branche ein Niveau erreicht hat, bei dem ein gewöhnlicher Entwickler fertige Bibliotheken nehmen, die Dokumentation lesen und sein eigenes neuronales Netzwerk trainieren kann, ohne tief in das Thema einzugreifen. Und es wird gut genug funktionieren, um echte Probleme zu lösen.

Benutztes Werkzeug:

  • Bildai ist eine praktische und einfache Bibliothek für die Arbeit mit maschinellem Lernen und Computer Vision.
  • Die Modelle haben zwei ausprobiert – ResNet50, Yolo.
  • Der Code wurde natürlich in Python geschrieben.

Wir hatten 11000 Fotos, aber davon entpuppten sich fast drei Viertel als Müll und der Rest waren unterschiedliche, unpassende Blickwinkel. Als Ergebnis haben wir ein fertiges Modell genommen (das einfach weiß, wie man Pizza findet) und mit seiner Hilfe den Müll selbst getrennt. Außerdem war der Name des Fotos der Name der Pizza – also sortierten wir sie in Ordner, aber es stellte sich heraus, dass die Namen nicht mit der Realität übereinstimmten und hier mussten wir sie mit unseren Händen aufräumen. Als Ergebnis blieben etwa 3-4 Fotos übrig, es ist klar, dass dies eine unbedeutende Menge ist, aber dennoch stellte sich heraus, dass dies ausreichte, um 500 Pizzen voneinander zu trennen.

Um das Grid zu trainieren, haben wir die günstigste virtuelle Maschine in Azure auf NVIDIA Tesla K80 verwendet. Es wurde in 100 Epochen trainiert, aber es war klar, dass das Netzwerk nach 50 Epochen übersättigt war, da nur ein kleiner Datensatz vorhanden war.

Eigentlich ist das ganze Problem der Mangel an guten Daten.

Kodim-Pizza

Wir sind vielleicht etwas verwirrt, aber wir müssen bedenken, dass wir im Allgemeinen keine Erfahrung in der Bearbeitung all dieser Fälle haben.

GUI für NOOBS (Pizza-Bestellkonsole)

Mischa Kumachev (Ceridan), Zhenya Bikkinin, Zhenya Vasiliev

Wir haben einen Prototyp einer Konsolenanwendung für Geeks zusammengestellt, mit der Sie Pizza über das Terminal oder die Befehlszeile bestellen oder sie sogar in die Bereitstellungspipeline einbetten und nach erfolgreicher Veröffentlichung Pizza ins Büro liefern können.

Kodim-Pizza

Die Arbeit war in mehrere Teile gegliedert: Wir haben herausgefunden, wie unsere API für mobile Anwendungen funktioniert, und haben mithilfe dieser unsere eigene CLI erstellt oklif und richteten die Veröffentlichung des von uns zusammengestellten Pakets ein. Die letzte Aufgabe hatte gegen Ende des Hackathons mehrere unangenehme Minuten. Bei uns funktionierte lokal alles und sogar die alten veröffentlichten Versionen des Pakets funktionierten, aber die neuen (die weitere coole Funktionen und Emoticons hinzufügten) funktionierten nicht. Wir haben ungefähr 40 Minuten damit verbracht, herauszufinden, was schief gelaufen ist, aber am Ende hat alles wie durch Zauberei funktioniert.

Unser Programm für den Maximum-Hackathon war eine echte Pizzabestellung ins Büro über unsere CLI. Wir ließen alles ein Dutzend Mal auf dem Prüfstand laufen, aber meine Hände zitterten immer noch, als ich Befehle auf dem Prod eingab.

Kodim-Pizza

Infolgedessen haben wir es trotzdem geschafft!

Kodim-Pizza

CourierGo

Anton Bruzhmelev (Autor), Vanya Zverev, Gleb Lesnikov (Entropie), Andrey Sarafanov

Sie nahmen die Idee „Bewerbung für einen Kurierdienst“ auf.

Hintergrundinformationen zur Vorbereitung.Zunächst habe ich herausgefunden, welche Funktionen die Anwendung enthalten kann. Eine Liste der Funktionen ergab sich wie folgt:

  • Mit dem Code meldet sich die Anwendung an der Lieferkasse an.
  • Die Anwendung zeigt sofort verfügbare Bestellungen an, Bestellungen, die angenommen werden müssen.
  • Der Kurier nimmt die Bestellung entgegen und nimmt sie mit auf die Reise.
  • Ihm wird die geschätzte Zeit angezeigt und ob er Zeit hat oder nicht.
  • Der Kunde zeigt, dass der Kurier gegangen ist.
  • Der Kunde beginnt, den Kurierpunkt auf der Karte und die voraussichtliche Zeit anzuzeigen.
  • Der Kurier kann dem Kunden in einem Chat aus der Anwendung heraus schreiben.
  • Der Kunde kann im Chat aus der Anwendung heraus an den Kurier schreiben.
  • Fünf Minuten vor der Ankunft erhält der Kunde die Nachricht, dass der Kurier in der Nähe sei. Seien Sie vorbereitet.
  • Der Kurier vermerkt im Antrag, dass er angekommen ist und wartet.
  • Der Kurier ruft mit einem Klick aus der Anwendung heraus an und meldet, dass (Aufstehen, Nähern usw.)
  • Der Kunde nimmt die Bestellung an und gibt den PIN-Code aus der Anwendung oder SMS ein, um die Lieferung zu bestätigen. (als Unterschrift) Damit der Kurier die Lieferung nicht vorzeitig abschließen kann, wenn er zu spät kommt.
  • Die Bestellung wird im System als geliefert markiert.

Plus ein paar alternative Szenarien:

  • Der Kurier kann die Bestellung als nicht zugestellt markieren und einen Grund angeben.
  • Bei Verspätung kann der Kurier per Knopfdruck ein elektronisches Zertifikat per SMS ausstellen. Oder das Zertifikat kommt automatisch, wenn die Lieferzeit nicht eingehalten wird.

Das Gefühl für die Aussichten und die Notwendigkeit dieses Projekts war natürlich anregend.

Am nächsten Tag ging ich mit dem Team zum Mittagessen und besprach, wie die Mindestfunktionalität der Anwendung aussehen würde.

Als Ergebnis entstand die folgende Liste der Aufgaben, die beim Hackathon erledigt werden mussten:

  • Melden Sie sich an der Lieferkasse an.
  • Aktuelle Position anzeigen.
  • Daten an externe API senden (Koordinaten, Bestellung angenommen, Bestellung geliefert).
  • Erhalten Sie Daten von einer externen API (aktuelle Kurieraufträge).
  • Senden Sie eine Veranstaltung über die Tatsache, dass er die Bestellung zur Lieferung angenommen / geliefert hat.
  • Zeigen Sie die aktuelle Position des Kuriers auf der Karte auf der Website an.

Die Hauptarbeit schien darin zu bestehen, das Backend, die Anwendung selbst, zu erstellen (nach Diskussionen entschieden wir uns für ReactNative, um die Anwendung oder vielmehr die darüber liegende Bindung zu entwickeln – expo.io, sodass Sie überhaupt keinen nativen Code schreiben müssen). Was das Backend angeht, gab es zunächst Hoffnung für Vanya Zverev, da er Erfahrung im Umgang mit unserem Service-Template und K8s hatte (welchen Job er übernahm). ReactNative war von mir und Andrey Sarafanov berührt.

Ich beschloss, sofort ein funktionierendes Repository für das Projekt selbst zu erstellen. Um 12 Uhr nachts stellte ich fest, dass die Geolokalisierung im Hintergrund in ReactNative nicht gut funktioniert. Wenn Sie keinen nativen Code schreiben, war ich ein wenig frustriert. Dann ließ ich los, als mir klar wurde, dass ich nicht die Dokumentation des expo.io-Frameworks, sondern von ReactNative las. Dadurch war mir am Abend bereits klar, wie ich die aktuelle Position in expo.io abrufen und separate Bildschirme zeichnen kann (für Login, Bestellanzeige usw.).

Kodim-Pizza

Am Morgen lockten sie Gleb beim Hackathon in ihr vielversprechendes Projekt. Sie entwickelten schnell einen Plan, was zu tun war.

Kodim-Pizza

Sie machten einen Fehler, als sie gemäß der Projektvorlage versuchten, die Kommunikation nicht über HTTP, sondern über GRPC zu gestalten, da niemand wusste, wie man einen GRPC-Client für JavaScript erstellt. Infolgedessen gaben sie diese Idee auf, nachdem sie etwa anderthalb Stunden damit verbracht hatten. Aus diesem Grund begannen die Leute im Hintergrund damit, den fertigen Server von GRPC auf WebApi umzustellen. Nach einer halben Stunde konnten wir endlich die Kommunikation zwischen der Anwendung und dem Backend aufbauen, und siehe da. Aber gleichzeitig hat Gleb die Bereitstellung auf k8s und die automatische Bereitstellung durch Festschreiben an den Master fast abgeschlossen. 🙂

Als Speicher haben wir uns für MySQL entschieden, um zumindest bei der Datenbank kein Risiko einzugehen (es gab Überlegungen zu CosmosDb).

Kodim-Pizza

Zusammengefasst:

  • Das Speichern der aktuellen Koordinaten des Kuriers aus der Anwendung in der Datenbank wurde implementiert.
  • Wir haben RabbitMQ vermasselt und Nachrichten über die Annahme der Bestellung durch den Kurier abonniert, um die Bestellung des Kuriers sofort in der Anwendung anzuzeigen.
  • Wir begannen, den Zeitpunkt der Lieferung der Bestellung in der Datenbank zu speichern, nachdem der Kurier die Schaltfläche in der Anwendung gedrückt hatte. Wir hatten keine Zeit, das Senden eines Ereignisses an den Empfänger hinzuzufügen, bei dem die Bestellung geliefert wurde.
  • Ich habe auf der aktuellen Bestellseite der Website eine Kartenanzeige mit der aktuellen Position des Kuriers erstellt. Diese Funktionalität blieb jedoch noch etwas unvollendet, da es nicht möglich war, CORS in der Umgebung für den Empfang von Koordinaten von unserem neuen Dienst zu konfigurieren.

M87

Roma Bukin, Gosha Polevoy (Georgepolevoy), Artjom Trofimushkin

Wir wollten einen OpenID Connect-Anbieter implementieren, da wir derzeit unser eigenes Authentifizierungsprotokoll verwenden, was eine Reihe von Schwierigkeiten mit sich bringt: benutzerdefinierte Client-Bibliotheken, umständliche Arbeit externer Partner, möglicherweise Sicherheitsprobleme (schließlich OAuth2.0 und OpenID). Connect in der Referenzimplementierung kann als sicher angesehen werden, aber ich bin mir bei unserer Lösung nicht sicher.

Kodim-Pizza

Wir haben einen separaten Dienst erstellt, der einen Speicherdienst für persönliche Daten emuliert, um ein kleines Modell eines länderunabhängigen Authentifizierungsanbieters zu erstellen, der personenbezogene Daten an einen separaten Dienst weiterleitet (dies würde es in Zukunft ermöglichen, einen einzigen Dienst mit zu haben). mit der man sich mit einer Kontoaufzeichnung in jedem Land anmelden und gleichzeitig die DSGVO und andere Bundesgesetze einhalten kann). Diesen Teil haben wir, genau wie der Anbieter, übernommen und erfolgreich miteinander verknüpft. Als nächstes war es notwendig, eine API zu erstellen, die durch die vom Anbieter ausgegebenen Token geschützt ist, ihre Selbstprüfung durch den Anbieter unterstützt und sichere Daten zurückgibt, wenn die Anfrage den Autorisierungsrichtlinien entspricht (wir überprüfen, ob der Benutzer gemäß den authentifiziert ist). Bearer-Schema, sein Token enthält einen bestimmten Geltungsbereich + der Benutzer selbst hat eine Berechtigung, die das Tätigen des Anrufs ermöglicht. Auch dieser Teil ist abgeschlossen. Die letzte Komponente war ein JavaScript-Client, der ein Token erhielt, mit dem er eine sichere API aufrufen konnte. Wir konnten diesen Teil nicht machen. Das heißt, der gesamte funktionale Teil war fertig, aber der Front-End-Teil war noch nicht bereit, die Leistung des gesamten Systems zu demonstrieren.

E-E-E (Spielzeug)

Dima Afonchenko, Sasha Konovalov

Wir haben ein Minispielzeug auf einer Dock gebaut, bei dem verspielte Hände eine Wurst auf eine Pizza legen. Wenn man die Wurst falsch auflegt, erscheint die traurige Aufschrift „Abgelehnt“ auf dem Bildschirm, und wenn man die ganze Wurst richtig auflegt, dann erscheint eine zufällige Tatsache über Pizza.

Kodim-Pizza

Sie wollten das zweite Level mit dem Werfen von Tomaten schaffen, hatten aber keine Zeit.

Kodim-Pizza

Kurze Fortsetzung: Wer hat gewonnen?

Vor dem Hackathon haben wir mit den Jungs gesprochen und ich habe sie gefragt, welchen Preis sie im Falle eines Sieges gerne erhalten würden. Es stellte sich heraus, dass der wertvollste Preis „der Weg zum Produkt“ sein würde.

Kodim-Pizza

Erwarten Sie von uns daher bald die Ankündigung eines Spiels mit Stiften, bei denen Peperoni auf Pizza geworfen werden.

Wie ein aufmerksamer Leser feststellen konnte, gewann das Team „E-E-E (Spielzeug)“. Glückwunsch, Leute!

An der Umfrage können nur registrierte Benutzer teilnehmen. Einloggenbitte.

Welches Projekt hat Ihnen am besten gefallen?

  • Oleg Lerning (maschinelles Lernen)

  • GUI für NOOBS

  • CourierGo

  • M87

  • Uh-uh

5 Benutzer haben abgestimmt. 3 Benutzer enthielten sich der Stimme.

Source: habr.com

Kommentar hinzufügen