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

Recientemente, hablamos sobre el programa de maestría corporativa de JetBrains y la "Ingeniería de Software / Ingeniería de Software" de la Universidad ITMO. Invitamos a todos los interesados ​​en la jornada de puertas abiertas el lunes 29 de abril. Hablaremos sobre las ventajas de nuestra escuela de posgrado, sobre qué bonos ofrecemos a los estudiantes y qué exigimos a cambio. Además, definitivamente responderemos las preguntas de nuestros huéspedes.

Se celebrará una jornada de puertas abiertas en la oficina de JetBrains en el Times Business Center, donde estudian nuestros estudiantes de posgrado. A partir de las 17:00. Puede encontrar todos los detalles y registrarse para el evento en mse.itmo.ru. Ven y no te arrepientas!

Uno de los componentes principales de la capacitación en el programa es la práctica. Los estudiantes tienen mucho: tareas semanales, proyectos semestrales y hackatones. Gracias a una inmersión completa en metodologías y tecnologías de desarrollo modernas mientras estudian, los graduados se unen rápidamente a los procesos de trabajo de las grandes empresas de TI.

En esta publicación queremos hablar más sobre los hackatones DevDays, que tienen lugar cada seis meses. Las reglas son simples: equipos de 3-4 personas se reúnen y en tres días, los estudiantes dan vida a sus propias ideas. ¿Qué puede venir de esto? Lea la primera parte de las historias sobre los proyectos de hackathon de este semestre de los propios estudiantes :)

Diario de recomendaciones de películas




El autor de la idea.
Ivan 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 del diario y la trama de la película
Dmitry Valchuk - IU
Nikita Vinokurov - UI, diseño

El objetivo de nuestro proyecto era escribir una aplicación de escritorio, un diario que recomendaría películas al usuario de acuerdo con las entradas.

Se me ocurrió esta idea cuando fui a la universidad y pensé en mis problemas. "Cualquiera que sea el problema que enfrenta una persona, algún clásico ya ha escrito sobre esto", pensé. "Y desde que alguien escribió, significa que alguien ya ha filmado". Entonces, el deseo de ver una película sobre un hombre con el mismo tormento mental apareció por sí solo.

