Hackathon DevDays'19 (parte 1): un diario con recomendaciones, un generador de rutas a pie y democracia líquida

Recientemente, hemos dicho sobre el programa de maestría corporativa de JetBrains y la Universidad ITMO “Desarrollo de software / Ingeniería de software”. Invitamos a todos los interesados ​​a una jornada de puertas abiertas el lunes 29 de abril. Te contamos las ventajas de nuestro máster, qué bonificaciones ofrecemos a los estudiantes y qué exigimos a cambio. Además, definitivamente responderemos las preguntas de nuestros huéspedes.

Hackathon DevDays'19 (parte 1): un diario con recomendaciones, un generador de rutas a pie y democracia líquidaLa jornada de puertas abiertas se llevará a cabo en la oficina de JetBrains en el Times Business Center, donde estudian nuestros estudiantes de maestría. Comienza a las 17:00. Puedes conocer todos los detalles e inscribirte al evento en la web mse.itmo.ru. ¡Ven y no te arrepentirás!

Uno de los componentes principales del programa es la práctica. Los estudiantes tienen mucho de eso: tareas semanales, proyectos semestrales y hackatones. Gracias a la inmersión total en metodologías y tecnologías de desarrollo modernas durante sus estudios, los graduados se integran rápidamente en los procesos de trabajo de las grandes empresas de TI.

En este post queremos hablar con más detalle sobre los hackathons DevDays, que se realizan cada seis meses. Las reglas son simples: se reúnen equipos de 3 a 4 personas y durante tres días los estudiantes dan vida a sus propias ideas. ¿Qué podría resultar de esto? Lea la primera parte de las historias sobre los proyectos del hackathon de este semestre escritas por los propios estudiantes :)

Diario con recomendaciones de películas.

Hackathon DevDays'19 (parte 1): un diario con recomendaciones, un generador de rutas a pie y democracia líquida

Idea autor
Iván Ilchuk
Composición del equipo
Ivan Ilchuk – análisis de la trama de la película, servidor
Vladislav Korablinov – desarrollo de modelos para comparar la proximidad de una entrada de diario y la trama de una película
Dmitry Valchuk – IU
Nikita Vinokurov – interfaz de usuario, diseño

El objetivo de nuestro proyecto era escribir una aplicación de escritorio: un diario que recomendaría películas al usuario basándose en las entradas que contiene.

Esta idea se me ocurrió cuando iba camino a la universidad y pensaba en mis problemas. “Cualquiera que sea el problema al que se enfrenta una persona, algún escritor clásico ya ha escrito sobre ello”, pensé. “Y como alguien lo escribió, significa que alguien ya lo filmó”. Entonces, el deseo de ver una película sobre una persona con el mismo tormento mental apareció de forma natural.

Obviamente, existe una amplia variedad de diarios separados y servicios de recomendaciones separados (pero generalmente las recomendaciones se basan en lo que a la persona le gustó anteriormente). En principio, este proyecto tiene algo en común con la búsqueda de una película por puntos clave, pero aún así, en primer lugar, nuestra aplicación proporciona la funcionalidad de un diario.

Hackathon DevDays'19 (parte 1): un diario con recomendaciones, un generador de rutas a pie y democracia líquida¿Cómo implementamos esto? Cuando presionas el botón mágico, el diario envía una entrada al servidor, donde se selecciona la película según la descripción extraída de Wikipedia. Nuestra interfaz se creó en Electron (lo usamos, no el sitio web, porque inicialmente decidimos almacenar los datos del usuario no en el servidor, sino localmente en la computadora), y el servidor y el sistema de recomendación en sí se crearon en Python: los TF fueron obtenido a partir de las descripciones -vectores IDF que se compararon en cuanto a proximidad al vector de entrada del diario.

Un miembro del equipo trabajó solo en el modelo, el otro trabajó completamente en el front-end (inicialmente junto con un tercer miembro, que luego pasó a realizar pruebas). Me dediqué a analizar los argumentos de las películas de Wikipedia y del servidor.

Paso a paso nos acercamos al resultado, superando una serie de problemas, empezando por el hecho de que el modelo inicialmente requería mucha RAM, hasta la dificultad de transferir datos al servidor.

Ahora bien, para encontrar una película para la noche no hace falta mucho esfuerzo: el resultado de nuestro trabajo de tres días es una aplicación de escritorio y un servidor, al que el usuario accede a través de https, recibiendo como respuesta una selección de 5 películas con una breve descripción y un cartel.

