Hackathon DevDays'19 (μέρος 1): ένα ημερολόγιο με συστάσεις, μια γεννήτρια διαδρομής περπατήματος και υγρή δημοκρατία

Πρόσφατα εμείς είπα σχετικά με το εταιρικό μεταπτυχιακό πρόγραμμα της JetBrains και του Πανεπιστημίου ITMO «Ανάπτυξη Λογισμικού / Μηχανική Λογισμικού». Προσκαλούμε όλους τους ενδιαφερόμενους σε ανοιχτή ημερίδα τη Δευτέρα 29 Απριλίου. Θα σας πούμε για τα πλεονεκτήματα του μεταπτυχιακού μας προγράμματος, τι μπόνους προσφέρουμε στους φοιτητές και τι απαιτούμε σε αντάλλαγμα. Επιπλέον, σίγουρα θα απαντήσουμε σε ερωτήσεις των καλεσμένων μας.

Hackathon DevDays'19 (μέρος 1): ένα ημερολόγιο με συστάσεις, μια γεννήτρια διαδρομής περπατήματος και υγρή δημοκρατίαΗ ανοιχτή ημερίδα θα πραγματοποιηθεί στο γραφείο JetBrains στο Times Business Center, όπου φοιτούν οι φοιτητές του μεταπτυχιακού μας. Έναρξη στις 17:00. Μπορείτε να μάθετε όλες τις λεπτομέρειες και να εγγραφείτε για την εκδήλωση στην ιστοσελίδα mse.itmo.ru. Ελάτε και δεν θα το μετανιώσετε!

Ένα από τα κύρια συστατικά του προγράμματος είναι η πρακτική. Οι μαθητές έχουν πολλά από αυτά: εβδομαδιαίες εργασίες για το σπίτι, εργασίες εξαμήνου και hackathons. Χάρη στην πλήρη εμβάπτιση στις σύγχρονες μεθοδολογίες και τεχνολογίες ανάπτυξης κατά τη διάρκεια των σπουδών τους, οι απόφοιτοι ενσωματώνονται γρήγορα στις εργασιακές διαδικασίες μεγάλων εταιρειών πληροφορικής.

Σε αυτή την ανάρτηση θέλουμε να μιλήσουμε πιο αναλυτικά για τα hackathons DevDays, τα οποία πραγματοποιούνται κάθε έξι μήνες. Οι κανόνες είναι απλοί: ομάδες 3-4 ατόμων συγκεντρώνονται και για τρεις μέρες οι μαθητές ζωντανεύουν τις δικές τους ιδέες. Τι μπορεί να προκύψει από αυτό; Διαβάστε το πρώτο μέρος των ιστοριών σχετικά με τα έργα hackathon αυτού του εξαμήνου από τους ίδιους τους φοιτητές :)

Ημερολόγιο με προτάσεις για ταινίες

Hackathon DevDays'19 (μέρος 1): ένα ημερολόγιο με συστάσεις, μια γεννήτρια διαδρομής περπατήματος και υγρή δημοκρατία

Ο συγγραφέας της ιδέας
Ιβάν Ιλτσούκ
Δομή εντολών
Ivan Ilchuk – ανάλυση πλοκής ταινίας, διακομιστής
Vladislav Korablinov – ανάπτυξη μοντέλων για σύγκριση της εγγύτητας μιας καταχώρησης ημερολογίου και της πλοκής μιας ταινίας
Dmitry Valchuk – UI
Nikita Vinokurov – UI, σχέδιο

Ο στόχος του έργου μας ήταν να γράψουμε μια εφαρμογή επιτραπέζιου υπολογιστή - ένα ημερολόγιο που θα συνιστούσε ταινίες στον χρήστη με βάση τις καταχωρίσεις σε αυτήν.

Αυτή η ιδέα μου ήρθε όταν πήγαινα στο πανεπιστήμιο και σκεφτόμουν τα προβλήματά μου. «Όποιο πρόβλημα κι αν αντιμετωπίζει κάποιος, κάποιος κλασικός συγγραφέας έχει ήδη γράψει γι' αυτό», σκέφτηκα. «Και αφού κάποιος το έγραψε, σημαίνει ότι κάποιος το έχει ήδη κινηματογραφήσει». Έτσι, η επιθυμία να παρακολουθήσετε μια ταινία για ένα άτομο με το ίδιο ψυχικό μαρτύριο εμφανίστηκε φυσικά.