Obviamente, existe una amplia variedad de diarios separados y servicios de recomendación por separado (pero generalmente las recomendaciones se basan en lo que a una persona le gustaba 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 diario.

¿Cómo implementamos esto? Cuando se presiona el botón mágico, el diario envía una entrada al servidor, donde se selecciona la película según la descripción tomada de Wikipedia. Nuestra interfaz se realizó en Electron (lo usamos, no el sitio, 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 Python: los TF se obtuvieron de las descripciones -IDF vectores que se compararon por proximidad al vector de entrada del diario.

Un miembro del equipo solo participó en el modelo, el otro en toda la interfaz (inicialmente, junto con el tercer miembro, que luego pasó a las pruebas). Estaba involucrado en analizar las tramas de la película desde Wikipedia y el servidor.

Paso a paso, nos acercamos al resultado, superando una serie de problemas, comenzando con el hecho de que inicialmente el modelo requería una gran cantidad de RAM y terminaba con la dificultad de transferir datos al servidor.

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

Mis impresiones sobre el proyecto son muy positivas: el trabajo fue emocionante desde temprano en la mañana hasta tarde en la noche, y la aplicación resultante periódicamente da resultados extremadamente divertidos en el estilo de "Sleepless Night" a una entrada del diario sobre la tarea en la universidad o una película sobre el primer día escolar en la historia del primer día en el departamento

Los enlaces relevantes, instaladores y más se pueden encontrar aquí .

Generador de ruta


El autor de la idea.
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, personas, pensar en la historia. Pero, incluso cambiando mi lugar de residencia, tarde o temprano me enfrento al problema de elegir una ruta: todo lo que se me ocurrió ha pasado. Entonces surgió la idea de automatizar la generación de rutas: usted especifica el punto de partida y la longitud de la ruta, y el programa ofrece una opción. Caminar puede ser largo, por lo que el desarrollo lógico de la idea parece estar agregando la capacidad de indicar puntos intermedios para el "alto", donde podría tomar un bocado y relajarse. Otra rama del desarrollo fue la música. Ir a la música siempre es más divertido, por lo que sería genial agregar la posibilidad de seleccionar una lista de reproducción para la ruta generada.

Entre las aplicaciones existentes, tales soluciones no se pudieron encontrar. Los análogos más cercanos son los planificadores de rutas: Google Maps, 2GIS, etc.

Tal aplicación es más conveniente para tener en el teléfono, por lo que el uso de Telegram se ha convertido en una buena opción. Le permite mostrar mapas y reproducir música, y puede administrar todo esto escribiendo un bot. El trabajo principal con los mapas se realizó utilizando la API de Google Map. Python hace que sea fácil hacer amigos de ambas tecnologías.

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

Ninguno de nosotros ha trabajado nunca con la API de Google Map y escribió los bots de Telegram, por lo que el problema principal fue la cantidad de tiempo asignado para el proyecto: descubrir algo siempre lleva más tiempo que hacer lo que sabes bien. También fue difícil elegir la API de bot de Telegram: debido al bloqueo, no todos trabajan y tuvieron que sufrir para configurar todo.

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

Inicialmente, quería segmentar el mapa en secciones correspondientes a áreas verdes: terraplenes, patios, calles, para obtener la ruta más agradable para un paseo, y también generar música de acuerdo con estas secciones. Pero resultó ser difícil hacerlo usando la API de Google Map (no lograron resolver este problema). Sin embargo, resultó realizar la construcción de la ruta a través de tipos específicos de ubicaciones (tienda, parque, biblioteca): si la ruta ha omitido todos los lugares especificados, pero la distancia deseada aún no se ha recorrido, se extiende a una distancia especificada por el usuario en una dirección aleatoria. Además, la API de Google Map le permite calcular el tiempo de viaje estimado, lo que ayuda a elegir una lista de reproducción para la duración exacta del viaje.

Como resultado, resultó hacer la generación de rutas por punto de partida, distancia y puntos intermedios; Todo estaba preparado para clasificar la música según las secciones de la ruta, pero debido a la falta de tiempo, se decidió dejar la posibilidad de seleccionar una lista de reproducción simplemente como una rama adicional de la interfaz de usuario. Por lo tanto, el usuario pudo elegir independientemente la música para escuchar.

El principal problema con el trabajo con música fue la falta de conocimiento de dónde obtener archivos mp3 para no requerir que el usuario tenga una cuenta en ningún servicio. Se decidió solicitar música del usuario (modo UserMusic). Esto plantea un nuevo problema: no todos tienen la capacidad de descargar pistas. Una solución es crear un repositorio con música de los usuarios (modo BotMusic): puede generar música a partir de ellos independientemente de los servicios.

Aunque no es perfecto, hicimos frente a la tarea: resultó una aplicación que me gustaría usar. En general, esto es muy bueno: hace tres días solo tenía una idea y ni un solo pensamiento sobre cómo implementarla, y ahora hay una solución que funciona. Para mí fueron tres días muy importantes. Ya no tengo miedo de llegar a algo que carece de conocimiento, fue increíblemente interesante ser un líder de equipo, ¡y reconocí mejor a los maravillosos muchachos que fueron a mi equipo!

Democracia líquida




El autor de la idea.
Stanislav Sychev
Composición del equipo
Stanislav Sychev - líder del equipo, base de datos
Nikolay Izyumov - interfaz bot
Anton Ryabushev - backend

Dentro de los diferentes grupos, a menudo es necesario tomar una decisión o votar. Por lo general, en tales casos recurren a la democracia directa , sin embargo, cuando el grupo se vuelve grande, pueden surgir problemas. Por ejemplo, una persona de un grupo puede no tener el deseo de responder preguntas o responder preguntas sobre temas específicos. En grupos grandes, para evitar problemas, recurren a la democracia representativa , cuando seleccionan un grupo separado de "diputados" de todas las personas que liberan al resto de la carga de la elección. Pero este sistema tiene sus inconvenientes.

Para resolver los problemas de ambos sistemas, Brian Ford propuso el concepto de democracia líquida . En dicho sistema, todos son libres de elegir el rol de un usuario ordinario o delegado, simplemente expresando un deseo. Cualquier persona puede votar independientemente o emitir su voto sobre un delegado en uno o más asuntos. Un delegado también puede votar. Además, si el delegado ha dejado de organizar un votante, el voto puede retirarse en cualquier momento.

Se encuentran ejemplos del uso de la democracia líquida en la política, y queríamos implementar una idea similar para el uso diario dentro de varios grupos de personas. En el próximo hackathon de DevDays, decidimos escribir un bot de Telegram para votar sobre los principios de la democracia líquida. Al mismo tiempo, quería evitar el problema frecuente de tales bots: obstruir el chat general con mensajes del bot. La solución es poner tanta funcionalidad como sea posible en una conversación personal.

Para crear este bot, utilizamos la API de Telegram . Para almacenar el historial de votaciones y delegaciones, se eligió la base de datos PostgreSQL. Para comunicarse con la base de datos, bot bot se planteó Flask-server. Elegimos estas tecnologías porque ya teníamos experiencia interactuando con ellos mientras estudiaba en la magistratura. El trabajo en las tres partes constitutivas 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, así que durante el hackathon nos dimos cuenta de la idea al nivel de un 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. Las oportunidades para votar y crear un voto se realizan a través de la correspondencia personal con el bot. Para votar, se presenta un equipo que muestra una lista de problemas que requieren atención directa. En la correspondencia personal, puede ver la lista de delegados y sus votos anteriores, así como darles su voto sobre uno de los temas.

Video con un ejemplo de trabajo .

Fue interesante trabajar en el proyecto, nos quedamos en la universidad hasta la medianoche. Nos parece que esta es una excelente manera de distraerse del estudio, aunque es muy agotador. Hubo una experiencia agradable en un equipo muy unido.

PD: La admisión a la magistratura para el próximo año académico ya está abierta . Únete ahora!

Source: https://habr.com/ru/post/449042/


All Articles