Hackathon DevDays'19 (część 1): dziennik z rekomendacjami, generator tras pieszych i płynna demokracja

Ostatnio my powiedział o korporacyjnym programie magisterskim JetBrains i ITMO University „Rozwój oprogramowania / Inżynieria oprogramowania”. Zapraszamy wszystkich zainteresowanych na dzień otwarty w poniedziałek 29 kwietnia. Opowiemy Ci o zaletach naszego programu magisterskiego, jakie bonusy oferujemy studentom i czego żądamy w zamian. Ponadto na pewno odpowiemy na pytania naszych gości.

Hackathon DevDays'19 (część 1): dziennik z rekomendacjami, generator tras pieszych i płynna demokracjaDzień otwarty odbędzie się w biurze JetBrains w Times Business Centre, gdzie studiują studenci naszego studiów magisterskich. Rozpoczyna się o godzinie 17:00. Wszystkie szczegóły oraz rejestracja na wydarzenie można znaleźć na stronie internetowej mse.itmo.ru. Przyjdź, a nie pożałujesz!

Jednym z głównych elementów programu jest praktyka. Studenci mają tego mnóstwo: cotygodniowe prace domowe, projekty semestralne i hackatony. Dzięki całkowitemu zanurzeniu się w nowoczesnych metodologiach i technologiach rozwoju już podczas studiów, absolwenci szybko integrują się z procesami pracy dużych firm IT.

W tym poście chcemy bardziej szczegółowo omówić hackatony DevDays, które odbywają się co sześć miesięcy. Zasady są proste: zbierają się 3-4 osobowe zespoły i przez trzy dni uczniowie realizują swoje pomysły. Co może z tego wyniknąć? Przeczytaj pierwszą część opowieści o projektach hackathonowych w tym semestrze od samych studentów :)

Dziennik z rekomendacjami filmowymi

Hackathon DevDays'19 (część 1): dziennik z rekomendacjami, generator tras pieszych i płynna demokracja

Autor pomysłu
Iwan Ilczuk
Skład zespołu
Iwan Ilchuk – parsowanie fabuły filmu, serwer
Władysław Korablinow – opracowanie modeli porównania bliskości wpisu w pamiętniku i fabuły filmu
Dmitry Valchuk – UI
Nikita Vinokurov – interfejs użytkownika, projektowanie

Celem naszego projektu było napisanie aplikacji desktopowej - pamiętnika, który na podstawie zawartych w nim wpisów będzie polecał użytkownikowi filmy.

Ten pomysł przyszedł mi do głowy, gdy szedłem na uniwersytet i myślałem o swoich problemach. „Bez względu na problem, z jakim boryka się dana osoba, pisał już o tym jakiś klasyczny pisarz” – pomyślałem. „A skoro ktoś to napisał, oznacza to, że ktoś już to nakręcił”. Chęć obejrzenia filmu o osobie cierpiącej na tę samą udrękę psychiczną pojawiła się więc naturalnie.

Oczywiście istnieje wiele oddzielnych dzienników i odrębnych usług rekomendacyjnych (ale zazwyczaj rekomendacje opierają się na tym, co dana osoba wcześniej lubiła). W zasadzie ten projekt ma coś wspólnego z wyszukiwaniem filmu po kluczowych punktach, ale mimo to, nasza aplikacja przede wszystkim zapewnia funkcjonalność pamiętnika.

Hackathon DevDays'19 (część 1): dziennik z rekomendacjami, generator tras pieszych i płynna demokracjaJak to wdrożyliśmy? Po naciśnięciu magicznego przycisku dziennik wysyła wpis na serwer, gdzie na podstawie opisu zaczerpniętego z Wikipedii wybierany jest film. Nasz frontend został wykonany w Electronie (korzystamy z niego, a nie ze strony internetowej, ponieważ początkowo postanowiliśmy przechowywać dane użytkownika nie na serwerze, a lokalnie na komputerze), a serwer i sam system rekomendacji wykonano w Pythonie: TF-y zostały otrzymane z opisów - wektory IDF, które porównano pod kątem bliskości wektora wpisu do pamiętnika.

Jeden członek zespołu pracował tylko nad modelem, drugi pracował całkowicie nad frontendem (początkowo razem z trzecim członkiem, który później przeszedł na testy). Zajmowałem się parsowaniem wątków filmowych z Wikipedii i serwera.

Krok po kroku zbliżaliśmy się do wyniku, pokonując szereg problemów, zaczynając od tego, że model początkowo wymagał dużej ilości pamięci RAM, kończąc na trudności z przesłaniem danych na serwer.

Teraz znalezienie filmu na wieczór nie wymaga wielkiego wysiłku: efektem naszej trzydniowej pracy jest aplikacja desktopowa i serwer, do którego użytkownik uzyskuje dostęp poprzez https, otrzymując w odpowiedzi wybór 5 filmów z krótki opis i plakat.

