اذهب إلى المحتوى

Anmar Fadel

الأعضاء
  • المساهمات

    36
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    2

كل منشورات العضو Anmar Fadel

  1. تؤثر طريقة تعاملك مع العميل – والعمل بحد ذاته –على نجاح العلاقة بالتأكيد. التسليم في الموعد النهائي، وأداء العمل بجودة عالية، والالتزام بالنطاق المحدد، والتواصل الواضح والمستمرّ؛ كل ما سبق هي المبادئ الأساسية للعمل كمستقل. ما لم يُتطرَّق له كثيرًا هو كيف توجه علاقات عملائك الجدد نحو النجاح حتى تجري كل تلك الأمور بسهولة؛ وربما بطريقة طبيعية. إليك تسع طرق لتدفع بنفسك نحو النجاح عندما تتعامل مع عميل جديد. 1. حدد ميزانيتك النهائية الخطوة الأولى بعد حصولك على عميل أو مشروع جديد هي أن تحدد ميزانيتك، المبلغ الذي سيُدفَع لك، ومتى وكيف سيتم ذلك. اجعل العميل يوافق على ما سيدفعه لك خطيا – في العقد الخاص بك، أو بواسطة البريد الإلكتروني، أو على منصة مستقل. حدد بوضوح الساعات التي من المتوقع أن تعمل فيها ( إن كنت تعمل بمعدل ساعي) أو ما هو المعدل الثابت للمشروع حتى تُنهي العمل بالكامل. في أغلب الاحيان ستُذكَر ميزانيتك النهائية التي اتُّفِق عليها في نطاق العمل. 2. حدد نطاق عملك كتابيا خلال مرحلة التفاوض مع العميل الجديد، يجب أن تكون قد حددت أهدافه ووافقت على كيفية مساعدتك له في تحقيق هذه الأهداف. قبل أن تباشر رسميا بالعمل، أعد تكرار ما اتُّفِق عليه من ناحية الإنجازات والتوقعات من كلا الطرفين كتابيا. على نحو مشابه لميزانيتك النهائية، بإمكانك المشاركة والموافقة على نطاق عملك في أي مكان تستطيع إعادة النظر فيه في حال حدوث مشكلة أو خلاف. يجب أن يتضمن نطاق عملك، في الحد الأدنى، ما يلي: الإنجازات المتوقعة منك: ما هو العائد على العميل. تاريخ استحقاق إنجازاتك: أسبوعيا، شهريا، ربعيا – مع ذكر التواريخ بدقة. أهدافك الكمية (المقاييس) والنوعية كمستقل: النتائج التي من المتوقع أن تقدمها. كيف سيتم قياس نتائجك: مقاييسك الأساسية: الاشتراكات، المتابعات، زيارات الموقع .. إلخ. كيف ستُبلَّغ عن نتائجك، ومن هو المسؤول عن مراقبة النتائج ومتى. أية اجتماعات من المتوقع أن يحضرها احد الطرفين أو كليهما: على سبيل المثال، متابعات أسبوعية. المبلغ الذي سيُدفَع لك، متى وكيف. النقاط الهامة التي يتم تحقيقها. إن نطاق العمل هو الطريقة الأكثر كفاءة وفعالية لإدارة التوقعات. يمكنك أنت وعميلك أن تعيدا النظر في توقعاتكما عندما يظهر أي سؤال حول الإنجازات. تعمل التوقعات كاختبار للنزاهة للتأكد من أن الجميع متفقون، كما يمكنها أن تكون أداة رائعة للتأثير عندما يتم التفاوض على نطاق أكبر أو معدل أعلى. 3. اتفق على معايير التواصل وآليته ستتداخل طريقتك في التواصل قليلا مع نطاق عملك، لكنها تتعدى ذلك. يجب أن توضح طريقتك كيف ستتواصل مع عملائك، وماهي الطرق التي ستستخدمها (على سبيل المثال Slack أو Trello أو Asana). يجب أن تغطي أيضا ما سيتم إنجازه عند كل اجتماع مع الفريق، ومتى سيتم الاجتماع، واية توقعات أخرى للتواصل. ستتعرض طريقتك لبعض التجارب والأخطاء وستتغير مع مرور الوقت. حاول أن لا تكون مقاوما جدا للتغيير بغية التوصل الى ما يناسب الطرفين بطريقة أفضل. على سبيل المثال، أنهت CloudPeeps تحديثا يتعلق بالكيفية التي نجتمع فيها مع عملائنا ونضع مسارات عمل جديدة للبقاء على تفاهم بين الاجتماعات. كان هذا هو الحل الأفضل لنا من ناحية الإنتاجية وإزالة العقبات. لكن الأمر تطلب بضع مقاربات لمعرفة الأنسب لنا، خاصة وأننا منتشرون في مناطق زمنية مختلفة. 4. اجمع كل كلمات المرور وأمِّن الملفات كجزء من آلية تواصلك مع العملاء الجدد، اجمع كل كلمات المرور المرتبطة وتسجيلات الدخول في اللحظة التي تبدأ فيها عملك. نقترح أن تستخدم منصة آمنة كـ 1Password لتضمن ألا تُختَرَق المعلومات الحساسة لعميلك. يمكنك أن تنشئ في 1Password مجلدا خاصا بكل عميل بحيث يكون كل شيء منظما ويسهل الوصول اليه من مكان واحد. (نصيحة من الخبراء: تذكر أن كل البرمجيات التي تدفع لاستخدامها في عملك كمستقل تخضع لضرائب قابلة للخصم!). 5. حدّد أهدافًا مرحلية يخلُق تقسيم المشروع على مراحل فرصة لإعادة التفاوض. حدّد واحدا أو أكثر من أهدافك في اتفاقية العمل لتكون فرصة لإعادة النظر فيما أُنجِز، وكيف أُنجِز. يمكنك، عوضا عن ذلك، تقسيم المشروع على مراحل ومراجعتها دوريًّا. نعيد - في CloudPeeps - كل ثلاثة أشهر النظر في المحتوى وإستراتيجيات المجتمع الخاصة بنا لتحديد ما الذي نجح وما الذي لم ينجح وما هي التغييرات الواجب إجراؤها. هذا هو الوقت المناسب للاحتفال بالانتصارات وإعادة ترتيب الأولويات. تتضمن الأمثلة عن الأهداف المرحلية: مراجعة المحتوى، الوصول لـ 10.000 متابع على تويتر، عقد مراجعة التقارير، 1.000 اشتراك ..إلخ. 6. جهّز عمليتك الداخلية كلما حضّرت نفسك لعمل ناجح مع العميل، كلما كان ذلك أفضل. وهذا يعني التنظيم. تأكد من تحديث مفكرتك بمواعيد اتصالات عملائك واجتماعاتهم، أنشئ ألواح Trello أو مشاريع Asana التي ستستخدمها، حمّل أية أدوات أخرى قد تستخدمها في العمل، أنشئ ملفات آمنة في حسابك على Dropbox لتحفظ كل أعمالك .. إلخ. أنشئ قائمة يومية أو أسبوعية بكل ما يتوجب عمله لهذا العميل أو المشروع. بتلك الطريقة، يمكنك الاستيقاظ كل يوم وأنت تعرف تماما ما الواجب إنجازه. إن فعلت ذلك مع كل عملائك، ستكون قادرا على تحسين عملك كمستقل أسرع مما يمكن تخيله! 7. افسح مجالا لردود الفعل التواصل الواضح والمستمر بين المستقل والعميل هو حجز الزاوية في أية علاقة ناجحة. والجزء الأهم بناء تواصل مستمر هو إيجاد طُرُق لتلقي ردود اﻷفعال باستمرار. عندما تضع جدول أعمال للاجتماعات الأسبوعية، خصص وقتا لعميلك ليشارك بردود فعله البناءة حول العمل الذي قمت به. الاعتراف بردود الفعل – السلبية أو الإيجابية – عن طريق إعادتها مرة أخرى والتفكير العميق بما يمكنك القيام به على نحو مختلف، أو الاستمرار بما تقوم به، هو الطريقة الوحيدة لتبقي عملاءك سعداء وراغبين في مواصلة العلاقة. 8. ضع الحدود مقدما أخبر العميل مسبقا، عند تحديد نطاق العمل وآليات التواصل، بأي عطل أو إجازات تخطّط لها. تتّضح بهذه الطريقة التوقعات، ويمكنك أنت وعميلك التخطيط وفقا لها. إن كنت، على سبيل المثال، مديرا لشبكة اجتماعية وستأخذ عطلة، جدوِل المنشورات قبل أن تغادر، وتأكد من قيام شخص من الفريق بالرد على أي شيء عاجل – وبذلك يتوفر لديهم كل ما يحتاجونه للقيام بذلك. الأهم من ذلك كله، أظهر الأوقات التي تكون متاحا فيها للإجابة على البريد الإلكتروني، الرسائل الفورية أو المكالمات. أيا كان ما تفعله، قاوم الرد على البريد الإلكتروني للعميل في الحادية عشرة مساءً ما لم يكن شيئا عاجلا للغاية. ضع الحدود والتوقعات مبكرا حتى لا يساء استخدامها لاحقا. سيحترم العميل حقيقة كونك تعمل مع عملاء آخرين ولديك حياتك الخاصة. حقق الاستفادة القصوى من ادوات مثل Boomerang التي تتيح لك جدولة رسائل البريد الإلكتروني لإرسالها في وقت لاحق. 9. أنشئ قائمة لتهيئة العميل اجمع الخطوات المذكورة سابقا في قائمة ليتاح لك استخدامها مع كل عميل. Trello اداة رائعة لعمل ذلك. فوجود عملية مكررة سيجعل مسألة تهيئة العميل أسرع وأسهل بكثير ولن يغيب عنك شيء منها. يمكنك أيضا مشاركة هذه القائمة مع عملائك حتى يعرفوا ما الذي يتوقعونه خلال العملية ويحضّروا كل ما يحتاجونه مقدما. إضافة لذلك، فكر بمدى اعجابهم بمهاراتك التنظيمية! ترجمة - بتصرّف - للمقال 10 ways to set your new client relationships up for success. حقوقالصورة البارزة محفوظة لـ Vecteezy
  2. من الأمور التي تجعلني أفضّل استخدام صور GIF دائمة الحركة هو أنها طريقة بسيطة نسبيًا لاستعراض المهارات في التصميم والرسوم الإيضاحية. بالإضافة إلى أنها لا تتطلب وقتا طويلا في الإنتاج، العمل عليها ممتع، علاوة على أنها تختصر كثيرًا من عمليّة التحريك، وهو أمر ذو بال. زاد اهتمامي كثيرا، بوصفي متخصّصًا في الرسوم التوضيحية ومخرج رسوم متحركة، بإنشاء صور GIF دائمة الحركة، لكل من الاستخداميْن الشخصي والمهني خلال السنوات القليلة الماضية. وبما أنني أُسأل كثيرا عن عملي، فسأشارككم بما تعلمته عن صنع صور GIF دائم الحركة “الناجحة”. ابدأ بالقصة بالنسبة لي إنها الخطوة الأكثر تحديا. أحاول أن آتي بفكرة مضحكة وجذابة لكن سهلة الفهم. وبالطبع يجب أن تعمل في صورة GIF دائمة الحركة. دعوني أحدثكم عن مثال، ألا وهو مشروعي لصور GIF بعنوان Game Of Thrones. حيث صنعت صورة GIF لكل حلقة من الموسم السادس لمسلسل صراع العروش، وكان التحدي أخذ المشاهد – التي غالبا ما تكون عنيفة – وتحويلها إلى صور GIF جذابة تعمل كنسخة ملخصة من الحلقة. ستجد أدناه ثلاثة صور متحرّكة تمثل مشاهد قاسية. تخفّف هذه الرسومات الملونة الظريفة من هول المشاهد الأصلية التي يمكن نعتها بكلّ وصف إلا الطرافة. تجمع صورة GIF أدناه، والتي تدوم 15 ثانية، 3 إلى 4 حلقات صغيرة تخلق قصة ذات معنى. مدة الرسوم المتحركة “الصافية” تتراوح بين 5 و6 ثوان؛ لذا فإن سرد قصة ما عبر الحلقات يوفر عليّ بعض العمل. أبقها بسيطة يمنحك استخدام تصميم تقليلي Minimalist المزيد من الحرية في مرحلة التحريك. يمكنني القول من واقع خبرتي إنه كلما كان التصميم أبسط وأوضح كان التحريك أسهل، فالتصميم المعقد يحوي العديد من التفاصيل والظلال وغيرها وبالتالي يتوجب عليك أن تنتبه لها في كل إطار. لذا أبق الأمور بسيطة. أحب استخدام الأشكال الهندسية البسيطة وصيغ الألوان الباهتة. كما أتجنب التفاصيل غير الضرورية كأصابع اليديْن والقدميْن، وأستخدم تصاميم بسيطة لليدين والرجلين - فمن الأسهل أن ترسم ببساطة عوضا عن رسم ذراع مفصلة مع الظلال وسماكات مختلفة ودقة تشريحية. يسمح لك تصميم الأطراف بأشكال بسيطة بمدها وعصرها واللعب بها وكأنها معكرونة دون التأثير على سماكتها الأصلية. يمكنني أن أتلاعب ضمن هذه القيود بالتصاميم مع المبالغة ببعض الميزات لإضفاء الفكاهة والأسلوب المميز والاهتمام البصري: جسد ضخم بوجه صغير، ذراعان ثخينتان جدا أو ذراعان نحيلتان وطويلتان جدًّا وغير ذلك. كما أنني أجد رسم وتحريك الشخصيات البسيطة أكثر جمالا وتعبيرا. لأشرح ما أعنيه، إليك صورة للموهوب سيمون بايلز. تمعن بها وستجد أن الشخصية صممت بالعناصر الأساسية فقط: أشكال بسيطة للأطراف، شكل أثخن للجسم ودائرتان كاملتان للأطراف والشعر. هذا كل شيء. بإمكاني التلاعب في التصميم بسهولة أكبر بكثير مما لو رُسِم بطريقة واقعية أكثر تفصيلا. سيكون من الصعب تنفيذه كل تلك التقلبات المجنونة لو لم يكن التصميم سهلا. يجب أن تكون الحلقات كاملة بما أن صور GIF دائمة الحركة تعرض تلقائيًّا مرارا وتكرارا، فإنها يجب أن تكون كاملة – وإلا سيسهل اكتشاف العيوب، ناهيك عن تشتيت الانتباه. لذا أَوْلِ التفاصيل الكثير من الاهتمام. اهتم كثيرا بكل إطار من رسمتك المتحركة لتضمن ظهور الحلقات باستمرار. أطمح إلى تصميم رسوم متحركة سلسة، وأحيانا أستخدم الرسوم المتحركة الكلاسيكية لإجراء تعديلات بسيطة كرفرفة الشعر وحركة الأطراف (يكون التصميم البسيط بمتناول اليد هنا أيضا). وبما أن صور GIF دائمة الحركة تكون قصيرة في أغلب الحالات فهي تستحق العناء. أول شيء أفعله لجعل الرسوم المتحركة هو إنشاء الإطارين الأول والأخير حتى يُوَّحدا بسلاسة. ومن ثم أنتقل إلى إنشاء جسم الرسم المتحرك. حاول إضافة عناصر ممتعة لتفاجئ بها المشاهدين عند مشاهدة صور دائمة الحركة. إليك أفكارا قد تساعدك للاستلهام منها: استخدم التأثيرات الصغيرة. على سبيل المثال، أضف نجوما إلى العناصر اللامعة واندفاعات لحركة الأطراف السريعة جدا وغيوما صغيرة من الغبار عند ارتطام شيء ثقيل بالأرض. ضخّم الحركة. على سبيل المثال، افصل الرأس عن الجسد عندما تُلكم الشخصية. اختر لوحة الألوان الخاصة بك بحكمة، فصور GIF محدودة ب 256 لونا، لذا فإن البكسلات تظهر إن لم تكن التدرجات متناسقة. ترجمة - بتصرّف - للمقال Creating seamless looping GIFs لصاحبه Eran Mendel. حقوق الصورة البارزة محفوظة لـ Vecteezy
  3. يمكن لتطوير عملية تصميم تَتْبعها في كل مرة تستلم فيها مشروعا جديدا أن يساعدك كثيرا في تحقيق نتائج تسعدك أنت وعملاءك؛ فبوصفك مصمّمًا تعلم أن عملك ينطوي على مساعدة عميلك في بيع خدمته أو منتجه، وهدفك النهائي هو مساعدة المشاهدين على فهم الرسالة، الأمر الذي بدوره يحقق النتائج المرجوة لعميلك. سواء كنت مصمم غرافيك أو مصمم وِب أو مبرمجا أو غير ذلك، فوجود أسلوب جاهز سيساعدك على إنجاز عملك على نحو أسرع، بالإضافة إلى المحافظة على ترتيب الأشياء وعلى علاقة إيجابية بين المصمم والعميل. 1. بدء المشروع واحدة من أكثر الخطوات أهمية في عملية التصميم هي تجميع المعلومات التي ستحتاج لها. يتم ذلك عادة إما باجتماع مباشر وجهًا لوجه مع العميل أو عبر استبيان (على الإنترنت أو خارجها) أو قراءة تفاصيل المشروع كاملة عبر موقع مستقل أو حتى بمحادثة عبر سكايب إن كنت ترغب حقا في إقامة علاقة شخصية. بجمع هذه المعلومات، أصبحت الآن تعرف أهداف عميلك، وبإمكانك أن تركز على التفاصيل لإدراجها في ملفك الملخَّص. الملخَّص بالرغم من أنه يبدو عملا زائدا عن الحاجة، إلا أن لملخَّص التصميم فائدتين أساسيتين مهما بدا المشروع كبيرا أو صغيرا بالنسبة لك فهو: يضمن معرفة العميل بما يريده من المشروع. يعدّ مرجعا لك خلال العمل على المشروع. كلما كانت المعلومات التي يزودك بها العميل أكثر، كلما كانت النتائج أفضل للجميع (وبخاصة للعميل). قد تختلف الموضوعات المتضمَّنة في ملخَّص التصميم، لكن بعض النقاط الجيدة لتبدأ بها يمكن أن تكون: ملف الشركة: ملخص عن أعمالها. الموقع في السوق: تقييم خدمات/ منتجات الشركة بالنسبة للمنافسين. مهمة التواصل: ما هي الرسالة التي يحاولون إيصالها وما هي السبل المستخدمة لذلك (على سبيل المثال الشعار، نص الإعلان، التصوير الفوتوغرافي وغيرها). السوق المستهدف:الخصائص السكانية، العمر، الجنس، الدخل، العمالة، الجغرافيا، أسلوب الحياة الخاص بأولئك الذين يريد العميل الوصول إليهم. الأهداف: – ما هي النتائج القابلة للقياس التي يريد العميل تحقيقها؟ الجدول الزمني / الموعد النهائي: جدول زمني واقعي للكيفية التي ينبغي أن يسير المشروع عليها. من المقبول أيضا في هذه المرحلة، أن تطلُب دفعة مقدمة عن النصف الأول من المشروع. 2. البحث بعد أن تلتقي بالعميل وتفهم جيّدًا المهمة الموكلة إليك، حان الوقت الآن لتشمّر عن ساعديْك. بعد مراجعة المواد التي قُدمت إليك، بإمكانك أن تبدأ البحث. عادة ما تأخذ هذه المرحلة في الحسبان المنافسين واتجاهات السوق ومفاضلة الخدمة/المنتج وتاريخ الشركة ومستقبلها أيضا. لن تكون هذه المرحلة هي المفضلة لديك، لكنها تستحق العناء في النهاية. فليس هناك أسوأ من أن تصمم شعارا جميلا لتكتشف لاحقا أنه مشابه تماما لشعار أحد المنافسين. سوف تجني ثمار الوقت الذي تقضيه في مرحلة البحث، ثق بذلك. 3. الإستراتيجية يمكن لهذه الخطوة أن تتغير تبعا لحجم المشروع الخاص بك، لكن من الأفضل أن تحدّد إستراتيجية تعمل وفقها قبل أن تضع القلم على الورقة. يمكنك من خلال هذه الإستراتيجية أن تحلّل البحوث التي جُمِعت وتتخذ قرارا بشأن معايير التصميم والأداء الوظيفي. يمكن لهذا الأمر أن يكون بسيطا كتشارك قالَب عبر جميع المواد التسويقية. ويمكنك تقديم هذه الإستراتيجية للعميل لتحصل على القبول أو الرفض قبل المضي قدما بها، على أمل أن تحصل على مزيد من الأفكار الإبداعية. 4. التطوير حالما تصبح لديك إستراتيجية واضحة، أنشئ مفاهيم أولية للتصميم بالاعتماد على الإستراتيجية التي وضعتها. يمكنك تطوير هذه المفاهيم بعدة طرق حالما يأتيك الإلهام، لكن أكثرها فعالية هي: الخريطة الذهني Mind map: مخطَّط يُستخدم لتمثيل الكلمات والأفكار والمهام المرتبطة بفكرتك الأساسية. وهي تشجع العصف الذهني لتخطيط المهام وتنظيمها. القصة المصورة: وتعني التخيّل المسبق للصورة المتحركة والرسوم المتحركة وغيرها عن طريق تنظيم الرسوم التوضيحية ضمن سلسلة. الكتابة الحرة: طريقة رائعة لتسجيل أفكارك على الورق ومن ثم التوسع بها. إنشاء التخطيط: ارسم تخطيطات من مصادر الإلهام التي جمعتها، عدل صيغ الألوان والطباعة حتى تحصل على فكرتك ثم استكشفها أكثر. طوّر الكثير من المفاهيم المختلفة باستخدام الطرق المذكورة سابقا. فالفكرة هنا هي إنشاء الكثير من الخيارات المختلفة قبل اختيار أكثرها قابلية للتطبيق. يمكنك تخفيض عدد هذه الأفكار بمساعدة العميل إلى بضعة أفكار لمزيد من التطوير والتحسين. 5. التقديم - التحسين إن أفضل طرق التقديم في الغالب تكون على هيئة ملف PDF يتضمن في سياقه التصميم. يأتي الآن دور العميل في مراجعة التصاميم وإبداء الرأي فيها معتمدا على أهدافه وحاجات جمهوره المستهدف. في هذه المرحلة، يُكلّف المصمم بإجراء التغييرات على العناصر الجمالية بناءً على طلب العميل، أو بوضع اللمسات النهائية على تصميم اتُّفِق عليه. 6. الإنتاج - الإطلاق يستطيع المصمّم عند اعتماد المُقتَرح أن يكمل التصميم النهائي لتقديم المُستَلمات Deliverables، والتي قد تتضمن تصاميم للطّباعة وأخرى للوِب. تُسلَّم ملفات المشروع غالبا إلى طرف ثالث يختلف حسب المشروع أو الوسائط. تتضمّن الملفات: ملفات ما قبل الطباعة والملفات الجاهزة للطباعة. ملفات للنشر عبر وسائل الإعلام. مستندات الوِب. 7. الإنجاز لا شيء أكثر مكافأة من تسليم مشروع كامل لعميل راض، لذا هنّئ نفسك. بإمكانك الآن مطالبة العميل بفاتورة المشروع المتبقية. عند وجود خطة ثابتة لإتمام مشروع التصميم، فأنت لا توطّد علاقاتك مع عملائك فحسب، لكنك تحصل أيضا على الكثير من التقدير عندما يتعلق الأمر بصنع شيء مميّز لهم. اعتبرها عقبة أخرى يتوجب عليك تخطيها. ترجمة - بتصرّف - للمقال The Seven Step Design Process. حقوق الصورة البارزة محفوظة لـ Freepik
  4. تلعب الصور المتحركة من نوع GIF في InVision دورا كبيرا في عملياتنا التسويقية والتعليمية. حتى إننا قمنا باستخدامها في صفحتنا الرئيسية عوضا عن التحريكات Animations بالشفرات البرمجيّة. يسألنا الناس غالبا كيف نصنع صور GIF الخاصة بنا، لذا وجدنا أنه قد حان الوقت لننطق بهذه الجوهرة. تصميم صور GIF 1. الخلطة السحرية إليكم سرّي الصغير: تبدأ جميع صور GIF التي أنتجها من فيديوهات. أستخدم ScreenFlow لهذا الغرض، وهو نفس البرنامج الذي نستخدمه لفيديوهات مُنتجاتنا، إذ يتميّز بالبساطة بحيث يمكن تعلمه بسهولة، وفي الوقت نفسه يضم مجموعات أدوات تحريك مفيدة. بعد أن أصدّر Export الرسوم المتحركة على هيئة ملف فيديو، أنتقل إلى برنامج فوتوشوب وأستوردها من القائمة ملف File > استيراد Import > إطارات الفيديو كطبقات Video Frames As Layers. نصيحة: استخدم Keynote لإنشاء رسومك المتحرّكة إن لم تسمح ميزانيتك باستخدام ScreenFlow و After Effects، ثم صدّرها إلى فيديو. نعم، في النهاية هناك استخدام لهذا الإعداد. 2. ألوان أقل = مرح أكثر إن أردت الحصول على صور GIF مذهلة، يجب عليك أن تختار الألوان بعناية. فهي لن تلعب دورا كبيرا من ناحية حجم الملف فقط، بل إن استخدام ألوان أقل سيتيح لك صنع صور GIF أطول وأكثر تعقيدا مع المحافظة نسبيًّا على صغر حجم الملف (بالنسبة لي، الملف صغير الحجم هو ما يكون حجمه أقل من 1MB). 3. استخدم تأثير ضبابية الحركة Motion blur عندما يكون الأمر ممكنا تتيح لك البرامج مثل ScreenFlow و After Effects تصدير الفيديوهات باستخدام ضبابية الحركة. مما يجعل صورك المتحركة لا تبدو احترافية فحسب، وإنما يساعدك أيضا في التلاعب بالأشياء قليلا وذلك من ناحية حجم الملف إن اضطررت لحذف إطارات من صورة GIF الخاصة باستخدام الفوتوشوب. لاحظ الفرق بين الصورتيْن التاليتيْن، الأولى بدون تأثير الضبابية والأخرى بتطبيق هذا التأثير. 4. كن كسولا (نوعا ما) تخيل جميع الأشياء الأخرى التي يمكن أن أضيفها إلى صورة GIF الموجودة في بداية هذا المقال. تلميحات صغيرة مع أسماء مستخدمين فوقها، مؤشر ينقر على زر الزائد، يحوم فوق الوجوه، كاشفا المزيد من التلميحات. لا يحتاج الناس رؤية كل شيء ليفهموا الصورة، لذا أرهم فقط ما تحتاج إليه، فوقتك وحجم ملفك محدودان. تصدير صور GIF صدّر الرسوم التي تعمل عليها إلى صورة GIF، قبل أن تُرهق نفسك باتباع النصائح التالية. إن كان حجم ملفها معقولا، أحسنت عمل رائع! استمر في ما تفعله. وإن كان كبيرا، جرب ما يلي. 1. احذف الإطارات Frames المتطابقة من المرجَّح أن صورك المتحركة ستتوقف أو تسكن في نقطة ما. إن تفحصتها عن قرب، ستلاحظ أن هذه اللحظات تحوي مجموعة من الإطارات المتطابقة مدة كل منها 0.03 ثانية. فإن وجدت 10 إطارات متطابقة، احذف تسعة منها وحدد مدة ذاك الإطار الوحيد لتكون أطول، اجعلها ثانية مثلا. إن لم يفدك ذلك، حاول إعادة استيراد الفيديو، لكن هذه المرة فعل الخيار اقتصر على واحد من كل إطاريْن Limit To Every 2 Frames. يجب أن يُخفض ذلك حجم ملفك بقدر ملحوظ. نصيحة: إن كانت صورتك المتحركة تحوي أكثر من 150 إطارا فسيصعب عليك إبقاء حجم الملف منخفضا. 2. خفّض عدد الألوان عندما تحفظ صورتك المتحركة في الفوتوشوب، ستجد قائمة منسدلة بعنوان ألوان Colors على يمينك. جرّب قيما مختلفة في هذه القائمة. خفّضها قدر الإمكان، دون أن تحوّل صورتك المتحركة إلى كتلة من البشاعة. 3. عدّل نسبة فقدان البيانات يمكنك عند حفظ الصورة أن تحدّد نسبة فقدان البيانات بتحديد قيمة الخيار Lossy. قيمة بين 1 و 10 ستجعلك تتخلص من بضعة كيلوبايتات دون الإضرار بجودة الصورة. لا شيء مما سبق نافع! ساعدوني! إن كنت قد جربت كل ما سبق دون أن تستطيع تخفيض حجم تلك الصورة، فقد حان الوقت للمراجعة قليلا. هل تحاول أن تنجز الكثير؟ هل من طريقة أخرى لتحقيق هدفك؟ ماذا لو قسمتها إلى صورتي GIF مختلفتيْن؟ على غرار جميع المنتجات الإبداعيّة، , صورك المتحركة ستكون أفضل إن ركزت على شيء واحد فقط. رأسك يدور؟ إليك أدوات لإنشاء صور GIF إن كانت كل النصائح المُقدَّمة أعلاه مربكة لك، جرب أحد الخيارات التالية: GIPHY GIF Maker (مجاني) إن أنشأت حسابا في الموقع فسيمكنك الاحتفاظ بخصوصية صور GIF التي تنشئها عبر الموقع، وإلا فإن جميع صورك المتحركة ستصبح تابعة لـ GIPHY. EZGIF (مجاني) بالرغم من أنه لا يبدو بسيطا أو سهلا للعين كما هو GIPHY، إلا أنه يوفر تحكما أكبر. (4.99$) GifBrewery 3 لا أشتري تطبيقات لصنع الصور المتحركة، لكن لو كنتُ كذلك فبالتأكيد سيكون هذا هو التطبيق الذي سأعتمده. ترجمة - بتصرّف - للمقال 7 tips for designing awesome animated GIFs لصاحبه Andy Orsow. حقوق الصورة البارزة محفوظة لـ Freepik
  5. عندما أطلقنا تطبيق المحادثة الجديد في السنة الماضية، أضفنا للعملاء إمكانية إنشاء ملفات تعريف شخصية غنية بحيث يتأكد المستخدمون أن هناك دائما شخصا حقيقيًّا في الجهة المقابلة. والمشكلة؟ لا أحد يستخدم الميزة. بعد أن أطلقناه بوقت قصير, أكمل 13-15% من العملاء فقط ملفات التعريف الخاصة بهم. ملئت أغلب الملفات جزئيا بينما تُركت العديد منها غير ممسوسة. بعد التحدث مع الزملاء في فرق البحث والتحليل لدينا، اكتشفنا سببيْن رئيسيْن لهذا الاستعمال المنخفض: الوضوح: فقد كانت القدرة على إنشاء ملفك الشخصي محشورة في أماكن تصعب رؤيتها ضمن التطبيق. التثقيف: فقد كان الناس غير مقتنعين بأهمية الملفات الشخصية في تأسيس علاقات شخصية مع عملائهم. جزء واحد من حل أشمل وُجِدَت الملفات التعريفية في أجزاء عدة من المنتج، ممّا يعني أننا اضطررنا إلى إشراك فرق عمل مختلفة لزيادة تبني الميزة. دمَج فريق التطوير إنشاء ملفات التعريف في عمليّة التسجيل، بينما أعطى المنتج وضوحا أكبر لإمكانية تحرير ملف التعريف ضمن التطبيق نفسه. بجميع الأحوال، كانت هناك فرصة كبيرة لزيادة الفعالية وذلك بالاستفادة من ميزات تطبيقات هواتفنا المحمولة. فقد قام حوالي 45% من أعضاء فريقنا ممن تحدثوا مع عملائهم باستخدام تطبيقاتنا على أندرويد أو iOS. البدء ينشئ المصممون في Intercom، بالنسبة لكل مشروع جديد، قائمة بسيطة بالأمور الأساسية المسببة للمشكلة التي يحاولون حلها. الأمر الذي يساعد بالتفكير في حلول عامّة. وحلولنا كانت كما يلي: زيادة توعيّة المستخدمين الذين لم يكملوا ملفاتهم التعريفية أو أكملوها جزئيا. تثقيف المستخدمين بأهمية ملفات التعريف العامة. تسهيل عملية تعديل ملفات التعريف للمستخدمين في الوقت الذي يريدونه. التفكير في الأنظمة أخذنا في البداية ملفات التعريف لنساعد الفريق في فهم النظام وتحديد المكونات الخاصة التي تحتاج الأولوية. مما يعني إعداد جرد بالأجزاء والحالات والقواعد وغيرها. إليك مثالا عن منشور كان معلقا على حائط مساحة العمل الخاصة بنا. الأفكار تأتي من كل مكان ساعد توثيق النظام الفريق في مناقشة العقبات التقنية في وقت مبكر، وحتى في هذه المرحلة المبكرة قدم فريق الهندسة اقتراحات لم يكن فريق التصميم قد فكر بها. على سبيل المثال، ذكر أحدهم أن باستطاعتنا استخلاص بيانات من المصادر الموجودة لملْء مكونات محددة ضمن ملف التعريف. بما أن اسم الشخص موجود لدينا عندما يسجّل دخوله عبر تطبيق الجوّال، فلم لا ننسخ هذ الاسم إلى ملف التعريف ونوفر عليه زمن إدخال تلك البيانات يدويا؟ بعد رسم بعض الاتجاهات، التقينا بEmmet مدير تصميم المنتجات لدينا، للحصول على ردود الفعل واتخاذ قرار بشأن الخطوات التالية. وفيما يلي الخيارات الأربعة التي قدّمناها. الخيار الأول الخيار الثاني الخياران الثالث والرابع إن المكونات الأساسية هنا هي المقاطعة (الإزعاج) والتثقيف . لا نريد أن يكون التثقيف قابلا للتجاوز بسهولة، كما نريد مساحة لنتمكن من تثقيف المستخدمين بأهمية ملف التعريف ومكوناته. إلا أننا نعرف أيضًا أن المزيد من المقاطعة يعني مزيدا من النفور (أي أن المستخدمين يريدون التجاوز)، لذا نريد الإبقاء على عدد الخطوات في الإرشادات التفصيلية منخفضا قدر الإمكان. قررنا في النهاية أن نستخدم خيار الإرشاد البسيط. وفيما يلي القرارات الناتجة عن الاجتماع. يا له من تقدم! تصميم الحل حتى هذه النقطة، اتخذنا قرارا بأمرين. سنضيف إرشادًا بسيطًا لتطبيقنا في البداية نسأل فيه عن أي مكونات مفقودة في ملف التعريف بغية ملئها (المقاطعة والتثقيف). كان هدفنا الثالث إضافة القدرة على “تعديل ملف التعريف من أي مكان”. قررنا العمل ضمن نمط التصفّح الموجود حاليّا في التطبيق وإضافة أيقونة تحرير بسيطة ضمن قائمة التنقل ينتُج عنها بدء الإرشاد. يظهر يسار الصورة أدناه المستكشف الحالي، في ما يوجد المستكشف المُقترَح يمينها. على مستوى النظام، أسسنا ثلاث حالات للمستخدمين ستتحكم بمدى تقدّمهم في الإرشادات. نعلم اعتمادا على التوجّه العام الي اخترناه أن المسار سيتكون من خطوات رئيسية ثلاث (انظر المخطط في الأسفل) نريد جعلها أكثر سهولة وأخف وزنا قدر الإمكان. إن عملية الإرشاد واضحة جدا من حيث تصميم النظام. فهي مسار ثابت من البداية إلى النهاية، لكن المنطق يصبح أكثر تعقيدا عند أخذ حالات المستخدمين بالحسبان. نريدك أن تنتقل مباشرة إلى الجزء الأكثر صلة بحالتك عوضا عن إرغامك على المرور بعملية الإرشاد بكاملها. من المهمّ جدا أخذ خطوات خاصة بالمنصة بعين الاعتبار كأذونات الكاميرا. فليست كل خطوة شاشة جديدة. مرة ثانية، طبعت هذه المخططات وعلقت في قاعة العمل. غالبا ما يكون المهندسون أمام الجدار يدقّقون سير العملية، وقد يجدون حالة حرجة تتطلب منا إجراء تغييرات. هكذا يبدو المخطَّط النهائي لخطوات الإرشاد. التنفيذ أصبح لدينا الأساس لنبني عليه كل جزء من الأجزاء. يحصل التصميم المرئي والتفاعلي لحظيًّا، مع معرفة أننا سنستمر بتعديل المرئيات أثناء بنائها. وجدنا بأنه يجب أن تكتمل التفاصيل المتعلقة بالتفاعلات المعقدة والرسوم المتحركة بأسرع ما يمكن (وهو السبب الذي تعدّ من أجله نماذج الوثوقية العالية عظيمة). لأنه من الصعب تغييرها لاحقا على عكس التعديلات على التصميم المرئي كتحديث الموجودات والألوان وغيرها. استخدمنا Framer JS كطريقة لوضع نماذج أولية للأفكار التفاعلية الأولى، ومناقشتها مع المهندسين والاتفاق على ما يمكن عمله.حصلنا على مخطّط نهائي لتطبيق iOS بعد حوالي 12 نموذجًا أوليًّا. من وجهة نظر التصميم المرئي، تتبع تطبيقات جوالاتنا عن كثب علامتنا التجارية. ويجب على أي تصميم جديد أن يحافظ على تلك اللغة بالإضافة إلى إعادة استخدام أية أنماط مطلوبة. عملنا مع فريق تصميم علامتنا التجارية على الرسوم التوضيحية لشاشات الافتتاح والتأكيد. كان المحتوى هاما جدا لمشكلة التثقيف. توجب علينا أن نشرح أهمية الملفات الشخصية بطريقة موجزة. عمل التصميم عن قرب مع Elizabeth McGuane محللتنا الإستراتيجية التي تُعنَى بالمحتوى، لخلق تجربة أكثر إقناعا ومساعدة المستخدمين في فهم أهمية الملف الشخصي الجيد. في ما يلي مثال على توثيق إستراتيجية المحتوى. الاختبار والتطويع كنا مدركين للتشتت الذي سيحصل خلال العملية وأن عددا من الناس على الأغلب سيتجاوزون الإرشادات، حتى بعد إضافة خيار تذكير المستخدمين بإكمال ملفاتهم الشخصية لاحقا. كان إعداد مقاييس لمدى التقدّم في إكمال الملف هو الحل، بالإضافة إلى السماح بمدة تجريبية للتعديل بناءً على النتائج. بالنسبة لنسختنا التجريبية الأولى، كان معدل الإكمال الأوّلي منخفضا جدا وبخاصة في أندرويد. قمنا بمجموعة من التعديلات على التصميم كإزالة نتوء زر “ذكرني لاحقا” وتبديل التخطيط وتعديل المحتوى ليصبح أكثر تسلية وأقل إملاءً للتعليمات. بعد حوالي أسبوع من التعديلات السريعة والمراقبة، ازداد معدل الإتمام على نحو مفاجئ. بفضل تدخل عدة فرق ارتفع معدل إكمال الملفات الشخصية الإجمالي من 14% إلى 46% خلال مدة شهر. لعبت عملية الإرشاد في الجوّال دورا هاما في هذا الارتفاع. خرجنا أيضا مع مجموعة كبيرة من النصائح الجاهزة التي يمكن أن نطبقها على مشروعنا التالي: تأكد من وضوح المشكلة لجميع المشاركين في العمل. ضع المشكلة تحت البحث والقياس، واستخدم أهدافا عامة لتوجيه حلولك. بغض النظر عما تقوم بصنعه، فكر بالكبير وابدأ بالصغير. يجب أن يعمل المصمّم إلى جانب المهندس في وقت مبكر وعلى نحو مستمر للحصول على الأفكار والتحقق من المفاهيم. يجب أن ينجز التصميم التفاعلي في أقرب وقت ممكن كونه من الأسهل التعديل على التصميم البصري أثناء إنشائه. اعرف عوامل نجاحك وتتبع نجاح حلولك وتأكد من وجود وقت للتعديل. إن اتباع عملية منطقية وواضحة كهذه سيزيد بقدر كبير من فرصنا في إنتاج ميزة يستخدمها الناس فعلا. قد يبدو الأمر وكأنه مليء بالتفاصيل في البداية، لكن بمجرد أن تأخذها كعادة ستصبح جزءا من طبيعتك. ترجمة - بتصرّف - للمقال Design principles: what to do when nobody is using your feature لصاحبه Brendan Fagan. حقوق الصورة البارزة محفوظة لـ Freepik
  6. يهدف نمط التصميم معمل التجريد Abstract Factory إلى توفير واجهة Interface لإنشاء مجموعة من الكائنات المرتبطة أو المنفصلة دون الحاجة إلى التعامل مع أصنافها الفعليّة. كما يوفّر هرمية Hierarchy تغلّف الكثير من المنصات Platforms المحتملة، وتعمل على بناء مجموعة من “المنتجات”. ينطلق نمط التصميم هذا من مبدأ أن العامل new مؤذٍ وينبغي التقليل من استخدامه. ملاحظة: نعني بالتغليف Encapsulation في إطار البرمجة كائنيّة التوجه Object-oriented programming تلك الآليّة التي تتيح جمع البيانات (الخاصيّات Attributes) والإجراءات المطبّقة عليها (التوابع Methods) ضمن نفس الكائن، مع تقييد إمكانيّة وصول الكائنات الأخرى إلى عناصر الكائن. المشكلة إذا توجب على التطبيق Application أن يكون محمولا Portable، فلا بد من تغليف اعتمادات المنصات Platform dependencies التي يُراد له أن يعمل عليها. قد تتضمن هذه الاعتمادات نظام النوافذ، نظام التشغيل، قاعدة البيانات وغيرها. في كثير من الأحيان لا يُصمَّم التغليف مسبقا لأخذ الاعتمادات بالحسبان، فتبدأ عبارات الاختبار (if.. else) مع خيارات لجميع المنصات الحالية المدعومة، بالتكاثر كالأرانب داخل الشفرة البرمجية. المناقشة يوفّر نمط التصميم معمل التجريد Abstract Factory مستوى من المراوغة يجرّد Abstract عمليّة إنشاء أصناف من الكائنات، المرتبطة أو المنفصلة؛ وبالتالي لا يحدّد طريقة التنفيذ الفعليّة للأصناف محلّ التساؤل. المعمل؛ أي كائن من صنف Factory؛ هو - حسب هذا النمط - خادم يوفّر خدمات إنشاء الأصناف التي نريد تجريدها - اعتمادات المنصات مثلا - لبقيّة الكائنات التي تلعب دور العميل. لا يمكن للعملاء بأي حال من اﻷحوال إنشاء الأصناف المقصودة بأنفسهم، بل يطلبون من المعمل فعل ذلك، عن طريق توابع مناسبة. تسهّل هذه الآلية تبديل مجموعات المنتجات، لأن الصنف المحدد في كائن المعمل يظهر مرة واحدة فقط في التطبيق، وذلك في المكان الذي استهل Instantiated فيه. يمكن للتطبيق ببساطة أن يبادل بين مجموعة كاملة من المنتجات عن طريق استهلال صنف فعليّ آخر من المعمل. وبما أن الخدمة التي يقدمها كائن المعمل واسعة الانتشار، فإنها تُنفَّذ عادة باستخدام النمط المفرد The Singleton pattern. ملاحظة: يحيل مفهوم التجريد Abstraction في هندسة البرمجيّات إلى الآليّة التي يُتخلَّص بموجبها من تعقيدات نظام مّا بتحديد مستوى من التعقيد لا يتجاوزه من يتفاعل مع النظام، ممّا يعني أنه يحذف التفاصيل الأكثر تعقيدا. يعتمد التجريد على استخلاص العناصر الرئيسية المطلوبة لحل المُشكلة والتركيز على هذه العناصر فقط وإهمال كافة التفاصيل الأخرى. الهيكلية يعرّف معمل التجريد تابعا Method لكل صنف منتَج. يغلّف كل تابع العامل new والصنف الفعلي المحدد للمنصّة؛ ثم بعد ذلك، تتم نمذجة كل “منصة” بصنف مشتق Derived class من المعمل. مثال إن الهدف من نموذج معمل التجريد هو توفير واجهة لإنشاء مجموعات من الكائنات المرتبطة دون تحديد أصنافها الفعلية. يوجد مثال على هذا النمط في طبع الصفائح المعدنية المستخدمة في صناعة المركبات اليابانية. تعدّ معدات الطبع هذه معمل تجريد، حيث تنشئ أجزاء المركبة الآلية. تُستخدم الآلة نفسها في طبع الأبواب اليمنى واليسرى، المصدات الأمامية اليمنى، اليسرى وغطاء المحرك وغيرها، وذلك من أجل نماذج مختلفة من السيارات. تُستخدم آلات نقل (التوابع) في تغيير قوالب الطبع وإنتاج نوعيّة جديدة من المعدّات (أصناف فعلية). يوفّر معمل التجريد StampingEquipment في مخطَّط الأصناف التالي تابعًا stampPart لكلّ مجموعة منتجات (stampWheelمثلا للعجلات Wheels وstampDoor للأبواب Doors). تستدعي الكائنات العميلة Clients (بقيّة أجزاء التطبيق) التابع المناسب لمجموعة المنتجات التي تريدها، مع تحديد نوعيّة (صنف) النموذج الذي تريد إنشاء كائن منه. يتضمّن التابع stampPart العامل new الذي ينشئ نموذجا جديدا باستدعاء الصنف الفعلي من بين مجموعات الأصناف ModelXHood، ModelXWheels وModelXDoor (حيث X عدد يمثل معرّف نموذج من المنتجات). نحصُل من العملية السابقة على كائن من معمل التجريد StampingEquipment لكنّه يحمل خواصّ المنتج الذي نريده، ولا يتبقّى لنا للحصول على المنتج سوى استدعاء التابع المناسب: stampHood، stampWheel أو stampDoor. إن استدعينا مثلا التابع اstampWhee في معمل التجريد StampingEquipment مع تحديد الصنف Model1Wheels (النموذج رقم 1 من العجلات) فسنحصُل على كائن من الصنف StampingEquipment لديه تابع stampWheel يؤدّي استدعاءه إلى الحصول على كائن من الصنف Model1Wheels. إن أردنا الآن عجلات من النموذج رقم 2 فكلّ ما علينا فعله هو اتباع نفس الطريقة ولكن مع تحديد Model2Wheels بدلا من Model1Wheels عند استدعاء اstampWhee في معمل التجريد. نفس الشيء ينطبق على الكائنات الأخرى، مع تغيير اسم التابع في معمل التجريد حسب مجموعة الأصناف (stampHood بالنسبة لنماذج اﻷغطية ModelXHood، وstampDoor بالنسبة لنماذج الأبواب ModelXDoor). لاحظ أنه بهذه الطريقة لن نحتاج لاستهلال الصنف StampingEquipment (إنشاء كائن منه) سوى مرة واحدة، ثم نستدعي بعدها التوابع المناسبة لنوعيّة المنتجات التي نريد. أي أن العميل هنا يعمل في مستوى من التعقيد أقلّ بكثير ممّا كان سيعمل عليه لو أنه تولّى بنفسه استهلال الأصناف الفعليّة (ModelXHood، ModelXWheels وModelXDoor) وما قد يترتّب عن ذلك من تعريف للخاصيّات والتوابع وكيفية عملها وغيرها من التفاصيل. قائمة التدقيق ينبغي - قبل اللجوء إلى نمط التصميم معمل التجريد التأكّد من حاجتك إليه عمليًّا وذلك بـ: تقرير ما إذا كانت اعتمادات المنصة وخدمات الإنشاء هي المصدر الحالي للمشكلة. إعداد مصفوفة “منصات” مقابل “منتجات”. تأكّد عند استخدام هذا النمط من: تعريف واجهة للمعمل تتكّون من تابع معمل لكل “منتج”. تعريف صنف مشتق من المعمل لكل منصة لتغليف كافة استدعاءات العامل new. حذف جميع استدعاءات العامل new من الصنف العميل وجعله يستخدم توابع المعمل في إنشاء الكائنات للمنتَج. ترجمة - بتصرّف - للمقال Abstract Factory Design Pattern لأصحابه Alexander Shvets, Gerhard Frey, Marina Pavlova. حقوق الصورة البارزة محفوظة لـ Freepik
  7. يمكن لنمط التصميم البرمجي مجمع الكائنات Object pool أن يؤمّن دَفعة كبيرة للأداء ، ويكون أكثر فعالية في الحالات التي تكون فيها كلفة بدء عينة من الصنف Class instance مرتفعة، أو ترتفع فيها نسبة استهلال الأصناف مع انخفاض عدد العيّنات المستخدمة في آن واحد. المشكلة تستخدم مجمعات الكائنات (والتي تعرف أيضا باسم مجمعات المصادر Resources pools) لإدارة تخبئة الكائنات Object caching. يستطيع العميل الذي يملك وصولا إلى مجمع الكائنات أن يتجنب إنشاء كائنات جديدة بسؤال المجمع عوضا عن ذلك عن كائن سبق استهلاله. ينشئ المجمع كائنات جديدة إذا كان فارغًا وينمو حجمُه، إلّا أنه من الممكن تقييد عدد الكائنات المُنشَأة. يُفضَّل أن توضَع جميع الكائنات التي تمكن إعادة استخدامها Reusable objects، غير المستخدمة حاليًّا؛ ضمن مجمع الكائنات نفسه، حتى يصبح بالإمكان إدارتها بطريقة متناسقة. يُتوَصَّل إلى هذا الغرض باستخدام نمط الصنف المنفرد Singleton لتصميم الصنف القابل لإعادة الاستخدام. المناقشة يسمح مجمع الكائنات للعميل بـ”استعارة” الكائنات الموجودة فيه. يعيد العملاء الكائنات بعد استخدامها إلى المجمع، الذي يمكنه بعد ذلك إعارتها لعميل آخر ليستخدمها بدوره. إلا أننا لا نريد أن ينتظر عميلٌ إعادةَ كائن مستخدَم، فهذا مخالف للرغبة في تحسين اﻷداء؛ لذا فإن مجمع الكائنات يمكنه أن يستهل كائنات جديدة عندما تظهر الحاجة إليها، لكنْ يجب عليه أيضا أن يستخدم وسيلة لتنظيف الكائنات غير المستخدمة دوريّا. الهيكلية يقوم المبدأ العامّ لنمط مجمع الكائنات على أنه عند وجود عيّنات من صنف مّا، قابلة لإعادة الاستخدام فإنه من الأفضل تفادي إنشاء كائنات جديدة واستخدام العيّنات الموجودة. تظهر في المخطّط التالي ثلاثةُ أصناف: الصّنف Reusable: تتعاون الكائنات من هذا الصّنف مع بقيّة الكائنات (الكائنات العميلة المذكورة أدناه) لمدّة محدودة، تصبح بعدها كائنات الصّنف Reusable غير ضروريّة لعمل العملاء. الصّنف Client: تستخدم الكائنات التي تلعب دور العميل عيّنات من الكائنات القابلة لإعادة الاستخدام +(أي كائنات الصّنف Reusable المذكور في النقطة اﻷولى). الصّنف ReusablePool: تُدير الكائنات من هذا الصنف كائناتٍ قابلةً لإعادة الاستخدام (دور الصّنف Reusable) وتوفّرها للكائنات العميل +(الصّنف Client). ينبغي الانتباه هنا إلى أن الأصناف المذكورة أعلاه تمثّل أدوارا Roles، إذ يمكن أن يوجد أكثر من مجمع كائنات (الصّنف ReusablePool)، ولكلّ مجمع أصناف Reusable خاصّة به يوفّرها للعملاء الذين يطلُبون ذلك. يمكن لنفس العميل أن يطلُب خِدمات مجمعَيْ كائنات أو أكثر في نفس الوقت. يُفضل عادة أن يُحتَفَظ بجميع الكائنات القابلة لإعادة الاستخدام غير المُستخدَمة حاليا ضمن مجمع الكائنات نفسه، حتى يصبح بالإمكان إدارتها بسياسة متناسقة واحدة. لهذا الغرض، يُصمَّم الصّنف ReusablePool ليكون صنفا فريدا، توابعه المشيّدة Constructors خاصّة ممّا يُجبر الأصناف العميلة على استدعاء التابع getInstance للحصول على عيّنة من الصّنف ReusablePool. يستدعي الكائن العميل Client، عندما يحتاج لعيّنة من الصّنف القابل لإعادة الاستخدام، التابعَ acquireReusable الذي يوفّره الصّنف ReusablePool. يحتفظ كائن ReusablePool مجموعة من الكائنات القابلة لإعادة الاستخدام Reusable غير المستخدمة حاليا. ينظُر كائن ReusablePool عند استدعاء التابع acquireReusable في مجموعة كائنات Reusable التي يحتفظ بها، ويحذف منها كائنا ويعيده إلى العميل الذي طلب ذلك. إذا كان المجمع فارغا فإن التابع acquireReusable ينشئ - إن استطاع - كائنا جديدا. إن لم يستطع التابع acquireReusable إنشاء كائن جديد فإنه ينتظر أن يُرجِع أحد الكائنات العميلة كائنَ Reusable. يمرّر الكائنُ العميل كائنَ الصّنف Reusable عند انتهائه من استخدامه إلى التابع releaseReusable الذي يوفّره كائن الصّنف ReusablePool. يعيد التابعُ releaseReusable الكائنَ الذي تلقّاه من العميل إلى مجمع كائنات Reusable غير المستخدمة. تقيّد كثير من التطبيقات التي تستخدم نمط التصميم مجمع الكائنات، لأسباب مختلفة، عددَ كائنات الصنف Reusable التي يمكن تواجدها. يكون كائن ReusablePool الذي ينشئ كائنات Reusable مسؤولا في هذه الحالة من احترام هذا الشرط. تتوفّر كائنات ReusablePool - في حالة تقييد عدد الكائنات - على تابع لتحديد عدد كائنات Reusable الذي لا ينبغي تجاوزه. يظهر هذا التابع في المخطَّط أعلاه باسم setMaxPoolSize. قائمة التدقيق تأكّد عند استخدام نمط التصميم مجمع الكائنات من: إنشاء صنف مجمع الكائنات بمصفوفة خاصة من اﻷصناف القابلة لإعادة الاستخدام داخله. إنشاء تابعَي طلب الكائنات وتحريرها ضمن صنف مجمع الكائنات. استخدام نمط الصّنف المنفرد Singleton لتطبيق مجمع الكائنات. ترجمة - بتصرّف - للمقال Object Pool Design Pattern لأصحابه Alexander Shvets ،Gerhard Frey وMarina Pavlova. حقوق الصورة البارزة محفوظة لـ Freepik
  8. يهدف نمط التصميم تابع المعمل Factory Method إلى تعريف واجهة Interface لإنشاء الكائنات مع ترك مهمّة تحديد الصنف الذي سيُستهَل Instantiate إلى الأصناف المتفرّعة عن الواجهة. يعرّف نمط تابع المعمل تابِعا (دالة) مشيّدا افتراضيا Virtual، كما ينطلق من مبدأ أن استخدام العامل new مؤذ ويجب تغليفه Encapsulate. ملاحظة: نعني بالتغليف Encapsulation في إطار البرمجة كائنيّة التوجه Object-oriented programming تلك الآليّة التي تتيح جمع البيانات (الخاصيّات Attributes) والإجراءات المطبّقة عليها (التوابع Methods) ضمن نفس الكائن، مع تقييد إمكانيّة وصول الكائنات الأخرى إلى عناصر الكائن. المشكلة تحتاج أطر العمل Frameworks إلى توحيد النموذج المعماري Architectural model لمجموعة من التطبيقات، لكنها تسمح للتطبيقات الفردية أن تعرّف كائنات مجالها الخاص. تؤمّن أطر العمل استهلال تلك الكائنات. المناقشة يشبه نمط تابع المعمل في إنشائها للكائنات طريقة القالب Template Method في تطبيقها للخوارزميات، إذ يقوم الصنف الأساسي بتحديد السلوك العام والقياسي (مستخدما ماسكات مكان افتراضية Virtual Placeholders واضحة لخطوات الإنشاء)، ومن ثم يفوّض إنشاء التفاصيل إلى الأصناف الفرعية التي يؤمنها العميل. يجعل نمط تابع المعمل التصميم أكثر قابلية للتخصيص من دون تعقيده كثيرا. وفي حين تتطلب أنماط التصميم الأخرى أصنافا جديدة فإن تابع المعمل لا يحتاج سوى لتابع جديد. يُستخدَم نمط تابع المعمل غالبا كطريقة قياسية لإنشاء الكائنات، لكن هذا غير ضروري عندما يكون الصنف المستهل لا يتغير أبدا، أو عندما يحصل الاستهلال بعملية يمكن للصنف الفرعي أن يلغيها بسهولة (كعملية الاستهلال). يشبه تابع المعمل نمطَ معمل التجريد، ولكن دون الاهتمام كثيرا بتجميع الكائنات ضمن مجموعات مرتبطة. تُحدّد البنية المعمارية لأُطر العمال توابع المعمل عادةً، بينما يُترَك تطبيقها لمستخدمي إطار العمل. الهيكلية تتداخل طريقة التطبيق الأصليّة - كما عرَّفها روّاد أنماط التصميم البرمجي - مع طريقة تطبيق معمل التجريد؛ إلا أن طريقة أخرى اشتهرت بعد ذلك. يتمثّل التطبيق الأكثر شعبية لنمط تابع المعمل في استخدام تابع ثابت Static يُرجِع كائنا من الصنف حيثُ يوجد التابع المذكور. يختلف التابع المُستخدَم عن التابع المشيّد Constructor في نقاط عدّة، منها: أن الكائن المُرجَع قد يكون عيّنة من صنف فرعي. أنه يمكن استخدام كائن موجود - سبق إنشاءه - بدلا من إنشاء كائن جديد. أن توابع المعمل يمكنها أن تتسمّى بطريقة مغايرة لتلك التي تفرضها لغة البرمجة، ممّا يعني أن الأسماء ستكون أكثر دلالة على عمل التوابع. على سبيل المثال: Color.make_HSB_color(float hue, float saturation, float brightness) وColor.make_RGB_color(float red, float green, float blue). يستقبل التابع ()makeProduct الثابت في الواجهة Product ضمن مخطَّط الأصناف أعلاه المُعطَيات ثمّ يقرّر بناءً عليها الصنف الفعلي للكائن الذي سيُرجعه (ProductOne أو ProductTwo). تُفصَل بقيّة أجزاء البرنامج كليّا عن التفاصيل الخاصّة بالأصناف المشتقة، ويصبح الإنشاء متعدد الأشكال Polymorphic ممكنا. ملحوظة: يشير مصطلح تعدّد الأشكال Polymorphism إلى القدرة على توفير صنف وحيد يعمل واجهةً لأصناف أخرى مختلفة. تستفيد الأصناف العميلة من الواجهة دون أن تعبأ بتفاصيل تنفيذ الأصناف (الفعلية) التي “تختبئ” وراءها. مثال يعرّف نمط تابع المعمل واجهة لإنشاء الكائنات، مع ترك مهمّة تحديد الأصناف الفعليّة التي ستُستهَل للأصناف المتفرّعة عن الواجهة. يُطبّق مصّنعو الألعاب البلاستيكية هذا النمط عند معالجة بودرة القوالب البلاستيكية. يُحقَن البلاستيك في قوالب الأشكال المرغوبة ثم يُحدَّد صنف اللعبة (سيارة مثلا) عن طريق القالب. قائمة التدقيق إن كان لديك هرمية توارث Inheritance hierarchy تمارس تعددية الأشكال، فكر في إضافة إمكانية الإنشاء متعدد الأشكال عن طريق تعريف تابع معمل ثابت Static في الصنف الأساسي. صمم معطيات Arguements تابع المعمل. ما هي النوعيات والخصائص الضرورية والكافية لتعريف الصنف المشتق الصحيح الذي سيُستهَل؟ فكر في تصميم مجمع كائنات Object Pool يسمح بإعادة استخدام الكائنات عوضا عن إنشائها من الصفر. فكر في جعل جميع التوابع المشيّدة خاصّة Private أو محميّة Protected. ترجمة - بتصرّف - للمقال Factory Method Design Pattern لأصحابه Alexander Shvets، Gerhard Frey وMarina Pavlova. حقوق الصورة البارزة محفوظة لـ Freepik
  9. يهدف نمط الباني The Builder في التصميم البرمجي إلى فصل عمليّة بناء الكائنات المعقّدة عن طريقة عرضها، بحيث يُمكن إنشاء طرق عرض عدّة بنفس عمليّة البناء. كما يُستخدَم هذا النمط في التعامل مع طريقة عرض معقّدة لتحويلها إلى واحدة من بين طرق عرض أقلّ تعقيدا. عرض المشكل يتطلب تطبيق ما إنشاء عناصر من تجميع معقد. تتوافر مواصفات هذا التجمع في ذاكرة تخزين ثانوية (خارجية)، ونحتاج لبناء عرض واحد – من بين عدّة عروض ممكنة - في ذاكرة التخزين الأساسية. المناقشة تُفصَل خوارزمية التفسير (أي القراءة والتحليل) في آليّة التخزين المُستدام (كملفات RTF) عن خوارزمية بناء وعرض أحد المنتجات المستهدفة (مثل: ASCII، TeX والمربعات الجانبية “ودجة” Widgets). ينصب التركيز/التمييز على إنشاء تجميعات معقدة. يستدعي الصنف القائد Director خدمات الباني أثناء تفسير التنسيق الخارجي. ينشئ الباني جزءًا من الكائن المعقد في كلّ مرة يُستدعى فيها، كما يُحافظ على جميع الحالات الوسيطة. عندما يكتمل المنتج، يحصل العميل (وهو كائن آخر من التطبيق يحتاج الوظيفة المصمَّمة وفق نمط الباني) على النتيجة من “الباني”. يؤمّن نمط الباني تحكما أفضل بعملية الإنشاء. وعلى عكس أنماط التصميم التي تنشئ المنتجات بخطوة واحدة، يُنشئ النمط الباني المنتج خطوة بخطوة تحت إشراف القائد. مثال يفصل نمط الباني عملية بناء الكائن المعقد عن عملية عرضه بحيث يمكن لعملية البناء نفسها أن تنشئ عروضا مختلفة. يستخدم هذا النمط في مطاعم الوجبات السريعة لتحضير وجبات الأطفال. حيث تتكون وجبات الأطفال عادة من عنصر رئيسي (شطيرة هامبرغ) وعنصر جانبي (بطاطا مقلية) ومشروب ولعبة. لاحظ هنا إمكانية وجود اختلاف في محتوى وجبة الأطفال، لكن عملية بناء الوجبة هي نفسها، سواء طلب الزبون شطيرة هامبرغر أو هامبرغر بالجبنة أو دجاجًا فإن العملية هي نفسها. حيث يقوم الموظف المتواجد على النضد بتوجيه طاقم العمل لتجميع عنصر رئيسي وعنصر جانبي ولعبة ومن ثم وضع هذه العناصر في كيس، بينما يوضع المشروب في كأس ويبقى خارج الكيس. تُستخدَم العملية نفسها في المطاعم المنافسة. كيف يُطبَّق نمط التصميم “الباني” يجب أولا التأكّد قبل اختيار هذا النمط من التصميم البرمجي من أن المُدخلات المشتركة وكثرة طرق العرض الممكنة هما سبب المشكل. يغلّف Encapsulate الصنف القارئ Reader تحليل المُدخلات المشتركة. تسمح هرمية الباني بالإنشاء متعدد الأشكال Polymorphic للعديد من الأهداف أو العروض المتميزة. ملاحظة: نعني بالتغليف Encapsulation في إطار البرمجة كائنيّة التوجه Object-oriented programming تلك الآليّة التي تتيح جمع البيانات (الخاصيّات Attributes) والإجراءات المطبّقة عليها (التوابع Methods) ضمن نفس الكائن، مع تقييد إمكانيّة وصول الكائنات الأخرى إلى عناصر الكائن. يبيّن مخطَّط الأصناف التالي الارتباط بين الأصناف الداخلة في تنفيذ هذا النمط: يُغلّف تحليل المدخلات المشتركة ضمن صنف القارئ. يُصمَّم ميثاق (بروتوكول) قياسي لإنشاء جميع العروض المحتملة في المُخرجات. - تُحفظ خطوات عمل هذا البروتوكول في واجهة الباني (الصنف Converter في المخطَّط). يُعرّف صنف مشتق من الباني لكل عرض مستهدف (الأصناف ASCIIConverter، PostScriptConverter وPDFConverterفي المخطَّط). ينشئ العميل كائنًا للقراءة وكائنًا للبناء، ثم يسجّل الأخيرَ لدى الأول. يطلب العميل من القارئ أن “يبني”. يطلب العميل من الباني أن يعيد النتيجة. ترجمة - بتصرّف - للمقال Builder Design Pattern لأصحابه Alexander Shvets, Gerhard Frey, Marina Pavlova. حقوق الصورة البارزة محفوظة لـ Freepik
  10. يُعرَف نمط التصميم Design Pattern في هندسة البرمجيات بأنه حل عام قابل للتكرار لمشكلة متكررة الحدوث في تصميم البرمجيات. نمط التصميم ليس نموذجا نهائيا يمكن تحويله إلى تعليمات برمجية مباشرة؛ بل هو توصيف أو قالب لكيفية حل المشكلة، يمكن استخدامه في العديد من الحالات المختلفة. استخدام أنماط التصميم يمكن لأنماط التصميم أن تسرّع عملية التطوير عن طريق توفير تصوّرات Paradigms أثبتت جدواها بعد اختبارها مرات كثيرة. يتطلب التصميم البرمجي الفعال أن نأخذ بعين الاعتبار المشاكل التي قد لا تظهر إلا لاحقا عند التنفيذ. تساعد إعادة استخدام أنماط التصميم في منع الأمور الدقيقة من التسبب بمشاكل كبيرة، كما تحسّن من القدرة على قراءة التعليمات البرمجية للمبرمجين والمعماريين Architects الذين هم على دراية بهذه الأنماط. يدرك الناس، في كثير من الأحيان، كيفية تطبيق تقنيات تصميم معينة لحل مشاكل بعينها فقط. لكن هذه التقنيات تكون صعبة التطبيق على نطاق أوسع من المشاكل. توفر أنماط التصميم حلولا عامة موثقة في تنسيق، لا يتطلب تفاصيل مرتبطة بمشكلة معينة. بالإضافة لذلك، تسمح هذه الأنماط للمطورين بالتواصل باستخدام أسماء معروفة ومفهومة جيدا للتفاعلات البرمجيّة software interactions. يمكن تحسين أنماط التصميم الشائعة مع مرور الوقت، الأمر الذي يجعلها أكثر قوة من التصاميم المخصصة. أنماط التصميم الإنشائية Creational design patterns تعنى نماذج التصميم هذه باستهلال الأصناف Class instantiation. يمكن تقسيم هذه النوعيّة من النماذج إلى فئتيْن: نماذج لإنشاء الأصناف ونماذج لإنشاء الكائنات. في حين تستخدم نماذج إنشاء الفئات التوريث Inheritance بفعالية في عملية التكوين، فإن نماذج إنشاء الكائنات تستخدم التفويض Delegation بفعالية لإنجاز العمل. من أمثلة أنماط التصميم الإنشائية: نمط معمل التجريد Abstract Factory: يخلق عينة Instance لعدة عائلات من الأصناف. نمط الباني Builder: يقوم بفصل عملية بناء الكائن Object Construction عن عملية تمثيله Representation. نمط طريقة المعمل Factory Method: يخلق عينة لعدة أصناف مشتقة Derived classes. أنماط التصميم الهيكلية Structural design patterns تعنى أنماط التصميم هذه بتركيب Composition الكائنات والأصناف. تستخدم الأنماطُ الهيكليّة لإنشاء الأصناف التوريثَ Inheritance لتركيب واجهات Interfaces، أما الأنماطُ الهيكليّة لإنشاء الكائنات فتعرّف طرقا لتكوين الكائنات بهدف الحصول على وظائف جديدة. من أمثلة هذه الأنماط: نمط المحول Adapter: يربط الواجهات Interfaces بأصناف مختلفة. نمط الجسر Bridge: يفصل واجهة الكائن عن تطبيقه Implementation. نمط المظهر Facade: صنف مفرد يمثل نظاما فرعيا Subsystem كاملا. نمط بيانات الصنف الخاصة Private Class Data: يقيد وصول المسترجعات Accessors والمعدّلات Mutators إلى خاصيّات الصنف. أنماط التصميم السلوكية Behavioral design patterns تعنى أنماط التصميم هذه بالتواصل Communication بين كائنات الأصناف. النماذج السلوكية هي تلك النماذج التي تهتم على وجه الخصوص بالتواصل بين الكائنات، ومن بينها: نمط سلسلة المسؤوليات Chain of Responsibility: طريقة لتمرير الطلب Request بين سلسلة من الكائنات. نمط السيطرة Command: يقوم بتغليف Encapsulate الطلب على هيئة كائن. نمط المفسّر Interpreter: طريقة لتضمين عناصر اللغة في البرنامج. نمط المكرّر Iterator: يؤمن وصولا تسلسليا للعناصر في مجموعة ما. نموذج الوسيط Mediator النقد انتقد بعض العاملين في مجال علوم الحاسب مفهوم أنماط التصميم وأبدوا اعتراضاتٍ عليه نجملها في ما يلي. يستهدف المشكلة الخاطئة تظهر الحاجة إلى الأنماط عند استخدام لغات البرمجة أو التقنيات التي لا تملك قدرة تجريد Abstraction كافية. في الحالة المثالية، لا ينبغي نسخ مفهوم ما بل تجدر الإشارة إليه. ولكن عند الإشارة إلى شيء ما بدل نسخه فلن يكون هناك نمط لتسميته أو الدلالة عليه، وهذا ما كتبه بول غراهام Paul Graham في مقال بعنوان “انتقام المهووسين Revenge of the Nerds “. يقدم بيتر نورفيغ Peter Norvig نقاشا مشابها، حيث يوضح أن 16 نمطا من أصل 23 في كتاب أنماط التصميم (الذي يركز بشكل أساسي على ++C ) بُسِّطت أو ألغيت (عن طريق دعم اللغة المباشر لها) في كل من لغتي Lisp و Dylan. يفتقر إلى الأسس الرسمية لقد كانت دراسة أنماط التصميم متخصّصة جدا، وقد جادل البعض في الحاجة الملحة لوضع هذا المفهوم في إطار أكثر رسمية. في مؤتمر OOPSLA (البرمجة كائنيّة التوجّه: الأنظمة، اللغات والتطبيقات) عام 1999، خضعت عصابة الأربعة Gang of Four (بتعاونهم الكامل) إلى محاكمة علنية، اتهموا فيها بعدة جرائم تمس علوم الحاسب. وقد تمت إدانتهم من قبل ثلثي المحلفين الذين حضروا المحاكمة. ملحوظة: غالبا ما يُشار إلى مؤلّفي كتاب Design Patterns: Elements of Reusable Object-Oriented Software (أنماط التصميم: مكوّنات من البرامج كائنيّة التوجّه القابلة لإعادة الاستخدام) الذي روّج لأنماط التصميم، غالبا ما يُشار إليهم باسم “عصابة الأربعة”. يقود إلى حلول غير فعالة إن فكرة نمط التصميم ما هي إلا محاولة لتقييس Standardize ما يعتبر سلفا مقبولا كأفضل ممارسة. قد يبدو هذا الأمر مفيدا من الجانب النظري، لكنه في الجانب العملي غالبا ما يؤدي إلى تكرار غير ضروري للتعليمات البرمجية. وبالتالي يكون الحل الأكثر فعالية هو استخدام تطبيق مصمم جيدا عوضا عن نمط تصميم بالكاد يعتبر جيدا. لا يختلف كثيرا عن التجريدات الأخرى يزعم بعض المؤلفين أن أنماط التصميم لا تختلف كثيرا عن أشكال التجريد الأخرى، وبأن استخدام مصطلح جديد (استعير من مجتمع العمارة) لوصف ظاهرة موجودة سابقا في مجال البرمجة يعتبر أمرا غير ضروري. تعدّ بنية بنية MVC ( “نموذج – عرض – متحكم”، “Model – View – Controller”) مثالا عن “نمط” يسبق مفهوم أنماط التصميم بعدة سنوات. ويجادل البعض بأن أول مساهمة في مجتمع أنماط التصميم (وكتاب عصابة الأربعة) هو استخدام كتاب A pattern language (لغة نمط) طريقةً للتوثيق Documentation؛ وهي ممارسة غالبا ما يتجاهلها المختصّون عند عرضهم لأصول مفهوم أنماط التصميم. ترجمة - بتصرّف - لمقال Design Patterns لأصحابه Alexander Shvets, Gerhard Frey, Marina Pavlova. حقوق الصورة البارزة محفوظة لـ Freepik
×
×
  • أضف...