你好 休息片刻后,我们决定返回Habr,并希望分享参加黑客马拉松的经验。 九月份,莫斯科主办了
Diversity.Hack ,其合作伙伴是Dostavista,Waves和我们的New Cloud Technologies。 参加由Phystech.Genesis举办的hackathon竞赛是MIPT商业孵化器的一个项目,这是我们公司的首次成功经验,同时也是成功的经验。 但是,让我们不要超越自己-让我们看看一切进展如何,以及参与者想出了什么有趣的事情。

多样性如何
来自44个团队的208人聚集在GrowUp联合组织的黑客马拉松中,这是组织者的记录。 关于团队的组成方式,可以在Phystech.Genesis的
文章中找到详细信息。 参与者用了一天多的时间解决了每个公司提出的三项任务中的一项,有机会在场馆过夜,并有组织者的食物。 300,000卢布的奖金在赛道之间平均分配。 除了产生想法和编码之外,参与者还可以参加有关
如何在黑客马拉松比赛中获胜的培训 。

在活动开始时,所有合作伙伴公司都描述了其任务的条件-在此之前,仅了解参与者必须使用的通用措辞和一套技术。 团队根据自己的判断,分配了开发原型的时间,并考虑了以下
要点 :现有思想的市场分析,头脑风暴,确定原型的关键特性,团队中的角色和编码。
参与者既有学生,也有经验丰富的专家,非常有前途的人见了面。 结果,我们和其他合作伙伴公司设法提出了新的想法。 例如,Waves建议使用Ride语言和Waves平台开发移动应用程序。 对于Dostavista送货服务,团队开发了优化快递路线的系统。
在New Cloud Technologies的同事的指导下,有必要提供一个便捷的工具(算法,UI)来比较两个或多个版本时分析文档中的更改。
为什么要执行此任务?
自2013年以来,我们公司一直在开发
MyOffice ,这是一套在所有主要操作系统(包括移动设备)上运行的办公应用程序。 最初,我们有7至8个工作选择,而要为黑客马拉松选择一个,我们甚至在公司内部进行了一次私人投票。 其中的选项包括比较两个或多个文档(技术本身和UX的开发),自动比较渲染文档的质量(以从两个不同的编辑器导出为PDF的示例为例),还有一个与文档字体分析有关的想法。 我们还希望执行一项任务,从聊天中收集有关会议日期的信息,以将其自动添加到智能手机日历中(例如,用Telegram编写自动程序很有趣)等。
结果,我们完成了比较两个或更多文档的任务。 在全球范围内,其想法是,不同的员工可以使用计算机上的办公套件,对同一源文件进行自己的更改。 您需要创建一种技术,使您可以轻松比较同一文档的多个版本,然后接受其中一项建议的编辑。 尚未检查编辑是否相互矛盾,此后将获得单个最终文档。