Moje wrażenia z projektu są bardzo pozytywne: praca wciągała od wczesnego ranka do późnej nocy, a powstała aplikacja okresowo przynosi niezwykle zabawne rezultaty w stylu „Bezsennej nocy” do wpisu do pamiętnika o odrabianiu zadań domowych na uniwersytecie lub filmu o pierwszym dniu w szkole na opowieść o pierwszym dniu na wydziale.

Można znaleźć odpowiednie linki, instalatory itp tutaj.

Generator tras

Hackathon DevDays'19 (część 1): dziennik z rekomendacjami, generator tras pieszych i płynna demokracjaAutor pomysłu
Artemyjewa Irina
Skład zespołu
Artemyeva Irina – lider zespołu, pętla główna
Gordeeva Ludmiła – muzyka
Płatonow Władysław – trasy

Bardzo lubię spacerować po mieście: patrzeć na budynki, ludzi, myśleć o historii. Jednak nawet przy zmianie miejsca zamieszkania prędzej czy później staję przed problemem wyboru trasy: zrealizowałem wszystkie, które przychodziły mi do głowy. Tak powstał pomysł na automatyzację generowania tras: wskazujesz punkt początkowy i długość trasy, a program daje opcję. Spacery mogą być długie, więc logicznym rozwinięciem pomysłu wydaje się dodanie możliwości wskazania punktów pośrednich na „przystanek”, gdzie można coś przekąsić i odpocząć. Kolejną gałęzią rozwoju była muzyka. Chodzenie przy muzyce zawsze sprawia więcej frajdy, dlatego świetnie byłoby dodać możliwość wyboru playlisty na podstawie wygenerowanej trasy.

Wśród istniejących aplikacji nie udało się znaleźć takich rozwiązań. Najbliższymi analogami są wszelkie narzędzia do planowania tras: Mapy Google, 2GIS itp.

Najwygodniej jest mieć taką aplikację na swoim telefonie, dlatego dobrym rozwiązaniem było skorzystanie z Telegramu. Umożliwia wyświetlanie map i odtwarzanie muzyki, a tym wszystkim możesz sterować pisząc bota. Główna praca z mapami została wykonana przy użyciu Google Map API. Python ułatwia łączenie obu technologii.

W zespole były trzy osoby, więc zadanie podzielono na dwa, nie nakładające się na siebie podzadania (praca z mapami i praca z muzyką), tak aby chłopaki mogli pracować samodzielnie, a ja wziąłem się za połączenie wyników.

Hackathon DevDays'19 (część 1): dziennik z rekomendacjami, generator tras pieszych i płynna demokracjaNikt z nas nie pracował nigdy z Google Map API ani pisanymi botami Telegramu, więc głównym problemem była ilość czasu przeznaczona na realizację projektu: zrozumienie czegoś zawsze zajmuje więcej czasu niż zrobienie czegoś, co dobrze się zna. Wybór interfejsu API bota Telegramu był również trudny: z powodu blokowania nie wszystkie z nich działają i musiałem się męczyć, aby wszystko skonfigurować.

Warto osobno wspomnieć, jak rozwiązano problem generowania tras. Łatwo jest zbudować trasę pomiędzy dwiema lokalizacjami, ale co możesz zaoferować użytkownikowi, jeśli znana jest tylko długość trasy? Pozwól użytkownikowi przejść 10 kilometrów. Wybierany jest punkt w dowolnym kierunku, którego odległość w linii prostej wynosi 10 kilometrów, po czym budowana jest trasa do tego punktu po prawdziwych drogach. Najprawdopodobniej nie będzie to prosta trasa, dlatego skrócimy ją do podanych 10 kilometrów. Możliwości takich tras jest mnóstwo – mamy prawdziwy generator tras!

Początkowo chciałem podzielić mapę na obszary odpowiadające terenom zielonym: nasypy, podwórka, ulice, aby wyznaczyć najprzyjemniejszą trasę spaceru, a także generować muzykę zgodnie z tymi terenami. Jednak zrobienie tego za pomocą Google Map API okazało się trudne (nie mieliśmy czasu na rozwiązanie tego problemu). Jednakże możliwe było zrealizowanie budowy trasy przez określone typy lokalizacji (sklep, park, biblioteka): jeżeli trasa przebiegała wokół wszystkich określonych miejsc, ale nie przebyto jeszcze żądanej odległości, zostaje ona ukończona do odległość określona przez użytkownika w losowym kierunku. Google Map API umożliwia także obliczenie szacowanego czasu podróży, co pomaga wybrać playlistę dokładnie na cały spacer.

W efekcie, udało się stworzyć pokolenie trasy według punktu początkowego, odległości i punktów pośrednich; wszystko było przygotowane tak, aby klasyfikować muzykę według odcinków trasy, jednak z braku czasu zdecydowano się na pozostawienie opcji wyboru playlisty po prostu jako dodatkowej gałęzi UI. Dzięki temu użytkownik mógł samodzielnie wybrać muzykę, której chce słuchać.

