طريقي لمحارب ، أو كيف أعددت طلبًا للحياة في سمكة ابوشراع

فن المحارب هو الحفاظ على التوازن
بين رعب أن تكون إنسانًا ومعجزة أن تكون إنسانًا.
"رحلة إلى إكستلان"

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

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


خلفية صغيرة ، أو لماذا فعلت ذلك


عندما قامت الشركة بتطوير حل Areopad ISCO لأجهزة iPad (iOS) قبل 5 سنوات ، لم يكن أحد يظن أن العملاء سيحتاجون إلى تطبيق للعمل على جهاز يعمل بنظام Sailfish OS (ثم ينتمي نظام التشغيل إلى الشركة الفنلندية Jolla ، الآن أيضًا). ولكن في عام 2016 ، حصلت الشركة الروسية Open Mobile Platform على ترخيص لاستخدامها وتعديلها وتوزيعها وأخذهت في الاعتبار: فقد قامت بتكييف الأجهزة والمستخدمين المحليين (خاصة الشركات والوكالات الحكومية) وسجلت Sailfish Mobile OS RUS في التسجيل . والآن يمكن القول أن هذا هو نظام التشغيل الروسي الرسمي الوحيد للأجهزة المحمولة.

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

الآن عن كيو تي


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

في هذه الحالة فقط ، سأوضح أن الحسابات ورسم الخرائط تتم بلغات مختلفة في وحدات مختلفة (C ++ و QML) ، والتي تتفاعل مع بعضها البعض باستخدام طرق صعبة خاصة (خاصية ، فتحة الإشارة).

و Qt هو الإطار الرئيسي المستخدم في تطوير برمجيات سمكة ابوشراع.

مقاربات لحل المشكلة: انتقل إلى اليسار - ستحصل على عكاز ، اذهب إلى اليمين - ستفقد الميزات


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

إذا كان نظام Android أو iOS يسمح لك باستخدام الترجمة الشرطية وتوفير نوع من مجموعة الأدوات لهذا ، فلا يمكن تمييز سمكة ابوشراع عن Linux (ضمن Qt ، بالطبع).

بعد ذلك ، تنشأ مشكلة توافق QML: في Sailfish ، الإصدار القديم من Qt Quick (2.6 لـ Sailfish و 2.11 بالفعل للجميع) ، لا يعرف Android Silica ، لا يعرف Sailfish QtQuick.Controls. لذلك ، بالنسبة لأنظمة التشغيل المختلفة ، يجب عليك سحب نفس المكونات من مكتبات مختلفة ، والتي تنتج نفس الملفات تقريبًا لكل نظام تشغيل.
في الوقت نفسه ، من المحتمل أن يحتوي السيليكا على جميع الميزات مثل QtQuick.

ميزات سمكة ابوشراع


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

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

سنتحدث فقط عن مكتبة واحدة لتطبيق واجهة المستخدم الرسومية Silica ، لأن الباقي الذي تمكنت من تعلمه وفهمه لا يختلف عن برمجة QML القياسية.

  • الموضوع.

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

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



  • القائمة

أيضا ميزة من سمكة ابوشراع (على الرغم من أنها قد تكون ممكنة في Android ، لكنني لم أرها).

هناك ثلاثة أنواع من القوائم:
PullDownMenu - PushUpMenu - ContextMenu



أما بالنسبة لـ Silica ... View - فهي لا تختلف عن المواصفات القياسية ... View (فهي عبارة عن اثنين من الخصائص غير الملحوظة للغاية) ، ومكون Button يجعلك متوترًا للغاية - لا يمكن تغيير ارتفاع الزر ، عليك كتابة Rectangle و MouseArea في كل مكان. إذا كنت أقوم بتقديم طلب لـ Sailfish فقط ، باستخدام التصميم القياسي لنظام التشغيل هذا ، فلن يكون من الضروري تغيير ارتفاع الزر أو سيكون من الممكن استخدام مكون من Silica . ولكن نظرًا لأنني أكتب تطبيقًا لجميع الأجهزة ، فقد تقرر استخدام التصميم الأكثر ضخامة (Android) ، حتى يكون الجميع مألوفًا ومريحًا. يختلف كثيرون معي ويقولون إنك تحتاج إلى استخدام عناصر واجهة مستخدم أصلية لكل نظام أساسي ، ولكن هذا موضوع مختلف تمامًا ، فقد كان موضوعًا للعجول لسنوات عديدة ، خلال هذا الوقت نما أكثر من جيل واحد من المطورين.

تطير في مرهم لتطوير المحمول على كيو تي


  • اللا تزامنية

في Qt ، للتواصل مع الخادم ، لا يكفي الاتصال بوظيفة واحدة ، فأنت بحاجة إلى إرسال طلب وطلب كائن خاص مسؤول عن استجابة الخادم لاستدعاء وظيفة معالجة الاستجابة (والتي بالطبع نكتب أنفسنا) عند تلقي الاستجابة:

void foo() { QNetworkRequest request("http://www.leningrad.spb.ru"); QNetworkReply *reply = mngr->get(request); connect(reply, &QNetworkReply::finished, this, &Class:: onReplyFinished); } void onReplyFinished () { QNetworkReply *reply = (QNetworkReply*)sender(); QByteArray ans = reply->readAll(); qDebug() << ans; } 

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

  • البرمجة الموجهة للعكاز ، أو نهج مبتكر لحل المشكلات

موضوع آخر هو ListView ، وهي مشكلة Qt محلية للغاية ، لكنها لا تزال غير سارة.

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

 foreach (QVariant quest, QQuestions) { Questions.append(new Question(client, quest)); } kostilQuestions = Questions; if (Questions.size() > 0) kostilQuestions.prepend(Questions[0]); 

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

الملخص


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

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

اتمنى ان يكون ممتع يتبع.

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


All Articles