Προφανώς, υπάρχει μεγάλη ποικιλία από ξεχωριστά ημερολόγια και ξεχωριστές υπηρεσίες συστάσεων (αλλά συνήθως οι συστάσεις βασίζονται σε αυτό που άρεσε στο άτομο στο παρελθόν). Κατ 'αρχήν, αυτό το έργο έχει κάτι κοινό με την αναζήτηση μιας ταινίας κατά βασικά σημεία, αλλά και πάλι, πρώτα απ 'όλα, η εφαρμογή μας παρέχει τη λειτουργικότητα ενός ημερολογίου.

Hackathon DevDays'19 (μέρος 1): ένα ημερολόγιο με συστάσεις, μια γεννήτρια διαδρομής περπατήματος και υγρή δημοκρατίαΠώς το εφαρμόσαμε αυτό; Όταν πατάτε το μαγικό κουμπί, το ημερολόγιο στέλνει μια καταχώρηση στον διακομιστή, όπου η ταινία επιλέγεται με βάση την περιγραφή που έχει ληφθεί από τη Wikipedia. Το frontend μας δημιουργήθηκε στο Electron (το χρησιμοποιούμε, όχι τον ιστότοπο, επειδή αρχικά αποφασίσαμε να αποθηκεύσουμε τα δεδομένα χρήστη όχι στον διακομιστή, αλλά τοπικά στον υπολογιστή) και ο διακομιστής και το ίδιο το σύστημα συστάσεων κατασκευάστηκαν σε Python: Τα TF ήταν που ελήφθησαν από τις περιγραφές -διανύσματα IDF που συγκρίθηκαν ως προς την εγγύτητα με τον φορέα καταχώρισης ημερολογίου.

Το ένα μέλος της ομάδας εργάστηκε μόνο στο μοντέλο, το άλλο εργάστηκε εξ ολοκλήρου στο μπροστινό μέρος (αρχικά μαζί με ένα τρίτο μέλος, το οποίο αργότερα πέρασε στη δοκιμή). Είχα ασχοληθεί με την ανάλυση πλοκών ταινιών από τη Wikipedia και τον διακομιστή.

Βήμα-βήμα πλησιάσαμε στο αποτέλεσμα, ξεπερνώντας μια σειρά από προβλήματα, ξεκινώντας από το γεγονός ότι το μοντέλο αρχικά απαιτούσε πολλή μνήμη RAM, καταλήγοντας στη δυσκολία μεταφοράς δεδομένων στον διακομιστή.

Τώρα, για να βρείτε μια ταινία για το βράδυ, δεν χρειάζεστε πολλή προσπάθεια: το αποτέλεσμα της τριήμερης εργασίας μας είναι μια εφαρμογή επιτραπέζιου υπολογιστή και ένας διακομιστής, στους οποίους ο χρήστης έχει πρόσβαση μέσω https, λαμβάνοντας ως απάντηση μια επιλογή από 5 ταινίες με σύντομη περιγραφή και αφίσα.

Οι εντυπώσεις μου από το έργο είναι πολύ θετικές: η δουλειά ήταν μαγευτική από νωρίς το πρωί μέχρι αργά το βράδυ και η εφαρμογή που προκύπτει παράγει περιοδικά εξαιρετικά αστεία αποτελέσματα στο στυλ "Sleepless Night" για μια εγγραφή ημερολογίου σχετικά με την εργασία στο πανεπιστήμιο ή μια ταινία για την πρώτη μέρα του σχολείου για μια ιστορία για την πρώτη μέρα στο τμήμα.

Μπορούν να βρεθούν σχετικοί σύνδεσμοι, προγράμματα εγκατάστασης κ.λπ εδώ.

Γεννήτρια διαδρομής

Hackathon DevDays'19 (μέρος 1): ένα ημερολόγιο με συστάσεις, μια γεννήτρια διαδρομής περπατήματος και υγρή δημοκρατίαΟ συγγραφέας της ιδέας
Αρτεμίεβα Ιρίνα
Δομή εντολών
Artemyeva Irina – επικεφαλής της ομάδας, κύριος βρόχος
Gordeeva Lyudmila – μουσική
Platonov Vladislav – διαδρομές