Głównym problemem w pracy z muzyką był brak wiedzy, skąd można pobrać pliki mp3 bez konieczności posiadania konta w jakimkolwiek serwisie. Zdecydowano się poprosić użytkownika o muzykę (tryb UserMusic). Stwarza to nowy problem: nie każdy ma możliwość pobierania utworów. Jednym z rozwiązań jest utworzenie repozytorium z muzyką od użytkowników (tryb BotMusic) - z niego można generować muzykę niezależnie od usług.

Choć nie idealnie, zadanie wykonaliśmy: otrzymaliśmy aplikację, z której chciałbym korzystać. Ogólnie rzecz biorąc, jest to bardzo fajne: trzy dni temu miałeś tylko pomysł i ani jednej myśli, jak dokładnie go wdrożyć, ale teraz jest działające rozwiązanie. To były dla mnie bardzo ważne trzy dni. Już nie boję się wymyślić czegoś, czego nie mam wystarczającej wiedzy, aby wdrożyć, bycie liderem zespołu było niesamowicie interesujące, a także poznałem wspaniałych chłopaków, którzy dołączyli do mojego zespołu lepsza!

Płynna demokracja

Hackathon DevDays'19 (część 1): dziennik z rekomendacjami, generator tras pieszych i płynna demokracja

Autor pomysłu
Stanisław Sychew
Skład zespołu
Stanislav Sychev – kierownik zespołu, baza danych
Nikolay Izyumov – interfejs bota
Anton Ryabushev – backend

W obrębie różnych grup często zachodzi potrzeba podjęcia decyzji lub głosowania. Zwykle w takich przypadkach uciekają się do demokracja bezpośredniajednak gdy grupa się powiększy, mogą pojawić się problemy. Na przykład osoba w grupie może nie chcieć często odpowiadać na pytania lub odpowiadać na pytania dotyczące określonych tematów. W dużych grupach, aby uniknąć problemów, do których się uciekają demokracja reprezentatywna, gdy spośród ogółu narodu wybierana jest odrębna grupa „posłów”, która uwalnia resztę od ciężaru wyboru. Ale zostać takim posłem jest dość trudno, a osoba, która się nim stanie, niekoniecznie będzie uczciwa i szanowana, jak wydawało się wyborcom.

Aby rozwiązać problemy obu systemów, Brian Ford zaproponował tę koncepcję płynna demokracja. W takim systemie każdy może wybrać rolę zwykłego użytkownika lub delegata, po prostu wyrażając swoją chęć. Każdy może głosować samodzielnie lub oddać głos delegatowi w jednej lub większej liczbie spraw. Delegat może także oddać swój głos. Ponadto, jeżeli delegat nie będzie już odpowiadał wyborcy, głos można w każdej chwili wycofać.

Przykłady zastosowania płynnej demokracji można znaleźć w polityce, a my chcieliśmy wdrożyć podobny pomysł do codziennego użytku wśród wszelkiego rodzaju grup ludzi. Na kolejnym hackatonie DevDays postanowiliśmy napisać bota Telegrama umożliwiającego głosowanie zgodnie z zasadami płynnej demokracji. Jednocześnie chciałem uniknąć typowego problemu z tego typu botami - zaśmiecania czatu ogólnego wiadomościami od bota. Rozwiązaniem jest wniesienie jak największej funkcjonalności do osobistej rozmowy.

Hackathon DevDays'19 (część 1): dziennik z rekomendacjami, generator tras pieszych i płynna demokracjaDo stworzenia tego bota użyliśmy API z Telegramu. Do przechowywania historii głosowań i delegacji wybrano bazę danych PostgreSQL. Do komunikacji z botem został zainstalowany serwer Flask. Wybraliśmy te technologie, ponieważ... mieliśmy już doświadczenie w kontaktach z nimi podczas studiów magisterskich. Praca nad trzema komponentami projektu – bazą danych, serwerem i botem – została pomyślnie rozdzielona pomiędzy członków zespołu.

Oczywiście trzy dni to krótki czas, dlatego podczas hackatonu wdrożyliśmy pomysł do poziomu prototypu. W efekcie stworzyliśmy bota, który wpisuje na czat ogólny jedynie informację o rozpoczęciu głosowania i jego anonimowych wynikach. Możliwość głosowania i tworzenia ankiety realizowana jest poprzez osobistą korespondencję z botem. Aby zagłosować, wpisz polecenie wyświetlające listę problemów wymagających bezpośredniej uwagi. W korespondencji osobistej możesz zobaczyć listę delegatów i ich poprzednich głosów, a także oddać im swój głos na jeden z tematów.

Film z przykładem pracy.

Praca nad projektem była ciekawa, zostaliśmy na uczelni do północy. Uważamy, że jest to świetny sposób na przerwę od nauki, choć jest ona bardzo wyczerpująca. Praca w zgranym zespole była przyjemnym doświadczeniem.

PS. Ruszyły już zapisy na studia magisterskie na kolejny rok akademicki otwarty. Dołącz teraz!

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

Dodaj komentarz