Hackathon DevDays'19 (Teil 1): ein Tagebuch mit Empfehlungen, ein Wanderroutengenerator und flüssige Demokratie

Vor kurzem haben wir erzählt über den Corporate Masterstudiengang von JetBrains und der ITMO University „Software Development / Software Engineering“. Wir laden alle Interessierten am Montag, 29. April, zum Tag der offenen Tür ein. Wir verraten Ihnen, welche Vorteile unser Masterstudium mit sich bringt, welche Prämien wir den Studierenden bieten und was wir im Gegenzug verlangen. Darüber hinaus beantworten wir auf jeden Fall Fragen unserer Gäste.

Hackathon DevDays'19 (Teil 1): ein Tagebuch mit Empfehlungen, ein Wanderroutengenerator und flüssige DemokratieDer Tag der offenen Tür findet im JetBrains-Büro im Times Business Center statt, wo unsere Masterstudenten studieren. Beginn ist um 17:00 Uhr. Alle Details und die Anmeldung zur Veranstaltung können Sie auf der Website erfahren mse.itmo.ru. Kommen Sie und Sie werden es nicht bereuen!

Einer der Hauptbestandteile des Programms ist die Praxis. Davon haben Studierende jede Menge: wöchentliche Hausaufgaben, Semesterprojekte und Hackathons. Dank der vollständigen Einarbeitung in moderne Entwicklungsmethoden und -technologien während des Studiums integrieren sich die Absolventen schnell in die Arbeitsprozesse großer IT-Unternehmen.

In diesem Beitrag möchten wir ausführlicher auf die DevDays-Hackathons eingehen, die alle sechs Monate stattfinden. Die Regeln sind einfach: Teams aus 3-4 Personen bilden sich zusammen und die Studierenden erwecken drei Tage lang ihre eigenen Ideen zum Leben. Was könnte dabei herauskommen? Lesen Sie den ersten Teil der Geschichten über die Hackathon-Projekte dieses Semesters von den Studierenden selbst :)

Tagebuch mit Filmempfehlungen

Hackathon DevDays'19 (Teil 1): ein Tagebuch mit Empfehlungen, ein Wanderroutengenerator und flüssige Demokratie

Der Autor der Idee
Iwan Iltschuk
Zusammensetzung des Teams
Ivan Ilchuk – Analyse der Filmhandlung, Server
Vladislav Korablinov – Entwicklung von Modellen zum Vergleich der Nähe eines Tagebucheintrags und der Handlung eines Films
Dmitry Valchuk – Benutzeroberfläche
Nikita Vinokurov – Benutzeroberfläche, Design

Das Ziel unseres Projekts war es, eine Desktop-Anwendung zu schreiben – ein Tagebuch, das dem Benutzer anhand der darin enthaltenen Einträge Filme empfiehlt.

Diese Idee kam mir, als ich auf dem Weg zur Universität war und über meine Probleme nachdachte. „Welches Problem auch immer ein Mensch hat, irgendein klassischer Schriftsteller hat bereits darüber geschrieben“, dachte ich. „Und da es jemand geschrieben hat, bedeutet das, dass jemand es bereits gefilmt hat.“ So entstand ganz natürlich der Wunsch, einen Film über eine Person mit den gleichen seelischen Qualen anzusehen.

Offensichtlich gibt es eine Vielzahl von separaten Tagebüchern und separaten Empfehlungsdiensten (aber normalerweise basieren die Empfehlungen auf dem, was der Person zuvor gefallen hat). Im Prinzip hat dieses Projekt etwas mit der Suche nach einem Film nach Schlüsselpunkten gemeinsam, aber dennoch bietet unsere Anwendung zunächst die Funktionalität eines Tagebuchs.

Hackathon DevDays'19 (Teil 1): ein Tagebuch mit Empfehlungen, ein Wanderroutengenerator und flüssige DemokratieWie haben wir das umgesetzt? Wenn Sie den magischen Knopf drücken, sendet das Tagebuch einen Eintrag an den Server, wo der Film anhand der Beschreibung aus Wikipedia ausgewählt wird. Unser Frontend wurde in Electron erstellt (wir verwenden es, nicht die Website, da wir uns ursprünglich entschieden hatten, Benutzerdaten nicht auf dem Server, sondern lokal auf dem Computer zu speichern), und der Server und das Empfehlungssystem selbst wurden in Python erstellt: TFs waren aus den Beschreibungen erhalten -IDF-Vektoren, die auf ihre Nähe zum Tagebucheintragsvektor verglichen wurden.