Μου αρέσει πολύ να περπατάω στην πόλη: κοιτάζω κτίρια, ανθρώπους, σκέφτομαι την ιστορία. Όμως, ακόμα και όταν αλλάζω τόπο διαμονής, αργά ή γρήγορα βρίσκομαι αντιμέτωπος με το πρόβλημα της επιλογής διαδρομής: ολοκλήρωσα όσες μπορούσα να σκεφτώ. Έτσι προέκυψε η ιδέα για την αυτοματοποίηση της δημιουργίας διαδρομών: υποδεικνύετε το σημείο εκκίνησης και το μήκος της διαδρομής και το πρόγραμμα σας δίνει μια επιλογή. Οι βόλτες μπορεί να είναι μεγάλες, επομένως μια λογική εξέλιξη της ιδέας φαίνεται να προσθέτει τη δυνατότητα να υποδεικνύονται ενδιάμεσα σημεία για μια «στάση», όπου θα μπορούσατε να έχετε ένα σνακ και να ξεκουραστείτε. Ένας άλλος κλάδος ανάπτυξης ήταν η μουσική. Το περπάτημα στη μουσική είναι πάντα πιο διασκεδαστικό, επομένως θα ήταν υπέροχο να προσθέσετε τη δυνατότητα επιλογής μιας λίστας αναπαραγωγής με βάση μια διαδρομή που δημιουργείται.

Δεν ήταν δυνατό να βρεθούν τέτοιες λύσεις ανάμεσα στις υπάρχουσες εφαρμογές. Τα πλησιέστερα ανάλογα είναι οποιοσδήποτε σχεδιαστής διαδρομής: Google Maps, 2GIS κ.λπ.

Είναι πιο βολικό να έχετε μια τέτοια εφαρμογή στο τηλέφωνό σας, επομένως η χρήση του Telegram ήταν μια καλή επιλογή. Σας επιτρέπει να εμφανίζετε χάρτες και να αναπαράγετε μουσική και μπορείτε να τα ελέγξετε όλα αυτά γράφοντας ένα bot. Η κύρια εργασία με τους χάρτες έγινε χρησιμοποιώντας το Google Map API. Η Python διευκολύνει τον συνδυασμό και των δύο τεχνολογιών.

Υπήρχαν τρία άτομα στην ομάδα, οπότε η εργασία χωρίστηκε σε δύο μη επικαλυπτόμενες δευτερεύουσες εργασίες (εργασία με χάρτες και εργασία με μουσική), έτσι ώστε τα παιδιά να μπορούν να εργαστούν ανεξάρτητα, και ανέλαβα τον εαυτό μου να συνδυάσω τα αποτελέσματα.

Hackathon DevDays'19 (μέρος 1): ένα ημερολόγιο με συστάσεις, μια γεννήτρια διαδρομής περπατήματος και υγρή δημοκρατίαΚανείς από εμάς δεν είχε δουλέψει ποτέ με το Google Map API ή γραπτά ρομπότ Telegram, επομένως το κύριο πρόβλημα ήταν ο χρόνος που διατέθηκε για την υλοποίηση του έργου: η κατανόηση κάτι απαιτεί πάντα περισσότερο χρόνο από το να κάνετε κάτι που γνωρίζετε καλά. Ήταν επίσης δύσκολο να επιλέξω το Telegram bot API: λόγω αποκλεισμού, δεν λειτουργούν όλα και έπρεπε να δυσκολευτώ να ρυθμίσω τα πάντα.

Αξίζει να αναφερθεί ξεχωριστά πώς λύθηκε το πρόβλημα της δημιουργίας δρομολογίων. Είναι εύκολο να δημιουργήσετε μια διαδρομή μεταξύ δύο τοποθεσιών, αλλά τι μπορείτε να προσφέρετε στον χρήστη εάν είναι γνωστό μόνο το μήκος της διαδρομής; Αφήστε τον χρήστη να θέλει να περπατήσει 10 χιλιόμετρα. Επιλέγεται ένα σημείο σε αυθαίρετη κατεύθυνση, η απόσταση μέχρι την οποία σε ευθεία γραμμή είναι 10 χιλιόμετρα, μετά την οποία κατασκευάζεται μια διαδρομή προς αυτό το σημείο κατά μήκος πραγματικών δρόμων. Το πιθανότερο είναι να μην είναι ίσιο, οπότε θα το κοντύνουμε στα καθορισμένα 10 χιλιόμετρα. Υπάρχουν πολλές επιλογές για τέτοιες διαδρομές - έχουμε μια πραγματική γεννήτρια διαδρομής!

