Hackathon DevDays'19 (partie 1) : un agenda avec des recommandations, un générateur d'itinéraires pédestres et une démocratie liquide

Nous récemment dit à propos du programme de master en entreprise de JetBrains et de l'Université ITMO « Développement logiciel / Génie logiciel ». Nous invitons toutes les personnes intéressées à une journée portes ouvertes le lundi 29 avril. Nous vous parlerons des avantages de notre programme de master, des bonus que nous offrons aux étudiants et de ce que nous exigeons en retour. De plus, nous répondrons certainement aux questions de nos invités.

Hackathon DevDays'19 (partie 1) : un agenda avec des recommandations, un générateur d'itinéraires pédestres et une démocratie liquideLa journée portes ouvertes aura lieu au bureau JetBrains du Times Business Center, où étudient nos étudiants en master. Commence à 17h00. Vous pouvez connaître tous les détails et vous inscrire à l'événement sur le site Internet mse.itmo.ru. Venez et vous ne le regretterez pas !

L'une des principales composantes du programme est la pratique. Les étudiants en ont beaucoup : devoirs hebdomadaires, projets semestriels et hackathons. Grâce à une immersion complète dans les méthodologies et technologies de développement modernes au cours de leurs études, les diplômés s'intègrent rapidement dans les processus de travail des grandes entreprises informatiques.

Dans cet article, nous souhaitons parler plus en détail des hackathons DevDays, qui ont lieu tous les six mois. Les règles sont simples : des équipes de 3 à 4 personnes se réunissent et pendant trois jours les étudiants donnent vie à leurs propres idées. Que pourrait-il en résulter ? Lisez la première partie des récits des étudiants eux-mêmes sur les projets de hackathon de ce semestre :)

Journal avec recommandations de films

Hackathon DevDays'19 (partie 1) : un agenda avec des recommandations, un générateur d'itinéraires pédestres et une démocratie liquide

Auteur de l'idée
Ivan Ilchuk
Structure de commande
Ivan Ilchuk – analyse de l'intrigue du film, serveur
Vladislav Korablinov – développement de modèles pour comparer la proximité d'une entrée de journal et l'intrigue d'un film
Dmitri Valchuk – UI
Nikita Vinokurov – interface utilisateur, conception

Le but de notre projet était d'écrire une application de bureau - un journal qui recommanderait des films à l'utilisateur en fonction des entrées qu'il contient.

Cette idée m'est venue alors que j'étais en route pour l'université et que je réfléchissais à mes problèmes. « Quel que soit le problème auquel une personne est confrontée, un écrivain classique a déjà écrit à ce sujet », ai-je pensé. "Et puisque quelqu'un l'a écrit, ça veut dire que quelqu'un l'a déjà filmé." L’envie de regarder un film sur une personne souffrant des mêmes tourments mentaux est donc apparue naturellement.

Évidemment, il existe une grande variété d'agendas distincts et de services de recommandation distincts (mais les recommandations sont généralement basées sur ce que la personne aimait auparavant). En principe, ce projet a quelque chose en commun avec la recherche d'un film par points clés, mais tout d'abord, notre application offre la fonctionnalité d'un journal.

Hackathon DevDays'19 (partie 1) : un agenda avec des recommandations, un générateur d'itinéraires pédestres et une démocratie liquideComment avons-nous mis cela en œuvre ? Lorsque vous appuyez sur le bouton magique, le journal envoie une entrée au serveur, où le film est sélectionné en fonction de la description tirée de Wikipédia. Notre interface a été réalisée en Electron (nous l'utilisons, pas le site Web, car nous avons initialement décidé de stocker les données des utilisateurs non pas sur le serveur, mais localement sur l'ordinateur), et le serveur et le système de recommandation lui-même ont été réalisés en Python : les TF étaient obtenus à partir des descriptions -Vecteurs IDF qui ont été comparés pour leur proximité avec le vecteur d'entrée du journal.

Un membre de l'équipe a travaillé uniquement sur le modèle, l'autre a travaillé entièrement sur le front-end (au début avec un troisième membre, qui est ensuite passé aux tests). J'étais engagé dans l'analyse des intrigues de films de Wikipédia et du serveur.

Petit à petit, nous nous sommes rapprochés du résultat, surmontant un certain nombre de problèmes, à commencer par le fait que le modèle nécessitait initialement beaucoup de RAM, pour finir par la difficulté de transférer les données vers le serveur.

Désormais, pour trouver un film pour la soirée, il n'y a pas besoin de beaucoup d'efforts : le résultat de nos trois jours de travail est une application de bureau et un serveur, auquel l'utilisateur accède via https, recevant en réponse une sélection de 5 films avec une brève description et une affiche.

Mes impressions sur le projet sont très positives : le travail était captivant du petit matin jusqu'à tard le soir, et l'application qui en résulte produit périodiquement des résultats extrêmement amusants dans le style de « Nuit blanche » pour un journal sur les devoirs à l'université ou un film. sur le premier jour d'école pour une histoire sur le premier jour au département.

