GeoPuzzle - اجعل العالم قطعة قطعة

الصورة

أريد أن أتحدث عن مشروع تم تطويره خلال العامين الماضيين. يطلق عليها GeoPuzzle وهي لعبة ألغاز على الخريطة السياسية للعالم. الهدف هو وضع قطع من البلاد في مكانها. تم رصد الفكرة في مقالة "Mercator Puzzle for Geography Professionals" ، كما لعبت tetris من دول (لا تزال تحت DOS) في مرحلة الطفولة ، لكني لا أتذكر اسم البرنامج. لقد ألهمتني الفكرة لدرجة أنني كنت أرغب في إنتاج منتج كامل ، ليس مثيرًا للاهتمام فقط لأطفال المدارس ، ولكن أيضًا لخبراء الجغرافيا. يمكن ملاحظة تطور المشروع على GitHub .

النموذج الأولي


تم نشر مقالة "Puzzle Mercator لخبراء الجغرافيا" في 8 فبراير 2013 ، ولكن بعد 4 أشهر كان لدي نموذج أولي جاهز ، حيث تم جمع المضلعات من جميع دول العالم. بعد ذلك بقليل ، أضفت مناطق روسيا والولايات المتحدة وقمت باختيار الموقع الأولي على الخريطة للمضلعات بشكل عشوائي. لقد وصفت عملية التطوير في مدونتي ، ونشرت شفرة المصدر على GitHub . وهذا كل شيء - عالق. لقد حصلت على وقت فراغ أقل بكثير ، ذهب حافزي (لم يتم اتخاذ أي قرار) ، وزاد التعقيد بشكل كبير. لقد كان مشروعًا للحيوانات الأليفة ، وكانت المهمة الرئيسية تعلُّم شيء جديد ، لذا فقد انحرفت قليلاً عن التكنولوجيا. على العميل ، بالطبع ، جافا سكريبت (الذي لم أعمل به كثيرًا في ذلك الوقت) ، كان نص الياقوت (مرة أخرى ، لغة جديدة بالنسبة لي) مسؤولًا عن إعداد البيانات ، ولكن على الخادم كان هناك إرلانج (أردت تجربة شيء وظيفي بحت). الخروج الكامل من منطقة الراحة: كان من الصعب العمل مباشرة مع كائنات PostGIS ، وكان ألم تحويل السلاسل إلى إرلانج ، وإعداد YAWS مشكلة منفصلة تمامًا ... في المرحلة التالية ، أدركت أنه لا يمكنني التعامل مع كل حديقة الحيوانات هذه لإنشاء منتج كامل ، وغادر فكر لبضع سنوات.

GeoPuzzle


الصورة

يعمل الموقع طوال هذا الوقت ، حتى أن الناس ذهبوا إلى هناك ، لكنني أردت حقًا إضافة تفاصيل أخرى صغيرة: لعرض بعض المعلومات على الأقل حول المضلع المكتشف حديثًا. لذلك ، خططت لقضاء عطلة رأس السنة الجديدة في عام 2017 مع الفائدة. بسبب مشاكل في النموذج الأولي ، قررت إعادة كتابة كل شيء وجعل المنتج على شيء مألوف - Django. خارج الصندوق ، هناك أشياء تبسط حياتي بشكل كبير ، على سبيل المثال ، لوحة المشرف والعمل مع PostGIS من خلال ORM. ولكن بالنسبة للمبتدئين ، كان من الضروري إعادة إنشاء الوظيفة التي عملت بالفعل. استغرق الأمر بضع أمسيات فقط ، وتم أخذ معظم الوقت عن طريق تحميل البيانات من ملفات KML. ليست عملية الاستيراد نفسها بقدر إعدادها واستعادتها لمعرفي حول كيفية العمل معهم. بالمناسبة ، أخذت مضلعات من gadm.org في ذلك الوقت. نجح هذا الأمر بشكل كبير بالنسبة إلى البلدان ، ولكن كانت هناك مشكلات معينة في دقة المناطق ، لذلك استغرقت مهلة لهذه المشكلة.

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