看来这样的任务怎么可能与之相关? 现在可以使用各种云,其中显示更改的整个历史记录-谁编辑了什么内容,何时编辑。 但是,出于安全原因,许多公司不允许将文档存储在云中。 由于这个或任何其他原因,可以在不使用云的情况下对文件进行离线编辑,然后通常通过邮件将文档的该版本或该版本发送给同事。 可以由多个人进行编辑,并且由于文档版本过多,不可避免地会造成混乱。
因此,我们面临着使用工具同时比较两个以上文档的需求。 但是真倒霉! 市场上根本没有针对此问题的任何解决方案,仅提供用于比较两个文档的服务,并且现有的选择并没有多变。 因此,有ABBYY比较器,它不仅可以比较文本格式的文档,还可以比较PDF,扫描件和照片。 使用此服务的缺点可能是其成本。 另一个服务是文本比较! -相似的内容使您可以将文本简单地插入两个特殊的窗口中。 这极大地限制了可能性-即使文件也无法下载,只能
按Ctrl + C和
Ctrl + V !
我们公司决定寻求来自俄罗斯各地才华横溢的开发人员的“痛楚”,消除了文件格式的限制。 我们建议使用熟悉的html-文档的树形结构可以方便地表示在其中。 所有参与者都对此报价做出了回应。 我们对获得比较技术本身以及便捷且交互式的界面感兴趣。
获胜团队的决定
在哈布雷(Habré)上有许多采访文章,内容涉及参与者在黑客马拉松期间如何构建工作流程,如何成功获胜。 八支团队解决了我们的问题,其中三支获得了大奖:第一支获得
ZenDocs ,第二支由
SerotoninMix和
SegFault共享。 我们根据以下标准选择了获奖者:用户界面的用户友好性(交互性和简约性),该界面中各种案例的质量(表格的比较-内部结构变化和文本变化,图表,图像的外观如何),比较算法本身(时间复杂度,识别不同类型的编辑的能力)。 一个好的工作原型被认为是一大优势:)
事实证明,大多数团队的界面解决方案都非常相似。 也许这表明,如果所有开发人员都对同一事物感兴趣,那么这些接口将变得易于使用。 自定义案例的详细信息和原型的质量各不相同-有人设法做得更多,而有人则做得更少。

尽管如此,在提出解决方案后,最喜欢的对象已明确定义-原来是
ZenDocs团队,该团队强调了算法部分。 他们对可用的方法进行了有效的研究,
发现了一篇科学文章,其中包含用于比较xml树的算法。 该算法可以很好地扩展到N个文档:如果像许多其他算法一样成对比较文档,则复杂度将随着文档数量的增长呈多项式增长,并且这种方法会线性增加。 该算法返回已更改的树元素的ID,更改的类型为插入,删除,替换。
将这样的响应格式提供给前端很方便-您无需进一步处理。 图片,表格的行和列是文档的普通结构块,与段落相同,因此此算法可让您检测图片,表格的结构或其内容的变化,即它可以应付许多用例,这是重要的评估标准。 该团队建议使用Merkle树进一步优化算法。 这种优化将仅允许检查哈希已更改的那些子树,从而加快了算法的速度。 可以从以下
网址获得原型:
https :
//zendocs.ru选择第二名和第三名更加困难,因为三个有价值的决定要求他们。 最后,我们选择了SerotoninMix和SegFault。 其中有些在交互性方面更好,而另一些在导航方面则更好,这是正常的情况:在两天内很难开发出理想的解决方案。 一些团队几乎完全在一个简单的模型上实现了该算法,其中包括ZenDocs和SerotoninMix。
我们特别选择了后者,包括他们的创意方法-赞赏他们的幽默感(他们称他们的项目为“ NeMoy office”,并且他们的演示中有很多有趣的时刻),并为他们成功制作了一个完整的原型而印象深刻。
来自SegFault的家伙找到了一种非常原始的方法。 在开发原型时,他们使用了
Vue.js ; 服务器是用
Flask和
Docker用Python编写的,使用了
Word2Vec和
Crochemore算法。 在对算法进行了一点回顾之后,与会人员将主文档与所有其他文档进行了比较,强调了共同点和不同部分。 在创建的环境中,有一个编辑块,其中显示来自不同文档的片段。 您可以选择其中之一并根据需要进行编辑。 在控制面板中,您可以接受编辑或查看先前接受的编辑。 该团队还比较了图像,将它们比较为
base64编码,然后将图像转换为
base64格式,并制定了一种比较表并显示其中更改的方法。
黑客马拉松的设计人员很少,我们的大部分任务是对界面进行原型设计并创建布局,其中包括使用Sketch和Figma等工具。 Talestorm团队沉浸在我们的心中,其中一位参与者通宵学习了如何从头开始工作。
黑客马拉松后的互动
9月底,举行了一次获胜者会议,包括CEO
Dmitry Komissarov和Phystech.Genesis在内的New Cloud Technologies的代表举行了会议。 在会议上,他们讨论了黑客马拉松的获胜者可以参加的公司任务。 我们期待与团队合作!