Des liens pertinents, des installateurs, etc. peuvent être trouvés ici.

Générateur d'itinéraire

Hackathon DevDays'19 (partie 1) : un agenda avec des recommandations, un générateur d'itinéraires pédestres et une démocratie liquideAuteur de l'idée
Artemyeva Irina
Structure de commande
Artemyeva Irina – chef d'équipe, boucle principale
Gordeeva Lyudmila – musique
Platonov Vladislav – itinéraires

J'aime beaucoup me promener dans la ville : regarder les bâtiments, les gens, réfléchir à l'histoire. Mais, même en changeant de lieu de résidence, je me retrouve tôt ou tard face au problème du choix d'un itinéraire : j'ai réalisé tous ceux auxquels je pouvais penser. C'est ainsi qu'est née l'idée d'automatiser la génération d'itinéraires : vous indiquez le point de départ et la longueur de l'itinéraire, et le programme vous donne une option. Les promenades peuvent être longues, c'est pourquoi une évolution logique de l'idée semble être d'ajouter la possibilité d'indiquer des points intermédiaires pour un « arrêt », où vous pourrez prendre une collation et vous reposer. Une autre branche du développement était la musique. Marcher en musique est toujours plus amusant, il serait donc formidable d'ajouter la possibilité de sélectionner une playlist en fonction d'un itinéraire généré.

Il n'a pas été possible de trouver de telles solutions parmi les applications existantes. Les analogues les plus proches sont tous les planificateurs d'itinéraire : Google Maps, 2GIS, etc.

Il est plus pratique d’avoir une telle application sur votre téléphone, donc utiliser Telegram était une bonne option. Il vous permet d'afficher des cartes et de jouer de la musique, et vous pouvez contrôler tout cela en écrivant un bot. Le travail principal avec les cartes a été effectué à l'aide de l'API Google Map. Python facilite la combinaison des deux technologies.

Il y avait trois personnes dans l'équipe, la tâche a donc été divisée en deux sous-tâches qui ne se chevauchent pas (travail avec des cartes et travail avec de la musique) afin que les gars puissent travailler de manière indépendante, et j'ai pris sur moi de combiner les résultats.

Hackathon DevDays'19 (partie 1) : un agenda avec des recommandations, un générateur d'itinéraires pédestres et une démocratie liquideAucun d'entre nous n'avait jamais travaillé avec l'API Google Map ou écrit des robots Telegram, le principal problème était donc le temps alloué à la mise en œuvre du projet : comprendre quelque chose prend toujours plus de temps que faire quelque chose que l'on connaît bien. Il a également été difficile de choisir l’API du bot Telegram : à cause du blocage, tous ne fonctionnent pas et j’ai dû galérer pour tout configurer.

Il convient de mentionner séparément comment le problème de la génération d'itinéraires a été résolu. Il est facile de construire un itinéraire entre deux endroits, mais que pouvez-vous offrir à l’utilisateur si seule la longueur de l’itinéraire est connue ? Laissez l'utilisateur vouloir marcher 10 kilomètres. Un point est sélectionné dans une direction arbitraire, dont la distance en ligne droite est de 10 kilomètres, après quoi un itinéraire est construit jusqu'à ce point le long de routes réelles. Très probablement, ce ne sera pas droit, nous le raccourcirons donc aux 10 kilomètres spécifiés. Il existe de nombreuses options pour de tels itinéraires - nous avons un véritable générateur d'itinéraires !

Dans un premier temps, je souhaitais segmenter la carte en zones correspondant aux espaces verts : talus, cours, rues, afin d'obtenir le parcours de promenade le plus agréable, et aussi générer de la musique en fonction de ces zones. Mais faire cela en utilisant l'API Google Map s'est avéré difficile (nous n'avons pas eu le temps de résoudre ce problème). Cependant, il a été possible de mettre en œuvre la construction d'un itinéraire passant par des types de lieux spécifiques (magasin, parc, bibliothèque) : si l'itinéraire contourne tous les lieux spécifiés, mais que la distance souhaitée n'a pas encore été parcourue, il est complété jusqu'à un distance spécifiée par l'utilisateur dans une direction aléatoire. L'API Google Map vous permet également de calculer le temps de trajet estimé, ce qui vous aide à choisir une playlist exactement pour l'ensemble de la promenade.

En conséquence, réussi à faire une génération itinéraires par point de départ, distance et points intermédiaires ; tout a été préparé pour classer la musique selon les sections du parcours, mais par manque de temps, il a été décidé de laisser la possibilité de sélectionner une playlist simplement comme branche supplémentaire de l'interface utilisateur. Ainsi, l'utilisateur a pu choisir indépendamment la musique à écouter.