Ein Teammitglied arbeitete nur am Modell, das andere arbeitete ausschließlich am Frontend (zunächst zusammen mit einem dritten Mitglied, das später auf das Testen umstieg). Ich war damit beschäftigt, Filmhandlungen aus Wikipedia und dem Server zu analysieren.

Schritt für Schritt kamen wir dem Ergebnis näher und überwanden dabei eine Reihe von Problemen, angefangen bei der Tatsache, dass das Modell zunächst viel RAM benötigte, bis hin zur Schwierigkeit, Daten auf den Server zu übertragen.

Um nun einen Film für den Abend zu finden, ist kein großer Aufwand erforderlich: Das Ergebnis unserer dreitägigen Arbeit ist eine Desktop-Anwendung und ein Server, auf den der Benutzer über https zugreift und als Antwort eine Auswahl von 5 Filmen erhält eine kurze Beschreibung und ein Poster.

Meine Eindrücke von dem Projekt sind sehr positiv: Die Arbeit war vom frühen Morgen bis spät in die Nacht fesselnd und die daraus resultierende Anwendung liefert immer wieder äußerst witzige Ergebnisse im Stil von „Schlaflose Nacht“ für einen Tagebucheintrag über Hausaufgaben an der Uni oder einen Film über den ersten Schultag für eine Geschichte über den ersten Tag an der Abteilung.

Relevante Links, Installer usw. können gefunden werden hier.

Routengenerator

Hackathon DevDays'19 (Teil 1): ein Tagebuch mit Empfehlungen, ein Wanderroutengenerator und flüssige DemokratieDer Autor der Idee
Artemjewa Irina
Zusammensetzung des Teams
Artemyeva Irina – Teamleitung, Hauptrunde
Gordeeva Lyudmila – Musik
Platonov Vladislav – Routen

Ich laufe wirklich gerne durch die Stadt: Ich schaue mir Gebäude und Menschen an und denke über die Geschichte nach. Aber auch bei einem Wohnortwechsel stehe ich früher oder später vor dem Problem der Routenwahl: Ich habe alle erdenklichen Strecken absolviert. So entstand die Idee, die Generierung von Routen zu automatisieren: Man gibt den Startpunkt und die Länge der Route an und das Programm gibt einem eine Option. Spaziergänge können lang sein, daher scheint es eine logische Weiterentwicklung der Idee zu sein, die Möglichkeit hinzuzufügen, Zwischenpunkte für einen „Stopp“ anzugeben, an dem man einen Snack zu sich nehmen und sich ausruhen kann. Ein weiterer Entwicklungszweig war die Musik. Zu Musik zu laufen macht immer mehr Spaß, daher wäre es toll, die Möglichkeit hinzuzufügen, eine Playlist basierend auf einer generierten Route auszuwählen.

Es war nicht möglich, solche Lösungen in den bestehenden Anwendungen zu finden. Die nächsten Analoga sind alle Routenplaner: Google Maps, 2GIS usw.

Am bequemsten ist es, eine solche Anwendung auf dem Telefon zu haben, daher war die Verwendung von Telegram eine gute Option. Es ermöglicht Ihnen, Karten anzuzeigen und Musik abzuspielen, und Sie können all dies steuern, indem Sie einen Bot schreiben. Die Hauptarbeit mit Karten wurde mithilfe der Google Map API durchgeführt. Mit Python ist es einfach, beide Technologien zu kombinieren.

Da das Team aus drei Personen bestand, wurde die Aufgabe in zwei sich nicht überschneidende Teilaufgaben (Arbeiten mit Karten und Arbeiten mit Musik) aufgeteilt, damit die Jungs unabhängig voneinander arbeiten konnten, und ich übernahm die Aufgabe, die Ergebnisse zu kombinieren.

