Hallo! Nach einer langen Pause entschieden wir uns, nach Habr zurückzukehren und die Erfahrung der Teilnahme am Hackathon zu teilen. Im September war Moskau Gastgeber von
Diversity.Hack . Partner waren Dostavista, Waves und wir, New Cloud Technologies. Die Teilnahme an einem von Phystech.Genesis, einem Projekt des MIPT Business Incubator, organisierten Hackathon war die erste und gleichzeitig erfolgreiche Erfahrung für unser Unternehmen. Aber lasst uns nicht weiterkommen - lasst uns sehen, wie alles gelaufen ist und welche interessanten Dinge den Teilnehmern eingefallen sind.

Wie war Diversity.Hack
208 Personen aus 44 Teams versammelten sich zum Hackathon im GrowUp-Coworking, was für die Organisatoren ein Rekord war.
Informationen zur Teambildung finden Sie im
Artikel von Phystech.Genesis. Die Teilnehmer lösten eine der drei vorgeschlagenen Aufgaben von jedem Unternehmen etwas mehr als einen Tag und hatten die Möglichkeit, direkt am Veranstaltungsort und mit Essen von den Organisatoren zu übernachten. Der Preisfonds von 300.000 Rubel wurde zu gleichen Teilen auf die Titel aufgeteilt. Die Teilnehmer konnten nicht nur Ideen generieren und programmieren, sondern auch intensiv
lernen, wie man bei Hackathons gewinnt .

Zu Beginn der Veranstaltung haben alle Partnerunternehmen die Bedingungen ihrer Aufgaben beschrieben - zuvor waren nur allgemeine Formulierungen und eine Reihe von Technologien bekannt, die die Teilnehmer verwenden mussten. Die Teams verteilten die Zeit für die Entwicklung des Prototyps nach eigenem Ermessen und berücksichtigten dabei die
wichtigsten Punkte : Analyse des Marktes für vorhandene Ideen, Brainstorming, Bestimmung der Schlüsselmerkmale des Prototyps, Rollen innerhalb des Teams und Kodierung.
Unter den Teilnehmern waren sowohl Studenten als auch erfahrene Spezialisten, die sich mit vielversprechenden Jungs trafen. Infolgedessen ist es uns und anderen Partnerunternehmen gelungen, neue Ideen zu entwickeln. Beispielsweise schlug Waves vor, eine mobile Anwendung unter Verwendung der Ride-Sprache und der Waves-Plattform zu entwickeln. Für den Dostavista-Lieferservice entwickelten die Teams ein System zur Optimierung der Kurierrouten.
Unter der Anleitung unserer Kollegen von New Cloud Technologies war es erforderlich, ein praktisches Tool (Algorithmus, Benutzeroberfläche) für die Analyse von Änderungen in Dokumenten beim Vergleich von zwei oder mehr Versionen zu entwickeln.
Warum genau diese Aufgabe?
Seit 2013 entwickelt unser Unternehmen
MyOffice , eine Reihe von Office-Anwendungen, die auf allen wichtigen Betriebssystemen, einschließlich Mobilgeräten, ausgeführt werden. Anfänglich hatten wir 7-8 Joboptionen, und um eine für den Hackathon zu wählen, veranstalteten wir sogar eine private Abstimmung innerhalb des Unternehmens. Zu den Optionen gehörten beispielsweise der Vergleich von zwei oder mehr Dokumenten (Entwicklung der Technologie selbst und UX), der automatisierte Vergleich der Qualität von Rendering-Dokumenten (am Beispiel des Exports in PDF aus zwei verschiedenen Editoren) sowie eine Idee zur Analyse von Schriftarten in einem Dokument. Wir wollten auch die Aufgabe haben, Informationen aus Chats über Besprechungstermine zu sammeln, um sie automatisch in den Smartphone-Kalender aufzunehmen (interessant zum Beispiel für das Schreiben von Bots in Telegramm) und für mehrere andere.
Infolgedessen haben wir uns entschlossen, zwei oder mehr Dokumente zu vergleichen. Weltweit besteht die Idee darin, dass verschiedene Mitarbeiter mithilfe einer Office-Suite auf ihrem Computer eigene Änderungen an derselben Quelldatei vornehmen können. Sie müssen eine Technologie erstellen, mit der Sie bequem mehrere Versionen desselben Dokuments vergleichen und dann eine der vorgeschlagenen Änderungen akzeptieren können. Die Änderungen müssen noch auf Widersprüche überprüft werden. Anschließend wird ein einziges endgültiges Dokument erstellt.