على سبيل المثال ، بالنسبة لروسيا:

  • روسيا (2) -> المنطقة الفيدرالية الجنوبية (3) -> إقليم كراسنودار (4) -> منطقة فيسلكوفسكي (6) -> الفن. قرى (8)
  • روسيا (2) -> المنطقة الفيدرالية الجنوبية (3) -> إقليم كراسنودار (4) -> كراسنودار (6) -> منطقة بريكوبانسكي (9) -> كوبانسكايا (10)
  • فرنسا (2) -> متروبوليس بفرنسا (3) -> منطقة نورماندي (4) -> قسم أورني (6) -> كانتون دونفرون (7) -> بلدية دونفرون-أون-بوارت (8) -> دونفرون (9)

يتم استدعاء الوحدات الإقليمية في البلدان المختلفة بطريقتها الخاصة ، ولكن بالنسبة لي ، استنتجت هذا التقسيم: البلد (2) -> المنطقة (4) -> المنطقة (6). غادر مزيد من التقسيم الإداري لوقت لاحق.

تطوير المشروع


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

كيف تشعر أن تعلم جافا سكريبت في 2016 ؟! عندما يتم تجميع الشفرة في لهجة أخرى ، يتم تشكيلها ، لصقها معًا بحيث يمكن قطعها لاحقًا إلى قطع. كنت ، كخلفية ، خائفة ، ولكن تم التخطيط لتعقيد جزء العميل بما يكفي ، مما يستدعي الحاجة إلى استخدام إطار عمل أو مكتبة. استقرت على React لسببين: لم أكن أحتاج إلى SPA ، ولكن مجموعة من المكونات لصفحات مختلفة ، وأردت رؤية النتيجة بسرعة. ولكن قبل أن تبدأ البرمجة ، كان عليك إعداد البيئة. الآن أفهم الواجهة الأمامية المألوفة ، التي قالت إنه قام بإعداد Webpack لمدة يومين. اتضح أنها لم تكن مزحة.

في ذلك الوقت ، استسلمت للإقناع ونفذت منطق التطبيق باستخدام Redux. ربما لم يكن هذا خطأ ، لأنه يسمح بإدخال الموضوع بسرعة. سمحت لي القواعد الرسمية بكتابة التعليمات البرمجية والتأكد من أنها تعمل دون النظر تحت غطاء المحرك. لقد استخلصني Redux باستخدام الوسيطة الخاصة به من تفاعل الشبكة ، مما سمح لي بالتحقق من الردود على الخادم. نعم ، حتى هذه اللحظة ، عمل العميل من تلقاء نفسه - طلب ajax سحب جميع البيانات اللازمة والتحقق من الإجابات من تلقاء نفسه. يمكن للمستخدم الغش بالنظر إلى البيانات التي تأتي من الخادم. بالإضافة إلى ذلك ، عند التحميل ، كانت البيانات تتدفق ، وهي ضرورية فقط بعد الإجابة الصحيحة. بعد تنفيذ التحقق عبر مآخذ الويب ، أصبحت العملية أكثر صحة من الناحية الإيديولوجية - تتحقق الإجابة من التعليمات البرمجية غير المتاحة للعميل. بالنسبة للمستخدم ، لا يزال هذا يبدو على الفور: إرسال النقاط القصوى للمضلع إلى الخادم ، والتحقق مما إذا كان قد دخل إلى المربع بخطأ ، وتعبئة البيانات لمربع المعلومات والمضلع التفصيلي في json ونقلها إلى العميل - تتناسب مع ~ 200ms.

الصورة

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

مصادر البيانات المفتوحة


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

ويكيبيديا وسباركل


الصورة

ما هي أكبر قاعدة بيانات للبلدان والمناطق؟ ويكيبيديا! في البداية ، أردت أن أظهر للمستخدمين مربع المعلومات بالكامل ، ولكن سرعان ما تخلت عن هذه الفكرة. نعم ، كانت هناك أشياء مهمة مثل الأسماء والأعلام والعواصم وأشياء أخرى ، ولكن كان هناك أيضًا الكثير من القمامة (رمز الهاتف ، شكل الحكومة ، الناتج المحلي الإجمالي ...). لقد حاولت تحليل ما تم جمعه بالفعل ، لكنني وجدت أن لديهم بنية مختلفة. تبين أن هذه كارثة: زادت تكاليف العمالة للتنفيذ عدة مرات. لقد حان الوقت للتوقف والتفكير. في اليوم التالي تعلمت عن وجود لغة استعلام خاصة - SPARQL. في المظهر ، يشبه SQL - معلنًا أيضًا ، مع الكلمات الرئيسية SELECT ، WHERE ، ORDER BY ، ولكنه يعمل بطريقة مختلفة تمامًا. مثال صغير يعرض قائمة بالدول بعواصمها باللغتين الإنجليزية والروسية:

 SELECT DISTINCT ?country ?capital ?row WHERE { ?country wdt:P31 wd:Q3624078 . FILTER NOT EXISTS {?country wdt:P31 wd:Q3024240} OPTIONAL { ?country wdt:P36/rdfs:label ?capital } . BIND(lang(?capital) as ?row) filter (?row = 'ru' || ?row = 'en') } ORDER BY ?capital 