Le principal problème du travail avec la musique était de ne pas savoir d'où obtenir les fichiers mp3 sans exiger que l'utilisateur ait un compte sur n'importe quel service. Il a été décidé de demander de la musique à l'utilisateur (mode UserMusic). Cela crée un nouveau problème : tout le monde n’a pas la possibilité de télécharger des morceaux. Une solution consiste à créer un référentiel avec la musique des utilisateurs (mode BotMusic) - à partir de là, vous pouvez générer de la musique quels que soient les services.

Bien que ce ne soit pas parfait, nous avons accompli la tâche : nous nous sommes retrouvés avec une application que j'aimerais utiliser. En général, c'est très cool : il y a trois jours, vous n'aviez qu'une idée et pas une seule réflexion sur la façon exacte de la mettre en œuvre, mais il existe maintenant une solution qui fonctionne. Ces trois jours ont été très importants pour moi. Je n'ai plus peur de proposer quelque chose que je n'ai pas assez de connaissances pour mettre en œuvre, être chef d'équipe était incroyablement intéressant et j'ai fait la connaissance des gars formidables qui ont rejoint mon équipe. mieux!

Démocratie liquide

Hackathon DevDays'19 (partie 1) : un agenda avec des recommandations, un générateur d'itinéraires pédestres et une démocratie liquide

Auteur de l'idée
Stanislav Sychev
Structure de commande
Stanislav Sychev – chef d'équipe, base de données
Nikolay Izyumov – interface du bot
Anton Ryabushev – backend

Au sein de différents groupes, il est souvent nécessaire de prendre une décision ou de voter. Habituellement, dans de tels cas, ils recourent à la démocratie directeCependant, lorsque le groupe s'agrandit, des problèmes peuvent surgir. Par exemple, une personne dans un groupe peut ne pas vouloir répondre souvent aux questions ou répondre à des questions sur certains sujets. Dans les grands groupes, pour éviter les problèmes, ils ont recours démocratie représentative, lorsqu'un groupe distinct de « députés » est choisi parmi tout le peuple, qui libère le reste du fardeau du choix. Mais il est assez difficile de devenir un tel député, et celui qui le deviendra ne sera pas nécessairement honnête et respectable, comme il le semblait aux électeurs.

Pour résoudre les problèmes des deux systèmes, Brian Ford a proposé le concept démocratie liquide. Dans un tel système, chacun est libre de choisir le rôle d'utilisateur régulier ou de délégué, simplement en exprimant son souhait. N'importe qui peut voter de manière indépendante ou donner son vote à un délégué sur une ou plusieurs questions. Un délégué peut également voter. De plus, si le délégué ne convient plus à l'électeur, le vote peut être retiré à tout moment.

On trouve des exemples d’utilisation de la démocratie liquide en politique, et nous voulions mettre en œuvre une idée similaire pour un usage quotidien au sein de toutes sortes de groupes de personnes. Lors du prochain hackathon DevDays, nous avons décidé d'écrire un robot Telegram pour voter selon les principes de la démocratie liquide. Dans le même temps, je voulais éviter un problème courant avec de tels robots : obstruer le chat général avec des messages du robot. La solution consiste à intégrer autant de fonctionnalités que possible dans une conversation personnelle.

Hackathon DevDays'19 (partie 1) : un agenda avec des recommandations, un générateur d'itinéraires pédestres et une démocratie liquidePour créer ce bot, nous avons utilisé API de télégramme. Une base de données PostgreSQL a été choisie pour stocker l'historique des votes et des délégations. Pour communiquer avec le bot, un serveur Flask a été installé. Nous avons choisi ces technologies parce que... nous avons déjà eu l’expérience d’interagir avec eux pendant nos études de master. Le travail sur les trois composants du projet (la base de données, le serveur et le bot) a été réparti avec succès entre les membres de l'équipe.

Bien sûr, trois jours, c'est peu de temps, c'est pourquoi lors du hackathon, nous avons mis l'idée en œuvre au niveau du prototype. En conséquence, nous avons créé un robot qui écrit dans le chat général uniquement des informations sur l'ouverture du vote et ses résultats anonymes. La possibilité de voter et de créer un sondage est mise en œuvre via une correspondance personnelle avec le bot. Pour voter, entrez une commande qui affiche une liste de problèmes nécessitant une attention directe. Dans votre correspondance personnelle, vous pouvez consulter la liste des délégués et leurs votes précédents, et également leur donner votre vote sur l'un des sujets.

Vidéo avec un exemple de travail.

C'était intéressant de travailler sur le projet, nous sommes restés à l'université jusqu'à minuit, nous pensons que c'est une excellente façon de faire une pause dans les études, même si c'est très épuisant. Ce fut une expérience agréable de travailler dans une équipe soudée.

PS. Les inscriptions aux programmes de master pour la prochaine année universitaire sont déjà ouvertes est ouvert. Rejoignez-nous maintenant!

Source : www.habr.com

Ajouter un commentaire