Es scheint, wie eine solche Aufgabe überhaupt relevant sein kann? Es stehen nun verschiedene Clouds zur Verfügung, in denen die gesamte Änderungshistorie angezeigt wird - wer hat was wann bearbeitet. Viele Unternehmen erlauben jedoch aus Sicherheitsgründen nicht, dass Dokumente in der Cloud gespeichert werden. Aus diesem oder einem anderen Grund können Änderungen an der Datei offline ohne Verwendung einer Cloud vorgenommen werden. Anschließend wird diese oder jene Version des Dokuments in der Regel per E-Mail an Kollegen gesendet. Bearbeitungen können von mehr als einer Person vorgenommen werden, und als Ergebnis von Dokumentversionen werden so viele, dass unvermeidlich Verwirrung entsteht.
Wir müssen also ein Tool verwenden, um mehr als zwei Dokumente gleichzeitig zu vergleichen. Aber Pech! Es gab einfach keine Lösungen für dieses Problem auf dem Markt, es gibt nur Dienste zum Vergleichen von zwei Dokumenten, und die vorhandene Auswahl ist nicht besonders vielfältig. So gibt es ABBYY Comparator, mit dem Dokumente nicht nur im Textformat, sondern auch als PDF, Scans und Fotos verglichen werden können. Der Nachteil der Nutzung dieses Dienstes können seine Kosten sein. Ein weiterer Service ist Text Compare! - und ähnliche ermöglichen es Ihnen, einfach Text in zwei spezielle Fenster einzufügen. Und das schränkt die Möglichkeiten stark ein - selbst Dateien können nicht heruntergeladen werden, sondern nur
Strg + C und
Strg + V !
Unser Unternehmen hat sich entschlossen, talentierte Entwickler aus ganz Russland um ein Heilmittel gegen den „Schmerz“ zu bitten, um die Einschränkung des Dokumentenformats zu beseitigen. Wir haben die Verwendung von vertrautem HTML vorgeschlagen - die Baumstruktur des Dokuments wird bequem darin dargestellt. Alle Teilnehmer haben auf dieses Angebot geantwortet. Wir waren daran interessiert, die Vergleichstechnologie selbst sowie eine komfortable und interaktive Oberfläche zu erhalten.
Teamentscheidungen gewinnen
Auf Habré gibt es viele Interviewartikel darüber, wie die Teilnehmer während eines Hackathons einen Workflow aufgebaut und wie sie es geschafft haben, zu gewinnen. Acht Teams haben unser Problem gelöst, von denen drei Preise gewonnen haben: Das erste nahm
ZenDocs , das zweite wurde von
SerotoninMix und
SegFault geteilt . Wir haben die Gewinner nach folgenden Kriterien ausgewählt: Benutzerfreundlichkeit der Benutzeroberfläche (Interaktivität und Minimalismus), Qualität der verschiedenen Fälle in dieser Oberfläche (wie der Vergleich von Tabellen - strukturelle Änderungen und Textänderungen im Inneren, Diagramme, Bilder), Vergleichsalgorithmus selbst (zeitliche Komplexität, Fähigkeit, verschiedene Arten von Bearbeitungen zu erkennen). Ein gut funktionierender Prototyp galt als großes Plus :)
Die Schnittstellenlösungen für die meisten Teams erwiesen sich als weitgehend ähnlich. Vielleicht deutet dies darauf hin, dass sich die Benutzeroberfläche als benutzerfreundlich herausstellte, wenn alle Entwickler zu dem gleichen Ergebnis gelangten. Die Detaillierung der Sonderfälle und die Qualität des Prototyps waren unterschiedlich - jemand konnte mehr, jemand weniger.