Hackathon DevDays'19 (Teil 1): ein Tagebuch mit Empfehlungen, ein Wanderroutengenerator und flüssige DemokratieKeiner von uns hatte jemals mit der Google Map API gearbeitet oder Telegram-Bots geschrieben, daher war das Hauptproblem der Zeitaufwand für die Umsetzung des Projekts: Etwas zu verstehen dauert immer länger, als etwas zu tun, was man gut kennt. Es war auch schwierig, sich für die Telegram-Bot-API zu entscheiden: Aufgrund der Blockierung funktionieren nicht alle davon und ich hatte Mühe, alles einzurichten.

Es ist gesondert zu erwähnen, wie das Problem der Routengenerierung gelöst wurde. Es ist einfach, eine Route zwischen zwei Orten zu erstellen, aber was können Sie dem Benutzer bieten, wenn nur die Länge der Route bekannt ist? Lassen Sie den Benutzer 10 Kilometer laufen. In einer beliebigen Richtung wird ein Punkt ausgewählt, dessen Entfernung in einer geraden Linie 10 Kilometer beträgt. Anschließend wird eine Route zu diesem Punkt entlang realer Straßen erstellt. Höchstwahrscheinlich wird es nicht gerade sein, daher werden wir es auf die angegebenen 10 Kilometer verkürzen. Für solche Routen gibt es viele Möglichkeiten – wir haben einen echten Routengenerator!

Zunächst wollte ich die Karte in Bereiche segmentieren, die Grünflächen entsprechen: Böschungen, Höfe, Straßen, um die angenehmste Route für einen Spaziergang zu erhalten, und auch Musik entsprechend diesen Bereichen generieren. Es stellte sich jedoch heraus, dass dies mithilfe der Google Map API schwierig war (wir hatten keine Zeit, dieses Problem zu lösen). Es war jedoch möglich, die Konstruktion einer Route durch bestimmte Arten von Orten (Geschäft, Park, Bibliothek) umzusetzen: Wenn die Route alle angegebenen Orte umrundete, aber die gewünschte Entfernung noch nicht zurückgelegt wurde, wird sie bis zu einem abgeschlossen Vom Benutzer angegebener Abstand in einer zufälligen Richtung. Über die Google Map API können Sie außerdem die voraussichtliche Reisezeit berechnen und so genau eine Playlist für die gesamte Wanderung auswählen.

Infolgedessen hat es geschafft, eine Generation zu schaffen Routen nach Startpunkt, Entfernung und Zwischenpunkten; Alles war vorbereitet, um die Musik nach Streckenabschnitten zu klassifizieren, aber aus Zeitgründen wurde beschlossen, die Option zur Auswahl einer Playlist einfach als zusätzlichen UI-Zweig zu belassen. Somit konnte der Nutzer selbstständig die Musik auswählen, die er hören wollte.

Das Hauptproblem bei der Arbeit mit Musik bestand darin, dass man nicht wusste, woher man MP3-Dateien bekommen konnte, ohne dass der Benutzer ein Konto bei irgendeinem Dienst haben musste. Es wurde beschlossen, Musik vom Benutzer anzufordern (UserMusic-Modus). Dadurch entsteht ein neues Problem: Nicht jeder hat die Möglichkeit, Titel herunterzuladen. Eine Lösung besteht darin, ein Repository mit Musik von Benutzern zu erstellen (BotMusic-Modus) – daraus kann unabhängig von Diensten Musik generiert werden.

Obwohl nicht perfekt, haben wir die Aufgabe erfüllt: Am Ende hatten wir eine Anwendung, die ich gerne verwenden würde. Generell ist das sehr cool: Vor drei Tagen hatte man nur eine Idee und keinen einzigen Gedanken, wie man das genau umsetzt, aber jetzt gibt es eine funktionierende Lösung. Das waren sehr wichtige drei Tage für mich. Ich habe keine Angst mehr, mir etwas einfallen zu lassen, für dessen Umsetzung ich nicht genug Wissen habe. Es war unglaublich interessant, ein Teamleiter zu sein, und ich habe die wunderbaren Leute kennengelernt, die meinem Team beigetreten sind besser!

Flüssige Demokratie

Hackathon DevDays'19 (Teil 1): ein Tagebuch mit Empfehlungen, ein Wanderroutengenerator und flüssige Demokratie

Der Autor der Idee
Stanislaw Sytschew
Zusammensetzung des Teams
Stanislav Sychev – Teamleiter, Datenbank
Nikolay Izyumov – Bot-Schnittstelle
Anton Ryabushev – Backend