تبدو البرية ، أليس كذلك ؟! تحقق هنا . حتى أنني كتبت ملاحظة صغيرة على مدونتي لتنظيم تجربتي بطريقة ما والمساعدة في الدخول في الموضوع ، لأن هناك القليل من المواد التفصيلية على الإنترنت. يمكنك تعلم قراءة هذه الطلبات بسرعة كبيرة ، لكن الأمر استغرق مني نهاية أسبوع كاملة لكتابة شيء ذي مغزى. الكثير من "السحر" من wd:Q3624078 وسمات أخرى. عليك أن تعرف أن wdt:P31 هو "كيان" ، و wd:Q3624078 هي "دولة ذات سيادة". يبدأ الأشخاص المجهولون بعلامة استفهام ، ويتكون تلبية الطلب من البحث عن مثل هذه الحقائق الثلاثية التي تفي بالشروط. على سبيل المثال ?country wdt:P31 wd:Q3024240 - "البحث عن جميع الكائنات التي هي حالات تاريخية" ؛ ومن ثم يشارك نفس الكائن في ثلاثيات أخرى ?country wdt:P36/rdfs:label ?capital - من أين ?country wdt:P36/rdfs:label ?capital العاصمة.

بعد حوالي أسبوع ، كان لدي الإصدار الأول من البرنامج النصي جاهزًا ، والذي قام بتنزيل المعلومات الإقليمية من ويكيبيديا. ثم أصبحت مشكلة أخرى واضحة - هذه المرة مع البيانات. لم تبدأ بعض svg بـ <?xml version="1.0" encoding="UTF-8"?> ولم يتعرف المستعرض عليها على أنها صور صالحة. لحسن الحظ ، يمكن تحرير الملف المصدر. لا يوجد شيء معقد في التسجيل على wikipedia.org ، لكنك تجد نفسك على الفور في الحمام لمدة يوم. هنا حمايتهم ضد الروبوتات. لذا في المساء التالي ، حكمت XML وكنت سعيدًا بمدى البساطة ، وظهرت الأعلام والشعارات على الخريطة.

المضلعات


الصورة

إذا كان من أجل الحقائق نذهب إلى ويكيبيديا ، ثم للبيانات الجغرافية - في خريطة الشارع المفتوح. سيكون من الرائع التقاط نسخة محلية ، وتعلم لغة طلبات التجاوز ، ولكن لا يمكنني حتى تخيل المدة التي ستستغرقها. وتحتاج أيضًا إلى أخذ التسلسل الهرمي من مكان ما ... لحسن الحظ ، قام شخص لطيف بالفعل بحل هذه المشكلة بالنسبة لي . توفر الخدمة حتى API لاسترداد المعلومات. تمكنت من تنزيل جميع المضلعات من المستوى 6 (منطقة) شاملة وملء كل شيء في Postgres ، خرج أكثر من 2 غيغابايت بقليل. لم يكن من دون مغامرات - كانت بعض المضلعات كبيرة جدًا (على سبيل المثال ، تزن كندا أكثر من 100 ميغابايت في GeoJSON مضغوط) لدرجة أن الخادم إما تعطل أو لم يستجب. كان عليّ تجاوز هذه اللحظات يدويًا. لقد قمت بتنزيل جميع الأطفال ودمجهم في QGIS. بالمناسبة ، هذا مثال آخر على مشروع مفتوح المصدر ساعدني كثيرًا.

قضايا البيانات الضخمة


