Cómo crear un prototipo de servicio de comparación de documentos en 28 horas y ganar un hackathon

Hola Después de un largo descanso, decidimos regresar a Habr y queremos compartir la experiencia de participar en el hackathon. En septiembre, Moscú fue sede de Diversity.Hack , cuyos socios fueron Dostavista, Waves y nosotros, New Cloud Technologies. La participación en un hackathon organizado por Phystech.Genesis, un proyecto de MIPT Business Incubator, fue la primera y al mismo tiempo exitosa experiencia para nuestra empresa. Pero no nos adelantemos, veamos cómo fue todo y qué cosas interesantes lograron los participantes.



¿Cómo fue la diversidad?


208 personas de 44 equipos se reunieron para el hackathon en el coworking GrowUp, que fue un récord para los organizadores. Sobre cómo se formaron los equipos, los detalles se pueden encontrar en el artículo de Phystech.Genesis. Los participantes resolvieron una de las tres tareas propuestas de cada empresa un poco más de un día, teniendo la oportunidad de pasar la noche en el lugar y con la comida de los organizadores. El fondo de premios de 300,000 rublos se dividió en partes iguales entre las pistas. Además de generar ideas y codificación, los participantes podrían asistir a intensivos sobre cómo ganar en los hackatones .



Al comienzo del evento, todas las empresas asociadas describieron las condiciones de sus tareas; antes de eso, solo se conocía la redacción general y un conjunto de tecnologías que los participantes tenían que usar. Los equipos distribuyeron el tiempo para el desarrollo del prototipo a su discreción, teniendo en cuenta los puntos principales : análisis de mercado de ideas existentes, tormenta de ideas, identificación de las características clave del prototipo, roles dentro del equipo y codificación.

Entre los participantes había estudiantes y especialistas experimentados, se conocieron muchachos muy prometedores. Como resultado, nosotros y otras compañías asociadas logramos sacar nuevas ideas. Por ejemplo, Waves propuso desarrollar una aplicación móvil usando el lenguaje Ride y la plataforma Waves. Para el servicio de entrega de Dostavista, los equipos desarrollaron un sistema para optimizar las rutas de mensajería.

Bajo la guía de nuestros colegas de New Cloud Technologies, fue necesario encontrar una herramienta conveniente (algoritmo, interfaz de usuario) para analizar los cambios en los documentos al comparar dos o más versiones.

¿Por qué exactamente esta tarea?


Desde 2013, nuestra compañía ha desarrollado MyOffice , un conjunto de aplicaciones de oficina que se ejecuta en todos los principales sistemas operativos, incluido el móvil. Inicialmente, teníamos 7-8 opciones de trabajo, y para elegir una para el hackathon, incluso organizamos una votación privada dentro de la empresa. Entre las opciones estaban, por ejemplo, comparar dos o más documentos (desarrollo de la tecnología misma y UX), comparación automática de la calidad de los documentos de representación (utilizando el ejemplo de exportación a PDF desde dos editores diferentes), también hubo una idea relacionada con el análisis de fuentes en un documento. También queríamos asignar una tarea para recopilar información de los chats sobre las fechas de reunión para su incorporación automática al calendario del teléfono inteligente (interesante, por ejemplo, para escribir bots en Telegram) y varios otros.

Como resultado, nos decidimos por la tarea de comparar dos o más documentos. A nivel mundial, la idea es que al usar una suite ofimática en su computadora, diferentes empleados pueden hacer sus propios cambios en el mismo archivo fuente. Debe crear una tecnología que le permita comparar cómodamente varias versiones del mismo documento y luego aceptar una de las ediciones propuestas. Las ediciones aún no se han verificado para ver si hay contradicción entre ellas, luego de lo cual se obtendrá un único documento final.



Parece que tal tarea puede ser relevante en absoluto? Ahora hay varias nubes disponibles en las que se muestra todo el historial de cambios: quién editó qué y cuándo. Sin embargo, muchas compañías no permiten que los documentos se almacenen en la nube por razones de seguridad. Por esta o cualquier otra razón, las ediciones al archivo se pueden hacer sin conexión, sin usar una nube, y luego esta o aquella versión del documento generalmente se envía a los colegas por correo. Las ediciones pueden ser realizadas por más de una persona, y como resultado de las versiones de documentos se hacen tantas que inevitablemente surge la confusión.

Por lo tanto, nos enfrentamos a la necesidad de utilizar una herramienta para comparar simultáneamente más de dos documentos. Pero mala suerte! Simplemente no había ninguna solución a este problema en el mercado, solo hay servicios para comparar dos documentos y la elección existente no brilla con variedad. Entonces, hay ABBYY Comparator, que puede comparar documentos no solo en formato de texto, sino también PDF, escaneos y fotos. La desventaja de usar este servicio puede ser su costo. Otro servicio es Text Compare! - y otras similares le permiten simplemente insertar texto en dos ventanas especiales. Y esto limita enormemente las posibilidades: incluso los archivos no se pueden descargar, ¡solo Ctrl + C y Ctrl + V !