Innerhalb verschiedener Gruppen besteht häufig die Notwendigkeit, eine Entscheidung zu treffen oder abzustimmen. Normalerweise greifen sie in solchen Fällen darauf zurück direkte DemokratieWenn die Gruppe jedoch größer wird, kann es zu Problemen kommen. Beispielsweise möchte eine Person in einer Gruppe möglicherweise nicht oft Fragen beantworten oder Fragen zu bestimmten Themen beantworten. In großen Gruppen greifen sie auf sie zurück, um Probleme zu vermeiden repräsentative Demokratie, wenn aus dem ganzen Volk eine eigene Gruppe von „Stellvertretern“ gewählt wird, die den Rest von der Last der Wahl befreit. Aber es ist ziemlich schwierig, ein solcher Abgeordneter zu werden, und die Person, die es wird, wird nicht unbedingt ehrlich und respektabel sein, wie er den Wählern erschien.

Um die Probleme beider Systeme zu lösen, schlug Brian Ford das Konzept vor flüssige Demokratie. In einem solchen System steht es jedem frei, die Rolle eines regulären Benutzers oder eines Delegierten zu wählen, indem er einfach seinen Wunsch äußert. Jeder kann unabhängig abstimmen oder einem Delegierten zu einem oder mehreren Themen eine Stimme geben. Auch ein Delegierter kann seine Stimme abgeben. Sollte der Delegierte zudem nicht mehr zum Wähler passen, kann die Stimme jederzeit zurückgezogen werden.

Beispiele für den Einsatz von Liquid Democracy finden sich in der Politik, und wir wollten eine ähnliche Idee für den alltäglichen Gebrauch in allen möglichen Personengruppen umsetzen. Beim nächsten DevDays-Hackathon haben wir beschlossen, einen Telegram-Bot für die Abstimmung nach den Prinzipien der flüssigen Demokratie zu schreiben. Gleichzeitig wollte ich ein häufiges Problem bei solchen Bots vermeiden – die Verstopfung des allgemeinen Chats mit Nachrichten des Bots. Die Lösung besteht darin, möglichst viel Funktionalität in ein persönliches Gespräch zu bringen.

Hackathon DevDays'19 (Teil 1): ein Tagebuch mit Empfehlungen, ein Wanderroutengenerator und flüssige DemokratieUm diesen Bot zu erstellen, haben wir verwendet API von Telegram. Zur Speicherung der Abstimmungs- und Delegationshistorie wurde eine PostgreSQL-Datenbank ausgewählt. Um mit dem Bot zu kommunizieren, wurde ein Flask-Server installiert. Wir haben uns für diese Technologien entschieden, weil... Wir hatten bereits während unseres Masterstudiums Erfahrungen im Umgang mit ihnen. Die Arbeit an den drei Komponenten des Projekts – der Datenbank, dem Server und dem Bot – wurde erfolgreich auf die Teammitglieder verteilt.

Da drei Tage natürlich eine kurze Zeit sind, haben wir die Idee im Rahmen des Hackathons auf Prototypenebene umgesetzt. Aus diesem Grund haben wir einen Bot erstellt, der nur Informationen über die Eröffnung der Abstimmung und deren anonyme Ergebnisse in den allgemeinen Chat schreibt. Die Möglichkeit, abzustimmen und eine Umfrage zu erstellen, wird durch persönliche Korrespondenz mit dem Bot implementiert. Um abzustimmen, geben Sie einen Befehl ein, der eine Liste der Probleme anzeigt, die direkte Aufmerksamkeit erfordern. In der persönlichen Korrespondenz können Sie die Liste der Delegierten und deren bisherige Stimmen einsehen und ihnen auch Ihre Stimme zu einem der Themen geben.

Video mit einem Arbeitsbeispiel.

Es war interessant, an dem Projekt zu arbeiten, wir blieben bis Mitternacht an der Universität. Wir denken, dass dies eine tolle Möglichkeit ist, eine Pause vom Lernen zu machen, auch wenn es sehr anstrengend ist. Es war eine angenehme Erfahrung, in einem eingespielten Team zu arbeiten.

PS. Die Einschreibung für die Masterstudiengänge für das nächste Studienjahr ist bereits erfolgt ist offen. Jetzt beitreten!

Quelle: www.habr.com

Kommentar hinzufügen