Mis impresiones sobre el proyecto son muy positivas: el trabajo me cautivó desde primera hora de la mañana hasta altas horas de la noche, y la aplicación resultante produce periódicamente resultados extremadamente divertidos al estilo de "Sleepless Night" para una anotación en el diario sobre los deberes en la universidad o una película. sobre el primer día de clases para una historia sobre el primer día en el departamento.

Se pueden encontrar enlaces relevantes, instaladores, etc. aquí.

Generador de rutas

Hackathon DevDays'19 (parte 1): un diario con recomendaciones, un generador de rutas a pie y democracia líquidaIdea autor
Artemyeva Irina
Composición del equipo
Artemyeva Irina – líder del equipo, circuito principal
Gordeeva Lyudmila – música
Platonov Vladislav – rutas

Me gusta mucho caminar por la ciudad: mirar edificios, gente, pensar en la historia. Pero, incluso cuando cambio de lugar de residencia, tarde o temprano me enfrento al problema de elegir una ruta: he realizado todas las que se me han ocurrido. Así surgió la idea de automatizar la generación de rutas: indicas el punto de inicio y la longitud de la ruta, y el programa te da una opción. Las caminatas pueden ser largas, por lo que un desarrollo lógico de la idea parece ser agregar la posibilidad de indicar puntos intermedios para una “parada”, donde tomar un refrigerio y descansar. Otra rama del desarrollo fue la música. Caminar con música siempre es más divertido, por lo que sería genial agregar la posibilidad de seleccionar una lista de reproducción basada en una ruta generada.

No fue posible encontrar tales soluciones entre las aplicaciones existentes. Los análogos más cercanos son los planificadores de rutas: Google Maps, 2GIS, etc.

Lo más conveniente es tener una aplicación de este tipo en el teléfono, por lo que usar Telegram fue una buena opción. Te permite mostrar mapas y reproducir música, y puedes controlar todo esto escribiendo un bot. El trabajo principal con mapas se realizó utilizando la API de Google Map. Python facilita la combinación de ambas tecnologías.

Había tres personas en el equipo, por lo que la tarea se dividió en dos subtareas que no se superponían (trabajar con mapas y trabajar con música) para que los chicos pudieran trabajar de forma independiente, y yo me encargué de combinar los resultados.

Hackathon DevDays'19 (parte 1): un diario con recomendaciones, un generador de rutas a pie y democracia líquidaNinguno de nosotros había trabajado nunca con la API de Google Map ni con los bots de Telegram escritos, por lo que el principal problema fue la cantidad de tiempo asignado para implementar el proyecto: comprender algo siempre lleva más tiempo que hacer algo que se conoce bien. También fue difícil elegir la API del bot de Telegram: debido al bloqueo, no todos funcionan y tuve que luchar para configurar todo.

Cabe mencionar por separado cómo se resolvió el problema de generar rutas. Es fácil construir una ruta entre dos ubicaciones, pero ¿qué se puede ofrecer al usuario si sólo se conoce la longitud de la ruta? Que el usuario quiera caminar 10 kilómetros. Se selecciona un punto en una dirección arbitraria, cuya distancia en línea recta es de 10 kilómetros, después de lo cual se construye una ruta hasta este punto a lo largo de caminos reales. Lo más probable es que no sea recto, por lo que lo acortaremos a los 10 kilómetros especificados. Hay muchas opciones para este tipo de rutas: ¡tenemos un generador de rutas real!

Inicialmente quería segmentar el mapa en áreas correspondientes a áreas verdes: terraplenes, patios, calles, para conseguir el recorrido más agradable para caminar, y también generar música de acuerdo con estas áreas. Pero resultó difícil hacer esto usando la API de Google Map (no tuvimos tiempo de resolver este problema). Sin embargo, fue posible implementar la construcción de una ruta a través de tipos específicos de lugares (tienda, parque, biblioteca): si la ruta recorre todos los lugares especificados, pero aún no se ha recorrido la distancia deseada, se completa hasta un distancia especificada por el usuario en una dirección aleatoria. La API de Google Map también te permite calcular el tiempo de viaje estimado, lo que te ayuda a elegir una lista de reproducción exactamente para toda la caminata.

Como resultado, logró hacer una generación rutas por punto de partida, distancia y puntos intermedios; Todo estaba preparado para clasificar la música según tramos del recorrido, pero por falta de tiempo se decidió dejar la opción de seleccionar una lista de reproducción simplemente como una rama adicional de la UI. Así, el usuario pudo elegir de forma independiente la música que desea escuchar.

