كيفية إنشاء خدمة مقارنة المستندات النموذجية في 28 ساعة والفوز hackathon

تحية! بعد استراحة طويلة ، قررنا العودة إلى هبر ونرغب في مشاركة تجربة المشاركة في hackathon. في سبتمبر ، استضافت موسكو Diversity.Hack ، وشركاؤنا هم Dostavista و Waves ، ونحن New Cloud Technologies. كانت المشاركة في hackathon التي نظمتها Phystech.Genesis ، أحد مشاريع MIPT Business Incubator ، أول تجربة ناجحة لشركتنا في الوقت نفسه. لكن دعونا لا نمضي قدمًا في أنفسنا - فلنرى كيف سارت الأمور وكل الأشياء المثيرة التي تمكن المشاركون من التوصل إليها.



كيف كان التنوع


احتشد 208 أشخاص من 44 فريقًا للاختراق في برنامج GrowUp ، والذي كان بمثابة رقم قياسي للمنظمين. حول كيفية تشكيل الفرق ، يمكن العثور على التفاصيل في المقال بواسطة Phystech.Genesis. قام المشاركون بحل واحدة من المهام الثلاث المقترحة من كل شركة أكثر من يوم واحد بقليل ، مع إتاحة الفرصة للبقاء بين عشية وضحاها في المكان ومع الطعام من المنظمين. تم تقسيم صندوق الجوائز البالغ 300000 روبل بالتساوي بين المسارات. بالإضافة إلى توليد الأفكار والترميز ، يمكن للمشاركين حضور تكثيف حول كيفية الفوز في hackathons .



في بداية الحدث ، وصفت جميع الشركات الشريكة شروط مهامها - وقبل ذلك ، لم تكن معروفة سوى الصياغة العامة ومجموعة من التقنيات التي يجب على المشاركين استخدامها. وزعت الفرق الوقت اللازم لتطوير النموذج الأولي حسب تقديرها ، مع مراعاة النقاط الرئيسية : تحليل السوق للأفكار الحالية ، عاصفة الدماغ ، تحديد السمات الرئيسية للنموذج الأولي ، الأدوار داخل الفريق والترميز.

وكان من بين المشاركين طلاب ومختصون على حد سواء ، التقى شباب واعدون للغاية. نتيجة لذلك ، تمكنا نحن وشركاء آخرون من استنباط أفكار جديدة. على سبيل المثال ، اقترح Waves تطوير تطبيق جوال باستخدام لغة Ride و Waves Platform. بالنسبة إلى خدمة توصيل Dostavista ، طورت الفرق نظامًا لتحسين طرق التوصيل.

بتوجيه من زملائنا من New Cloud Technologies ، كان من الضروري التوصل إلى أداة ملائمة (الخوارزمية ، UI) لتحليل التغييرات في المستندات عند مقارنة نسختين أو أكثر.

لماذا بالضبط هذه المهمة؟


منذ عام 2013 ، تقوم شركتنا بتطوير MyOffice ، وهي مجموعة من التطبيقات المكتبية التي تعمل على جميع أنظمة التشغيل الرئيسية ، بما في ذلك الأجهزة المحمولة. في البداية ، كان لدينا 7-8 خيارات وظيفية ، ولخيار واحد للاختراق ، قمنا بإجراء اقتراع خاص داخل الشركة. من بين الخيارات ، على سبيل المثال ، مقارنة وثيقتين أو أكثر (تطوير التكنولوجيا نفسها و UX) ، والمقارنة الآلية لجودة مستندات التقديم (باستخدام مثال التصدير إلى PDF من محررين مختلفين) ، كانت هناك أيضًا فكرة متعلقة بتحليل الخطوط في مستند. أردنا أيضًا إعطاء مهمة لجمع المعلومات من الدردشات حول تواريخ الاجتماعات لإضافتها التلقائية إلى تقويم الهاتف الذكي (المثير للاهتمام ، على سبيل المثال ، كتابة برامج الروبوت في Telegram) والعديد غيرها.

نتيجة لذلك ، استقرنا على مهمة مقارنة وثيقتين أو أكثر. على المستوى العالمي ، تتمثل الفكرة في أنه باستخدام مجموعة من المكاتب على أجهزة الكمبيوتر الخاصة بهم ، يمكن للموظفين المختلفين إجراء تغييراتهم الخاصة على نفس الملف المصدر. تحتاج إلى إنشاء تقنية تسمح لك بمقارنة إصدارات عديدة من المستند نفسه بشكل مريح ، ثم قبول أحد التعديلات المقترحة. لم يتم التحقق بعد من التعديلات للتأكد من تناقضها ، وبعد ذلك سيتم الحصول على وثيقة نهائية واحدة.



يبدو كيف يمكن لهذه المهمة أن تكون ذات صلة على الإطلاق؟ تتوفر الآن العديد من السحب التي يتم فيها عرض سجل التغييرات بالكامل - الذي قام بتحرير ماذا ومتى. ومع ذلك ، لا تسمح العديد من الشركات بتخزين المستندات في السحابة لأسباب أمنية. لهذا السبب أو لأي سبب آخر ، يمكن إجراء التعديلات على الملف في وضع عدم الاتصال ، دون استخدام سحابة ، وبعد ذلك عادةً ما يتم إرسال هذا الإصدار أو ذاك من المستند إلى الزملاء عبر البريد. يمكن إجراء عمليات التحرير من قبل أكثر من شخص واحد ، ونتيجة لإصدار المستندات يصبح هذا العدد كبيرًا بحيث ينشأ تشويش حتمي.

لذلك نحن نواجه الحاجة إلى استخدام أداة لمقارنة أكثر من وثيقتين في وقت واحد. لكن سوء الحظ! ببساطة لم تكن هناك أي حلول لهذه المشكلة في السوق ، وهناك فقط خدمات لمقارنة وثيقتين ، والخيار الحالي لا يلمع مع التنوع. لذلك ، هناك ABBYY Comparator ، والذي يمكنه مقارنة المستندات ليس فقط في تنسيق النص ، ولكن أيضًا في PDF والمسح الضوئي والصور. قد يكون عيب استخدام هذه الخدمة هو تكلفتها. خدمة أخرى هي مقارنة النص! - والنوافذ المشابهة تسمح لك ببساطة بإدراج نص في نافذتين خاصتين. وهذا يحد بشكل كبير من الاحتمالات - حتى الملفات لا يمكن تنزيلها ، ولكن فقط Ctrl + C و Ctrl + V !

قررت شركتنا البحث عن "الألم" من قبل المطورين الموهوبين من جميع أنحاء روسيا ، وإزالة القيود المفروضة على تنسيق المستند. اقترحنا استخدام html مألوف - يتم تمثيل بنية شجرة المستند بشكل ملائم فيه. رد جميع المشاركين على هذا العرض. كنا مهتمين بالحصول على تقنية المقارنة نفسها ، بالإضافة إلى واجهة مريحة وتفاعلية.

قرارات الفريق الفائز


يوجد على Habré العديد من مقالات المقابلات حول كيفية قيام المشاركين ببناء سير عمل خلال hackathon ، وكيف تمكنوا من الفوز. حلّت ثمانية فرق مشكلتنا ، فازت ثلاث منها بجوائز: الأول حصل على ZenDocs ، والثاني كان مشتركًا بين SerotoninMix و SegFault . لقد اخترنا الفائزين وفقًا للمعايير التالية: سهولة استخدام واجهة المستخدم (تفاعلها وبساطتها) ، ونوعية الحالات المختلفة في هذه الواجهة (كيف ستبدو مقارنة الجداول - التغييرات الهيكلية وتغييرات النص في الداخل ، والمخططات ، والصور) ، وخوارزمية المقارنة نفسها (تعقيد الوقت ، القدرة على التعرف على أنواع مختلفة من التعديلات). واعتبر نموذج عمل جيد زائد كبيرة :)

تبين أن حلول الواجهة لمعظم الفرق متشابهة إلى حد كبير. ربما يشير هذا إلى أن الواجهات أصبحت سهلة الاستخدام إذا توصل جميع المطورين إلى نفس الشيء. تختلف تفاصيل الحالات المخصصة ونوعية النموذج الأولي - فقد تمكن شخص ما من فعل المزيد ، وأقل من ذلك.



ومع ذلك ، بعد تقديم الحلول ، تم تحديد المفضل بشكل واضح - لقد أصبح فريق ZenDocs ، الذي أكد على الجزء الحسابي. لقد أجروا دراسة فعالة عن الأساليب المتاحة ووجدوا مقالة علمية مع خوارزمية لمقارنة أشجار XML. تقيس هذه الخوارزمية بشكل جيد إلى مستندات N: إذا قارنت المستندات في أزواج ، كما تفعل العديد من الخوارزميات الأخرى ، فسوف يزداد التعقيد كثيرًا في عدد الوثائق ، وبهذه الطريقة تزداد خطياً. تقوم الخوارزمية بإرجاع معرف عناصر الشجرة التي تم تغييرها ، ونوع التغيير هو إدراج أو حذف أو استبدال.

من المريح إعطاء تنسيق الاستجابة هذا للواجهة الأمامية - لا تحتاج إلى مزيد من المعالجة. الصور والصفوف والأعمدة في الجدول عبارة عن كتل هيكلية عادية للوثيقة ، مثل الفقرات ، لذلك تسمح لك هذه الخوارزمية باكتشاف التغييرات في الصورة ، وهيكل الجدول أو محتوياته ، أي أنه يتواءم مع العديد من حالات المستخدم ، وهذا معيار تقييم مهم. اقترح الفريق زيادة تحسين الخوارزمية باستخدام شجرة ميركل. سيسمح هذا التحسين بالتحقق فقط من الأشجار الفرعية التي تم تغيير التجزئة لها ، والتي تسرع الخوارزمية. النموذج الأولي متاح في: https://zendocs.ru





كان اختيار المركزين الثاني والثالث أكثر صعوبة ، لأن ثلاثة قرارات تستحق المطالبة بها. في النهاية ، استقرنا على SerotoninMix و SegFault. كان بعضها أفضل للتفاعل ، والبعض الآخر للملاحة ، وهذا هو الوضع الطبيعي: في غضون يومين من الصعب تطوير حل مثالي. طبقت بعض الفرق الخوارزمية بالكامل تقريبًا على نموذج بسيط ، من بينها ZenDocs و SerotoninMix.

لقد حددنا هذا الأخير ، بما في ذلك أسلوبه الإبداعي - عن تقديره لنكتهم الدعائي (أطلقوا على مشروعهم "مكتب NeMoy" ، وكان هناك الكثير من اللحظات الممتعة في عرضهم التقديمي) وأعجبوا بحقيقة أنهم تمكنوا من إعداد نموذج أولي كامل.




لقد وجد الرجال من SegFault مقاربة أصلية للغاية. عند تطوير النموذج الأولي ، استخدموا Vue.js ؛ تمت كتابة الخادم في Python باستخدام خوارزميات Flask and Docker و Word2Vec و Crochemore . بعد مراجعة الخوارزميات قليلاً ، قارن المشاركون الوثيقة الرئيسية بجميع المستندات الأخرى ، وأبرزوا الأجزاء المشتركة والمختلفة. في البيئة التي تم إنشاؤها ، هناك كتلة التحرير حيث يتم عرض شظايا من وثائق مختلفة. يمكنك اختيار واحد منهم وتحريره إذا لزم الأمر. في لوحة التحكم ، يمكنك قبول التعديل أو عرض التعديلات المقبولة مسبقًا. قام الفريق أيضًا بمقارنة الصور ومقارنتها بتشفير base64 وتحويل الصورة إلى تنسيق base64 ، ووضع طريقة لمقارنة الجداول وعرض التغييرات فيها.

كان هناك عدد قليل من المصممين في hackathon ، وكانت مهمتنا بالنسبة لنسبة كبيرة تتألف من النماذج الأولية للواجهة وإنشاء تخطيطات ، والتي تضمنت استخدام أدوات مثل Sketch و Figma. غرق فريق Talestorm في قلوبنا ، حيث تعلم أحد المشاركين كيفية العمل من الصفر طوال الليل.

التفاعل hackathon


في نهاية سبتمبر ، تم عقد اجتماع للفائزين وممثلين عن New Cloud Technologies ، بمن فيهم الرئيس التنفيذي ديمتري كوميساروف ، و Phystech.Genesis. في الاجتماع ، ناقشوا مهام الشركة ، والتي يمكن للفائزين في hackathon المشاركة فيها. ونحن نتطلع إلى العمل مع فرق!

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


All Articles