Récemment, nous avons
parlé du programme de master d'entreprise JetBrains et du «génie logiciel / génie logiciel» de l'Université ITMO. Nous invitons toutes les personnes intéressées lors de la journée portes ouvertes le lundi 29 avril. Nous parlerons des avantages de notre école doctorale, des bonus que nous offrons aux étudiants et de ce que nous demandons en retour. De plus, nous répondrons certainement aux questions de nos invités.

Une journée portes ouvertes aura lieu au bureau JetBrains du Times Business Center, où nos étudiants diplômés étudient. À partir de 17h00. Vous pouvez trouver tous les détails et vous inscrire à l'événement sur
mse.itmo.ru. Venez et ne le regrettez pas!
L'une des principales composantes de la formation sur le 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 pendant leurs études, les diplômés rejoignent rapidement les processus de travail des grandes entreprises informatiques.
Dans cet article, nous voulons parler davantage 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 en trois jours, les élèves donnent vie à leurs propres idées. Que peut-il en résulter? Lisez la première partie des histoires sur les projets de hackathon de ce semestre des étudiants eux-mêmes :)
Journal des recommandations de films
L'auteur de l'idéeIvan Ilchuk
Composition de l'équipeIvan Ilchuk - analyse de l'intrigue du film, serveur
Vladislav Korablinov - développement de modèles pour comparer la proximité du journal et l'intrigue du film
Dmitry Valchuk - UI
Nikita Vinokurov - UI, design
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 à l'esprit lorsque je suis allée à l'université et que j'ai pensé à mes problèmes. «Quel que soit le problème auquel une personne est confrontée, un classique a déjà écrit à ce sujet», ai-je pensé. "Et puisque quelqu'un a écrit, cela signifie que quelqu'un a déjà filmé." Ainsi, le désir de regarder un film sur un homme avec le même tourment mental est apparu tout seul.
De toute évidence, il existe une grande variété d'agendas séparés et de services de recommandation séparés (mais généralement les recommandations sont basées sur ce qu'une 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 fournit la fonctionnalité d'agenda.

Comment avons-nous mis cela en œuvre? Lorsque le bouton magique est enfoncé, 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 sur Electron (nous l'utilisons, pas le site, car au départ nous avons décidé de stocker les données utilisateur non pas sur le serveur, mais localement sur l'ordinateur), et le serveur et le système de recommandation lui-même étaient en Python: les TF ont été obtenus à partir des descriptions -Vecteurs IDF qui ont été comparés par proximité du vecteur d'entrée du journal.
Un membre de l'équipe n'était engagé que dans le modèle, l'autre dans l'ensemble du frontend (initialement associé au troisième membre, qui est ensuite passé aux tests). J'étais en train d'analyser les intrigues du film de Wikipédia et du serveur.
Pas à pas, nous avons approché le résultat, surmontant un certain nombre de problèmes, à commencer par le fait qu'initialement le modèle nécessitait beaucoup de RAM, se terminant par la difficulté de transférer des données vers le serveur.
Maintenant, pour trouver un film pour la soirée, vous n'avez pas besoin de beaucoup d'efforts: le résultat de notre travail de trois jours a été 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.
J'ai des impressions très positives du projet: le travail a été passionnant du petit matin jusqu'à tard le soir, et l'application résultante donne périodiquement des résultats extrêmement drôles dans le style de «Nuit blanche» à une entrée de journal sur les devoirs à l'université ou un film sur la première journée d'école sur l'histoire du premier jour au département.
Des liens, des programmes d'installation et bien plus peuvent être trouvés
ici .
Générateur de route
L'auteur de l'idéeArtemyeva Irina
Composition de l'équipeArtemyeva 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, penser à l'histoire. Mais, même en changeant de lieu de résidence, je suis tôt ou tard confronté au problème du choix d'un itinéraire: tout ce que j'ai pu trouver est passé. L'idée est donc venue d'automatiser la génération d'itinéraires: vous spécifiez le point de départ et la longueur de l'itinéraire, et le programme donne une option. La marche peut être longue, donc le développement logique de l'idée semble ajouter la possibilité d'indiquer des points intermédiaires pour «l'arrêt», où vous pourriez prendre une bouchée et vous détendre. Une autre branche du développement était la musique. Aller en musique est toujours plus amusant, il serait donc formidable d'ajouter la possibilité de sélectionner une liste de lecture pour l'itinéraire généré.
Parmi les applications existantes, de telles solutions n'ont pas pu être trouvées. Les analogues les plus proches sont tous les planificateurs d'itinéraire: Google Maps, 2GIS, etc.
Une telle application est plus pratique à avoir sur le téléphone, donc utiliser Telegram est devenu une bonne option. Il vous permet d'afficher des cartes et de jouer de la musique, et vous pouvez gérer tout cela en écrivant un bot. Le travail principal avec les cartes a été effectué à l'aide de l'API Google Map. Python permet de se faire facilement des amis des deux technologies.
Il y avait trois personnes dans l'équipe, donc la tâche a été divisée en deux sous-tâches disjointes (travailler avec des cartes et travailler avec de la musique) afin que les gars puissent travailler de manière indépendante, et j'ai pris soin des résultats.