El principal problema al trabajar con música era no saber de dónde obtener archivos mp3 sin necesidad de que el usuario tuviera una cuenta en ningún servicio. Se decidió solicitar música al usuario (modo UserMusic). Esto crea un nuevo problema: no todo el mundo tiene la posibilidad de descargar pistas. Una solución es crear un repositorio con música de los usuarios (modo BotMusic); desde allí puede generar música independientemente de los servicios.

Aunque no fue perfecto, completamos la tarea: terminamos con una aplicación que me gustaría usar. En general, esto es genial: hace tres días solo tenías una idea y ni un solo pensamiento sobre cómo implementarla exactamente, pero ahora hay una solución que funciona. Estos fueron tres días muy importantes para mí, ya no tengo miedo de pensar en algo que no tengo suficiente conocimiento para implementar, ser líder de equipo fue increíblemente interesante y pude conocer a los maravillosos chicos que se unieron a mi equipo. ¡mejor!

Democracia Líquida

Hackathon DevDays'19 (parte 1): un diario con recomendaciones, un generador de rutas a pie y democracia líquida

Idea autor
Stanislav Sychev
Composición del equipo
Stanislav Sychev – jefe de equipo, base de datos
Nikolay Izyumov – interfaz del robot
Anton Ryabushev – backend

Dentro de diferentes grupos, a menudo existe la necesidad de tomar una decisión o votar. Generalmente en estos casos se recurre a democracia directaSin embargo, cuando el grupo crece, pueden surgir problemas. Por ejemplo, es posible que una persona en un grupo no quiera responder preguntas con frecuencia o responder preguntas sobre ciertos temas. En grupos grandes, para evitar problemas recurren a democracia representativa, cuando se elige entre todo el pueblo un grupo separado de “diputados”, que liberan al resto de la carga de la elección. Pero convertirse en diputado es bastante difícil, y la persona que lo sea no necesariamente será honesta y respetable, como les pareció a los votantes.

Para resolver los problemas de ambos sistemas, Brian Ford propuso el concepto democracia liquida. En un sistema de este tipo, cada uno es libre de elegir el rol de usuario habitual o de delegado, simplemente expresando su deseo. Cualquiera puede votar de forma independiente o dar voto a un delegado sobre uno o más temas. Un delegado también puede emitir su voto. Además, si el delegado ya no conviene al elector, el voto puede retirarse en cualquier momento.

En la política se encuentran ejemplos del uso de la democracia líquida, y queríamos implementar una idea similar para el uso diario en todo tipo de grupos de personas. En el próximo hackathon DevDays, decidimos escribir un bot de Telegram para votar según los principios de la democracia líquida. Al mismo tiempo, quería evitar un problema común con este tipo de bots: obstruir el chat general con mensajes del bot. La solución es incorporar la mayor cantidad de funcionalidad posible a una conversación personal.

Hackathon DevDays'19 (parte 1): un diario con recomendaciones, un generador de rutas a pie y democracia líquidaPara crear este bot utilizamos API de Telegrama. Se eligió una base de datos PostgreSQL para almacenar el historial de votaciones y delegaciones. Para comunicarse con el bot, se instaló un servidor Flask. Elegimos estas tecnologías porque... Ya teníamos experiencia interactuando con ellos durante nuestros estudios de maestría. El trabajo en los tres componentes del proyecto (la base de datos, el servidor y el bot) se distribuyó con éxito entre los miembros del equipo.

Por supuesto, tres días es poco tiempo, por lo que durante el hackathon implementamos la idea hasta el nivel de prototipo. Como resultado, creamos un bot que escribe en el chat general solo información sobre la apertura de la votación y sus resultados anónimos. La posibilidad de votar y crear una encuesta se implementa mediante correspondencia personal con el bot. Para votar, ingrese un comando que muestre una lista de temas que requieren atención directa. En correspondencia personal, podrás ver la lista de delegados y sus votos anteriores, y también darles tu voto sobre uno de los temas.

Vídeo con un ejemplo de trabajo..

Fue interesante trabajar en el proyecto, nos quedamos en la universidad hasta medianoche, creemos que es una buena forma de descansar del estudio, aunque es muy agotador. Fue una experiencia agradable trabajar en un equipo muy unido.

PD. Ya están abiertas las inscripciones a los programas de máster para el próximo curso académico está abierto. ¡Únete ahora!

Fuente: www.habr.com

Añadir un comentario