Αρχικά, ήθελα να τμηματοποιήσω τον χάρτη σε περιοχές που αντιστοιχούν σε περιοχές πρασίνου: αναχώματα, αυλές, δρόμους, προκειμένου να έχω την πιο ευχάριστη διαδρομή για περπάτημα και επίσης να δημιουργήσω μουσική σύμφωνα με αυτές τις περιοχές. Αλλά το να το κάνετε αυτό χρησιμοποιώντας το Google Map API αποδείχθηκε δύσκολο (δεν είχαμε χρόνο να λύσουμε αυτό το πρόβλημα). Ωστόσο, ήταν δυνατή η υλοποίηση της κατασκευής μιας διαδρομής μέσω συγκεκριμένων τύπων τοποθεσιών (κατάστημα, πάρκο, βιβλιοθήκη): εάν η διαδρομή περιέτρεχε όλα τα καθορισμένα μέρη, αλλά δεν έχει διανυθεί ακόμη η επιθυμητή απόσταση, ολοκληρώνεται σε απόσταση που καθορίζεται από τον χρήστη σε τυχαία κατεύθυνση. Το Google Map API σάς επιτρέπει επίσης να υπολογίσετε τον εκτιμώμενο χρόνο ταξιδιού, κάτι που σας βοηθά να επιλέξετε μια λίστα αναπαραγωγής ακριβώς για ολόκληρη τη βόλτα.

Ως αποτέλεσμα, κατάφερε να κάνει μια γενιά διαδρομές ανά σημείο εκκίνησης, απόσταση και ενδιάμεσα σημεία· Όλα ήταν προετοιμασμένα για την ταξινόμηση της μουσικής σύμφωνα με τμήματα της διαδρομής, αλλά λόγω έλλειψης χρόνου, αποφασίστηκε να αφήσουμε την επιλογή της επιλογής μιας λίστας αναπαραγωγής απλώς ως πρόσθετο κλάδο διεπαφής χρήστη. Έτσι, ο χρήστης μπορούσε να επιλέξει ανεξάρτητα τη μουσική που θα ακούσει.

Το κύριο πρόβλημα με την εργασία με μουσική ήταν να μην γνωρίζουμε από πού να λάβουμε αρχεία mp3 χωρίς να απαιτείται από τον χρήστη να έχει λογαριασμό σε οποιαδήποτε υπηρεσία. Αποφασίστηκε να ζητηθεί μουσική από τον χρήστη (λειτουργία UserMusic). Αυτό δημιουργεί ένα νέο πρόβλημα: δεν έχουν όλοι τη δυνατότητα λήψης κομματιών. Μια λύση είναι να δημιουργήσετε ένα αποθετήριο με μουσική από χρήστες (λειτουργία BotMusic) - από αυτό μπορείτε να δημιουργήσετε μουσική ανεξάρτητα από τις υπηρεσίες.

Αν και όχι τέλεια, ολοκληρώσαμε την εργασία: καταλήξαμε σε μια εφαρμογή που θα ήθελα να χρησιμοποιήσω. Σε γενικές γραμμές, αυτό είναι πολύ ωραίο: πριν από τρεις ημέρες είχατε μόνο μια ιδέα και ούτε μια σκέψη για το πώς ακριβώς να την εφαρμόσετε, αλλά τώρα υπάρχει μια λειτουργική λύση. Αυτές ήταν πολύ σημαντικές τρεις μέρες για μένα. Δεν φοβάμαι πλέον να καταλήξω σε κάτι που δεν έχω αρκετές γνώσεις για να εφαρμόσω, το να είμαι επικεφαλής της ομάδας ήταν απίστευτα ενδιαφέρον και γνώρισα τα υπέροχα παιδιά που εντάχθηκαν στην ομάδα μου καλύτερα!

Υγρή Δημοκρατία

Hackathon DevDays'19 (μέρος 1): ένα ημερολόγιο με συστάσεις, μια γεννήτρια διαδρομής περπατήματος και υγρή δημοκρατία

Ο συγγραφέας της ιδέας
Stanislav Sychev
Δομή εντολών
Stanislav Sychev – επικεφαλής ομάδας, βάση δεδομένων
Nikolay Izyumov – διεπαφή bot
Anton Ryabushev – backend

Μέσα σε διαφορετικές ομάδες, υπάρχει συχνά ανάγκη να ληφθεί μια απόφαση ή να ψηφίσετε. Συνήθως σε τέτοιες περιπτώσεις καταφεύγουν άμεση δημοκρατία, ωστόσο, όταν η ομάδα μεγαλώσει, μπορεί να προκύψουν προβλήματα. Για παράδειγμα, ένα άτομο σε μια ομάδα μπορεί να μην θέλει να απαντά συχνά σε ερωτήσεις ή να απαντά σε ερωτήσεις σχετικά με ορισμένα θέματα. Σε μεγάλες ομάδες, για να αποφύγουν προβλήματα καταφεύγουν Αντιπροσωπευτική δημοκρατία, όταν από όλο το λαό επιλέγεται μια ξεχωριστή ομάδα «βουλευτών», που απαλλάσσουν τους υπόλοιπους από το βάρος της επιλογής. Αλλά είναι αρκετά δύσκολο να γίνεις ένας τέτοιος βουλευτής και το άτομο που θα γίνει δεν θα είναι απαραίτητα έντιμο και αξιοσέβαστο, όπως φαινόταν στους ψηφοφόρους.