Nach der Präsentation der Lösungen war der Favorit jedoch klar definiert - es stellte sich heraus, dass das
ZenDocs- Team den algorithmischen Teil betonte. Sie führten eine effektive Studie der verfügbaren Ansätze durch und
fanden einen wissenschaftlichen Artikel mit einem Algorithmus zum Vergleichen von XML-Bäumen. Dieser Algorithmus lässt sich gut auf N Dokumente skalieren: Wenn Sie Dokumente wie viele andere Algorithmen paarweise vergleichen, nimmt die Komplexität der Anzahl der Dokumente polynomial zu und nimmt mit diesem Ansatz linear zu. Der Algorithmus gibt die ID der geänderten Baumelemente zurück und die Art der Änderung ist Einfügen, Löschen, Ersetzen.
Es ist praktisch, dem Frontend ein solches Antwortformat zuzuweisen - Sie müssen es nicht weiter verarbeiten. Bilder, Zeilen und Spalten der Tabelle sind gewöhnliche Strukturblöcke des Dokuments, genau wie Absätze. Mit diesem Algorithmus können Sie Änderungen im Bild, in der Struktur der Tabelle oder in deren Inhalten erkennen, dh, es wird mit vielen Benutzerfällen fertig, und dies ist ein wichtiges Bewertungskriterium. Das Team schlug eine weitere Optimierung des Algorithmus unter Verwendung des Merkle-Baums vor. Durch eine solche Optimierung können nur die Teilbäume überprüft werden, für die sich der Hash geändert hat, was den Algorithmus beschleunigt. Der Prototyp ist verfügbar unter:
https://zendocs.ruDie Wahl des zweiten und dritten Platzes war schwieriger, weil drei würdige Entscheidungen für sie beansprucht wurden. Am Ende haben wir uns für SerotoninMix und SegFault entschieden. Einige von ihnen waren besser für die Interaktivität, andere für die Navigation, und dies ist eine normale Situation: In zwei Tagen ist es schwierig, eine ideale Lösung zu entwickeln. Einige Teams haben den Algorithmus fast vollständig auf einem einfachen Modell implementiert, darunter ZenDocs und SerotoninMix.
Letztere haben wir auch für ihre kreative Herangehensweise hervorgehoben - sie schätzten ihren Humor (sie nannten ihr Projekt „NeMoy Office“ und es gab viele lustige Momente in ihrer Präsentation) und waren beeindruckt von der Tatsache, dass sie es geschafft haben, einen vollwertigen Prototypen zu erstellen.
Die Jungs von SegFault haben einen sehr originellen Ansatz gefunden. Bei der Entwicklung des Prototyps verwendeten sie
Vue.js. Der Server wurde in Python unter Verwendung von
Flask and
Docker geschrieben , und
es wurden Word2Vec- und
Crochemore- Algorithmen
verwendet . Nachdem die Algorithmen ein wenig überprüft worden waren, verglichen die Teilnehmer das Hauptdokument mit allen anderen und hoben die gemeinsamen und verschiedenen Teile hervor. In der erstellten Umgebung gibt es einen Bearbeitungsblock, in dem Fragmente aus verschiedenen Dokumenten angezeigt werden. Sie können eine davon auswählen und bei Bedarf bearbeiten. In der Systemsteuerung können Sie die Bearbeitung akzeptieren oder zuvor akzeptierte anzeigen. Das Team verglich auch Bilder, verglich sie als
Base64-codiert und konvertierte das Bild in das
Base64- Format. Außerdem erarbeitete es eine Methode zum Vergleichen und Anzeigen von Änderungen an Tabellen.
Es gab nur wenige Designer beim Hackathon, und unsere Aufgabe bestand zu einem großen Teil darin, die Benutzeroberfläche zu prototypisieren und Layouts zu erstellen, bei denen Werkzeuge wie Sketch und Figma zum Einsatz kamen. Das Talestorm-Team ist uns sehr ans Herz gewachsen, und einer der Teilnehmer hat die ganze Nacht hindurch gelernt, wie man von Grund auf neu arbeitet.
Interaktion nach dem Hackathon
Ende September fand ein Treffen der Gewinner, Vertreter von New Cloud Technologies, einschließlich CEO
Dmitry Komissarov , und Phystech.Genesis statt. Während des Treffens diskutierten sie die Aufgaben des Unternehmens, an denen die Sieger des Hackathons teilnehmen können. Wir freuen uns auf die Zusammenarbeit mit Teams!