لذا ، لدي قاعدة بيانات مع البيانات ، وأطلق اللعبة و ... وانتظر ... مرة أخرى أنتظر ... ظهرت! حاولت سحب المضلع - إنه ميت ، جيم! لم يتمكن Chrome من التعامل مع هذا الحجم من النقاط وسقط. استراتيجية الجبين لم تعد تعمل ، حان الوقت للتفكير. الأكثر وضوحًا هو تقليل تفاصيل المضلعات. اشتقاق صيغة تجريبية تعتمد على مساحة الشكل - لقد تحسنت. على جهاز كمبيوتر يعمل ، عملت الخوارزمية بسرعة ، بينما الخادم محدود للغاية في الموارد. متصل redis ، أصبح أفضل بالفعل على الخادم. لكن المضلعات المقطوعة مفيدة لـ Drag'n'Drop ، وعندما يتم ضبطها على المكان الصحيح ، لا تتوافق الحدود مع تلك التي ترسم خرائط Google. حسنًا ، يمكن التحايل على ذلك من خلال تطبيق صيغة غير عدوانية لتقليل التفاصيل. نظرًا لوجود 2 ذاكرة تخزين مؤقت بالفعل ، فلماذا لا تحاول تخزين كل شيء ممكن على الإطلاق ؟! طارت Infoboxes (بلغتين) إلى Redis ، الحدود التي يتم من خلالها حساب الإجابة ، ومركز المضلع ، وكذلك الصفحات الثابتة من الموقع. ونتيجة لذلك ، بدأت اللعبة في العمل بشكل أسرع ، وتمت إزالة الكثير من عبء العمل من Postgres ، والذي يمكن أن يكون من الناحية النظرية عنق الزجاجة. ناقص - التطبيق لا يعمل بدون Redis على الإطلاق.

النشر الأول


لذا فقد حان الوقت لعرض المشروع على الأصدقاء للحصول على تعليقات. بقي القليل فقط: إنشاء sitemap.xml ، وإضافة robots.txt ، وربط المقاييس ، وإضافة الأزرار الاجتماعية. الشبكات و ... نشر! اخترت AWS مثل استضافة ، تأمل في أن تتناسب مع الموارد المجانية المقدمة. وهذه مجموعة جيدة جدًا لمشروع مبتدئ:

  • خادم التطبيقات (t2.micro: 1xCPU، 1 Gb RAM، 20Gb SSD)
  • قاعدة البيانات (db.t2.micro: 1xCPU، 1 Gb RAM، 20Gb SSD)
  • تخزين الملفات مع CDN (5 جيجا بايت S3 ، 50 جيجا بايت من حركة المرور)
  • خادم التخزين المؤقت (cache.t2.micro: 1xCPU ، 0.5 جيجابايت من ذاكرة الوصول العشوائي)
  • Elasticsearch + Kibana (t2.small.elasticsearch: 1xCPU، 2 Gb RAM)

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

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

نقل إلى المصدر المفتوح


مساء كانون الثاني / يناير تلقيت رسالة من مدرسة دانمركية. جاء جوهرها إلى حقيقة أن لديهم 100 دولار ، وهم يريدون إعطائهم إياها. ولكن هناك شرط - يجب أن يكون الكود المصدر للمشروع مفتوحًا. حتى تلك اللحظة ، لم أفكر حتى في المصدر المفتوح. ذهبت أمسيتان إلى التفكير واختيار الترخيص. ونتيجة لذلك ، قمت بتحميل المصادر على Github بموجب ترخيص GPLv3 وحصلت على 100 دولار الموعودة. أدى هذا إلى زيادة الدافع بشكل كبير - كان مشروعي مفيدًا حقًا! وهرعت إلى الهدف التالي - محرر اللعبة. حتى يتمكن الجميع من إنشاء الألغاز الخاصة بهم. على سبيل المثال ، "الدول المشاركة في الحرب العالمية الثانية" ، "مقاطعات إقليم كراسنودار" ، "البلدان غير الساحلية" ... ولكن لهذا ، كانت هناك حاجة للتسجيل وحساب شخصي بدائي. ونتيجة لذلك ، استمرت التنمية لمدة 3 أشهر طويلة. خلال هذا الوقت ، كتبت شجرة من المناطق التي ستسحب البيانات من خلال ajax ، وتربط التعريب ، وتعلم كيفية حفظ خريطة Google كصورة لإنشاء معاينات وخفض redux. نعم ، ساعدني في التعامل مع البيانات في البداية ، ولكن الآن من المرجح أن تتدخل. سوف أضطر إلى سحب المخفضات لرسم المضلعات على الخريطة ، إلى جانب الرمز الذي سيتعامل مع حركتهم. لحسن الحظ ، لم تستغرق إزالة الارتباط بالدولة العالمية سوى يومين ، كما أن نقل الرمز إلى الرمز المحلي أدى إلى تبسيط التطبيق. وبالطبع هذه تجربة جيدة :)

