- قل لي ، هل تحب السفر؟
أنا متأكد من أنك سوف تجيب بنعم ، فمن غير المرجح أنك في حالة أخرى ستنتبه إلى هذا المقال :)
- هل أنت مهتم في موضوع تطوير المحمول؟
لم أعد متأكدًا هنا ، وآمل ألا يثبط اهتمامك بهذا المقال. في أي حال ، سيكون هناك عدد من التفاصيل الفنية التي قد تكون مفيدة لك بعض الشيء ، ولكن ليس من الضروري.
أعرف ، أنا أعلم ، holivar ، لكن ماذا أفعل - سنجادل ونلد الحقائق.
بشكل أو بآخر ، في هذه القصة المحزنة ، ستتأثر هذه المواضيع ، لذلك حان الوقت لإغلاق المقال إذا كنت تتوقع شيئًا آخر ؛) رغم أنني سأحاول الكتابة حتى لا توجد تفاصيل تقنية فقط.
لذلك ، خلفية صغيرة
كما قلت ، أنا أحب السفر. بالنسبة لي هو دائما محرك والمغامرات التي تريدها والانتظار. بالإضافة إلى ذلك ، منذ عدة سنوات حاولت وصف رحلاتي في شكل مقال ، وقد أعجبتني. ليس هذا لأنني أصبحت نوعًا من المدونين المشهورين - لا ، ولم يكن لدي هذا الهدف. لكنني قمت برحلة جوية لنفسي - gromozeka07b9.livejournal.com ، على الأقل لإظهار أصدقائي. كان كل شيء رائعًا ، في البداية - أعجبتني ، عند عودتي إلى المنزل قضيت يومين في محاولة لترتيب كل مغامراتي في شكل بعض القصص المثيرة للاهتمام. لكن ، بعد بعض الوقت ، أدركت أنه كان لدي وقت لنسيان بعض الأحداث المثيرة للاهتمام عندما عدت ، وقررت تدوين الملاحظات في الرحلة. في دفاتر الملاحظات الإلكترونية المختلفة ، الملاحظات ، إلخ. هذه الحياة المبسطة قليلاً ، لكنها لم تكن مريحة ، ونتيجة لذلك ، كان لا يزال هناك الكثير من الوقت في تجميع هذه الأشياء في قصة. جعل القصة في شكل قناة في Telegram الحياة أسهل قليلاً ، على الرغم من مشاكلها الخاصة.
ولادة فكرة
في البداية كان ... البيتزا. بمجرد أن نجلس مع فريقي في مطعم Dodo Pizza للبيتزا ، نتحدث عن الحياة وننتقل تدريجيًا إلى مناقشة شركة ناشئة صغيرة من شأنها أن تساعد السياح في العثور على المعالم ، والطرق المثيرة للاهتمام ، واستخدام المهام ، وحتى الخروج بنوع من النقود. لكن ، أثناء عملية المناقشة ، قمت بتطوير رؤية تدريجية لمنتج آخر - بدلاً من ذلك ، أداة للمسافرين الذين يحتاجون إلى كل من أداة للمدونة وتدوين الملاحظات التي تركز على الاستخدام الشخصي. كان لدي ألم ، ورأيت طريقة لحلها :)
ونتيجة لذلك ، ظهر مفهوم - بالنسبة للمبتدئين ، هذا هو تطبيق للهاتف المحمول يسمح لك بإنشاء طرق في وضع عدم الاتصال ، ووضع علامات على النقاط ، وإضافة وصف ، ومشاركة الصور مع مستخدمين آخرين للتطبيق ، وكذلك خارجها - إلى مختلف Livejournal و Instagram و Facebook وما إلى ذلك. . يجب أن يكون من الممكن العمل دون اتصال بالإنترنت بدقة ، لأن السفر لا يتم دائمًا في أي مكان توجد فيه شبكة ، ولكن في نفس الوقت يجب أن يكون من الممكن مزامنة البيانات مع السحب. حتى اخترع اسم العمل - QuestHelper.
كان هذا البرنامج الحد الأدنى. بالإضافة إلى ذلك ، كانت هناك نقطة أخرى كنت مهتمًا بها. كنت مهتمًا بتطوير الأجهزة المحمولة وأردت حقًا محاولة صنع منتج حقيقي على منصة جديدة.
في الواقع ، كل هذه الأفكار تتبادر إلى الذهن في إحدى الليالي وفي اليوم التالي الذي بدأنا فيه العمل.
بضع كلمات عن الفريقالتنمية هي علي.
عملت زوجتي أولغا كمدير المنتج.
تصميم ابني كليم.
ونصيحة لا تقدر بثمن من مستشار ابنة فيرونيكا :)
لرجال الأعمال!
في اليوم التالي ، لم تتركني الأفكار حول التطبيق. يتم رسم تخطيطات الواجهة بالفعل في الرأس ويتم نشر الميزات. كان الواقع ، بالطبع ، أكثر تعقيدًا. من أجل صياغة شيء على الأقل ، أمضينا عدة ساعات في صياغة الوظائف الأساسية على الورق وتصور مبادئ التنقل في التطبيق ، تم نقل هذه المسودات في نهاية المطاف إلى fluidui.com حتى نتمكن من تجربة تصميم التطبيق. لقد كان هذا قرارًا صائبًا للغاية ، والذي سمح لي فيما بعد بتوفير الكثير من الوقت - أنا لا أعني الكثير من السوائل ، ولكن عن حقيقة أنك بحاجة إلى محاكاة الواجهة.
لقد سمح لي التصميم بوضع مهام محددة على مصممنا وعدم شرح وظيفة التطبيق على أصابعي ، ولكن ببساطة أظهر التصميم الذي يتضح من كل ذلك.
وفي الوقت نفسه ، ولد حل جديد في Visual Studio على أساس Xamarin.Forms - QuestHelper.
لماذا Xamarin؟ إذا كانت مهتمة ، انظر تحت القطبصراحة ، لن أرى بدائل عن ذلك الوقت ولا أرى الآن. لدي خبرة قليلة مع Javascript ، وليست لدي رغبة في دراسة شيء مثل React Native. مع التطور الأصلي ، يكون الأمر نفسه - أنا المطور الوحيد في المشروع ، حيث أدرس Java أولاً ثم الهدف- C أو Swift يعني دفن المشروع ، ليس لدي ما يكفي لذلك.
لذلك ، بدأت أتطلع إلى أدوات عبر منصات لتطوير المحمول.
كان لدي بالفعل تجربة صغيرة مع Xamarin.Android - كتبت مترجمًا يعمل كدردشة ، واتضح أنه مريح للغاية ، وما زلت أستخدمه بنفسي:
كان هذا مرة أخرى في عام 2016 ، عندما تم دفع Xamarin وتسبب في مشاكل كبيرة ، ويرجع ذلك أساسًا إلى أن المشروع تم تصميمه في الأصل كمشروع تمهيدي فقط ، دون أي تحويل إلى نقود.
في نفس الفترة تقريباً ، تشتري Microsoft Xamarin وتجعله مجانيًا ، على الأقل في السيناريو الذي أعمل عليه ، مما يخفف من صداع واحد.
كما قلت من قبل ، لقد خططت في الأصل لإنشاء مشروع جديد على Xamarin.Forms ، على الأقل للتعرف على التكنولوجيا وفهم المنظور. ومع ذلك ، من المغري أن يكون هناك كود واحد يعمل على منصات متعددة.
إذا كنت قد سمعت القليل عن Xamarin ، فإن الموقف مثل هذا:
- هناك نهج Xamarin.Classic (أو Xamarin.Native). النقطة المهمة هي أنه في هذا النهج تقوم بتطوير منطق عمل مشترك في مشروع واحد (العمل مع قواعد البيانات ، والخدمات ، وما إلى ذلك) ، وفي المشاريع الفردية واجهة مستخدم أصلية تستخدم مشروعًا واحدًا مع هذا المنطق. تحدث تقريبًا ، في حل VS لديك ثلاثة مشاريع:
- BL (منطق الأعمال المشترك بين جميع المنصات)
- أصلي Android UI
- IOs الأصلية واجهة المستخدم
- Xamarin.Forms النهج. في هذا النهج ، لديك مشروع مشترك ليس فقط مع منطق العمل ، ولكن أيضًا واجهة المستخدم. هذا يفرض قيوده على واجهة المستخدم ، يصبح موحدًا لأنظمة تشغيل مختلفة ، لكنه يسمح لك باستخدام نفس النماذج الموضحة في XAML.
كلمة كلمة ، سطرا سطرا علة من قبل علة .
لذا وُلد نوع من تطبيق "hello world" على Xamarin.Forms ، والتي في البداية لم تستطع فعل شيء سوى إظهار خريطة بنقاط من قاعدة بيانات محلية. تدريجيًا ، أذهلني المشروع أكثر فأكثر - لأنه لم يكن فقط فرصة للتعرف على المنصة التقنية ، ولكن أيضًا استخدام ممارسات المنتج التي تسمح لك بمحاولة التفكير كمالك للمنتج. على وجه الخصوص ، كانت تجربة جيدة عندما اجتمع فريقي وأصدقائي لحضور اجتماع صغير في العمل الجماعي وحاولوا إنشاء خريطة رحلة العملاء. لن أقول إن كل شيء ظهر بالطريقة التي أردتها ، لكنني حصلت على الكثير من الآراء والأفكار الجديدة حول موضوع تطوير المنتج. كما اتضح فيما بعد ، فإن الأشخاص بشكل عام لا يشبهون الآلام :)
الحذر ، المعدية!
تدريجيا ، بدأ حماسي ينتقل إلى الفريق.
لقد كان رائعًا ، بدلاً من مشاهدة بعض المسلسلات ، تجمعت العائلة بأكملها في المطبخ ووجهت CJM ، وشاشات التطبيقات ، ونظرت في طرق تحقيق الدخل ، وشكلت تراكمًا. في إحدى هذه الأمسيات ، لا أتذكر أي شخص ، فكرت في ذهني - اسم QuestHelper هو نوع من الملل ، وهو موجه أيضًا نحو المهام التي فكرنا بها في البداية. إعطاء اسم جديد!
لكن الممارسة أظهرت أنه ليس بهذه البساطة. ولكن ماذا لو أتيت بشعار - ربما سيؤدي بنا أيضًا إلى اسم أكثر ملاءمة لمفهوم جديد؟
نتيجة لذلك ، على عائلة قرر مجلس القيادة من الآن فصاعدا شعارنا:
- انا اذهب
- أنا أشارك.
- أنا أعيش.
هكذا ولدت GoSh! (عندما يكون لدي فريق من المسوقين ومديري العلامات التجارية ، سأعطيهم بالتأكيد مهمة الوصول إلى مكان في GoSh! جزء من "أعيش" :)
ثم ظهرت نسخة من الشعار ، بناءً على فكرة أيقونة المشاركة:

الاستخدام العملي الأول
بحلول أغسطس 2018 ، أنا محموم أنا أكتب govnokod أقوم بتطوير ميزات تتيح لي استخدام GoSh! في ظروف حقيقية ، في رحلة إلى كامتشاتكا. كان الشيء الأكثر أهمية الذي كنت بحاجة إليه في ذلك الوقت هو القدرة على إنشاء مسار بدون شبكة ، وتحديد الأماكن ذات الاهتمام ، وإضافة الصور والملاحظات النصية إلى هذه الأماكن.
تم الالتزام الأخير قبل المغادرة ببضع ساعات قبل المغادرة إلى المطار. كان ذلك محرك واحد أكثر! ما كان الفرح والرضا عندما كنت في الممارسة العملية ما فعلته بيدي! طوال الأسبوعين من الرحلة ، ظللت الملاحظات في GoSh! ، والأهم من ذلك ، بدا لي مريحة للغاية. بالطبع ، كان هناك بعض عضادات - كان هناك الكثير من الأخطاء ، وأضيفت أول تجربة عملية إلى تراكم المنتج مع ميزات جديدة ومجموعة من الأخطاء. بالمناسبة ، هذا المسار متاح الآن في GoSh! - يمكنك أن ترى بنفسك.
إذن ما هو GoSh! هذا وكيف يمكن أن يكون مفيدا لك؟
الآن GoSh! هو تطبيق جوال لمنصة Android ، يعمل مع الخدمات السحابية لمزامنة البيانات. المهام الرئيسية للتطبيق هي:
- إنشاء الطريق
- الطريق نقطة مارك
- إضافة الصورة والصوت والوصف النص في نقطة الطريق
- التعرف على النص من تسجيل الصوت الخاص بك من خلال Yandex SpeechKit
- استيراد نقاط في طريق من خرائط جوجل ، خرائط ياندكس
- القدرة على مشاركة الطريق مع مستخدمي GoSh الآخرين !
- إذن سواء من خلال جوجل
- تزامن كامل لبياناتك مع التخزين السحابي
هذا وحده يسمح لك باستخدام GoSh! لإجراء ملاحظات السفر.
وبالمناسبة ، لاحظت بعد نفسي أنني توقفت عمليًا عن التقاط الصور على هاتف ذكي - ألتقط الآن الصور فقط من خلال GoSh! هذا ليس إعلانًا كثيرًا عن الحديث عن الراحة بنفسي - لقد أوقفت السيارة في مكان ما ، وشكلت نقطة في المسار الشخصي "Parking" ، والآن لن أنسى :) أو ، على سبيل المثال - عند زيارة الاجتماعات أو المؤتمرات ، أقوم بإنشاء مسار ، على سبيل المثال ، "أيام Agile" - في أتخلص من كل ما يهمني في المؤتمر والنص والصوت والصورة. الآن لن تضيع في كومة من المواد الأخرى ، وإذا رغبت في ذلك ، سأشاركها مع مستخدمين آخرين.
أفضل أن نرى مرة واحدة من سماع مائة مرةشاشة تنزيل التطبيق:

أول شاشة تعليمات للاستخدام:

مثال على قائمة المسارات:

مثال على قائمة نقاط الطريق:

تصور الطريق:

مثال على عرض نقطة الطريق:

إذن ماذا بعد؟
لقد حلت مشكلتي جزئيًا ، لكنني حصلت على فكرة مفادها أن فكرة مذكرة السفر هذه قد تكون ممتعة للآخرين ، لذلك سيكون من الجيد محاولة معرفة ما يحتاجه الناس. كما أظهر التواصل ، ليس الكثير من الناس مهتمين بتدوين الملاحظات أو إنشاء طرق ، فقد كان من المثير للاهتمام بوجه عام الوحدات في بيئتي. وبشكل أساسي ، يهتم الأشخاص بالنقر فوق الصورة ووضعها في Instagram المريح.
لذلك ، فإن الأعمال المتراكمة مبنية الآن على أشياء اجتماعية ، مثل:
- بالطبع ، أضف تصدير الطريق إلى Facebook / Instagram / VK ، إلخ.
- أضف القدرة على عرض الطرق ليس فقط في GoSh! ولكن أيضا من خلال معرض على الموقع
- أضف ميزة إلى GoSh! العثور على وعرض طرق نشرها من قبل المستخدمين الآخرين
- إضافة تعليق ويحب
- التعريب - إضافة واجهة باللغة الإنجليزية
- ربما أكثر ملاءمة وظيفة تخطيط الطريق
ما يحدث الآن؟
حسنًا ، إلى جانب حقيقة أنني قررت أن أخبركم قليلاً عن المشروع ، فإن مصممنا الدائم (ابني كليم) يعمل على الهبوط في تيلدا حتى يتمكن الناس من إظهار شيء دون تثبيت التطبيق ، بالإضافة إلى إعلان صغير بالتأكيد لن يصب بأذى.
هكذا يبدو الهبوط الآن: Landing GoSh!
لا تحكم بدقة ، هذه هي تجربتنا الأولى :)
أخطط لاستخدام نفس الصفحة المقصودة لمشاهدة الطرق ، لأولئك الذين لا يرغبون في إنشائها ، ولكن مجرد المشاهدة - ستكون هناك فرصة كهذه. الآن أيضًا في عملية معالجة شاشة النقطة - بعد عدة أشهر من الاستخدام العملي ، أصبح من الواضح أنها غير مريحة فيها.
إذن ما الذي تعلمناه على مدار العام؟
أول واحد.
والأهم من ذلك - يجب أن يكون هناك شخص سوف "يقود" المشروع.
في هذه الحالة ، أنا. عندما تندفع الطاقة مني ، لا يمكن لأحد البقاء في المنزل في الزاوية بعد الآن ، فالجميع مضطرون للانخراط :) عندما يسمح لي بالرحيل قليلاً ، فإنه يسمح للجميع بالخروج. ونحن نعمل مع هذه الفترات من الصعود والنسب. على الرغم من أنني ممتن لعائلتي على مساعدتهم - في الحقيقة ، سيكون من الصعب للغاية على أحدهم. كما أنني أعاني بشكل دوري من حقيقة أنه لا يمكنني تكريس المزيد من الوقت للمشروع ، وليس لدي ما يكفي من الوقت ، على الرغم من أنني عندما أعمل على ذلك ، أرتفع وأستمتع به. أحيانًا أستيقظ في الساعة الخامسة صباحًا ، لذا قبل الساعة الثامنة صباحًا (حان الوقت للعمل الرئيسي) لأفعل شيئًا مفيدًا للقيام به. وإجازة لمدة أسبوعين في مكان يوجد فيه الإنترنت - هذه مناسبة لإصدار أكثر من عشرة إصدارات ليلية :) عندما ترى نتيجة عملك ، ولا تتأخر في الوقت المناسب ، لكن الآن يمكنك استخدامه - إنها رسوم.
والثاني.
لقد حان فهم هذا تدريجيا. أولاً ، كانت لدينا أفكار مثل "سفن الفضاء تحرث مساحات مسرح البولشوي". تدريجيا ، بدأوا في الهبوط ، وعندما ظهر الحد الأدنى من المنتج الذي يمكنك "لمسه" - أصبح من الواضح مدى صعوبة تطوير المنتج. هذا الأمر مفيد حقًا - اكتشف احتياجات السوق ، وألم الناس ، والعثور على منافسين ، وفهم كيف تختلف عنهم ، وشرحه للجمهور ... في النهاية ، اهتم الناس بتثبيت تطبيق على الأقل لأنفسهم لمشاهدته - وهذه مشكلة ، حتى في الدائرة الداخلية للأشخاص ، ناهيك عن حقيقة أن الغرباء وضعوا شيئًا على أنفسهم ، بل وقدموا تعليقات. لكن ، على أي حال ، بفضل العديد من الأصدقاء والأقارب الذين فعلوا ذلك ، بدونك ، ربما كنت سأترك كل شيء منذ فترة طويلة.
الثالث.
أسمع في كثير من الأحيان - "ماذا في ذلك ، كان عليك أن تجعل الحد الأقصى المسموح به هو الحد الأدنى حقًا وأن تحقق في الأماكن العامة" انا موافق واحد "لكن" - تحتاج إلى فهم واضح ، ولكن لماذا ، ما هو هدفك؟ هل تريد حقًا إصدار منتج مشهور ، أو ربما تريد شيئًا آخر؟ وأظهرت لي تجربتي أنني لم أنفق سنة على الأقل على إطلاق منتج حقيقي ، بل على التعرف على منصة التكنولوجيا. لقد حققت هذا الهدف ، والآن هناك فهم أنه سيكون من الجيد التفكير في تطوير منتج مفيد للناس في الواقع ، وليس ميزة أخرى تهمني فقط. بشكل عام ، حان الوقت للتفكير ليس فقط في نفسك ، ولكن أيضًا في ما تحتاجه :)
الرابعة.
فريق. هناك حاجة إلى أشخاص متشابهين في التفكير يمكنك أن تتعلم منهم شخصًا ما. في النهاية ، إذا كان فريقًا جيدًا - فسوف تحفز بعضنا البعض على القيام بشيء ما. ومن وجهة نظر عملية - على سبيل المثال ، غالباً ما أشعر بالخجل من النظر إلى الكود الخاص بي :) في البداية كانت هناك اختبارات ، وحاول الكود أن يكتب بشكل أكثر أو أقل دقة ، لكن بسبب أن الوقت كان قريبًا جدًا ، طارت الاختبارات أولاً ، على نوعية رمز بدأت في مطرقة. إذا كان لدى الفريق المزيد من المطورين ، فلن يعمل هؤلاء الأطقم :) وبالطبع ، فإن الفريق ، هذه أفكار جديدة ، وجهات نظر جديدة حول الحلول.
التفاصيل الفنية
لا فلسفة ، كل شيء عن القضيةلذلك ، C # ، Visual Studio 2017 ، نماذج Xamarin.
التطوير على كل من الكمبيوتر الشخصي (في المنزل) و Macbook (أثناء التنقل) ، في استوديو الخشخاش.
في الوقت الحالي ، يتوفر التجميع لنظام Android فقط بشكل عام في google play. بالنسبة إلى iPhone ، قمت بالتجميعات في البداية ، لكن الآن رميت هذه الفكرة بعيدًا - ليس هناك وقت لتقسيم الانتباه إلى نظامين أساسيين ، على أي حال ، لا يزال يتعين عليك ضبط واجهة المستخدم ، بالإضافة إلى استخدام عناصر التحكم الأصلية في بعض الحالات - على سبيل المثال ، العمل مع البطاقة ، وفي الواقع يجب القيام بنفس الشيء من أجل iPhone.
أستخدم مشروع Realm كتخزين محلي (استخدمت SqlLite على Translate Helper ، لا أستطيع أن أقول شيئًا سيئًا - فقد ظهر عالم بدافع الفضول بدلاً من ضرورة عملية).
أما بالنسبة للخادم. يخزن الخادم جميع المسارات وملفات الوسائط التي يستخدمها المستخدم عند العمل في GoSh! ، هذا ضروري ، على الأقل من حيث المبدأ ، لتكون قادرة على تبادل الطرق. تمت كتابة الخادم بـ .Net Core ، والذي تم استضافته مبدئيًا في Azure ، بينما كان لدي اشتراك BizSpark ، لكن قبل شهرين ، انتهى الاشتراك ، وانتقلت إلى linux Hosting في reg.ru ، نظرًا لعدم وجود شيء عملي لإعادة كتابته. من الايجابيات - زيادة كبيرة في سرعة الوصول إلى البيانات ، ومن السلبيات - فقدت القدرة على استخدام Insigths التطبيق. قاعدة البيانات على الخادم هي الخلية.
وكم عدد طرق المزامنة في حالة سكر ... الآن الإصدار الثالث يعمل بالفعل ، وأعتقد أنه سيكون هناك رابع ، هناك بالفعل أفكار حول التحسين والميزات الجديدة.
تقع إحصائيات أداء التطبيق جميعها في appcenter.ms ، لأنها مجانية لمستواي. من السهل جدًا رؤية الأخطاء والإحصائيات حول إجراءات المستخدم في الوقت الفعلي تقريبًا.
ربما يكون هذا كله في التكنولوجيا ، إذا كان هناك شيء مثير للاهتمام - اسأل في التعليقات ، سأقول.
.
, .
, , — ! , , , , , - — , , , MVP , , .
, , , , , , :)
Google Play — ! :)
, , — , , Xamarin. , , , , — , - !
: Facebook
UPDATE ( ):
, !
, , , , ! ! , , , , . , . , , , — , , . , , , , : -. ? "" — . "" — . — , . , — . :)