هل تطوير الهواتف المحمولة سهل وممل؟ تقرير ياندكس


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

- مرحباً بالجميع ، اسمي Roma ، أنا مطور iOS في Yandex.Chats. سأحاول اليوم الحديث عن حقيقة أن تطوير الهاتف المحمول مثير للاهتمام وصعب للغاية ، وهناك شيء يجب القيام به. سأفعل ذلك كمثال على المهام التي قمت بحلها أثناء فترة التدريب ، وعندما كنت مطورًا مبتدئًا.

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





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

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

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

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

اليوم سأحاول تسليط الضوء على كل هذا ، وأريك المهام المحددة التي حلتها حتى يكون لديك فكرة تقريبية عما يحدث هنا وما يمكنك القيام به.

سأريكم اليوم ثلاث مهام قمت بحلها. دعنا نصل إلى أول واحد.

ثقوب في التاريخ


تتمثل المهمة الرئيسية للدردشات ، وبشكل عام ، في إرسال الرسائل إلى شخص ما وتلقي الرسائل من شخص ما.



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



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

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

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

الآن الوضع هو هذا. أمي لديها ثلاث رسائل على هاتفها. لقد قرأتهم جميعًا ولا تفهم ما يحدث ، وهي تتعجب كثيرًا.



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



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



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

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

ملصقات الأخيرة


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



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



يتم تبديل جميع الملصقات الأخرى حق واحد. وعندما أرسل جميع الملصقات اللاحقة ، يتم تغيير جميع الملصقات السابقة أيضًا إلى اليمين ، وتصبح الملصقات الجديدة هي الأولى.

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



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

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

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

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



كيف يعمل؟ دعنا نقول أننا نضيف كيتي. انها تحصل في دورنا. أصبح الرقم بالقرب من القط 2. وهذا هو ، الآن هناك اثنين من القطط في دورنا.

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



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



جميع الملصقات اللاحقة كان لدينا مرة واحدة ، ونحن بهدوء الحصول عليها.



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



دعونا نلقي نظرة على هذه العلامات الخضراء. ما تسلسل الملصقات التي حصلنا عليها؟



سوف نفهم أننا حصلنا على ما نحتاج إليه بالضبط ، وأن كل شيء يعمل كما تم تعيينه في المهمة.



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

صورة في صورة


الآن دعنا ننتقل إلى المهمة الثالثة والأخيرة. هذه صورة في الصورة سأوضح. هناك مكالمات ومكالمات فيديو في Yandex.Chats.



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

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



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



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



للبساطة ، لقد قمت بتعيين مثل هذا المستطيل مثل هذا المستطيل. هذه هي منطقة صفراء مع نقطة القوة المشار إليها بواسطة نقطة سوداء.

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



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

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



لكن هذا لم ينجح أيضًا بالنسبة لي ، لأن القيم التي يمكن تغييرها في هذا المجال هي الحجم ونقطة التركيز المركزية فيه. وانجذبت فقط في الوسط. مريحة للغاية ، شكرا ، أبل ، لكنه فشل.

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



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





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

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

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



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

- قائمة الانتظار على اثنين من المداخن
- HashTable على سويفت
- تعقيد الخوارزميات مع أمثلة
- التعرف على إيماءات المستخدم
- مقدمة في UIKit Dynamics

هذا كل شيء بالنسبة لي ، شكرا.

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


All Articles