Nuestra compañía decidió buscar una cura para el "dolor" de desarrolladores talentosos de toda Rusia, eliminando la restricción en el formato del documento. Propusimos usar html familiar: la estructura de árbol del documento está convenientemente representada en él. Todos los participantes respondieron a esta oferta. Estábamos interesados ​​en obtener la tecnología de comparación en sí, así como una interfaz práctica e interactiva.

Decisiones del equipo ganador


En Habré hay muchos artículos de entrevistas sobre cómo los participantes crearon un flujo de trabajo durante un hackathon, cómo lograron ganar. Ocho equipos resolvieron nuestro problema, tres de los cuales ganaron premios: el primero tomó ZenDocs , el segundo fue compartido por SerotoninMix y SegFault . Seleccionamos a los ganadores de acuerdo con los siguientes criterios: facilidad de uso de la interfaz de usuario (su interactividad y minimalismo), la calidad de los diversos casos en esta interfaz (cómo se verá la comparación de tablas - cambios estructurales y cambios de texto en el interior, diagramas, imágenes), el algoritmo de comparación en sí mismo (complejidad de tiempo, capacidad de reconocer diferentes tipos de ediciones). Un buen prototipo de trabajo se consideró una gran ventaja :)

Las soluciones de interfaz para la mayoría de los equipos resultaron ser muy similares. Quizás esto sugiere que las interfaces resultaron ser fáciles de usar si todos los desarrolladores llegaron a lo mismo. Los detalles de los casos personalizados y la calidad del prototipo diferían: alguien logró hacer más, alguien menos.



Sin embargo, después de la presentación de las soluciones, el favorito estaba claramente definido: resultó ser el equipo de ZenDocs , que enfatizó la parte algorítmica. Realizaron un estudio efectivo de los enfoques disponibles y encontraron un artículo científico con un algoritmo para comparar árboles xml. Este algoritmo se adapta bien a N documentos: si compara documentos en pares, como hacen muchos otros algoritmos, la complejidad crecerá polinomialmente en el número de documentos, y con este enfoque aumenta linealmente. El algoritmo devuelve la identificación de los elementos del árbol que han cambiado, y el tipo de cambio es insertar, eliminar, reemplazar.

Es conveniente dar un formato de respuesta de este tipo a la interfaz; no necesita procesarlo más. Las imágenes, filas y columnas de la tabla son bloques estructurales ordinarios del documento, al igual que los párrafos, por lo que este algoritmo le permite detectar cambios en la imagen, la estructura de la tabla o su contenido, es decir, hace frente a muchos casos de usuarios, y este es un criterio de evaluación importante. El equipo propuso una mayor optimización del algoritmo utilizando el árbol Merkle. Dicha optimización permitirá verificar solo aquellos subárboles para los cuales el hash ha cambiado, lo que acelera el algoritmo. El prototipo está disponible en: https://zendocs.ru





Elegir el segundo y tercer lugar fue más difícil, porque tres decisiones valiosas reclamaron por ellos. Al final, nos decidimos por SerotoninMix y SegFault. Algunos de ellos eran mejores para la interactividad, otros para la navegación, y esta es una situación normal: en dos días es difícil desarrollar una solución ideal. Algunos equipos implementaron casi por completo el algoritmo en un modelo simple, entre ellos ZenDocs y SerotoninMix.

Destacamos este último, incluso por su enfoque creativo: apreciamos su humor (llamaron a su proyecto "Oficina NeMoy", y hubo muchos momentos divertidos en su presentación) y nos impresionó el hecho de que lograron hacer un prototipo completo.




Los muchachos de SegFault han encontrado un enfoque muy original. Al desarrollar el prototipo, usaron Vue.js ; el servidor se escribió en Python usando los algoritmos Flask y Docker , Word2Vec y Crochemore . Después de revisar un poco los algoritmos, los participantes compararon el documento principal con todos los demás, destacaron las partes comunes y diferentes. En el entorno creado, hay un bloque de edición donde se muestran fragmentos de diferentes documentos. Puede seleccionar uno de ellos y editarlo si es necesario. En el panel de control, puede aceptar la edición o ver las previamente aceptadas. El equipo también comparó imágenes, comparándolas como codificadas en base64 y convirtiendo la imagen a formato base64 , y desarrolló un método para comparar tablas y mostrar los cambios en ellas.

Había pocos diseñadores en el hackathon, y nuestra tarea para un gran porcentaje consistía en crear prototipos de la interfaz y crear diseños, lo que implicaba el uso de herramientas como Sketch y Figma. El equipo de Talestorm se hundió en nuestros corazones, uno de los cuales aprendió a trabajar desde cero durante toda la noche.

Interacción post hackathon


A finales de septiembre, tuvo lugar una reunión de ganadores, representantes de New Cloud Technologies, incluido el CEO Dmitry Komissarov y Phystech.Genesis. En la reunión, discutieron las tareas de la empresa, en la que los ganadores del hackathon pueden participar. ¡Esperamos trabajar con equipos!

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


All Articles