Aucun de nous n'a jamais travaillé avec l'API Google Map et écrit des robots Telegram, donc le problème principal était le temps alloué au projet: comprendre quelque chose prend toujours plus de temps que de faire ce que vous savez bien. Il était également difficile de choisir l'API bot Telegram: à cause du blocage, tout le monde ne travaille pas et a dû souffrir pour tout configurer.
Il convient de mentionner séparément comment la tâche de génération d'itinéraires a été résolue. Il est facile de construire un itinéraire entre deux emplacements, mais qu'offrir à l'utilisateur si seule la longueur de l'itinéraire est connue? Laissez l'utilisateur vouloir marcher 10 kilomètres. Dans une direction arbitraire, un point est sélectionné dont la distance en ligne droite est de 10 kilomètres, après quoi un itinéraire est construit vers des points réels le long de routes réelles. Ce ne sera probablement pas direct, nous allons donc le raccourcir 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!
Au départ, je souhaitais segmenter la carte en sections correspondant aux espaces verts: remblais, cours, rues, afin d'obtenir l'itinéraire le plus agréable pour une promenade, et aussi générer de la musique en accord avec ces sections. Mais il s'est avéré difficile de le faire en utilisant l'API Google Map (ils n'ont pas réussi à résoudre ce problème). Cependant, il s'est avéré réaliser la construction de l'itinéraire à travers des types spécifiques de lieux (magasin, parc, bibliothèque): si l'itinéraire a contourné tous les endroits spécifiés, mais que la distance souhaitée n'a pas encore été parcourue, il s'étend jusqu'à une distance spécifiée par l'utilisateur dans une direction aléatoire. De plus, l'API Google Map vous permet de calculer le temps de trajet estimé, ce qui aide à choisir une liste de lecture pour la durée exacte du voyage.
En conséquence,
il s'est avéré faire la génération d' itinéraires par point de départ, distance et points intermédiaires; Tout a été préparé pour classer la musique selon les sections de l'itinéraire, mais par manque de temps, il a été décidé de laisser la possibilité de sélectionner une liste de lecture simplement comme une branche d'interface utilisateur supplémentaire. Ainsi, l'utilisateur a pu choisir indépendamment la musique à écouter.
Le principal problème lié à l'utilisation de la musique était le manque de connaissances sur la manière d'obtenir des fichiers mp3 afin de ne pas obliger l'utilisateur à avoir un compte sur n'importe quel service. Il a été décidé de demander de la musique à l'utilisateur (mode UserMusic). Cela pose un nouveau problème: tout le monde n'a pas la possibilité de télécharger des pistes. Une solution consiste à créer un référentiel avec de la musique d'utilisateurs (mode BotMusic) - vous pouvez générer de la musique à partir de celui-ci indépendamment des services.
Bien que pas parfait, mais nous avons fait face à la tâche: il s'est avéré 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 pensée pour la mettre en œuvre, et maintenant il existe une solution de travail. Pour moi, ce fut trois jours très importants. Je n'ai plus peur de proposer quelque chose qui manque de connaissances, c'était incroyablement intéressant d'être chef d'équipe, et je ferais mieux de reconnaître les merveilleux gars qui sont allés dans mon équipe!
Démocratie liquide
L'auteur de l'idéeStanislav Sychev
Composition de l'équipeStanislav Sychev - chef d'équipe, base de données
Nikolay Izyumov - interface de 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 directe , mais lorsque le groupe devient important, des problèmes peuvent survenir. Par exemple, une personne d'un groupe peut ne pas vouloir souvent répondre à des questions ou répondre à des questions sur des sujets spécifiques. En grands groupes, afin d'éviter les problèmes, ils recourent à la
démocratie représentative lorsqu'ils choisissent un groupe distinct de «députés» parmi toutes les personnes qui libèrent le reste du fardeau du choix. Mais ce système a ses inconvénients.
Pour résoudre les problèmes des deux systèmes, Brian Ford a proposé le concept de
démocratie liquide . Dans un tel système, chacun est libre de choisir le rôle d'un utilisateur ordinaire ou d'un délégué, simplement en exprimant un désir. Toute personne peut voter de manière indépendante ou voter sur un délégué sur une ou plusieurs questions. Un délégué peut également voter. De plus, si le délégué a cessé d'organiser un électeur, le vote peut être retiré à tout moment.
Des exemples de l'utilisation de la démocratie liquide se trouvent en politique, et nous voulions mettre en œuvre une idée similaire pour une utilisation quotidienne au sein de divers groupes de personnes. Lors du prochain hackathon DevDays, nous avons décidé d'écrire un bot Telegram pour voter sur les principes de la démocratie liquide. Dans le même temps, je voulais éviter le problème fréquent de tels robots - obstruer le chat général avec des messages du robot. La solution consiste à mettre autant de fonctionnalités que possible dans une conversation personnelle.

Pour créer ce bot, nous avons utilisé
l'API Telegram . Pour stocker l'historique des votes et des délégations, la base de données PostgreSQL a été choisie. Pour communiquer avec la base de données bot bot a été soulevé Flask-server. Nous avons choisi ces technologies car nous avions déjà l'expérience d'interagir avec eux pendant nos études à la magistrature. Les travaux sur les trois éléments constitutifs du projet - la base de données, le serveur et le bot - ont été distribués avec succès parmi les membres de l'équipe.
Bien sûr, trois jours c'est peu de temps, donc lors du hackathon nous avons réalisé l'idée au niveau d'un prototype. En conséquence, nous avons créé un bot qui n'écrit dans le chat général que des informations sur l'ouverture du vote et ses résultats anonymes. Les opportunités de voter et de créer un vote sont réalisées grâce à une correspondance personnelle avec le bot. Pour voter, une équipe est présentée qui affiche une liste de problèmes nécessitant une attention directe. Dans la correspondance personnelle, vous pouvez voir la liste des délégués et leurs votes précédents, ainsi que 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. Il nous semble que c'est un excellent moyen de se distraire de l'étude, même si c'est très épuisant. Il y a eu une expérience agréable dans une équipe soudée.
PS: L'admission à la magistrature pour la prochaine année académique est déjà
ouverte . Rejoignez-nous maintenant!