اتصال الخدمة


اتضح أن العديد من الخدمات المدفوعة تقدم خدماتها مجانًا لمشاريع مفتوحة المصدر. سأذكر فقط تلك التي قمت بتوصيلها بنفسي.

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

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

الصورة

- سيركل سي . لا يمكن لأي مشروع حديث الاستغناء عن CI / CD والاختبارات والنشر التلقائي. اخترت CircleCI فقط لأنني عملت بالفعل مع TravisCI عندما كتبت المكتبة للعمل مع Yandex.Disk . لدي انطباع بأنه مناسب أكثر لاختبار المكتبات ، مثل من السهل تعيين مصفوفة البيئات التي يجب اختبار الشفرة فيها. ولكن مع الاختبارات نفسها ، لدي مشكلة - لا يوجد العديد منها كما نود ، على الرغم من أن البنية التحتية جاهزة بالفعل.

الصورة

- المآزر . خدمة تصور تغطية الكود. قادرة على إعطاء تسمية لإدراجها في مشروع README.md.

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

الصورة

- بوت جيثوب. حتى الآن ، تم توصيل Dependabot فقط ، مما يؤدي إلى تحديث التبعيات.

الصورة

أقترح في التعليقات مشاركة قائمة الخدمات والبوتات على مشاريعهم.

البق


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

ما هي الخطوة التالية؟


  1. التصميم. أعترف أنه مع هذا ، كل شيء سيء تمامًا. من الضروري توظيف مصمم ومصمم تخطيط ، لأنني أنا لست صديقًا للتخطيط والتصميمات.
  2. تحقيق الدخل. في البداية ، لم أخطط لأي شيء. المشروع مخصص للتعليم الأساسي ، والذي في رأيي يجب أن يكون متاحًا للجميع. لقد ألهمتني رسالة من مدرسة دانمركية ، ولكن مر عام تقريبًا ، وخلال ذلك الوقت كان هناك تحويل واحد فقط بقيمة 5 دولارات. حسنًا ، لم أصدق أنه يمكن أن يدفع حتى مقابل الخادم. ومع ذلك ، بدأ حملة على Patreon على أي حال. في الوقت نفسه ، ربما يمكنك التفكير في تقديم فرص مدفوعة للمعلمين أو المنظمات. على سبيل المثال ، لدي خبرة في التكامل مع أنظمة إدارة التعلم - وهي مجموعة من المنصات التي تسمح لك بإنشاء دورات ، وهي تحظى بشعبية كبيرة في أوروبا والولايات المتحدة الأمريكية. بقدر ما أفهم ، على الرغم من أن شفرة المصدر أيضًا تحت GPL على Github ، فإن هذا لا يمنعني ، كمؤلف ، من تطوير نسخة تجارية موازية.
  3. الهواتف المحمولة. أريد إصدار تطبيق لنظام iOS / Android. بناءً على مقياس Yandex ، يحاول ربع المستخدمين اللعب من هاتف أو جهاز لوحي ، ولكن اتضح أنهم يواجهون صعوبة.
  4. التنمية. تتم جميع الأعمال على جيثب . أريد الاستمرار في تطوير المشروع ، لكن القيام بذلك بمفرده أمر صعب. تتضمن الخطط إضافة لاعبين متعددين ، ووضع علامات ، وتصنيفات ومرشحات في ورشة العمل ، وإضافة مضلعات لخريطة مادية (الجبال ، البحار ، شبه الجزيرة). لا يزال هناك الكثير من الأشياء المثيرة للاهتمام ، لذا فإن أحد أهداف المقالة هو العثور على أشخاص متشابهين في التفكير. خيار آخر هو الذهاب إلى المؤسسة ، على سبيل المثال ، Python Software Foundation والحصول على منحة.

إليك ما هو في الوقت الحالي. شكرا لقراءتك حتى النهاية! يمكنك اللعب هنا - geopuzzle.org ، وإلقاء نظرة على التعليمات البرمجية المصدر على GitHub .

دقيقة رعاية الجسم الغريب


يمكن أن تسبب هذه المادة مشاعر متضاربة ، لذا قبل كتابة تعليق ، قم بتحديث شيء مهم في ذاكرتك:

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

ماذا تفعل إذا: ناقص الكرمة | حساب محظور

مدونة المؤلفين هبرتيكيت
النسخة الكاملة لقواعد الموقع

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


All Articles