Για να λύσει τα προβλήματα και των δύο συστημάτων, ο Brian Ford πρότεινε την ιδέα ρευστή δημοκρατία. Σε ένα τέτοιο σύστημα, ο καθένας είναι ελεύθερος να επιλέξει τον ρόλο ενός τακτικού χρήστη ή ενός εκπροσώπου, εκφράζοντας απλώς την επιθυμία του. Οποιοσδήποτε μπορεί να ψηφίσει ανεξάρτητα ή να δώσει ψήφο σε έναν εκπρόσωπο για ένα ή περισσότερα θέματα. Ένας εκπρόσωπος μπορεί επίσης να ψηφίσει. Επιπλέον, εάν ο εκπρόσωπος δεν ταιριάζει πλέον στον ψηφοφόρο, η ψηφοφορία μπορεί να αποσυρθεί ανά πάσα στιγμή.

Παραδείγματα χρήσης της υγρής δημοκρατίας βρίσκονται στην πολιτική και θέλαμε να εφαρμόσουμε μια παρόμοια ιδέα για καθημερινή χρήση σε κάθε είδους ομάδες ανθρώπων. Στο επόμενο hackathon του DevDays, αποφασίσαμε να γράψουμε ένα bot Telegram για ψηφοφορία σύμφωνα με τις αρχές της υγρής δημοκρατίας. Ταυτόχρονα, ήθελα να αποφύγω ένα κοινό πρόβλημα με τέτοια ρομπότ - φράξιμο της γενικής συνομιλίας με μηνύματα από το bot. Η λύση είναι να φέρετε όσο το δυνατόν περισσότερη λειτουργικότητα σε μια προσωπική συνομιλία.

Hackathon DevDays'19 (μέρος 1): ένα ημερολόγιο με συστάσεις, μια γεννήτρια διαδρομής περπατήματος και υγρή δημοκρατίαΓια να δημιουργήσουμε αυτό το bot χρησιμοποιήσαμε API από το Telegram. Επιλέχθηκε μια βάση δεδομένων PostgreSQL για την αποθήκευση του ιστορικού της ψηφοφορίας και των αντιπροσωπειών. Για την επικοινωνία με το bot, εγκαταστάθηκε ένας διακομιστής Flask. Επιλέξαμε αυτές τις τεχνολογίες γιατί... είχαμε ήδη εμπειρία αλληλεπίδρασης μαζί τους κατά τη διάρκεια των μεταπτυχιακών μας σπουδών. Η εργασία στα τρία στοιχεία του έργου —τη βάση δεδομένων, ο διακομιστής και το bot— διανεμήθηκε με επιτυχία μεταξύ των μελών της ομάδας.

Φυσικά, οι τρεις μέρες είναι λίγος, οπότε κατά τη διάρκεια του hackathon εφαρμόσαμε την ιδέα σε επίπεδο πρωτοτύπου. Ως αποτέλεσμα, δημιουργήσαμε ένα bot που γράφει στη γενική συνομιλία μόνο πληροφορίες σχετικά με την έναρξη της ψηφοφορίας και τα ανώνυμα αποτελέσματά της. Η δυνατότητα ψήφου και δημιουργίας δημοσκόπησης υλοποιείται μέσω προσωπικής αλληλογραφίας με το bot. Για να ψηφίσετε, εισαγάγετε μια εντολή που εμφανίζει μια λίστα ζητημάτων που απαιτούν άμεση προσοχή. Στην προσωπική αλληλογραφία, μπορείτε να δείτε τη λίστα των αντιπροσώπων και τις προηγούμενες ψήφους τους, καθώς και να τους δώσετε την ψήφο σας για ένα από τα θέματα.

Βίντεο με ένα παράδειγμα εργασίας.

Ήταν ενδιαφέρον να δουλέψουμε για το έργο, μείναμε στο πανεπιστήμιο μέχρι τα μεσάνυχτα.Πιστεύουμε ότι αυτός είναι ένας πολύ καλός τρόπος για να κάνετε ένα διάλειμμα από τις σπουδές, αν και είναι πολύ εξαντλητικό. Ήταν μια ευχάριστη εμπειρία να δουλεύω σε μια δεμένη ομάδα.

ΥΣΤΕΡΟΓΡΑΦΟ. Οι εγγραφές για μεταπτυχιακά προγράμματα για το επόμενο ακαδημαϊκό έτος έχουν ήδη ξεκινήσει Άνοιξε. Πάρε μέρος τώρα!

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο