التقنية التفاعلية في اتفاقيات رائعة. الجزء 2



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

مجلس لعبة Jumanji


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

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

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

تنفيذ لعبة المجلس


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

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

نسخة حاليا


مع الإصدار غير المتصل من العميل ، كان كل شيء بسيطًا للغاية. رسمت زوجتي الرسومات ، لقد صنعت نموذجًا أوليًا في الوحدة - يتحرك الرقم حول اللوحة ، يتم عرض اللغز. الجمال! لم أكن أنفق الكثير من الطاقة على الواجهة ، بعد كل شيء ، كان يجب أن يعمل التطبيق لمدة يومين فقط وأداء وظيفة نقل الأسئلة إلى الزوار بشكل أساسي ، لكنني لم أستطع ترك الأمر خامًا تمامًا. تمت إضافة إنشاء لاعبين (حتى أربعة) يشير إلى الاسم ونهج الكاميرا والعديد من الأشياء الصغيرة. في الإصدار الأول ، كانت أسئلة الفيلم صلبة. مع العلم بسياسة متاجر التطبيقات ، قررت أن أضع هذا الإصدار مقدمًا حتى تتمكن من إصلاح بعض عضادات الورق ببطء - بعد كل شيء ، تم صنع اللعبة باستخدام فيلم معروف ، وإن يكن دون أي نقد وإعلان ، ولكن حقوق الطبع والنشر لا تزال ملكًا للناشر. ثم لم تتحقق مخاوفي - في البداية على Google Play ، وفي وقت لاحق أكد App Store التطبيق دون أي مشاكل ، وفي الوقت نفسه بدأت في تحسين الخادم والعميل للعمل عبر الإنترنت.



أول تقييمات من جوجل بلاي


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

نسخة على الانترنت


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



نفذت API للاتصال باللعبة ، وحدد الأشكال ، لفة النرد. اختبارها من خلال ساعي البريد وتحولت إلى جانب العميل.

بطبيعة الحال ، فإن استقصاء الخادم مع العميل كل N ثانية ليس التنفيذ الذي يجب أن تفخر به في عام 2018 ، ولكن هذه الآلية البسيطة عملت كما ينبغي. لقد صنعت نظام ادخار يستند إلى مادة عرض صغيرة ، إضافة إعدادات للتطبيق حيث يمكنك تحديد وضع اللعبة وتنزيل قاعدة البيانات الحالية للأسئلة من الخادم. هناك العديد من القوائم - قائمة أساسية من الأسئلة (أسئلة من الفيلم كانت موجودة في الإصدار الأول) ، وقائمة أسئلة للنسخة الثابتة ، وقائمة أسئلة للنسخة عبر الإنترنت. يمكن أن يكون السؤال في عدة قوائم في وقت واحد ، ولكن عادةً في قائمة واحدة. يسمح لك الزر أيضًا بتنزيل الإصدار الحالي من الأسئلة من الموقع. من بين أوضاع اللعبة الأربع ، 3 تعمل على أساس الإصدار غير المتصل بالإنترنت (مع قائمتين مختلفتين للأسئلة + وضع بدون أسئلة) ، والآخر يتطلب إنشاء أولي للعبة بواسطة مقدم العرض من الحامل ولا يمكن بدء تشغيله في الوضع التلقائي. يمكن لأولئك الذين يرغبون في معرفة المزيد حول مبدأ تشغيل الإصدار عبر الإنترنت قراءة المفسد التالي ، حيث حاولت تعظيم (ربما حتى دون داع) لوصف كل شيء بالتفصيل.

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



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

في المرة التالية التي يتم فيها تحديث المعلومات ، يفتح الزوار الملعب. يتحرك اللاعبون بترتيب الخلافة (الذين اختاروا قطعة من قبل) ، إذا وقع النرد مرتين ، سيظل اللاعب الحالي في الحركة. هناك نوعان من الأسئلة في النسخة الإلكترونية.

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



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

صعوبات مفاجئة


استغرق الانتهاء من الإصدار النهائي للتطبيق وقتًا أطول مما كنت أعتقد ، وذهب التحديث إلى السوق قبل أيام قليلة من الاتفاقية. وبالطبع ، قام App Store بحظره =) بالطبع ، هذا خطأي - لقد افترضت أن استخدام اسم الفيلم قد يكون غير صحيح ، ولكن تم استخدامه فقط في سياق حامل المعجبين ، ولم تكن هناك مشاكل مع الإصدار الأول من التطبيق ، لذلك استرخيت . في البداية ، تم حظر الرمز فقط ، بعد تغييره وإعادة التحقق منه ، كان هناك بالفعل وصف في السوق (كان موجودًا بالفعل في الإصدار الأول) ، وتم إصدار إشعار بأن فحص التطبيق التالي سيستغرق المزيد من الوقت. بشكل عام ، بدا لي غريباً أن التحديث قد تم رفضه ، وترك الإصدار الأول الذي تم تنزيله بالفعل مع الوصف "خاطئ" وأيقونة للتنزيل ، ولكن على الأقل شيء ما. كنت في حالة من الذعر - بالإضافة إلى بضعة أيام من التحقق ، ولن يكون التطبيق ملائمًا ، وسيتم قطع جميع زوار نظام iOS في المهرجان للحصول على نسخة تفاعلية على الإنترنت. في حالة عدم معرفة ما إذا كنت تنتظر خطاب تأكيد ممتعًا ، في الليلة التي سبقت الاتفاقية ، أضفت نسخة محمومة من النص على الإنترنت - وإن لم تكن جميلة جدًا ، لكنها فعالة ، حيث يمكن لجميع مالكي الأجهزة التي يمكنها الوصول إلى الشبكة المرور بشكل تفاعلي.



اليوم الأول من المهرجان


والآن ، لقد حان يوم الاتفاقية. بحلول ذلك الوقت ، كنت أعرف بالفعل أن طلبي للتفاعل لم يكن التطبيق الوحيد - كان لا يزال هناك التطبيق الرئيسي من Megaphone للسعي العالمي في جميع أنحاء Starkon. آمل ألا يؤدي وجود طلبي إلى حدوث أي إزعاج للمنظمين ، لكن على الأقل لم أسمع عنه بعد. لكن النسخة الثابتة من اللعبة كانت قادرة على الاندماج في المهمة الرئيسية. كان معناها أن الزوار الذين لديهم تطبيقات Starkon المثبتة تجولوا في المدرجات ، وأداء المهام الفريدة ، وعند الانتهاء بنجاح تلقى رمز خاص بكل موقف (الذي تم إدخاله من قبل المشاركين في الحامل لتجنب التوزيع) ، وجمع الرموز من جميع المدرجات المشاركة في الرسم جوائز. في جناح جومانجي ، تطوعت لتولي مسؤولية هذا المسعى. كمهمة من منصتنا ، اقترحت تجربة إصدار غير متصل من لعبتي مع أسئلة بسيطة إلى حد ما. يمكن لأولئك الذين يرغبون في تنزيل التطبيق على أجهزتهم والذهاب بوتيرتهم الخاصة ، ويظهرون لي لاحقًا نتيجة ناجحة ، أو تحت قيادتي " العب Jumanji مع Alan Parrish " من الجهاز اللوحي لدينا. هذا ، بالطبع ، لم يكن قانونيًا مثل الكمبيوتر المحمول القديم للمهرجانات السابقة ، لكنه لم يكن سيئًا للغاية مع حقيبة كمبيوتر لوحي رسمت تحت Jumanji .



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

اليوم الثاني للمهرجان


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



درس واحد للمستقبل


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

ملخص


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



تفاعلي تقني في مؤتمرات رائعة. الجزء 1

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


All Articles