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

محمد طاهر5

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

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

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

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

    24

كل منشورات العضو محمد طاهر5

  1. يتعامل المبرمجون مع شفرة البرامج المصدرية بأسلوبين مختلفين، فالأول يرى أنّ “الشفرة التي تعمل هي الشفرة الجيدة” أما الثاني فيرى أنّه “ما دامت الشفرة جيدة فإنّها ستعمل بكل تأكيد” وبصياغة أخرى: “المهمّ أنها تعمل” مقابل “المهمّ أن تكون صحيحة”. كل يوم تقريبًا أقرأ هذه العبارة وأشباهها في تعليقات المدونة: “ما الحاجة إلى مبادئ البرمجة كائنية التوجه إن كانت الشفرة البرمجية تعمل بشكل جيّد دون استخدامها؟ ما الهدف من إدخال طرق وأساليب جديدة يفترض بها أن تكون أفضل من سابقاتها، إن كانت الطريقة التقليدية الحالية - والتي تتوسط البرمجة الإجرائية وكائنية التوجه - تعمل جيّدًا؟” لنفكّر في الأمر من زاوية مختلفة، وننظر إلى الأمور على نحو أعمّ ونفكّر من ناحية تطوير البرمجيات لا من ناحية البرمجة كائنية التوجه. هناك الكثير من الأمثلة التي تنطبق عليها عقلية “المهمّ أنّه يعمل”. لنأخذ لغة Perl، وهي لغة برمجية تشتهر بقدرتها على القيام بأيّ شيء بثلاث طرق مختلفة، بمعنى أنّه لا وجود لطريقة واحدة صحيحة. لست خبيرًا في Perl، لذا فلنلق نظرة على شفرة Ruby التالية: if a > b m = 'Hello!' end يمكن كتابة الشفرة السابقة بهذه الطريقة أيضًا: m = if a > b 'Hello!' end أو هذه: m = 'Hello!' if a > b وإليك المزيد: m = a > b ? 'Hello' : nil أيّ الشفرات السابقة صحيحة؟ هل يمكن ﻷي مبرمج بلغة Perl أن يخبرنا بذلك؟ هل يمكن اقتراح طرق أخرى للوصول إلى نفس النتيجة؟ أما في لغة Java (وهي لغة أكثر صرامة من Ruby) فليس من المفاجئ أن تكون هناك طريقة واحدة للقيام بذلك: if (a > b) { m = "Hello!"; } أعتقد أنّني أخطأت، فهنالك طريقة ثانية: if (a > b) m = "Hello!"; ما الذي يمكن أن يجنيه المبرمجون من هذا التنوّع الكبير؟ أعتقد أن الإجابة تعتمد على كوننا نكتب الشفرة أم نقرؤها؟ كذلك يعتمد الأمر على موقفنا تجاه البرنامج الذي نعمل على إنشائه، فإما نرى بأنّه ملكنا (عقلية المخترق) أو أنّنا نبنيه وحسب (عقلية المصمّم). إن كنا نكتب الشفرة البرمجية، وكنا نرى أنفسنا أصحاب تلك الشفرة، فسنحتاج إلى ترسانة أسلحة التجميل اللغوي Syntactic sugar لنثبت لأنفسنا بأننا أذكياء، وبالتأكيد لنتباهى أمام أصدقائنا بمفسّر Ruby الكئيب. في المقابل، إن كنا نعدّ أنفسنا في عداد المصممين، فسنصاب بالانزعاج والإحباط عند قراءة شفرة برمجية مليئة بأساليب التجميل اللغوي والتي “تعمل دون مشاكل”. ربما يجب أن أقتصر في الحديث على نفسي، الواقع أنني متأكّد من أنني سأصاب بهذا الشعور. يمكن أن نعدّ صياغة لغة Ruby والتي تتيح هذا القدر الكبير من التجميل اللغوي مثالًا واضحًا على التناقض الحاصل بين مبدأي “المهمّ أن تعمل” و “المهم أن تكون جيدة”. إذ تتمثل فلسفة Ruby في أنّه لا أهمّية لطريقة كتابة الشفرة البرمجية ما دامت تؤدّي عملها المطلوب منها. أما فلسفة Java فمختلفة تمامًا، وهي أقرب ما تكون إلى: اكتب شفرة صحيحة وستعمل بالتأكيد. إضافة إلى ذلك، فإن نوع البيانات الضعيف والديناميكي Weak and dynamic type الذي تتمتع به لغة Ruby مقابل نوع البيانات الصلب والثابت Strong and static type في Java، يعدّ دليلًا آخر عمّا أتحدّث عنه. أرى عموما أنّه كلما زادت مرونة اللغة البرمجية، قلّت قابلية صيانة الشفرة المكتوبة بها، وبمعنى آخر فإن الجودة الأعلى تأتي من اللغات الأبسط. وهذا الأمر ينطبق كذلك على عملية تطوير البرمجيات: فكلما زادت القيود المفروضة على المبرمجين وقلّت الخيارات المتاحة أمامهم في طريقة كتابة الشفرة البرمجية، زادت جودة البرنامج المكتوب بتلك اللغة. تحاول المحلّلات الساكنة Static analyzers مثل Checkstyle في لغة Java أو Rubocop في لغة Ruby حلّ هذه المشكلة وذلك بمنعنا من استخدام خصائص معيّنة في اللغة البرمجية، ولكنّها لا تقدّم نتائج جيّدة لأنّنا مبدعون في كتابة الشفرات بأساليب وأشكال متنوعة. لنعد الآن إلى السؤال الخاص بالبرمجة كائنية التوجه: ما الحاجة إلى تطوير أي شيء إن كان يؤدي عمله بهيئته الحالية؟ الجواب: البرمجة كائنية التوجه الحديثة (كما في Java، Ruby و ++C) لا تنتج شفرة برمجية ذات جودة عالية لأنّها لا تتبع تصوّرا برمجيًّا Paradigm قويًا ومقيّدًا بشكل ملائم. كل ما في الأمر أنّها توفّر الكثير من “الميزات” التي أدخلتها في الغالب ++C وبقيت فيها لأجل منفعتنا المتبادلة. هذه اللغات تعمل بالفعل، ولكنّ قابلية صيانة البرامج التي ننتجها بهذه اللغات تكون منخفضة للغاية. الواقع أن قابليّة الصيانة هذه أقل بكثير ممّا كان سيكون عليه الحال لو كان “إبداعنا” مقيّدًا. ترجمة - وبتصرّف - للمقال Flexibility Equates to Lower Quality لصاحبه Yegor Bugayenko.
  2. قبل عشرين عامًا، كان المبرمج الجيّد هو ذلك الذي يكون قادرًا على أن يحشر تطبيقًا كاملًا في ملف بامتداد .COM وبحجم 64 كيلوبايت، أما من كان قادرًا على الإتيان بأفضل أداء مع معالج Intel 80386 الضعيف فكان يعدّ واحدًا من أساطين عالم البرمجة. سبب ذلك أنّ الحواسيب كانت في تلك الفترة غالية ومكلفة في حين أن أجور المبرمجين كانت زهيدة، وكانت تلك فترة “عقلية المخترق Hacker mentality”، وقد ولّى ذلك الزمن من غير رجعة، ولم تعد هذه العقلية تلقى أي قبول أو احترام في وقتنا الحاضر، ذلك لأنّ حالة السوق اليوم على النقيض تمامًا. فاليوم أصبحت الحواسيب رخيصة الثمن وأجور المبرمجين مرتفعة، ودخلنا في عصر جديد تسود فيه “عقلية المصمم Designer Mentality” حيث تكون مقروئية الشفرة البرمجية أهمّ بكثير من أدائها. الأسعار مقابل المرتّبات انظر إلى هذا الرسم البياني. يمثّل هذا الرسم البياني مقارنة بين نوعين من التوجهات خلال العقدين الماضيين (1994-2014). ويمكنك أن تلاحظ أن التوجّه الأوّل في تضاؤل تدريجي حيث تصبح ذواكر الحواسيب وأقراص التخزين الصلبة أرخص ثمنًا مع تقدم الزمن. أما التوجّه الثاني فيبين كيف أنّ مرتّبات مطوري البرمجيات في تصاعد مستمر خلال الفترة ذاتها - تضاعفت ثلاث مرّات إن توخّينا الدقة -. ومع أنّي لم أعثر على تقرير رسمي حول هذا الموضوع، إلا أنّي متأكّد بأنّه ليس خافيًا على أحد أنّ مرتّبات المبرمجين في تصاعد مستمر، إذ لم تعد وظيفة مطوّر رئيسي براتب 200,000 دولار في السنة وظيفة الأحلام، في حين أنّ أفضل العروض كانت تصل إلى 60,000 دولار قبل عشرين عامًا. هذا يعني أنّ نفقات إنشاء موقع إلكتروني بلغة PHP سنة 1994 أكثر بـ 1000 مرة من نفقات شراء الأجهزة سنة 2014، وأقلّ بثلاث مرات من نفقات المبرمجين، مع الأخذ بالاعتبار أنّنا نستخدم التكنولوجيا ذاتها، إذ لا نزال نستخدم نظام Linux مع خادوم Apache. الفرق هنا أنّه في سنة 1994 إن كان تطبيقك يواجه مشاكل في الأداء بسبب محدودية الأجهزة، فإنّك ستدفع 35,000 دولار مقابل كل غيغابايت من الذاكرة العشوائية، أما في 2014 فستدفع 10$ فقط. في سنة 1994 كان توظيف المزيد من المبرمجين بهدف تحسين الشفرة البرمجية أو حتى إعادة كتابتها أفضل وأجدى من شراء أجهزة ومعدّات جديدة، أمّا في سنة 2014 فقد انعكست الأمور تمامًا، فقد أصبحت مضاعفة حجم الخادوم أرخص بمرتين (خصوصًا إن كان الخادوم عبارة عن سحابة افتراضية) من أجور تحسين الشفرة البرمجية. في سنة 1994 كان أفضل المبرمجين والمهندسين هم أولئك الذين يمتلكون “عقلية المخترق” أما في 2014 فالتقدير أصبح من نصيب كل من يملك “عقلية المصمم”. عقلية المخترق لو سألت صاحب عقلية المخترق عن رأيه في دالة توليد متسلسلة فابيوناتشي هذه والمكتوبة بلغة Java لأجابك بأنّها “شفرة أنيقة” (هل تظنّ ذلك؟): public int f(int n) { return n>2?f(n-1)+f(n-2):n; } عادة ما يتّصف المخترق الجيّد بالصفات التالية: يستخدم جميع الخصائص المعروفة - وغير المعروفة - في لغة البرمجة التي يستخدمها. الناس عنده صنفان: مخترق ومبتدئ، وهو يكتب الشفرات للمخترقين فقط. يشعر بالملل والإحباط من اتباع القواعد والمعايير. لا يكتب اختبارات الوحدة Unit tests فالمبرمجون الثانويون سيقومون بهذا الأمر لاحقًا. يستمتع بأداء المهام الصعبة، فهكذا تظهر موهبته للعلن. يفضّل استقاء وظائف التطبيق من النقاشات الجانبية على تنفيذ ما يرد في مستند المواصفات Specifications، فذلك أكثر متعة. لا يتحمّل رؤية شخص يجري التعديلات على الشفرة التي كتبها. يفضّل أن يكرّس جهده في مشروع واحد فقط. المخترق شخص موهوب، ويرغب في التعبير عن هذه الموهبة في البرامج التي يكتبها، ويستمتع بهذا الأمر ويقوم به غالبًا بدافع المتعة لا أكثر. يمكن القول إنّه مرتبط بالشفرة التي يكتبها ولا يمكنه تخيّل حياة سعيدة بعد الانفصال عنها، ويشعر المخترق بأنّ الشفرة ملكه وحده ولا يستطيع التفكير بالأمر من منظور آخر. وعندما أتوجه بالسؤال التالي إلى أحد أصدقائي المخترقين: “من سيفهم العمل الذي ستؤدّيه هذه الشفرة؟” يكون الجواب الذي أسمعه بصورة شبه دائمة: “سيسألونني!” - عادة ما ترافق الإجابة نبرة استعلاء مصحوبة بابتسامة صادقة. عقلية المصمّم أما صاحب عقلية المصمّم فسيعيد ترتيب الشفرة السابقة لجعلها سهلة القراءة، وستكون “الشفرة الأنيقة” في نظره بالصورة التالية (ما رأيك أنت؟): public int fibo(final int pos) { final int num; if (pos > 2) { num = fibo(pos - 1) + fibo(pos - 2); } else { num = pos; } return num; } أعتقد أن المصمّم الجيّد يمتاز بالصفات التالية: يميل إلى استخدام تقنيات برمجية تقليدية. يفترض أن جميع الأشخاص مبتدئون ويكتب شفراته على هذا الأساس. يستمتع بوضع القواعد واتباعها. يفضّل الاعتماد على مستند المواصفات بدلا من الأحاديث الجانبية، كما يفضّل أتمتة المهامّ ما أمكن ذلك. تأخذ اختبارات الوحدة معظم وقته. لا يطيق المهام الصعبة والعمل الإضافي. يحب كثيرًا أن يعدّل الآخرون شفرته البرمجية ويحسّنوها. يعمل على عدد من المشاريع في نفس الوقت. المصمّم شخص يمكن أن يتأقلم بسهولة كبيرة مع فريق العمل، وبوسعه المساهمة بفعّالية في طريقة عمل الفريق والمعايير والقواعد والثقافة التي يتّبعها، ويتّسم المصمّم بانضباط كبير إلى جانب مساهمته الكبيرة في الشفرات المصدرية، ويحرص دائمًا على استمرارية عمل شفرته وأفكاره بعد انتهائه من المشروع الذي بين يديه. يصل المصمّم الجيّد إلى أقصى مراتب السعادة عندما يرى أن شفرته قد دخلت في دورة حياتها الطبيعية: التعديل والتحسين والتنقيح والتوقف في نهاية المطاف. ويشعر المصمّم بأن الشفرة التي يكتبها هي أحد أبنائه، وإن أصبح هذا الابن قادرًا على التحدّث والحركة، فعليه أن يعيش حياته الخاصة. المستقبل إن كنت تعتبر نفسك مخترقًا، فأعتقد أنّه قد حان وقت التغيير، فعصر المخترقين في أفول. قد نتوقّف عن التفكير في المستقبل القريب بمنطق “الأجهزة” وستعمل تطبيقاتنا على منصّات حاسوبية مرنة تتمتع بذاكرة وقوة معالجة وسعة تخزينية غير محدودة. وبكل بساطة، سننفق أموالنا في الاستفادة من الموارد وستكلّف أي مشكلة في الأداء القليل من الدوﻻرات الإضافية في فواتيرنا الشهرية، ولن نعبأ بمسألة تحسين الشفرة على الإطلاق. وفي الوقت نفسه، سيتطلّب التعامل مع مهندس للبرمجيات أموالًا أكثر، وقد يطلب 500$ أو أكثر للساعة الواحدة مقابل تفحّص البرنامج وتشخيص المشكلة، كما هو الحال مع المحامين وأطباء الأسنان. هذا هو السبب الذي يدفع المستثمرين في بناء برنامج جديد إلى وضع جلّ اهتمامهم في مسألة قابلية المنتج للصيانة Maintainability. وسيدرك مموّلو المشاريع أن أفضل منتج يمكن الحصول عليه مقابل أموالهم هو ذلك المنتج الذي يتمتع بأعلى قدر من المقروئية وقابلية الصيانة والأتمتة، وليس أعلى قدر من السرعة. ترجمة - وبتصرّف - للمقال Are You a Hacker or a Designer? لصاحبه Yegor Bugayenko. حقوق الصورة البارزة محفوظة لـ Freepik
  3. قد يكون تقديم الاستشارات وسيلة ممتازة لتمويل شركتك الناشئة أو للحصول على بعض الأرباح، فالأمر سهل للغاية، وكلّ ما عليك فعله هو تحديد الأجور المطلوبة والبدء بالعمل. ولكن بعد فترة وجيزة ستلاحظ أنّ هناك الكثير من ساعات العمل التي يمكن أن تدرّ عليك المزيد من الأموال، ولربما تدفعك هذه الملاحظة إلى توسيع العمل، فتوظّف شخصًا ما مقابل 30 دولارا للساعة، وتعدّل الأجر الذي تطلبه إلى 60$. أرباح سهلة، أليس كذلك؟. في الواقع، لا تجري الأمور بهذه البساطة، وسأبيّن لك فيما يلي ما سيحدث على أرض الواقع، وسأقدّم إليك بعض النصائح لتجنب ذلك. مضاعفة الأجور لا يعني شيئًا لنفترض أنّك وظّفت شخصا براتب 60,000$ في السنة. عدد ساعات العمل في السنة الواحدة هو 2,000 ساعة (50 أسبوعًا × 40 ساعة في الأسبوع)، ويبقى أسبوعان للإجازات، وبهذا يكون أجر الساعة: الأجر الاسمي: 30$ للساعة إن أعدنا الحسبة باعتبار أيام العمل، فهناك 250 يوم عمل في 50 أسبوعًا. العطل الرسمية في الولايات المتحدّة هي 10 أيام، وهذا يعني أنّ عدد أيام العمل يصبح 240 يومًا. والآن إن أعدنا حساب كلفة الساعات نحصل على: 20 يوم عمل في الشهر، 31$ للساعة. تختلف القوانين والضرائب المفروضة على التوظيف في الولايات المتحدة الأمريكية بين ولاية أخرى، ولكن القاعدة العامة هي دفع 15% في الضرائب التي تشمل الرعاية الصحية والضمان الاجتماعي. سيؤدي هذا إلى تغيير الراتب السنوي لموظّفك من 60,000، ولكنّك ستستثقل دفع المال في الأيام التي لا يوجد فيها عمل. هل تقديم الاستشارات بهذا السوء؟ تقديم الاستشارات من الأعمال المدرّة للأرباح وهي كذلك طريقة ذكية لتمويل الشركة الناشئة ذاتيًا. لا يتطلّب تحقيق النجاح في هذا المجال سوى تجاوز هذه العقبات. فعلى سبيل المثال، أنت تعلم جيّدًا أنّ من الضروري أن تحاسب موظّفيك مقابل 40 ساعة كاملة من العمل، لذا عوّد نفسك على متابعة ساعات العمل كل أسبوع لتتأكد من عدم وجود تأخير من قبل أحد الموظفين، كذلك لا تنسَ تقديم بعض الحوافز للموظفين وشاركهم الأرباح عندما يبذلون جهودًا إضافية في العمل. تقديم الاستشارات عمل صعب، ولا تجني معظم شركات تقديم الاستشارات الكثير من الأرباح، ومن النادر جدًّا أن تجد شركة تلتزم بإطلاق منتج ناجح كانت قد طوّرته في فترات انقطاع العمل. لذا إن كنت ترغب في تحقيق النجاح، يجب عليك أن تكون جادًّا وملتزمًا وأن لا تستسلم على الإطلاق، وستتمكن من ذلك بكل تأكيد. وإن حدث ذلك، فستكون قد نجحت في تحقيق التمويل الذاتي لشركتك الناشئة، وحصلت على عمل يضمن لك مصاريف المعيشة، وأبعدت عن شركتك الناشئة الكثير من المشاكل الناجمة عن الاعتماد على المنتج حصرًا، إضافة إلى تأسيس فريق عملٍ متميّز. هل لديك أي خبرة في هذا المجال، شاركنا نصائحك وخبراتك في التعليقات. ترجمة - وبتصرّف - للمقال The unfortunate math behind consulting companies لصاحبه Jason Cohen. حقوق الصورة البارزة محفوظة لـ Freepik
  4. تتمتع جميع أنظمة التشغيل المعروفة بخاصية تعدد المستخدمين، ويقدّم نظام Microsoft Windows 10 مجموعة من الخيارات التي تساعد على تخصيص تجربة استخدام النظام لكل مستخدم، فيمكن مثلًا إنشاء حسابات خاصة لكل فرد من أفراد العائلة ليتمتع كل واحد منهم بتجربته الخاصة في استخدام النظام، إذ يمكن لكل فرد أن يختار إعدادات سطح المكتب الخاصة به كخلفية الشاشة وشاشة التوقف وغير ذلك. ولكن قبل الحديث عن إدارة المستخدمين في نظام ويندوز يجب علينا التعرّف على أنواع الحسابات التي يقدّمها هذا النظام وخصائص كلّ منها. أنواع الحسابات في نظام ويندوز يقدّم نظام ويندوز نوعين أساسين من الحسابات هما: حساب المستخدم العادي Standard User Account، حساب المستخدم المدير Adminstrator User Account. 1. حساب المستخدم العادي هذا الحساب هو الحساب المبدئي في نظام ويندوز، ويمكّن هذا الحساب المستخدمين من أداء المهام اليومية وذلك من خلال السماح بتشغيل البرامج وإنشاء الملفات والمستندات وتعديل بعض الإعدادات البسيطة في النظام، وعادة ما تكون هذه التعديلات مقتصرة على حساب المستخدم، ولا تأثير لها على الحسابات الأخرى، إضافة إلى عدم إمكانية إجراء تعديلات على مستوى النظام كتثبيت برامج جديدة مثلًا. في ما يلي بعض الصلاحيات الممنوحة لحساب المستخدم العادي: تغيير الإعدادات الشخصية للمستخدم، مثل خلفية سطح المكتب، كلمة المرور، أصوات النظام، وشاشة التوقف. التعامل مع الوسائط المحمولة مثل ذاكرة الفلاش وأقراص CD و DVD والبلوتوث. الاتصال بالشبكات السلكية واللاسلكية. استخدام سطح المكتب البعيد Remote Desktop (في حال توفّره) للاتصال بحواسيب بعيدة. 2. حساب المستخدم المدير يقدّم هذا النوع من الحسابات - كما هو واضح من اسمه - صلاحيات أوسع بكثير من النوع السابق، إذ يمكن لصاحب هذا الحساب أن يجري تعديلات كبيرة على مستوى النظام وأن يثبت برامج جديدة، إضافة إلى القدرة على إنشاء وتعديل حسابات المستخدمين الآخرين وتحديد الصلاحيات الممنوحة لكل مستخدم. إليك جزءًا من الصلاحيات الممنوحة لهذا الحساب: تثبيت برامج جديدة على جهاز الحاسوب. إضافة أجهزة جديدة وتثبيت تعريفاتها Drivers في الجهاز. ضبط عملية التحديث التلقائي للنظام. الوصول إلى ملفات النظام وإجراء التعديلات عليها. ضبط وتهيئة الجدار الناري Firewall لنظام ويندوز. إجراء عملية النسخ الاحتياطي للنظام واستعادة النسخ الاحتياطية السابقة. إنشاء وتعديل وحذف حسابات المستخدمين والتحكم في الصلاحيات الممنوحة لكل حساب. إنشاء الحسابات في نظام ويندوز بعد أن تعرفنا على أنواع الحسابات التي يوفّرها نظام ويندوز، سنشرع بالحديث عن كيفية إنشاء هذه الحسابات وكيفية إدارتها. الحساب الأول عند تثبيت نظام ويندوز سيطلب منك النظام إدخال اسم وكلمة مرور. سيستخدم النظام هذه المعلومات لإنشاء أول حساب لك في نظام ويندوز من نوع حسابات المدير. إن كنت أنت الشخص الوحيد الذي يستخدم جهاز الحاسوب، فعلى الأرجح أنّك لن تجد حاجة إلى إنشاء حسابات أخرى، ولكن يمكنك من خلال هذا الحساب إنشاء حسابات جديدة، وبعد إنشائها يمكنك إجراء التعديلات ومنح الصلاحيات التي تريدها لكل حساب، كذلك يمكنك حذف الحسابات الموجودة حسب الحاجة. إنشاء حساب جديد في ويندوز لتنشئ حسابًا جديدًا في ويندوز توجّه إلى الإعدادات Settings من قائمة ابدأ Start. انقر على أيقونة الحسابات Accounts. انقر على العائلة وأشخاص آخرون Family and other users في القائمة الجانبية. انقر على أيقونة إضافة شخص آخر إلى الحاسوب Add someone else to this PC. في النافذة المنبثقة انقر على ليست لديّ معلومات تسجيل الدخول الخاصّة بهذا الشخص I’dont have this person’s sign-in information. انقر على إضافة مستخدم بدون حساب مايكروسوفت، Add a user without a Microsoft account. ادخل المعلومات المطلوبة (الاسم، كلمة المرور، وعبارة تساعد تذكر كلمة المرور)، ثم اضغط على زرّ التالي Next، وبهذا يُنشَأ حساب جديد في نظام ويندوز 10. يطلق نظام ويندوز 10 على الحساب الجديد اسم حساب محلّي Local account والمقصود أنّ هذا الحساب غير مرتبط بحساب Microsoft (سنتحدث عن حسابات Microsoft بعد قليل). يفتقر الحساب المحلي إلى بعض الميزات، إذ ليس بالإمكان مزامنة الملفات عبر الأجهزة التي تعمل بنظام ويندوز 10، كذلك لا يمكن إضافة الحسابات العائلية إلى النظام (سنتطرق إلى هذه التفاصيل في مقال منفصل)، ولن تستفيد من كورتانا Cortana المساعد الرقمي الخاصّ بويندوز، ولن تكون قادرًا على تحديد موقع جهازك في حال فقدانه. تحويل الحساب الجديد إلى حساب المدير تكون جميع الحسابات الجديدة التي تنشئها في ويندوز 10 من النوع العاديّ، وهذا يعني أنّ المستخدم الجديد سيكون محدود الصلاحيات، ولن يكون قادرًا على القيام بالكثير من الأمور إلا بإدخال كلمة المرور الخاصّة بالمستخدم المدير. ولكي تمنح صلاحيات المدير إلى المستخدم الجديد يجب عليك تحويل حسابه إلى حساب مدير، وذلك باتباع الخطوات التالية. توجّه إلى الإعدادات Settings من قائمة ابدأ Start ثم توجّه إلى الحسابات Accounts. بعد ذلك انقر على أيقونة العائلة وأشخاص آخرون Family and other users في القائمة الجانبية. عند النقر على الحساب الذي ترغب في تحويله إلى مدير تظهر أيقونتان اختر منهما تغيير نوع الحساب Change account type. اختر المدير Administrator من القائمة المنسدلة واضغط على موافق OK. حذف الحسابات يمكنك حذف الحسابات التي أنشأتها مسبقًا من خلال النقر على الحساب المراد حذفه ثم النقر على زرّ حذف Remove. تغيير الصورة الشخصية يتيح نظام ويندوز تغيير الصورة الشخصية المرتبطة بالحساب، وذلك إما بالتقاط صورة بواسطة كاميرا الجهاز أو اختيار صورة مخزّنة في الحاسوب. ولتغيير الصورة الشخصية توجّه إلى الإعدادات ثم الحسابات وانقر على زرّ معلوماتك Your info. انقر على زرّ الكاميرا Camera لتشغيل كاميرا الجهاز والتقاط الصورة الشخصية، أو انقر على ابحث عن صورة Browse for one لاختيار صورة مخزّنة في الجهاز. تغيير كلمة المرور الخاصة بحساب معين لتغيير كلمة المرور الخاصة بحساب معين يجب تسجيل الدخول إلى ذلك الحساب. توجه إلى الإعدادات Settings ثم انقر على زرّ الحسابات Accounts، وانقر على زرّ خيارات تسجيل الدخول Sign-in options. يقدّم نظام ويندوز 10 أساليب مختلفة لتأمين حسابك، فإلى جانب كلمة المرور التقليدية، يمكن تأمين الحساب بواسطة خدمة Windows Hello حيث يمكنك تسجيل الدخول بعد أن يتعرّف النظام على وجهك من خلال كاميرا الجهاز. كذلك يمكن استخدام رمز PIN للولوج إلى النظام، أو استخدام كلمة المرور الصورية Picture password، حيث تخصّص صورة تظهر عند رغبتك في الولوج إلى النظام، ومن خلال رسم أشكال وخطوط محدّدة على تلك الصورة، يكون بمقدورك تسجيل الدخول، وهذه الطريقة مفيدة في الأجهزة التي تدعم خاصية اللمس. لتغيير كلمة المرور انقر على زرّ تغيير Change في قسم كلمة المرور Password. اكتب كلمة المرور الحالية في النافذة المنبثقة. ثم اكتب كلمة المرور الجديدة. حسابات Microsoft إن كنت تستخدم إحدى خدمات Microsoft، مثل Outlook.com، Hotmail، Skype، OneDrive وغيرها فأنت تمتلك بالفعل حساب Microsoft. ويمكن الاستفادة من هذا الحساب في الوصول إلى تطبيقاتك في متجر ويندوز Windows Store ومزامنة إعداداتك على جميع أجهزتك التي تعمل بنظام ويندوز 10. إن كنت لا تملك حساب Microsoft فيمكنك التوجّه إلى العنوان www.hotmail.com وإنشاء حساب جديد. بعد ذلك توجّه إلى الإعدادات ثم الحسابات ثم انقر على زرّ معلوماتك Your info في القائمة الجانبية. بعد ذلك انقر على تسجيل الدخول بواسطة حساب مايكروسوفت Sign in with a Microsoft account insted، لتظهر النافذة التالية. أدخل المعلومات المطلوبة في هذه النافذة ثم اضغط تسجيل الدخول Sign in. قد يطلب منك النظام إدخال كلمة المرور التي تستخدمها حاليًا؛ لذا أدخلها واضغط على زرّ التالي Next. بعد تسجيل الدخول بواسطة حساب Microsoft، يمكنك اختيار الإعدادات التي ترغب في مزامنتها عبر الأجهزة التي تستخدمها والتي تعمل بنظام ويندوز 10، وذلك بالتوجّه إلى الإعدادات ثم الحسابات ثم النقر على زرّ زامن إعداداتك Sync your settings. يمكنك الآن تحديد الإعدادات التي ترغب في مزامنتها مثل سمة النظام Theme، وإعدادات المتصفح وكلمات المرور واللغة وغيرها.
  5. بناء المواقع الإلكترونية أمر ممتع ومحبط في نفس الوقت، وعادة ما يكون سبب الإحباط هو السعي لتوحيد مظهر وأداء الموقع الإلكتروني في جميع المتصفحات، ولا شكّ أن مصمّمي الواجهات الأمامية قد مرّوا بحالة الإحباط هذه بشكل أو بآخر. ولكن الحقيقة تقول بأنه ما من ضرورة تدعو إلى توحيد مظهر وأداء الموقع الإلكتروني على جميع المتصفحات، فطريقة عمل الموقع في كل متصفّح عائدة إلى المبرمج وإلى طبيعة الموقع الإلكتروني. فإن كان الموقع يستقبل أقلّ من نصف نسبة الزوّار من خلال Internet Explorer 8 فقد يكون من المعقول حينئذٍ صرف النظر عن هذا المتصفح، أما لو كان نصف الزوّار يستخدمون هذا المتصفح وكانت هذه الزيارات تدرّ أموالًا كثيرة، فسيكون دعم هذا المتصفح حينئذٍ أمرًا إلزاميًا. من هنا يجب تحديد ما هو مقبول بالنسبة لموقع إلكتروني معين والعمل بموجب ذلك. يوجد عدد من الممارسات الجيدة التي تتيح للموقع الإلكتروني أن يعمل على نحو جيّد في جميع المتصفحات. ينصح عادة بتوفير الدعم التراجعي Fallback support عند استخدام خصائص CSS 3 وذلك لدعم المتصفحات القديمة، وهناك تقنيات أخرى مثل الـ Shivs و Polyfills وهي عبارة عن ملحقات JavasScript صغيرة تضيف الدعم لعدد من المزايا المطلوبة التي لا تدعمها المتصفحات القديمة مبدئيًّا. HTML Shiv أحد أشهر الملحقات التي تقدّم الدعم التراجعي هو HTML5 Shivs، وقد أنشأ Remy Sharp هذا الملحق لإتاحة استخدام عناصر HTML 5 في Internet Explorer 8 وما قبله، ولا يكتفي هذا الملحق بتوفير الدعم لعناصر HTML5 فقط، بل يتجاوز ذلك إلى إمكانية تنسيقها بواسطة CSS. يجب تنزيل آخر إصدار من هذا الملحق من Google حيث يحتفظ Remy بآخر الإصدارات، ثم ضيافتها على الخادوم الخاص بك. وللحصول على أفضل أداء يفضّل الإشارة إلى ملف JavaScript الخاص بالإضافة في بداية الصفحة ضمن الوسم <head>، مباشرة بعد الإشارة إلى ملفات CSS. كذلك يجب وضع شفرة جلب الإضافة ضمن تعليق مشروط لتضمن تنزيل الملفات في الإصدار الثامن من Internet Explorer وما دونه. <!--[if lt IE 9]> <script src="html5shiv.js"></script> <![endif]--> وبعد إنشاء عناصر HTML5 الجديدة في مستوى Block باستخدام HTML5 Shiv يجب تحديد وتحديث تلك العناصر بواسطة التصريح display:block. article, aside, details, figcaption, figure, footer, header, hgroup, nav, section, summary { display: block; } لا يعرّف الإصداران الثامن والتاسع من Internet Explorer أنماط بعض عناصر HTML5 بطريقة صحيحة في مستوى Inline-block، لذا تجب إضافة التصريح display: inline-block إلى هذه العناصر. بهذا يمكنك استخدام أي عنصر من عناصر HTML5 في جميع إصدارات Internet Explorer. audio, canvas, video { display: inline-block; } ما الفرق بين Shiv و Shim قد تسمع أو تقرأ في بعض المواقع عن HTML5 Shim، وقد تتساءل إن كان هناك فرق بينها وبين HTML5 Shiv. في الواقع لا يوجد أي فارق يذكر بين هذين المصطلحين، وكلاهما يستخدمان للتعبير عن المعنى ذاته. الكشف عن المزايا المتاحة في المتصفح تؤدي HTML5 Shiv عملًا جيّدًا مع التعليقات المشروطة في تعريف المتصفح بخصائص HTML5 وعناصرها الجديدة، ولكن باستخدام هذه الطريقة فإنك تحدّد مسبقًا المتصفح الذي لا يدعم هذه الخصائص. هناك طريقة أخرى لتوفير الدعم لعناصر وخصائص معينة في HTML5 و CSS3 بغض النظر عن المتصفح المستخدم. توفّر مكتبة Modernizr وسيلة للكشف عن ميزات المتصفح من خلال كتابة شفرات CSS و JavaScript مشروطة بالاستناد إلى دعم المتصفح لخاصّية معينة أم لا. فعلى سبيل المثال، إن كان أحد المتصفحات يدعم خاصّية الأركان الدائرية فستقوم Moderinzr بإضافة الصنف borderradius إلى عنصر html. أما إن كان المتصفح لا يدعم هذه الخاصّية، تقوم مكتبة Modernizr بإضافة الصنف no-borderradius إلى عنصر html. تنزيل مكتبة Modernizr لتشغيل مكتبة Modernizr في موقعك توجّه إلى صفحة التنزيل الخاصة بالمكتبة حيث يمكنك اختيار الخصائص التي ترغب في الكشف عنها. بعد تنزيل المكتبة ارفعها إلى الخادوم الخاص بك ثم أشر إلى الملف ضمن الوسم head في صفحة HTML مباشرة بعد آخر إشارة لملفات الأنماط. من الجدير بالذكر أنّه يمكن تخصيص Modernizr لتتضمن HTML5 Shiv، وبهذا لا حاجة للإشارة إليها في بداية Modernizr. <script src="modernizr.js"></script> التطبيق الشرطي لأنماط CSS بمجرد أن تبدأ مكتبة Modernizr بالعمل يصبح بالإمكان تطبيق أنماط CSS بالاعتماد على وجود أو عدم وجود خصائص معينة في المتصفح الذي يعرض الموقع الإلكتروني. تستطيع Modernizr الكشف عن معظم الخصائص والقيم التي تقدّمها CSS3 ويمكنك التعرّف عليها من خلال توثيقات المكتبة على شبكة الإنترنت. يجدر الانتباه إلى أنّه قد يكون من غير الضروري الكشف عن الخصائص المتعلقة ببعض الأنماط، فعلى سبيل المثال عندم استخدام قيمة لون بصيغة RGBa يمكن تقديم دعم تراجعي لهذه القيمة من خلال توفير قيمة اللون بصيغة hexadecimal دون الحاجة إلى اللجوء لتقنية الكشف عن الخصائص. عندما تقرّر استخدام تقنية الكشف عن الخصائص من الضروري أن تحافظ على تنظيم الشفرات وأن تراعي مسألة الأداء. تجنّب قدر الإمكان تكرار الشفرة لأكثر من مرة أو إنشاء طلبات HTTP إضافية. button { border: 0; color: #fff; cursor: pointer; font-size: 14px; font-weight: 600; margin: 0; outline: 0; } /* With CSS Gradient Styles */ .cssgradients button { border: 1px solid #0080c2; background: linear-gradient(#00a2f5, #0087cc); border-radius: 6px; padding: 15px 30px; } .cssgradients button:hover { background: linear-gradient(#1ab1ff, #009beb); } .cssgradients button:active { box-shadow: inset 0 1px 10px rgba(255, 255, 255, .5); } /* Without CSS Gradient Styles */ .no-cssgradients button { background: transparent url("button.png") 0 0 no-repeat; padding: 16px 31px; } .no-cssgradients button:hover { background-position: 0 -49px; } .no-cssgradients button:active { background-position: 0 -98px; } في المثال السابق تمكن ملاحظة أن الزرّ يرث أنماطًا مبدئية، ولكن الأنماط المخصّصة تطبّق بالاستناد إلى دعم المتصفح لخاصية الخلفية المتدرّجة في CSS3، إضافة إلى خاصيتيْ الأركان الدائرية والظلال. إن كان المتصفح يدعم هذه الخصائص، فسيحصل الزرّ على خلفية متدرجة وعلى ظلّ وحواف دائرية، أما في حال عدم دعم المتصفح لهذه الخصائص فيحصل الزرّ على صورة خلفية تتضمن جميع هذه التأثيرات. بهذه الطريقة لا توجد شفرات زائدة ولا يُرسَل طلب HTTP إلا عند الحاجة. عند العمل مع تقنية الكشف عن خصائص CSS3 يكون من الصعب تخمين مظهر عنصر معين في المتصفحات التي لا تدعم الخصائص الجديدة، ولحسن الحظ هناك أداة تدعى deCSS3 تعمل على تعطيل جميع خصائص CSS3 في الصفحة ما يسمح لك بالتعرف على مظهر موقعك الإلكتروني عندما لا تُستخدَم CSS3، إضافة إلى اختبار الأنماط المشروطة المستخدمة في الموقع. لتحصل على فكرة سريعة عن الخصائص والميزات التي يدعمها متصفّح معين،زر الموقع haz.io باستخدام ذلك المتصفح. التنزيل الشرطي للملفات إضافة إلى التنزيل الشرطي للأنماط، تقدّم مكتبة Modernizr وسيلة لاستخدام تقنية الكشف عن الخصائص في JavaScript، حيث يصبح بالإمكان تنزيل ملفات الـ Polyfills وغيرها من الملفات بالاستناد إلى وجود خاصية معينة والاستعانة بمكتبة jQuery وتابع getScript الخاص بهذه المكتبة. يمكن استخدام مكتبة Modernizr في العبارات الشرطية وذلك لتشغيل شفرات متنوعة اعتمادًا على تحقق الشرط أو عدمه. في المثال التالي تتحقّق Modernizr من دعم المتصفح لخاصية التخزين المحلي Local storage. إن كانت هذه الخاصّية متوفرة في المتصفح، يُنزَّل الملف storage.js باستخدام jQuery وتابع getScript، أما إن كانت هذه الخاصّية غير مدعومة في المتصفح فيُستعان بـ jQuery لتنزيل ملف storage-polyfills.js وبواسطة التابع ذاته. $(document).ready(function() { if (Modernizr.localstorage) { // التخزين المحلّي متوفّر jQuery.getScript('storage.js'); } else { // التخزين المحلّي غير متوفّر jQuery.getScript('storage-polyfill.js'); } }); التنزيل الشرطي بالاستناد إلى استعلام الوسيط Media Query استعلامات الوسائط Media queries من الأمور المهمّة التي يمكن لـ Modernizer الكشف عن وجودها ، حيث يمكن تنزيل الملفات فقط في حال تحقق الشروط الخاصة باستعلام الوسائط. تجنّب تنزيل الملفات غير الضرورية من الأمور المفيدة جدًّا في تحسين أداء الصفحة. $(document).ready(function() { if (Modernizr.mq('screen and (min-width: 640px)')) { jQuery.getScript('tabs.js'); } }); تتحقق Modernizer في المثال الموضح أعلاه ممّا إذا كان عرض الشاشة أكبر من 640 بكسلًا، أي شاشات حواسيب سطح المكتب بصورة رئيسية، ثم تُنزِّل ملف tabs.js بالاعتماد على تحقق الشرط. من الضروري الانتباه إلى أن التحقق من هذا الشرط يتم مرة واحدة فقط وذلك عند تنزيل الصفحة، وهذا يعني أنّه لن يُتحقَّق من هذا الشرط عندما يغيّر المستخدم حجم الصفحة، وإن تطلب الأمر إعادة التحقق من جديد، فيجب استخدام شفرة JavaScript إضافية للقيام بذلك. التشغيل الشرطي للشفرات يمكن التحقق من جميع الخصائص التي تقدّمها HTML5 و CSS3 باستخدام Modernizr ومن خلال JavaScript. فعلى سبيل المثال، يستحسن تعطيل عمل التلميحات Tooltips في أجهزة الهاتف المحمول نظرًا لعدم توفّر التحليق Hover في هذه الأجهزة، والاستعاضة عن ذلك بعرض التلميحات على هيئة نصوص صرفة. يمكن تغليف الشفرة المسؤولة عن استدعاء التلميحات بعبارة شرطية تمنع تنزيل الشفرة عند استعراض الموقع في الشاشات الصغيرة. $(document).ready(function() { if (Modernizr.mq('screen and (max-width: 400px)')) { $('.size').text('small'); } }); يوضح المثال السابق على نحو مبسط طريقة تنفيذ شفرة JavaScript بالاستناد إلى شرط وضعته Modernizr. إن كان عرض الشاشة عند تنزيل الصفحة أكبر من 800 بكسل فلن يحدث شيء. ولكن إن كان عرض الشاشة أصغر من هذا الرقم تُبْدَل ‘large’ بكلمة ‘small’. HTML5 و CSS3 Polyfills تتوفّر في الوقت الحاضر polyfills لمختلف مزايا HTML5 وCSS3 تقريبًا، وقد وفّر الفريق المسؤول عن تطوير Modernizr قائمة مفصّلة بالـ polyfills المتوفّرة، والتي يمكن استخدامها حسب الحاجة. كذلك وضع نفس الفريق قائمة بجميع ميزات HTML5 و CSS3 الجديدة إضافة إلى تعليمات استخدام هذه الميزات بصورة صحيحة. يجب الانتباه إلى أنّه لا تحتاج جميع هذه الميزات إلى الـ Polyfills، إذ يمكن الاستفادة من بعضها مباشرة أو من خلال الدعم التراجعي. اختبار الموقع في متصفحات مختلفة ربّما تكون عملية اختبار الموقع الإلكتروني سواء من ناحية التصميم أو التطوير في المتصفحات أمرًا متعبًا للغاية، وبصورة عامة فإنّ المتصفحات الحديثة مثل Chrome، Firefox و Safari تعمل جيّدًا، إلا أن غالبية المشاكل تظهر في متصفح Internet Explorer، إضافة إلى أن اختبار إصدارات مختلفة من هذا المتصفح قد يكون أمرًا صعبًا. هناك العديد من الخدمات التي تساعد على اختبار الموقع الإلكتروني في المتصفحات المختلفة، بعضها تفاعلي وبعضها لا. تساعد القدرة على التفاعل مع المتصفح بدلًا من رؤية لقطة شاشة للموقع كثيرًا على تنقيح الشفرة البرمجية. ومن أفضل الطرق لاستخدام إصدارات مختلفة من متصفح Internet Explorer هي استخدام الآلات الافتراضية Virtual Machines، بحيث تتضمن كل آلة إصدارًا مختلفًا من هذا المتصفح. يظهر في الصورة أعلاه برنامج VirtualBox يعمل على نظام Mac OS X مع المتصفح Internet Explorer من الإصدار السادس إلى التاسع. تقدّم Microsoft مجموعة من الحواسيب الافتراضية Virtual PCs التي يمكن استخدامها في عملية الاختبار، ولكن يمكن لعملية الإعداد أن تكون مرهقة وصعبة. لحسن الحظ قام Greg Thornton ببناء أداة تُؤَتْمِت عملية تنصيب الآلات الافتراضية. تستغرق عملية التنصيب بعض الوقت وذلك لتنزيل جميع الآلات الافتراضية المتوفرة، وستحتاج كذلك إلى مساحة كبيرة على القرص الصلب، ولكن يمكن تثبيت الآلات الافتراضية التي تحتاج إليها فقط، وبالنظر إلى وتيرة استخدامك لهذه الآلات الافتراضية، قد يكون من الأفضل تنصيبها على قرص صلب خارجي. يحتوي الإصدار الثامن من Internet Explorer على أدوات تطوير مضمّنة في المتصفح، ولكن الإصدارات السابقة تفتقر إلى هذه الميزة. ولكن تتوفّر أداة Firebug التي تقدّم أدوات تطوير مفيدة جدًّا داخل المتصفّح. يظهر في الصورة أعلاه الإصدار السابع من Internet Explorer يعمل في آلة افتراضية مع استخدام أداة Firebug Lite لتنقيح الشفرة البرمجية. ترجمة - وبتصرّف - للمقال Feature Support & Polyfills لصاحبه Shay Howe.
  6. يشبه أداء المواقع كثيرًا قاعدة 80/20، حيث إن إجراء تحسينات بنسبة 20% ستزيد سرعة الموقع الإلكتروني بنسبة 80%. فاتّخاذ خطوات بسيطة مثل تنظيم شفرة CSS يأتي بثمار طيّبة. يشرح هذا المقال خطوات بسيطة يمكن أن يؤدّي تطبيقها - إلى جانب تنظيم شفرة CSS - إلى تحسّن ملحوظ في أداء الموقع. تصغير الملفات وضغطها تعدّ إزالة الشفرة المتكررة وغير الضرروية من أبسط الطرق وأفضلها في تقليل حجم ملف CSS، ولكن هناك بعض الطرق الأخرى. تتمثّل إحدى هذه الطرق في تصغير minify وضغط ملفات HTML و CSS و JavaScript. كذلك يمكن ضغط الصور وإزالة التعليقات و مواصفات الألوان Color Profiles غير الضرورية. آلية gzip للضغط آلية gzip هي إحدى أشيع وسائل ضغط الملفات، إذ تأخذ هذه الآلية الملفات الشائعة مثل HTML ،CSS، Javascript وما شابهها وتبدأ بتحديد السلاسل النصية المتشابهة وضغطها. وكلما تم التعرّف على المزيد من السلاسل النصية كان حجم الملفات المضغوطة أصغر، وهذا يعني إرسال ملفات أصغر حجمًا من الخادوم إلى المتصفح. ليست تهيئة gzip بالأمر الصعب، وقد أبلى فريق HTML5 Boilerplate بلاءً حسنًا في هذا المجال. ولضغط الملفات بآلية gzip ستحتاج إلى إضافة ملف .htaccess إلى المجلد الرئيسي في خادوم الويب ثم تدرج في هذا الملف أنواع الملفات التي ترغب في ضغطها. لا تنسَ إضافة النقطة إلى بداية اسم الملف، لأنّ هذا الملف هو من الملفات المخفية. يمكنك أن تجد في إعدادات خادوم Apache في HTML5 Boilerplate أنواع الملفات التي يُنصح بضغطها، ولا بأس بالتذكير مرة أخرى أنّ شفرة ضغط هذه الملفات يجب أن تكون في ملف .htaccess في المجلد الرئيسي لخادوم الويب. وجدير بالذكر أن هذا الملف لا يعمل إلا مع خواديم Apache والتي تتطلب تفعيل الوحدات التالية. mod_setenvif.c mod_headers.c mod_deflate.c mod_filter.c mod_expires.c mod_rewrite.c لا تقلق إن وجدت صعوبة في هذا الأمر، فهناك بعض الخواديم التي تهيّئ لك هذه الأمور نيابة عنك، فبطبيعة الحال، ضغط الملفات وتصغير حجمها يكون دائمًا في مصلحة خادوم الويب. قياس نسبة الضغط تقدّم أداة الفحص Inspector في متصفح Google Chrome عددًا كبيرًا من المعلومات حول أداء الصفحة، ويمكن الوصول إليها من خلال التبويب Network. إضافة إلى ذلك، هناك عدد من المواقع الإلكترونية التي تساعد على معرفة ما إذا كانت خاصية الضغط gzip مفعّلة أم لا. في تبويب Network يتم التعرّف على جميع الملفات المحمّلة بواسطة المتصفح وعرض أحجام تلك الملفات والمدة التي استغرقتها عملية التحميل. لاحظ كيف أن ضغط الملفات قد قلّل من حجمها بنسبة 60% تقريبًا. يمكن التعرّف على أنواع وسائل الضغط التي يدعمها المتصفح من خلال اختيار أحد الملفات. في الصورة أعلاه نلاحظ أنّ المتصفح يدعم gzip، deflate و sdch كما هو مبيّن في ترويسة الطلب المرسل من المتصفح. أما ترويسة Header الإجابة الواردة من الخادوم فتبيّن أن الملف مضغوط بواسطة gzip. ضغط الصور قد يكون تقليل حجم الملفات النصّية مفيدًا، ولكن يمكن الحصول على نتائج أفضل من خلال ضغط ملفات الصور. يمكن لحجم ملفات الصور المستخدمة في الموقع الإلكتروني أن يصبح كبيرًا جدًّا، وضغط الصور يمكن أن يساعد على إبقاء حجم الملفات الكلي تحت السيطرة. يتجنّب الكثيرون مسألة ضغط الصور وذلك خوفًا من أن يتسبب الضغط في تقليل جودة الصورة، ولكن هذا غير صحيح في أغلب الأحيان، إذ يمكن ضغط الصورة دون المساس بجودتها، وذلك من خلال التخلص من مواصفات الألوان والتعليقات غير الضرورية. تتوفّر العديد من الأدوات التي تساعد على ضغط الصور، من أفضلها ImageOptim لنظام Mac و PNGGauntlet لنظام Window، و Trimage لنظام لينكس. تقوم هذه الخدمات بضغط صيغ الصور الأكثر شيوعًا مثل JPG و PNG. نموذج لضغط الصور غير مضغوطة، 455kb مضغوطة، 401kb باستخدام ImageOptim فإنّ حجم الصورة أعلاه قد انخفض بمقدار 14% دون المساس بدقّة الصورة أو جودتها. من الجدير بالذكر هنا أن اختيار أبعاد الصورة في HTML باستخدام خاصيتي height و width يساعد على تصيير الصورة بسرعة أكبر وذلك بتحديد الحجم المناسب للصورة. ولكن يجب الانتباه إلى أن هاتين الخاصيتين تستخدمان في تحديد أبعاد الصورة الحقيقية لا لتصغير حجمها، فمن الممارسات السيئة في هذا الصدد استخدام صورة ذات حجم كبير ثم تصغيرها باستخدام خاصية height و width، والنتيجة تحميل بيانات فائضة عن الحاجة. <img src="ocean.jpg" height="440" width="660" alt="Oceanview"> تقليل طلبات HTTP يشكّل عدد طلبات HTTP - بعد حجم الملفات - العائق الأكبر في طريق تحقيق الأداء الأفضل. ففي كل مرة يُرسل فيها الطلب إلى الخادوم يزداد وقت تحميل الصفحة، وفي بعض الأحيان تتطلب معالجة الطلب من قبل الخادوم الانتهاء من معالجة الطلب السابق، وقد تؤدّي كثرة الطلبات إلى حدوث مشاكل في الخادوم. دمج الملفات المتشابهة إحدى الطرق المتّبعة في تقليل طلبات HTTP - وربّما أسهلها - تتمثّل في دمج الملفات المتشابهة، بمعنى دمج جميع ملفات CSS في ملف واحد وجميع ملفات JavaScript في ملف واحد كذلك. يؤدي دمج هذه الملفات ثم ضغطها إلى إنشاء طلب HTTP واحد صغير نسبيًا. <!-- سيء --> <link href="css/reset.css" rel="stylesheet"> <link href="css/base.css" rel="stylesheet"> <link href="css/site.css" rel="stylesheet"> <!-- جيد --> <link href="css/styles.css" rel="stylesheet"> يجب تحميل ملفات CSS في بداية صفحة الوِب ضمن الوسم head، أما ملفات JavaScript فيجب تحميلها في نهاية الصفحة ضمن الوسم body. والسبب هو أنّه يمكن استكمال تحميل ملفات CSS أثناء تحميل بقية أجزاء الصفحة، في حين أنّه لا يمكن تصيير ملفات JavaScript متعددة في نفس الوقت، لذا فإن هذه الملفات تمنع تحميل بقية عناصر الصفحة. يجب الانتباه هنا إلى ملفات JavaScript تُحمّل لا تزامنيًا Asynchronously بعد اكتمال تصيير الصفحة، وكذلك يجب الانتباه إلى أن JavaScript قد تكون مطلوبة في تصيير عناصر الصفحة كما هو الحال عند اسخدام HTML5 shiv. شرائح الصور Image Sprites المقصود بشرائح الصور في CSS هو استخدام صورة خلفية واحدة في مجموعة من العناصر، والهدف هنا هو تقليل عدد طلبات HTTP الناشئة من استخدام مجموعة من الصور. ولإنشاء شريحة اختر مجموعة من صور الخلفية الأكثر استخدامًا ورتّبها إلى جانب بعضها البعض في صورة واحدة، ثم باستخدام CSS أضف الشريحة كصورة خلفية إلى عنصر معين، ثم استخدم خاصّية background-position لعرض الصورة المطلوبة. بهذه الطريقة، يتم تمرير الصورة خلف العنصر ليقوم الأخير بعرض الجزء الملائم من الصورة. فعلى سبيل المثال إن كانت أبعاد العنصر هي 16 بكسل طولًا و 16 بكسل عرضًا فهذا يعني أنّ هذا العنصر سيعرض 16 بكسل طولًا و 16 بكسل عرضًا من الصورة، أما باقي أجزاء الصورة تكون مخفية. هذا مثال عن شريحة تضم صورًا لأيقونات قائمة محرر النصوص، وقد أحيطت كل صورة بخطوط إرشادية لتوضيح أماكن تغيّر موقع الخلفية. يمكن إنشاء قائمة باستخدام شريحة الصور السابقة وذلك بجعلها خلفية للعنصر span، ثم يمكن تغيير موضع الشريحة بواسطة الأصناف، وبذلك يمكن عرض الأيقونة المناسبة في كل مرة. HTML <ul> <li><a href="#"><span class="bold">Bold Text</span></a></li> <li><a href="#"><span class="italic">Italicize Text</span></a></li> <li><a href="#"><span class="underline">Underline Text</span></a></li> <li><a href="#"><span class="size">Size Text</span></a></li> <li><a href="#"><span class="bullet">Bullet Text</span></a></li> <li><a href="#"><span class="number">Number Text</span></a></li> <li><a href="#"><span class="quote">Quote Text</span></a></li> <li><a href="#"><span class="left">Left Align Text</span></a></li> <li><a href="#"><span class="center">Center Align Text</span></a></li> <li><a href="#"><span class="right">Right Align Text</span></a></li> </ul> CSS ul { margin: 0; padding: 0; } li { float: left; list-style: none; margin: 2px; } li a { background: linear-gradient(#fff, #eee); border: 1px solid #ccc; border-radius: 3px; display: block; padding: 3px; } li a:hover { border-color: #999; } li span { background: url("sprite.png") 0 0 no-repeat; color: transparent; display: block; font: 0/0 a; height: 16px; width: 16px; } .italic { background-position: -16px 0; } .underline { background-position: -32px 0; } .size { background-position: -48px 0; } .bullet { background-position: -64px 0; } .number { background-position: -80px 0; } .quote { background-position: -96px 0; } .left { background-position: -112px 0; } .center { background-position: -128px 0; } .right { background-position: -144px 0; } (تجربة حيّة) معرّف الموارد الموحّد URI الخاص ببيانات الصورة إضافة إلى استخدام شرائح الصور، يمكن الاستفادة من البيانات المُرمَّزة Encoded للصورة وتضمينها مباشرة في HTML و CSS وذلك من خلال معرّف الموارد الموحّد الخاص بالبيانات Data URI، وبهذا لن يُرسَل أي طلب HTTP إلى الخادوم. هذه الطريقة مفيدة للصور الصغيرة والتي لا تكون عرضة للتغيير، وعندما يكون بالإمكان نقل ملفات HTML و CSS إلى ذاكرة التخبئة Cach. ولكن لا يخلو الأمر من مشاكل، إذ يصعب أحيانا تبديل هذه المعرّفات ومتابعتها وقد تحتاج إلى توليد المعرّف مرة أخرى، إضافة إلى أنّها لا تعمل مع المتصفحات القديمة وخصوصًا Internet Explorer 7 وما قبله. إن كان بالإمكان تقليل عدد طلبات HTTP باستخدام هذه الطريقة، وإن كان بالإمكان تخزين ملفات HTML و CSS في ذاكرة التخبئة فإن الفوائد التي ستجينها باستخدام هذه الطريقة تفوق المشاكل المترتبة عنها. هناك عدد من الأدوات التي تساعد في توليد معرّف البيانات مثل هذا المحوّل وأداة Patternify. ومع ذلك تأكّد دائمًا من أنّ حجم البيانات في معرّف البيانات الخاصّ بالصورة أقل حجمًا من ملفّ الصورة الأصلية. HTML <img height="100" width="660" alt="Rigged Pattern" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAAPUlEQVQYV2NkQAO6m73+X/bdxogujiIAU4RNMVwhuiQ6H6wQl3XI4oy4FMHcCJPHcDS6J2A2EqUQpJhohQAyIyYy0nBAGgAAAABJRU5ErkJggg=="> CSS div { background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAAPUlEQVQYV2NkQAO6m73+X/bdxogujiIAU4RNMVwhuiQ6H6wQl3XI4oy4FMHcCJPHcDS6J2A2EqUQpJhohQAyIyYy0nBAGgAAAABJRU5ErkJggg==") repeat; } (تجربة حيّة) خزّن الملفات الشائعة في ذاكرة التخبئة هناك طريقة أخرى لتقليل عدد طلبات HTTP المرسلة إلى الخادوم ولعرض الصفحات في وقت أقصر، وتتمثّل هذه الطريقة في إضافة الملفات الشائعة إلى ذاكرة التخبئة. فعند تحميل الصفحة للمرة الأولى يمكن تخزين ملفات معيّنة في ذاكرة التخبئة، وبهذا لن يحتاج المتصفح إلى طلب الملفات ذاتها - لمدة معيّنة - في كل زيارة لتلك الصفحة. تحديد مدّة بقاء هذه الملفات في ذاكرة التخبئة عائد إليك. وكما هو الحال مع ضغط الملفات، فإنّ تعيين مدّة بقاء الملفات في ذاكرة التخبئة يكون من خلال ملف .htaccess. ومرة أخرى فقد أعدّ فريق HTML5 Boilerplate ملفًّا خاصًّا لتعيين تاريخ انتهاء صلاحية الملفات في ذاكرة التخبئة وذلك في إعدادات خادوم Apache الخاصّ بهم. عادة ما تخزّن الصور ومقاطع الفيديو والخطوط وملفات الوسائط المعروفة لمدة شهر في ذاكرة التخبئة، أمّا ملفات CSS و JavaScript فتخزّن في الغالب لمدة عام كامل. وفي حال كانت ملفات CSS أو غيرها من الملفات عرضة للتغير في فترات متقاربة، يمكن تغيير اسم الملف - ومن الأفضل أن يكون الترقيم متسلسلًا - ليُحمَّل الملف من خلال المتصفح. كذلك يمكن تغيير مدة بقاء هذه الملفات في ذاكرة التخبئة إلى قيمة أقل. ExpiresByType text/css "access plus 1 year" ExpiresByType application/javascript "access plus 1 year" إن كانت ملفات CSS و JavaScript تتغيّر في كل أسبوع ولا يُتحكَّم في إصداراتها باستخدام ملفات منفصلة فمن الأفضل تغيير قيمة "access plus 1 year" إلى "access plus 1 week". ويمكن مراجعة صفحة صيغة mod_expires للتعرّف على القيم المتاحة. ترجمة - وبتصرّف - للمقال Performance & Organization لصاحبه Shay Howe. حقوق الصورة البارزة محفوظة لـ Freepik
  7. ماركداون هي صيغة نصّية صرفة Plain text format لكتابة المستندات بالاعتماد على صيغة تستخدم لتحديد هيئة النصّ وتنسيقه في الرسائل الإلكترونية والمدوّنات. طوّرت ماركداون على يد John Gruber سنة 2004، والذي كان أول شخص يكتب محوّلًا لماركداون إلى HTML بلغة Perl لينتشر حول العالم بعد فترة وجيزة. أدّى الانتشار الواسع الذي شهدته ماركدوان في السنوات التي تبعت إنشاء المحوّل الأول إلى تطوير العديد من المحوّلات وبلغات برمجية مختلفة. إضافة إلى ذلك توسّعت الصيغة الأصلية وأضيفت معايير جديدة لتنسيق الحواشي السفلية Footnotes والجداول والعناصر الأخرى المعروفة في المستندات، وظهرت كذلك أدوات تحويل تسمح بتحويل النصّ المكتوب بماركداون إلى تنسيقات أخرى غير HTML. أما اليوم فيعتمد الملايين من مستخدمي المواقع المشهورة مثل Reddit،StackOverflow و GitHub صيغة ماركداون للتواصل فيما بينهم، كما تدعم منصات التدوين الشهيرة مثل Wordpress و Drupal وغيرها هذه الصيغة في كتابة التدوينات. لم يعد استخدام هذه الصيغة مقتصرًا على الشبكة العنكبوتية وحسب، بل تجاوز ذلك إلى اعتمادها من قبل مؤلّفي الكتب وكتّاب المقالات ولإنشاء العروض التقديمية، ولكتابة الروايات والمحاضرات وغيرها. إنّ ما يميز صيغة ماركداون عن بقية الصياغات الترميزية المبسّطة والتي قد تكون أسهل في قواعدها من ماركداون، هو أن الأخيرة تمتاز بمقروئيتها العالية، فكما يصرّح Gruber: ومع أنّ الصيغة الأصلية لماركداون قد تأثّرت بصفة كبيرة بالكثير من مرشّحات تحويل النص إلى HTML مثل Setext و Textile و reStructuredText وغيرها إلّا أن مصدر الإلهام الرئيسي لـ Gruber كان هيئة النصوص الصرفة في الرسائل الإلكترونية. معايير صيغة ماركدوان في الواقع لم يعلن Gruber عن معايير قياسية واضحة للكتابة بصيغة ماركداون، ويرى البعض أنّ مبتكر هذه الصيغة قد تجاهلها ولم يعد يحاسب منتهكي حقوق الملكية، الأمر الذي تسبّب في ظهور صيغ وأشكال مختلفة من ماركداون. في العام 2012 تطوّع Jeff Atwood إلى جانب مجموعة من الأشخاص لوضع معايير قياسية للكتابة بصيغة ماركداون والتضمينات الأخرى لهذه الصيغة في اللغات البرمجية المختلفة، ولكن في العام 2014 اعترض Gruber على استخدام اسم Markdown لهذا المشروع، فتم تبديله إلى CommonMark. أصدر موقع CommonMark.org إصدارات مختلفة لمعايير ماركداون القياسية، ومن المؤمّل أن يعلن الموقع عن النسخة النهائية ذات الإصدار 1.0 من معايير ماركداون القياسية هذا العام. كذلك أعلنت GitHub عن نسختها الرسمية المعدّلة من ماركداون والتي تعتمد فيها على CommonMark باستثناء الجداول والروابط التلقائية Autolinks وقوائم المهام Task lists وخط الشطب Strikethrough، والتي أضافتها GitHub إلى المعايير القياسية. كتابة مستندات ماركداون تحمل مستندات ماركداون اللاحقتين .md و .markdown، ويمكن استخدام محررات النصوص المعروفة لإنشاء هذه الملفات وكتابتها. تتوفّر في الوقت الحاضر الكثير من المحرّرات الخاصة بهذه الصيغة، والتي تقدّم الكثير من الميزات المفيدة، مثل تلوين الرموز، وعرض المستند منسّقًا كما سيظهر على متصفح الإنترنت، وإنشاء ملف منسّق بصيغة PDF وغير ذلك الكثير. محرّرات ماركداون متوفّرة على جميع أنظمة التشغيل المعروفة، وهناك محرّرات مدفوعة، وأخرى مجّانية بعضها مفتوح المصدر وبعضها لا، وبعض المحرّرات يعمل على المتصفّح ويمكن استخدامه دون الحاجة إلى الاتصال بالإنترنت، ويكفي البحث في Google عن عبارة Markdown Editor لتجد أمامك مئات الخيارات المختلفة والمتنوّعة. الفقرات وفواصل الأسطر تعرّف الفقرة في ماركداون بأنّها مجموعة من الأسطر المتتابعة والمفصولة بسطر فارغ أو أكثر، والمقصود بالسطر الفارغ في ماركداون هو كل سطر يبدو للناظر فارغًا، وهذا يعني أنّ الأسطر التي تحتوي على عدد من المسافات الفارغة أو علامات الجدولة Tabs تعدّ أسطرًا فارغة. تحاط الفقرات بعد تحويلها إلى HTMl بالوسم <p></p>، أما في حال كنت ترغب في فصل فقرتين بواسطة الوسم <br/> فيمكنك إضافة مسافتين فارغتين في نهاية الفقرة وسيقوم مترجم ماركداون بالمطلوب. مثال: حسوب مجموعة من شركات الإنترنت تخدم المستخدمين العرب حول العالم. تدير حسوب أكبر منصتي عمل حر عربيتيْن وأكبر شبكة إعلانية في منطقة الشرق الأوسط وشمال أفريقيا، بالإضافة لمنتجات وشركات أخرى. توفّر حسوب حلولاً ومنتجات تساعد الشباب العرب على العمل والتطوّر وتتألّف من فريق عمل شاب وشغوف من مختلف الدول العربية. يترجم إلى: <p>حسوب مجموعة من شركات الإنترنت تخدم المستخدمين العرب حول العالم.</p> <p>تدير حسوب أكبر منصتي عمل حر عربيتيْن وأكبر شبكة إعلانية في منطقة الشرق الأوسط وشمال أفريقيا، بالإضافة لمنتجات وشركات أخرى.<br/> توفّر حسوب حلولاً ومنتجات تساعد الشباب العرب على العمل والتطوّر وتتألّف من فريق عمل شاب وشغوف من مختلف الدول العربية.</p> العناوين توفّر ماركداون صيغتين لتحديد العناوين ضمن النصوص: الصيغة الأولى هي نمط Setext، وتُحدَّد العناوين فيه من خلال وضع علامات المساواة (=) للعناوين من المستوى الأول، وعلامة الطرح (-) للمستوى الثاني، وليس هناك عدد محدد للعلامات تحت النص. هذا عنوان من المستوى الأول ======================== هذا عنوان من المستوى الثاني ------------------------- الصيغة الثانية هي نمط Atx، وتتيح تحديد العناوين حتى المستوى السادس، وذلك بوضع علامة (#) قبل نص العنوان، ويحدد عدد العلامات مستوى العنوان ضمن المتن. # هذا عنوان من المستوى الأول ### هذا عنوان من المستوى الثالث ###### هذا عنوان من المستوى السادس يترجم النص السابق إلى: <h1>هذا عنوان من المستوى الأول</h1> <h3>هذا عنوان من المستوى الثالث</h3> <h6>هذا عنوان من المستوى السادس</h6> الاقتباسات Blockqoutes تستخدم ماركداون الرمز (>) المستوحى من الرسائل الإلكترونية لتنسيق النصوص المقتبسة. بعد تحويل ملف ماركداون إلى HTML تحاط النصوص المسبوقة بهذا الرمز بوسمي <blockqoute>...</blockqoute>. > توفّر حسوب حلولاً ومنتجات تساعد الشباب العرب على العمل والتطوّر وتتألّف من فريق عمل شاب وشغوف من مختلف الدول العربية. يترجم إلى: <blockquote> <p>توفّر حسوب حلولاً ومنتجات تساعد الشباب العرب على العمل والتطوّر وتتألّف من فريق عمل شاب وشغوف من مختلف الدول العربية.</p> </blockquote> إذا كان الاقتباس مكوّنًا من عدة فقرات فيجب استخدام رمز الاقتباس في بداية كل فقرة، كذلك يمكن استخدام صياغات ماركداون المختلفة داخل النصوص المقتبسة ومن ضمنها النصوص المقتبسة ذاتها، وكما هو موضح في المثال التالي: > توفّر حسوب حلولاً ومنتجات تساعد الشباب العرب على العمل والتطوّر وتتألّف من فريق عمل شاب وشغوف من مختلف الدول العربية. > # عنوان من المستوى الأول > حسوب مجموعة من شركات الانترنت تخدم المستخدمين العرب حول العالم. تدير حسوب أكبر منصتي عمل حر عربية وأكبر شبكة إعلانية في منطقة الشرق الأوسط وشمال أفريقيا، بالإضافة لمنتجات وشركات أخرى. > > هذا اقتباس ضمن الاقتباس الأول القوائم تدعم ماركداون القوائم النقطية والرقمية، ويمكن استخدام النجمة (*) وعلامة الجمع (+) وعلامة الطرح (-) للتعبير عن القوائم النقطية: * أحمر * أخضر * أصفر - برتقال - تفاح - ليمون + إلكترون + بروتون + نيوترون تترجم القائمة النقطية إلى: <ul> <li>برتقال</li> <li>تفاح</li> <li>ليمون</li> </ul> أما القوائم الرقمية فتكتب بالصيغة التالية: تتألّف الذرات من الجسيمات التالية: 1. الإلكترونات 2. البروتونات 3. النيوترونات وتترجم إلى: <ol> <li>الإلكترونات</li> <li>البروتونات</li> <li>النيوترونات</li> </ol> من الجدير بالذكر أن محوّل ماركداون لا يعتمد على الأرقام المستخدمة في القائمة الرقمية عند التحويل إلى صيغة HTML، فلو كانت القائمة مكتوبة بالصيغة التالية: 1. برتقال 1. تفاح 1. ليمون أو بالصيغة التالية: 3. برتقال 9. تفاح 2. ليمون فإن النتيجة النهائية تكون واحدة. وفي حال تضمنت القائمة فقرات متعددة، يجب إزاحة السطر الأول من الفقرة إما بأربع مسافات فارغة أو بعلامة جدولة واحدة. * حسوب مجموعة من شركات الإنترنت تخدم المستخدمين العرب حول العالم. تدير حسوب أكبر منصتي عمل حر عربية وأكبر شبكة إعلانية في منطقة الشرق الأوسط وشمال أفريقيا، بالإضافة لمنتجات وشركات أخرى. * توفّر حسوب حلولاً ومنتجات تساعد الشباب العرب على العمل والتطوّر وتتألّف من فريق عمل شاب وشغوف من مختلف الدول العربية. يجدر الانتباه إلى أنّه يمكن الحصول على قائمة رقمية عن طريق الخطأ إذا ورد في المتن رقم متبوع بنقطة (مثلًا: انطلقت أكاديمية حسوب سنة 2015. وتضم الآن أكثر…) ولتجنب حدوث ذلك ضع خطًّا مائلًا عكسيًا بين الرقم والنقطة (انطلقت أكاديمية حسوب سنة 2015/. وتضم الآن أكثر…). الخطوط الأفقية الخطوط الأفقية في HTML تنتج من استخدام الوسم <hr/>، وفي ماركداون يمكن إدراج خط أفقي باستخدام النجمة (*) أو علامة الطرح (-)، أو الشَّرطَة السفلية (_)، بشرط إدراج ثلاثة رموز أكثر في سطر منفرد. في المثال التالي جميع الرموز ستعطي خطًّا أفقيًا بعد تحويل الملف إلى HTML. * * * *** ***** - - - --------------------------------------- التأكيد على الكلمات تستخدم ماركداون رمزيْ النجمة (*) والشرطة السفلية (_) للتأكيد على الكلمات. تؤدي إحاطة الكلمات المراد تأكيدها بنجمتيْن أو شرطتيْن إلى عرضها مائلة بعد تحويلها إلى HTML وذلك بإحاطتها بوسم <em>. أما إحاطة الكلمات بأربع نجمات أو شرطات فسيؤدي إلى عرضها بخط عريض Bold وذلك بإحاطتها بوسم <strong>. أما إحاطة الكلمات بست نجمات أو شرطات فسيؤدي إلى إحاطتها بالوسمين معًا. *حسوب* مجموعة من شركات الانترنت تخدم المستخدمين العرب حول العالم. _حسوب_ مجموعة من شركات الانترنت تخدم المستخدمين العرب حول العالم. **حسوب** مجموعة من شركات الانترنت تخدم المستخدمين العرب حول العالم. __حسوب__ مجموعة من شركات الانترنت تخدم المستخدمين العرب حول العالم. _*حسوب*_ مجموعة من شركات الانترنت تخدم المستخدمين العرب حول العالم. ***حسوب*** مجموعة من شركات الانترنت تخدم المستخدمين العرب حول العالم. ___حسوب___ مجموعة من شركات الانترنت تخدم المستخدمين العرب حول العالم. النتيجة بعد التحويل إلى HTML: <p><em>حسوب</em> مجموعة من شركات الانترنت تخدم المستخدمين العرب حول العالم.</p> <p><strong>حسوب</strong> مجموعة من شركات الانترنت تخدم المستخدمين العرب حول العالم.</p> <p><strong><em>حسوب</em></strong> مجموعة من شركات الانترنت تخدم المستخدمين العرب حول العالم.</p> الروابط Links توفّر ماركداون أسلوبيْن لكتابة الروابط، التضمين Inline والإشارة Reference، وفي كلا النمطين يوضع نص الرابط بين قوسين معقوفين []. في حالة الرابط الضمني، يُضاف عنوان الرابط بين قوسين () بعد القوسيْن المعقوفين بالصورة التالية: هذا [مثال على رابط](http://www.example.com) ضمني في ماركداون. والنتيجة: هذا <a href="http://www.example.com">مثال على رابط</a> ضمني في ماركداون. أما أسلوب الإشارة فيكون بالصيغة التالية: هذا [مثال على رابط][id] بأسلوب الإشارة في ماركداون. يمكن الآن تعريف عنوان الرابط في أي مكان ضمن المستند، وبالصيغة التالية: [id]: http://www.example.com يمكن استخدام الحروف والأرقام والرموز في تحديد معرّف الرابط، وعند إجراء عملية التحويل إلى HTML يربط المحوّل بين المعرّف وبين نص الرابط ثم يحذف الإشارات من المستند. يمكن كذلك استخدام نص الرابط كمعرّف للرابط، وذلك بكتابة نص الرابط بالطريقة التالية: [Google][] ثم تعريف معرّف الرابط: [Google]: http://google.com الصور يمكن إضافة الصور إلى المستند باستخدام ماركداون وبنفس الأسلوب المتبع في إضافة الروابط (التضمين والإشارة)، مع فارق وحيد، وهو إضافة علامة التعجب (!) قبل القوسين المعقوفين: ![[جبال الألب](images/alps.jpg) ![جبال الألب][id] [id]: images/alps.jpg تجدر الإشارة إلى أنّ ماركداون لا تقدّم صيغة لتحديد طول وعرض الصورة؛ لذا إن كنت بحاجة إلى القيام بذلك يمكنك استخدام وسم <img> الاعتيادي ضمن مستند ماركداون. النصوص البرمجية إن كنت بحاجة إلى إضافة بعض النصوص البرمجية إلى المستند الخاصّ بك، فإن ماركداون تقدّم أسلوبين لتنسيق هذه النصوص، ضمن السطر أو على هيئة كتلة نصية مستقلة. يمكن الاستفادة من الأسلوب الأول عندما ترغب في سرد النصوص البرمجية القصيرة داخل المتن: تستخدم الدالة `alert()` لعرض الرسائل التنبيهية. يحيط مترجم ماركداون الشيفرة البرمجية بوسم <code> كما يلي: <p>تستخدم الدالة <code>alert()</code> لعرض الرسائل التنبيهية.</p> أما إن كنت ترغب في عرض كتلة برمجية كبيرة الحجم فيمكنك اتباع الأسلوب الثاني، وذلك بإضافة أربع مسافات فارغة أو علامة جدولة في بداية كل سطر من أسطر الشيفرة البرمجية. هذه فقرة عادية. هذه فقرة تتضمن كتلة نصية برمجية ومن الواضح أن الكتلة البرمجية تمتد إلى عدة أسطر والنتيجة: <p>هذه فقرة عادية.</p> <pre><code>هذه فقرة تتضمن كتلة نصية برمجية ومن الواضح أن الكتلة البرمجية تمتد إلى عدة أسطر </code></pre> بقي أن نشير إلى أنّه يمكن استخدام كافّة وسوم HTML في مستند ماركداون، بشرط أن يسبق الوسمَ سطرٌ فارغ. على سبيل المثال لإضافة جدول إلى مستند ماركداون يمكن استخدام وسم <table> كما يلي: هذه فقرة عادية. <table> <tr> <td>هذا النص في جدول</td> </tr> </table> فقرة عادية أرى. المصادر: موقع مبتكر صيغة ماركداون CommonMark Wikipedia
  8. إن قدرتك على كتابة شفرة HTML وCSS مع فهم عميق لما تكتبه يعني امتلاكك لمهارة كبيرة ومتميّزة، وعند ازدياد حجم شفرات الموقع الإلكتروني وكذلك عدد زوّاره، تظهر الحاجة إلى مجموعة جديدة من المهارات المهمّة والضرورية لتوفير الوقت أثناء التطوير ولتحسين تجربة المستخدم؛ لذا فإن معرفة أساسيات تحسين أداء الموقع الإلكتروني وتنظيمه قد يساعد كثيرًا في هذا الصدد. تؤثّر طريقة تنظيم الشفرة البرمجية وأسلوب بنائها كثيرًا على سرعة التطوير، إضافة إلى سرعة تصيير Rendering الصفحة على متصفح الإنترنت، وقد يشغل هذا الأمران اهتمام المطورين والمستخدمين على حد سواء. تمكن زيادة سرعة الإنتاج وتوفير تجربة أفضل للمستخدمين من خلال قضاء الوقت الكافي في التخطيط للحصول على بنية صحيحة للشفرة الأساسية، وتحديد آلية عمل المكونات المختلفة مع بعضها. إستراتيجية وبنية الشفرة الأساسية تتمثّل أول خطوة في طريق تحسين أداء الموقع الإلكتروني وتنظيمه في تحديد إستراتيجة وبنية جيدة للشفرة الأساسية، وذلك من خلال ترتيب مجلدات المشروع بصورة جيدة، وتحديد أنماط التصميم Design patterns، وإيجاد السبل اللازمة لإعادة استخدام الشفرة الشائعة. بنية الأنماط Styles إن طريقة تنظيم الأنماط أمر عائد إلى الرغبة الشخصية وطبيعة الموقع الإلكتروني المراد إنشاؤه، ولكن - عمومًا - هناك بعض الممارسات الجيدة التي ينصح باتباعها، وإحدى هذه الممارسات هي فصل الأنماط بناء على الغرض من استخدامها، وهذا يعني إنشاء مجلدات للأنماط الأساسية الشائعة، ولمكونات واجهة الاستخدام، ووحدات منطق العمل Business logic modules. # Base – normalize.css – layout.css – typography.css # Components – alerts.css – buttons.css – forms.css – list.css – nav.css – tables.css # Modules – aside.css – footer.css – header.css تتضمن بنية الملفات الموضّحة أعلاه ثلاثة مجلدات تضمّ مجموعات فريدة من الأنماط، والهدف هنا هو أن تبدأ بالنظر إلى المواقع الإلكترونية على أنّها أنظمة وليست صفحات منفردة، ويجب أن تعكس بنية الشفرة البرمجية هذا المبدأ. لاحظ عدم وجود أي أنماط خاصّة بالصفحات في بنية الملفات هذه. يتضمن المجلد base الأنماط الشائعة والمتغيّراات المستخدمة في أرجاء الموقع الإلكتروني كالأنماط المتعلقة بمخطط الصفحات وتنسيق النصوص على سبيل المثال. أما المجلد components (المكوّنات) فيتضمن الأنماط الخاصة بعناصر واجهة الاستخدام والتي يمكن تقسيمها إلى مكونات مختلفة مثل التنبيهات والأيقونات. أخيرًا، يتضمن المجلد modules (الوحدات) الأنماط الخاصة بأقسام الصفحة المختلفة، والتي تُحدَّد حسب طبيعة المشروع واحتياجاته. لا ترتبط أنماط المكونات بأي شكل من الأشكال بمنطق العمل الجوهري للموقع الإلكتروني وإنما تعتمد على الواجهة بصورة تامة، أما الأنماط الخاصة بمنطق العمل فتكون موجودة في الوحدات ، ومن الشائع استخدام عددٍ من المكونات الخاصة بواجهة الاستخدام ضمن هذه الوحدات. فعلى سبيل المثال يمكن أن يحتوي العمود الجانبي في الصفحة على أنماط القوائم والأيقونات المعرّفة ضمن أنماط المكونات في حين تكون بعض الأنماط الأخرى متوارثة من نمط الوحدة. يساعد فصل الأنماط بهذه الطريقة على تكوين أنماط مسبقة متقنة الصنع والقدرة على استخدام الأنماط في أماكن متعددة من الموقع الإلكتروني وإعادة استخدامها حسب الحاجة. إن ترتيب الأنماط بهذه الأسلوب ليس أمر مستحدثًا، وقد ورد ذكره سابقًا في عدد من منهجيات CSS مثل CSS كائنية التوجه Object Oriented CSS أو OOCSS اختصارًا، وبنية CSS القابلة للتجميع والتوسع Scalable and Modular Architecture for CSS أو SMACSS اختصارًا. لكل واحدة من هذه المنهجيات آراؤها الخاصة حول بنية الملفات وكذلك حول طريقة استخدام الأنماط. CSS كائنية التوجه Nicole Sullivan واحدة من روّاد منهجية CSS كائنية التوجه وذلك في عملها المتمثّل في كتابة الأنماط الخاصة بالمواقع الإلكترونية الكبيرة. تضع هذه المنهجية مبدأين أساسيين يساعدان على بناء مواقع إلكترونية قابلة للتوسع تعتمد على بنية قوية ومتماسكة وبمقدار معقول من الشفرة البرمجية. وهذا المبدآن هما: فصل البنية عن القشرة، فصل المحتوى عن الحاوي. المقصود بفصل البنية عن القشرة هو تجريد مخطط العنصر من السمة العامة للموقع الإلكتروني. بمعنى أنّه يجب أن تكون بنية الوحدة شفافة، وتسمح بتوارث الأنماط الأخرى وعرضها دون أي تضارب. ويتطلب هذا بنية رصينة للمخطّطات والشبكات إلى جانب وحدات متقنة الصنع. أما فصل المحتوى عن الحاوي فيعني عدم اعتماد العناصر الأبناء على العنصر الأب، فعلى سبيل المثال يجب أن يظهر العنوان بنفس المظهر بغض النظر عن العنصر الأب الذي يحتويه. ولتحقيق هذا، يجب أن ترث العناصر أنماطًا مبدئية، ثم تُوسَّع هذه الأنماط حسب الحاجة. HTML <div class="alert alert-error"> <p class="msg">...</p> </div> CSS .alert {...} .alert-error {...} .msg {...} تشجّع CSS كائنية التوجه على بناء مكتبة للمكونات، والتحلّي بالمرونة، والاستفادة من الشبكة. تشكّل هذه القواعد أرضية جيدة يمكن أن تساعد في تجنّب الحاجة إلى إنشاء أنماط إضافية عند إضافة صفحات أو خصائص جديدة للموقع الإلكتروني. بنية CSS القابلة للتجميع والتوسع المنهجية الثانية في تنظيم شفرة CSS هي المنهجية التي طوّرها Jonathan Snook تحت اسم بنية CSS القابلة للتجميع والتوسع. تدعو هذه المنهجية إلى تقسيم الأنماط إلى خمسة فئات رئيسية، هي: الأساس Base، المخطط Layout، الوحدة Module، الحالة State، السمة Theme. تضمّ فئة الأساس الأنماط الأساسية للعناصر التي تغطي الأمور العامة والمبدئية، ثم تأتي بعدها فئة المخطط لتحديد الأحجام المختلفة للعناصر إلى جانب أنماط الشبكة مانحة إياها المخطط الرئيسي. أما أنماط الوحدة فهي أنماط مخصصة بصورة أكبر وهي موجّهة إلى أجزاء محددة من الصفحة، كروابط التنقّل في الموقع (navigation) أو الأنماط المميزة الأخرى، ثم تأتي بعدها أنماط الحالة التي تستخدم لزيادة أو تعديل أنماط أخرى في حال تضمنت الوحدة المعنية حالات مختلفة، كلسان تبويب مفعّل مثلًا. وأخيرًا، يمكن إضافة فئة السمة والتي تتضمن أنماط تستند إلى المظهر الخارجي للوحدات المختلفة. HTML <div class="alert is-error"> <p>...</p> </div> CSS .alert {...} .alert.is-error {...} .alert p {...} .alert.is-error p {...} في المثال السابق يكون الصنف alert ضمن فئة الوحدة في حين أن الصنف is-error يكون ضمن فئة الحالة. بعد ذلك تُتوارث الأصناف من هذه الفئات حسب الحاجة. أي منهجية ستختار؟ اختيار المنهجية التي ستستخدمها في عملك أمر عائد إليك تمامًا، وقد تشعر بأنّ منهجية معينة تناسب مشروعًا معينًا والعكس صحيح. بصورة عامة، لا بأس باستخدام مزيج من المنهجيتين والاستفادة من مبادئهما حسب ما تقتضيه الحاجة. تحسين الأداء بواسطة المحدّدات Selectors عدم الاهتمام بالمحدّدات من الأمور التي يُبتلى بها الكثير من المطوّرين، حيث ينصبّ جلّ الاهتمام في الغالب على الخصائص والقيم التابعة لها، فما دامت الأنماط مطبّقة على العنصر الصحيح فإن كل شيء يبدو على ما يرام. ولكن هذا افتراض خاطئ تمامًا، فلطريقة تحديد العناصر في CSS أثرٌ كبير على الأداء، بما في ذلك سرعة عرض الصفحات ومدى فعالية الأنماط في البنية العامة للموقع. اجعل المحدّدات قصيرة قدر الإمكان هناك الكثير من الفوائد الناجمة عن تقصير محدّدات CSS قدر الإمكان، إذ بتقصيرها تقل التخصّصية، ما يسمح بتوارث وتناقل أفضل للأنماط، وزيادة في كفاءتها. أما المحدّدات الطويلة فتقلّل الأداء لأنها تجبر المتصفح على تصيير كل نوع من أنواع المحددات على حدة من اليمين إلى اليسار، كما تشكّل عائقًا أمام المحدّدات الأخرى لتكون أكثر تخصّصًا. /* سيء */ header nav ul li a {...} /* جيد */ .primary-link {...} /* سيء */ button strong span {...} button strong span .callout {...} /* جيد */ button span {...} button .callout {...} المحدّد الأول في الشفرة السابقة مخصّص جدًّا، ويمكن تحديده وتصييره بسرعة أكبر باستخدام الصنف. إضافة إلى ذلك، فإن استخدام الصنف في هذه الحالة يقلل بقدر ملحوظ من الحاجة إلى تحديد العنصر الأب، الأمر الذي يسمح بتغيير موقع العنصر فيما بعد دون إفساد الأنماط الأخرى. أما المثال الثاني فيتضمن محدّدات أقصر من المثال الأول ولكن يمكن تحسينها من خلال توفير المستوى ذاته من التخصصية لكل محدد. لا تبالغ في استخدام محددات مخصّصة جدًّا وبهذا ستواجه مشاكل أقلّ بكثير في حال حدوث تغير في ترتيب عناصر الصفحة. إن التقليل من عدد المحدّدات وإعطائها جميعًا القوة ذاتها سيمكّنها من العمل مع بعضها البعض بصورة أفضل. إن الهدف الأساسي من تقصير المحدّدات هو تقليل التخصصية وكتابة شفرة أوضح وأكثر ترتيبًا. استخدم الأصناف Classes دائمًا الأصناف رائعة جدًّا، إذ يصيّرها المتصفح بسرعة كما أنّها تتيح إعادة استخدام الأنماط إلى جانب استخدامها الواسع في بناء المواقع الإلكترونية. ولكن عند استخدام الأصناف يجب الانتباه إلى ممارسات مجرَّبة ستساعد على تحقيق أقصى فائدة ممكنة منها. تُصيَّر المحدّدات من اليمين إلى اليسار؛ لذا فمن الضروري أن تعتني جيّدًا بـ المحدّد الرئيسي Key selector وهو المحدد الأخير ضمن قائمة المحدّدات من الجهة اليمنى، وهو محدّد مهمّ للغاية؛ لأنّه يحدّد العنصر الأول الذي سيعثر عليه المتصفح أثناء بحثه ضمن الصفحة، وسيؤدي عدم الاعتناء بالمحدد الرئيسي إلى دخول المتصفح في فوضى عارمة. لا تتردّد في استخدام صنف فريد من أجل تحقيق الفائدة بالنسبة لأداء الصفحة، كذلك لا تُضِف أي عنصر قبل محدّدات الأصناف، فذلك سيمنعك من تطبيق هذه الأنماط على عناصر أخرى، وسيزيد من مقدار الخصوصية التي يتمتع بها ذلك المحدد. /* سيء */ #container header nav {...} /* جيد */ .primary-nav {...} /* سيء */ article.feat-post {...} /* جيد */ .feat-post {...} يجدر بك كذلك الابتعاد عن استخدام محدّدات المعرّفات ID selectors قدر الإمكان؛ ذلك لأنّها محدّدات مخصّصة جدًّا ولا تسمح بإعادة استخدامها في أي مكان آخر، ويسعني القول إنّ استخدام المعرّف لا يختلف كثيرًا عن استخدام !important. الشفرة القابلة لإعادة الاستخدام إن أحجام الملفات الكبيرة وعمليات التصيير غير الضرورية التي يقوم بها المتصفح هي من أكبر العوائق التي تقف في وجه الأداء الجيد. وإعادة استخدام الأنماط قدر الإمكان من أسرع الطرق في تقليل حجم ملفات CSS، إذ يجب دمج أنماط الواجهة Interface patterns والأنماط المكررة ليكون بالإمكان مشاركة الشفرة ذاتها على عدد من العناصر. فعلى سبيل المثال لو كانت هناك وحدتان تتشاركان في عدد من الخصائص (كلون الخلفية، والأركان الدائرية، والظل) فلا حاجة على الإطلاق للتصريح عن النمط ذاته مرتين، بل يمكن دمج هذه الخصائص في صنف واحد، وبهذا تكتب الأنماط مرة واحدة ويكون بالإمكان مشاركتها في أماكن مختلفة. ولكن يجب الانتباه إلى أنّ إعادة استخدام الشفرة لا يكون على حساب الدلالية Semantics. يمكن في هذه الحالة استخدام زوج من المحددات وفصلهما بفاصلة، وبهذا يمكن للأنماط أن تكون متوارثة بين المحدّدين في الوقت ذاته. هناك طريقة أخرى غالبًا ما نراها في منهجيتيْ OOCSS و SMACSS اللتين تحدّثنا عنهما سابقًا، وتتلخّص هذه الطريقة في تعريف الأنماط في صنف واحد، ثم تطبيق أصناف متعددة على العنصر ذاته. /* سيء */ .news { background: #eee; border-radius: 5px; box-shadow: inset 0 1px 2px rgba(0, 0, 0, .25); } .social { background: #eee; border-radius: 5px; box-shadow: inset 0 1px 2px rgba(0, 0, 0, .25); } /* جيد */ .news, .social { background: #eee; border-radius: 5px; box-shadow: inset 0 1px 2px rgba(0, 0, 0, .25); } /* الأفضل */ .modal { background: #eee; border-radius: 5px; box-shadow: inset 0 1px 2px rgba(0, 0, 0, .25); } ليس هناك فارق كبير بين الطريقتين ما دامت الشفرة مشتركة وقابلة لإعادة الاستخدام، وما دام الحجم النهائي للملف صغيرًا. الخطوة المواليّة لتنظيم شفرة CSS هي معرفة أساسيّات تحسين أداء الموقع. ترجمة - وبتصرّف - للمقال Performance & Organization لصاحبه Shay Howe. حقوق الصورة البارزة محفوظة لـ Freepik
  9. كانت القدرة على التحكم بتأثيرات الانتقال Transitions والحركة Animations من إحدى الميزات التي أتت بها CSS3، وقد كان مطورو الواجهات الأمامية بحاجة كبيرة إلى مثل هذه الميزة لتصميم هذه التأثيرات باستخدام HTML و CSS فقط دون الحاجة إلى استخدام Javascript أو Flash، وقد تحققت رغبتهم أخيرًا وبعد سنوات عديدة. تتيح تأثيرات الانتقال في CSS3 تغيير مظهر أو سلوك العنصر عندما تتغير حالته، كأن يُمرَّر مؤشر الفأرة فوق العنصر hover، أو عند التركيز focus أو التنشيط active أو استهداف العنصر. أما تأثيرات الحركة في CSS3 فتتيح تغيير هيئة وسلوك العنصر من خلال مفاتيح keyframes متعددة، وهذا يعني أن تأثيرات الانتقال تقدّم تغيّرًا من حالة إلى أخرى، في حين أن تأثيرات الحركة تقدّم نقاطًا متعددة من الانتقالات من خلال مفاتيح مختلفة. تأثيرات الانتقال مثلما ذكرنا سابقًا، فإنّه ولكي يحدث تأثير الانتقال يجب أن يحدث تغير في حالة العنصر، كذلك يجب تعريف أنماط مختلفة لكل حالة من هذه الحالات. وأسهل طريقة لتحديد الأنماط لمختلف الحالات هي استخدام أشباه الأصناف التالية: :hover، :focus، :active ،:target. هناك أربعة خصائص مرتبطة بتأثيرات الانتقال وهي: transition-property، transition-duration، transition-timing-function، و transition-delay. ليست جميع هذه الخصائص مطلوبة لإنتاج تأثيرات الحركة، ولكن الخصائص الثلاثة الأولى هي الأكثر استخدامًا. في المثال التالي سيتغير لون خلفية background الصندوق خلال ثانية واحدة وبطريقة تدريجية خطّية linear. .box { background: #2db34a; transition-property: background; transition-duration: 1s; transition-timing-function: linear; } .box:hover { background: #ff7b29; } سوابق المتصفحات Vendor Prefixes لا تتضمن الشفرة السابقة كما هو الحال مع جميع الشفرات البرمجية في هذا المقال على سوابق المتصفحات، وهذا الأمر مقصود والهدف منه هو الحفاظ على الشفرة بسيطة وصغيرة الحجم وقابلة للفهم. ولتحصل على أفضل دعم في جميع المتصفحات عليك باستخدام سوابق المتصفحات. ولغرض التوضيح فقط، فإن الشفرة السابقة ستكون هكذا: .box { background: #2db34a; -webkit-transition-property: background; -moz-transition-property: background; -o-transition-property: background; transition-property: background; -webkit-transition-duration: 1s; -moz-transition-duration: 1s; -o-transition-duration: 1s; transition-duration: 1s; -webkit-transition-timing-function: linear; -moz-transition-timing-function: linear; -o-transition-timing-function: linear; transition-timing-function: linear; } .box:hover { background: #ff7b29; } خاصية الانتقال تحدّد خاصية transition-property بدقّة الخصائص التي سيتم تغييرها بالتزامن مع الخصائص الانتقالية الأخرى. تتغيّر جميع الخصائص - مبدئيًّا - ضمن الحالات المختلفة للعنصر، ولكن يمكن تحديد الخصائص المراد تغييرها ضمن قيمة transition-property وستتأثّر تلك الخصائص فقط بتأثيرات الانتقال. في المثال السابق قمنا بتعريف الخاصية background قيمةً لـ transition-property، وهذا يعني أنّها ستكون الخاصية الوحيدة التي ستخضع للتغيّر خلال ثانية واحدة وبطريقة تدريجية خطّية linear. بمعنى أنّه في حال وجود عدد من الخصائص لعنصر معيّن عند تغيّر حالته، ولكنّها غير معرّفة كقيمة لـ transition-property فإنّها لن تتلقى تأثيرات الانتقال كتلك المعرّفة في الخصائص transition-duration أو transition-timing-function. إن كنت بحاجة إلى تغيير عدد من الخصائص في الوقت نفسه، فيمكنك أن تفصلها بفواصل، كذلك يمكنك استخدام القيمة all لتطبيق تأثيرات الانتقال على جميع خصائص العنصر. .box { background: #2db34a; border-radius: 6px transition-property: background, border-radius; transition-duration: 1s; transition-timing-function: linear; } .box:hover { background: #ff7b29; border-radius: 50%; } الخصائص التي تسمح بتطبيق تأثيرات الانتقال عليها من الضروري الانتباه إلى أنّه لا تتقبّل جميع الخصائص تطبيق تأثيرات الانتقال عليها، بل فقط تلك العناصر التي تمتلك نقاطًا وسطية قابلة للتعريف. فخصائص مثل الألوان، حجم الخط وما شابهها يمكن تطبيق تأثيرات الانتقال عليها نظرًا لكونها تملك قيمًا معرّفة بين بعضها البعض. في حين أن خاصية display على سبيل المثال لا يمكنها تقبّل تأثيرات الانتقال لأنّها لا تملك أيّة قيم وسطية. القائمة التالية تبيّن مجموعة من الخصائص الشائعة التي يمكن تطبيق تأثيرات الانتقال عليها: background-color background-position border-color border-width border-spacing bottom clip color crop font-size font-weight height left letter-spacing line-height margin max-height max-width min-height min-width opacity outline-color outline-offset outline-width padding right text-indent text-shadow top vertical-align visibility width word-spacing z-index مدة تأثير الانتقال يمكن تعيين المدة التي يستغرقها تأثير الانتقال من خلال خاصية transition-duration، ويمكن استخدام وحدات توقيت عامة وهي الثانية (s) والمللي ثانية (ms)، ويمكن استخدام الأعداد العشرية في تعيين هذه القيمة، فمثلًا يمكن استخدام الصيغة التالية: .2s. عند تطبيق تأثير الانتقال على خصائص متعددة يمكن تعيين مدد متعددة أيضًا لكل خاصية، وكما هو الحال عند تعيين قيمة خاصية transition-property يمكن استخدام الفاصلة لتعيين قيم متعددة لخاصية مدة الانتقال. ولكن من الواجب الانتباه إلى أنّه عند تعيين مدد متعددة يجب مراعاة الترتيب المتّبع في تعيين الخصائص التي ستتلقّى تأثير الانتقال بواسطة خاصية transition-property، بمعنى أنّ القيمة الأولى في هذا الخاصية ستأخذ القيمة الأولى في خاصية transition-duration وهكذا دواليك. وإن طُبِّق تأثير الانتقال على خصائص متعددة مع تعيين قيمة واحدة لمدّة التأثير، فإن تلك القيمة ستطبّق على جميع الخصائص. .box { background: #2db34a; border-radius: 6px; transition-property: background, border-radius; transition-duration: .2s, 1s; transition-timing-function: linear; } .box:hover { background: #ff7b29; border-radius: 50%; } توقيت تأثير الانتقال تُستخدَم خاصّية transition-timing-function لتعيين سرعة تأثير الانتقال، ويمكن لهذا التأثير أن يمتلك سرعات مختلفة ضمن مدة زمنية واحدة وذلك بعد تعيين المدة من خلال خاصية transition-duration. وهناك قيم مفتاحية شائعة تُستخدَم مع هذه الخاصية مثل linear، ease-in، ease-out و ease-in-out. عند استخدام قيمة linear فإن الحركة تكون بسرعة ثابتة من حالة إلى أخرى، أما عند استخدام القيمة ease-in فإن الحركة تبدأ ببطء وتتسارع تدريجيًا مع مرور الوقت، وعند استخدام القيمة ease-out فإن الحركة تبدأ بسرعة وتتباطئ تدريجيًا مع مرور الوقت. أما عند استخدام القيمة ease-in-out فإن الحركة تبدأ بطيئة ثم تتسارع في الوسط لتعود إلى التباطؤ قبل الوصول إلى نهاية المدة المحددة للتأثير. تمتلك كل دالة توقيت منحنى بيزيه مكعبي Cubic-Bezier curve يمكن تعيين قيمه بدقّة بواسطة القيمة cubic-bezier(x1, y1, x2, y2) إضافة إلى قيم أخرى هي step-start و step-stop إلى جانب قيمة فريدة تحدّد من خلال steps(number_of_steps, direction). عند تطبيق تأثر الانتقال على خصائص متعددة، يمكن تعريف دوال توقيت متعددة أيضًا، وكما هو الحال مع قيم خصائص الانتقال الأخرى، يمكنك فصل القيم المتعددة بفواصل. .box { background: #2db34a; border-radius: 6px; transition-property: background, border-radius; transition-duration: .2s, 1s; transition-timing-function: linear, ease-in; } .box:hover { background: #ff7b29; border-radius: 50%; } تأخير تأثير الانتقال إضافة إلى التصريح عن كل من خاصية التأثير والمدة الزمنية ودوال التوقيت، يمكن كذلك تعيين فترة تأخير تأثير الانتقال من خلال خاصّية transition-delay، حيث تُعيَّن قيمة زمنية - بالثانية أو بالمللي ثانية - تحدد الفترة الزمنية التي تسبق انطلاق التأثير. وكما هو الحال مع جميع خصائص تأثيرات الانتقال، يمكن تأخير عدد من التأثيرات من خلال إضافة قيم متعددة مفصولة بفواصل. .box { background: #2db34a; border-radius: 6px transition-property: background, border-radius; transition-duration: .2s, 1s; transition-timing-function: linear, ease-in; transition-delay: 0s, 1s; } .box:hover { background: #ff7b29; border-radius: 50%; } الصيغة المختصرة لتأثيرات الانتقال قد يصبح التصريح عن خصائص الانتقال واحدة تلو الأخرى أمرًا مجهدًا، خصوصًا مع استخدام سوابق المتصفحات، ولحسن الحظّ يمكن اختصار العملية من خلال استخدام الخاصية transition والتي تدعم جميع الخصائص والقيم السابقة. فباستخدام قيمة transition لوحدها، يمكنك تعريف كل خصائص تأثيرات الانتقال وبالترتيب التالي: transition-property, transition-duration, transition-timing-function, وأخيرًا transition-delay. ولا حاجة لاستخدام الفواصل عند تعريف قيم هذه الخصائص إلا إذا كنت تعرّف تأثيرات انتقال متعددة. ولتعريف تأثيرات انتقال متعددة في سطر واحد، يمكنك تعيين قيم كل مجموعة من التأثيرات على حدة وفصل أي مجموعة تأثيرات إضافية باستخدام الفواصل. .box { background: #2db34a; border-radius: 6px; transition: background .2s linear, border-radius 1s ease-in 1s; } .box:hover { color: #ff7b29; border-radius: 50%; } تطبيق تأثيرات الانتقال على أيقونة HTML <button>Awesome Button</button> CSS button { border: 0; background: #0087cc; border-radius: 4px; box-shadow: 0 5px 0 #006599; color: #fff; cursor: pointer; font: inherit; margin: 0; outline: 0; padding: 12px 20px; transition: all .1s linear; } button:active { box-shadow: 0 2px 0 #006599; transform: translateY(3px); } (تجربة حية) بطاقة متقلّبة HTML <div class="card-container"> <div class="card"> <div class="side">...</div> <div class="side back">...</div> </div> </div> CSS .card-container { height: 150px; perspective: 600; position: relative; width: 150px; } .card { height: 100%; position: absolute; transform-style: preserve-3d; transition: all 1s ease-in-out; width: 100%; } .card:hover { transform: rotateY(180deg); } .card .side { backface-visibility: hidden; height: 100%; position: absolute; width: 100%; } .card .back { transform: rotateY(180deg); } (تجربة حية) تأثيرات الحركة تؤدي تأثيرات الانتقال عملًا متميّزًا من خلال إضفاء التأثيرات البصرية عند الانتقال من حالة إلى أخرى، وهي مناسبة جدًّا لمثل هذه الحالات التي يحدث فيها تغيّر الحالة لمرة واحدة فقط. ولكن عندما تكون بحاجة إلى التحكم في الأمور على نحو أدقّ فستضطر إلى إضافة المزيد من الحالات إلى تأثيرات الانتقال، وهنا يأتي دور تأثيرات الحركة. مفاتيح تأثيرات الحركة يمكن استخدام قاعدة @keyframes لتعيين النقاط التي يجب أن يحدث فيها تأثير الانتقال. تتضمن هذه القاعدة اسم تأثير الحركة، والنقاط التي تحدث فيها الحركة، والخصائص التي نرغب في تحريكها. @keyframes slide { 0% { left: 0; top: 0; } 50% { left: 244px; top: 100px; } 100% { left: 488px; top: 0; } } إضافة سوابق المتصفحات إلى قاعدة keyframe تجب إضافة سوابق المتصفحات إلى قاعدة @keyframes كما هو الحال مع خصائص تأثيرات الانتقال والحركة، وكما يلي: @-moz-keyframes @-o-keyframes @-webkit-keyframes يحمل تأثير الحركة في المثال السابق اسم slide، وقد أفصحنا عنه مباشرة بعد قاعدة @keyframes. تُعيَّن نقاط حدوث الحركة باستخدام النسبة المئوية، ابتداءً من 0% وانتهاءً بـ 100% ونقطة وسطية عند 50%. كما يمكن استخدام الكلمات المفتاحية from و to بدلًا من 0% و 100%، كما يمكن تعيين أي عدد من النقاط ضمن هذا المدى. يُصرَّح عن خصائص العنصر التي نرغب في تحريكها داخل كل نقطة، وفي المثال السابق كانت الخصائص المطلوبة هي left و top. من الضروري الانتباه إلى أنّه يمكن تحريك خاصّيّة واحدة فقط كما هو الحال مع تأثيرات الانتقال. فعلى سبيل المثال إن كنت ترغب في تحريك عنصر من الأعلى إلى الأسفل، فإن التحريك من top:0; إلى bottom: 0; لن يجدي نفعًا، لأن الحركة يمكن تطبيقها على خاصية واحدة فقط، وليس من خاصّية إلى أخرى؛ لذا من أجل تحريك العنصر من الأعلى إلى الأسفل يجب التحريك من top: 0; إلى top: 100%;. (تجربة حية). اسم تأثير الحركة بعد تعيين مفاتيح الحركة الخاصّة بتأثير الحركة، يجب إسنادها إلى أحد العناصر في الصفحة. وللقيام بذلك نستخدم خاصّية animation-name مع الاسم الذي عيّناه لقاعدة @keyframes، وتستخدم هذه الخاصّية مع العنصر الذي نرغب في تطبيق تأثيرات الحركة عليه. .stage:hover .ball { animation-name: slide; } لا يكفي استخدام خاصّية animation-name لوحدها، بل يجب تعيين قيمة لخاصية animation-duration ليعرف المتصفح المدة اللازمة لانتهاء التأثير. مدة تأثير الحركة، دالة التوقيت، وتأخير الحركة بعد أن تُعيّن قيمة خاصّية animation-name ستسلك تأثيرات الحركة نفس سلوك تأثيرات الانتقال، إذ يمكن تعيين مدّة التأثير وتعريف دالة التوقيت وتأخير التأثير حسب الرغبة. وليبدأ تأثير الحركة بالعمل فإنه بحاجة إلى تعيين مدّة التأثير من خلال خاصية animation-duration، وكما هو الحال مع تأثيرات الانتقال، يمكن لقيمة هذه الخاصّية أن تكون بالثانية أو بالمللي ثانية. .stage:hover .ball { animation-name: slide; animation-duration: 2s; } يمكن تعريف دالّة التوقيت وتأخير تأثّر الحركة باستخدام الخاصّيتين animation-timing-function و animation-delay على التوالي، ولا يوجد أي فرق في القيم التي تستقبلها هاتان الخاصيتان أو طريقة عملها بين تأثيرات الانتقال وتأثيرات الحركة. .stage:hover .ball { animation-name: slide; animation-duration: 2s; animation-timing-function: ease-in-out; animation-delay: .5s; } في المثال التالي سترتدّ الكرة (العنصر<figure> مع النمط ball) أثناء تحرّكها إلى جهة اليسار، ويمكن مشاهدة الحركة من خلال تمرير مؤشر الفأرة فوق العنصر <div> ذي النمط stage. HTML <div class="stage"> <figure class="ball"></figure> </div> CSS 0% { left: 0; top: 0; } 50% { left: 244px; top: 100px; } 100% { left: 488px; top: 0; } } .stage { height: 150px; position: relative; } .ball { height: 50px; position: absolute; width: 50px; } .stage:hover .ball { animation-name: slide; animation-duration: 2s; animation-timing-function: ease-in-out; animation-delay: .5s; } (تجربة حية) تخصيص تأثيرات الحركة تتيح تأثيرات الحركة المزيد من التخصيص لسلوك العنصر، فيمكن تعيين عدد مرات تكرار الحركة والاتجاه الذي ستنتهي فيه الحركة. تكرار تأثير الحركة لا يتكرر تأثير الحركة بصورة افتراضية بل يتوقف بعد إتمام الدورة الأولى، ولجعل التأثير يتكرّر مرات متعددة يمكن استخدام خاصّية animation-iteration-count، وتتضمن قيم هذه الخاصية إمّا أعداد صحيحة أو كلمة infinite المفتاحية. في الحالة الأولى سيتكرر تأثير الحركة بحسب العدد المحدّد، أما في الحالة الثانية فإن تأثير الحركة سيتكرّر إلى ما لا نهاية. .stage:hover .ball { animation-name: slide; animation-duration: 2s; animation-timing-function: ease-in-out; animation-delay: .5s; animation-iteration-count: infinite; } (تجربة حية) اتجاه تأثير الحركة وإلى جانب القدرة على تعيين عدد مرات تكرار تأثير الحركة، يمكن كذلك تعيين اتجاه انتهاء التأثير باستخدام الخاصية animation-direction، وتأخذ هذه الخاصية القيم: normal، reverse، alternate و alternate-reverse. استخدام القيمة normal يعني أن الحركة ستسير بشكل طبيعي من البداية إلى النهاية، أما القيمة reverse فتعني أن الحركة ستسير بعكس الطريقة المصرّح عنها في قاعدة @keyframes، أي ستبدأ الحركة من 100% وتنتهي بـ 0%. عند استخدام القيمة alternate فإن الحركة ستسير جيئة وذهابًا، أي ستبدأ الحركة من 0% لتتّجه إلى 100% ثم تعود من هذه القيمة إلى 0% مرة أخرى. يمكن تحديد عدد مرّات تكرار الحركة بالاتجاه الأمامي والخلفي وذلك باستخدام الخاصّية animation-iteration-count، حيث يبدأ العدّ من الرقم 1 فتبدأ الحركة من القيمة 0% وصولًا إلا 100% وتكتمل الدورة الأولى، بعد ذلك نعود من القيمة 100% إلى 0% فتضاف دورة أخرى إلى العدّاد، وبهذا نحصل على دورتين بالمجمل. تعمل القيمة alternate كذلك على قلب دوال التوقيت عند بدء الحركة بشكل عكسي، فإن كان تأثير الحركة يستخدم القيمة ease-in عند التحرك من 0% إلى 100% فإنّه سيستخدم القيمة ease-out عند الانتقال من 100% إلى 0%. أخيرًا، تدمج القيمة alternate-reverse القيمتين alternate و reverse، وتكون الحركة بالاتجاه الخلفي ثم بالاتجاه الأمامي، أي تبدأ الحركة من 100% باتجاه 0% لتعود مرّة أخرى إلى 100%. .stage:hover .ball { animation-name: slide; animation-duration: 2s; animation-timing-function: ease-in-out; animation-delay: .5s; animation-iteration-count: infinite; animation-direction: alternate; } (تجربة حية) حالة تأثير الحركة تسمح خاصّية animation-play-state بتشغيل تأثير الحركة أو إيقافه مؤقتًا باستخدام خيارين هما running و paused على التوالي. عند إعادة تشغيل تأثير الحركة المتوقف مؤقتًا فإنّ التأثير يعود إلى الحركة من النقطة التي توقّف عندها وليس من نقطة البداية. في المثال التالي تم تعيين قيمة paused للخاصّية animation-play-state وذلك عند النقر على العنصر ذي النمط stage. لاحظ كيف أن الحركة ستبقى متوقّفة بصورة مؤقتة إلى حين إفلات زر الفأرة. .stage:hover .ball { animation-name: slide; animation-duration: 2s; animation-timing-function: ease-in-out; animation-delay: .5s; animation-iteration-count: infinite; animation-direction: alternate; } .stage:active .ball { animation-play-state: paused; } (تجربة حية) نمط التعبئة الخاصّ بتأثير الحركة تعرّف الخاصّية animation-fill-mode النمط الذي سيطبّق على العنصر قبل أو بعد أو قبل وبعد عمل تأثير الحركة، ولهذه الخاصّية أربع قيم هي: none, forwards, backwards, و both. عند استخدام القيمة none لن يتم تطبيق أي نمط على العنصر قبل أو بعد تطبيق تأثير الحركة. القيمة forwards ستحافظ على الأنماط المعرّفة في المفتاح الحركي الأخير، ولكن يجب الانتباه إلى أن هذه الأنماط قد تتأثّر بقيم الخاصّيتين animation-direction و animation-iteration-count فتتغيّر نقطة انتهاء تأثير الحركة. القيمة backwards ستطبّق الأنماط الموجودة في المفتاح الحركي الأول بمجرد أن يتم تعريفها، وقبل انطلاق تأثير الحركة، وهذا يتضمن تطبيق تلك الأنماط خلال مدة التأخير المحدّدة لتأثير الحركة. إلى جانب ذلك، فإنّ القيمة backwards قد تتأثّر بقيمة الخاصّية animation-direction. وأخيرًا، فإنّ القيمة both تجمع في عملها بين عمل القيمتين السابقتين. .stage:hover .ball { animation-name: slide; animation-duration: 2s; animation-timing-function: ease-in-out; animation-delay: .5s; animation-fill-mode: forwards; } .stage:active .ball { animation-play-state: paused; } (تجربة حية) صيغة مختصرة لتأثيرات الحركة كما هو الحال مع تأثيرات الانتقال، هناك صيغة مختصرة لتعريف تأثيرات الحركة، ويتم ذلك من خلال استخدام الخاصية animation بدلًا من تعريف القيم واحدة تلو الأخرى. وتأخذ القيم التابعة لهذه الخاصية الترتيب التالي: animation-name, animation-duration, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, animation-fill-mode, وأخيرًا animation-play-state. .stage:hover .ball { animation: slide 2s ease-in-out .5s infinite alternate; } .stage:active .ball { animation-play-state: paused; } (تجربة حية) ترجمة - وبتصرّف - للمقال Transitions & Animations لصاحبه Shay Howe.
  10. في إحدى الأجزاء الفقيرة من جزيرة باهاما الكبرى وبعيدًا عن الشاطئ والمناطق السياحية، هناك مساحات شاسعة من الأراضي البائسة والتي تضم منازل شبه مدمَّرة وأكوامًا من الحديد وأحجار البناء. هذا ما ظننته للوهلة الأولى، ولكن الواقع كان مختلفًا تمامًا. يحصل كل مواطن باهاماني بعد ولادته مباشرة على قطعة من الأرض، وبدءًا من تلك اللحظة وحتى يدخل عامه الثامن عشر، يقدّم الأهل والأقارب في كل عيد ميلاد بدلًا من الهدايا وما شابهها، مواد البناء بدءًا بالإسمنت وأحجار البناء مرورًا بحديد التسليح والخشب وانتهاءً بطلاء الجدران. تُجْمع هذه المواد في مكان آمن وجاف إلى أن يصبح الفرد قادرًا على رصف أحجار البناء الواحدة فوق الأخرى، فيذهب إلى ذلك المكان في كل عيد ميلاد ليبني جزءًا يسيرًا من منزله المستقبلي. وعندما يصل الفرد إلى سنّ الثامنة عشرة يكون مستعدًا للانتقال من بيت والديْه إلى البيت البسيط الذي بناه بيديه. إنّه واحد من التقاليد المدهشة والملهمة والجميلة(*)، ولكنني أظنّ أنّني أرى أمرًا محزنًا ومثيرًا للشفقة، قبل أن أعرف حقيقة ما كنت أنظر إليه. أحيانا، هذا هو ما يحصل بالضبط عندما ينظر الأشخاص المقرّبون منك بنفس الطريقة إلى شركتك الناشئة وهي تتطوّر وتتقدّم، فهم لا يفهمون ما يجري بالفعل؛ ولهذا السبب فإنّهم ينظرون إلى شركتك الناشئة على أنّها ركام من الأشياء غير المهمّة، بدلًا من النظر إليها على أنّها أساس لشيء عظيم في المستقبل. فهم يرون أن فريقًا مكوّنًا من شخصين (أنت أحدهما) يعملان في غرفة المعيشة ما هو إلا علامة على فشل المشروع أو انهياره بدلًا من كونه إحدى المراحل الطبيعية التي تمرّ بها أي شركة في العالم. لا بأس في أغلب الأحيان أن لا يتفهّم الآخرون طبيعة عملك، فلو كان هؤلاء الأشخاص هم أصدقاء تربطك بهم علاقة سطحية ولا تلتقي بهم إلا في الحفلات، فيمكن حينئذٍ أن تتجنب الحديث معهم حول العمل. ولكن المشكلة هي أن يكون هؤلاء الأشخاص هم عائلتك أو أصدقاؤك المقرّبون، والذين ترغب في أن يدركوا ما تقوم به بدلًا من إظهار التعاطف، فذلك لن يجدي نفعًا وقد تشعر فيما بعد بأنّك تثير شفقتهم وتستجدي عاطفتهم. ستجد نفسك وحيدًا عندما تبدأ العمل على شركتك الخاصة فلا أحد يتفهّم ما تقوم به؛ لذا فمن الضرورة بمكان وجود أشخاصٍ يتفهّمون طبيعة عملك، وهنا تظهر إحدى أكبر فوائد الانخراط في إحدى مجموعات الشركات الناشئة المحلية في بداية مشوارك. ليس بالضرورة أن تكوّن شبكة واسعة من العلاقات، بل المهمّ أن تعثر على أصدقاء يمكنك الوثوق بهم، على أن يكونوا قادرين على رؤية الإنجازات وليس النواقص فقط. قد تجد صعوبة في أن تشرح للآخرين (والديك، زوجك/زوجتك، أصدقاءك المقربين) طبيعة عملك، ولحسن حظّي فإنّ والدي وزوجتي قد أنشأ كل منهما عددًا من الشركات من قبل، وقد تمكّنت من جذب أحد أصدقائي إلى عالم الشركات الناشئة إلى جانبي؛ لذا لم أواجه صعوبة تذكر في هذا الصدد، ولكنّي رأيت الكثير من مؤسسي الشركات الذي واجهوا الكثير من الصعوبات ولم يلقوا آذانًا صاغية لدى أقاربهم وأصدقائهم. إنْ أبدى شخص اهتمامه بالأمر فيمكنك أن تشرح له القصة الحقيقية، كما فعل معي من أخبرني بحقيقة المنازل الباهامية. وإن كانوا يرغبون بالقراءة عن الموضوع فيمكنك أن ترسل إليهم كتاب Jessica Livingstone والذي يحمل عنوان Founder’s at Work. تبيّن Jessica في هذا الكتاب - بأسلوب رائع - أن جميع المنازل الجميلة قد بدأت بكومة من أحجار البناء والإسمنت، وهي إحدى مراحل عملية بناء المنزل وليست مشكلة على الإطلاق، ولكنّنا غالبًا ما نكون غير قادرين على رؤية عملية البناء. (*) أدركت مؤخّرًا بأنّ هذا التقليد قد بدأ بالزوال بسبب المخاطر الحقيقية التي تواجهها هذه المنازل غير النظامية - التي بناها أشخاص غير متخصّصين في البناء - نظرًا لوقوعها في منطقة الأعاصير. آخر زيارة لي لتلك المنطقة كانت سنة 2000، وآمل أنّهم قد وجدوا طريقة للمحافظة على هذا التقليد دون التفريط في السلامة والأمان. ترجمة - وبتصرّف - للمقال Half-built houses and doing something people don’t get لصاحبه Rob Fitzpatrick. حقوق الصورة البارزة محفوظة لـ Freepik
  11. من السهل على المرء أن يتذكّر الأمور الجيّدة في شركته الناشئة، ولكن إليك فيما يلي ثلاث قصص في شركتنا الناشئة حيث لم تجرِ الأمور على ما يرام. الاعتماد بالكامل على شخص واحد خلال أول سنتين من عمر موقع Justin.tv (الذي أصبح twitch.tv)، كان لدينا شخص واحد فقط - يدعى Emmett - يعرف كيف تعمل خواديم التطبيق، وكذلك الأمر بالنسبة لخواديم المحادثة وهو Bill، وKyle بالنسبة لنظام الفيديو. وبما أنّنا نتعامل طوال الوقت، فقد كان هذا الوضع مقبولًا نوعًا ما، فقد كانت لدينا مشاكل أكبر من هذه، إذ لم يكن لدينا عائدات وكان منتجنا غير مستقرّ على الإطلاق. بما أنّنا كنّا مدراء شباب وسيئين للغاية، فقد اعتمدنا سياسة “الإجازات المفتوحة” والتي تُرجمت إلى إعراضنا عن أخذ الإجازات، ومع ذلك، فقد اختار المؤسس الشريك Kyle أن يأخذ إجازة في عطلة نهاية الأسبوع ليسافر فيها إلى Tahoe. كانت مغادرة الأشخاص في عطلات نهاية الأسبوع أمرًا مرعبًا بالنسبة لنا، لأنّ تدفّق الزوّار يصل إلى ذروته في هذه الأوقات (وبما أنّنا كنا نقدّم خدمة البثّ المباشر، فقد كانت نسبة تدفّق الزوّار في وقت الذروة أكثر بـ 35 مرة من الأوقات الاعتيادية). واستعدادًا لذلك، ضبط Kyle نظام الفيديو، ووعدنا بأنّه سيكون على تواصل معنا في حال حدوث أيّ طارئ. في يوم الجمعة الذي تركنا فيها Kyle أصيب نظام الفيديو بخلل أوقفه عن العمل، ولأنّ موقعنا كان يقدّم بثًّا مباشرًا حينها، وبسبب أنّ السند الخلفي Backend لموقعنا كان غير مستقرّ أبدًا، فقد كنا نمرّ بحالة نفسية هستيرية بسبب القلق والارتياب. في كل مرّة كنا نمرّ فيها بمثل هذه المواقف كنّا نتدّخل ونصلح الخلل ونعيد الأمور إلى نصابها، وخلال السنتين والنصف الأولى من عمر شركتنا كنا نمرّ بدورات من النمو والركود، فتنمو شركتنا في شهر ثم تعود إلى المشاكل في الشهر اللاحق، وغالبًا ما كانت المشاكل تحدث لأنّنا نتجاوز الحدّ المسموح به للكتابة على الأقراص، أو حد حزمة البيانات، أو المعالجة أو الذاكرة أو أنّنا ننسى تعبئة واصفات الملف File descriptors (وقد كانت هناك لوحة خلف مكتب Emmett مكتوب عليها “هل تأكدت من عدم تجاوز حدود واصفات الملفات؟“). على كل حال، بقي نظام عرض الفيديو في حالة عدم الاستجابة، لذا التجأنا إلى الأداة الوحيدة في جعبتنا، وهي الاتصال بـ Kyle. ولكن ما من ردّ. حاولنا الاتصال به مرارًا وتكرارًا ولكن دون جدوى. كان مؤشر التحميل في مشغّل الفيديو يدور ويدور دون توقف وكانت الشاشة سوداء. حاول Emmett الولوج إلى نظام الفيديو بحثًا عن الخلل، ولكنّه لم يفلح في الوصول إلى أيّة نتيجة. كان الوقت يمرّ وقلقنا يزداد على نحو متسارع، و Kyle لا يجيب على اتصالاتنا، وحينها خطرت على بال Michale فكرة: نحن نملك عنوان النزل الذي يقضي فيه Kyle عطلته، يمكننا إذًا أن نطلب من أحد الأشخاص أن يذهب إليه ويطلب منه الإجابة على الهاتف. لم تكن خدمات مثل Uber أو Instacart أو Postmates موجودة في ذلك الوقت، لذا لجأنا إلى خدمة توصيل البيتزا. اتّصل Michael بمطعم للبيتزا في Tahoe وأجرى المحادثة التالية مع أحدها: “مرحبًا” “أهلًا، هل يمكنك إرسال سائق إلى (عنوان Kyle) ليوصل إليه رسالة؟” “ما هو نوع البيتزا الذي تريده؟” “نحن لا نرغب بالبيتزا، هل يمكنك فقط إرسال أحد ما إلى ذلك العنوان؟” “هل تريد طلب البيتزا؟” “حسنًا، سندفع ثمن البيتزا، ولكن هل يمكنك إرسال شخص ما إلى ذلك العنوان فورًا؟” “ما نوع البيتزا التي تريدها؟” “لا أعلم، بيتزا بالجبن من الحجم الكبير”. “حسنًا سيتطلب إعدادها 15 إلى 20 دقيقة”. “لا تنتظر البيتزا، سندفع لك ثمنها ولكن أرسل أحد الأشخاص الآن”. “هل أنت متأكد من أنك لا تريد البيتزا؟” “نعم.” “حسنًا سيكون ثمنها 22.90$، هل هذا جيّد؟” “نعم!!”. “حسنًا، ما هي الرسالة التي تريد إرسالها؟” “لقد توقّف الموقع الإلكتروني عن العمل”. بعد 15 دقيقة طرق أحد الأشخاص الباب على Kyle، ففتح Kyle الباب مترنّحًا لأنّه كان نائمًا، فقرأ عليه موظف التوصيل عبارة “لقد توقف الموقع الإلكتروني عن العمل” والتي كانت مكتوبة على الجهة الخلفية من وصل الاستلام. احتاج Kyle إلى 45 ثانية للولوج إلى الواجهة الخلفية للموقع وتشغيل شِفرة إعادة تشغيل خادوم الفيديو ليعود الموقع إلى العمل من جديد. بعد أن عادت الأمور إلى مجاريها، تلقّينا اتصالًا من Kyle: “لماذا لم ترسلوا البيتزا يا شباب؟ أنا جائع جدًّا”. بعد فترة من الزمن أصبح نظام الفيديو غير المستقر والذي طوّره Kyle رابع أكبر مستهلك لحزم البيانات في أمريكا الشمالية. عدم الاستعداد الجيّد والتذرّع بالكذب أوّل سلسلة إذاعية كبيرة فعلًا قمنا بإذاعتها كانت مع فرقة Jonas Brothers، في الفترة التي برز فيها نجمهم على الساحة الفنية. وقد سمع أحد أعضاء فريق الإدارة في تسجيلات Hollywood عن موقع Justin.tv وفكّر بأنّ البث المباشر لمقاطع الفيديو طريقة جيّدة للترويج للفرقة على شبكة الإنترنت. تواصل هذا الشخص معنا ووافقوا على أداء بعض المقاطع الترويجية على الموقع تزامنًا مع موعد إطلاق ألبومهم الجديد. لم نكن ندرك حينها بأنّنا غير مستعدّين على الإطلاق لطوفان من تدفّق الزوار ألا وهو الفتيات المراهقات. تعرّض البث الأوّل إلى بعض المشاكل والتأخير، ولكن التجربة بمجملها كانت جيّدة، وقد بدا لنا أنّ الجمهور قد تقبّل الأمر، ووافقت الفرقة على الاستمرار. أما العرض الثاني فقد أُعِدَّ ليكون أكبر بكثير من العرض السابق، فقد روّج فريق Jonas Brothers لهذا العرض على نطاق واسع وقد كان موعد العرض قريبًا جدًّا من موعد إطلاق الألبوم. وقد حاولنا أن نستفيد من أخطائنا والمشاكل التي واجهتنا في العرض الأول لتحسين نظام الفيديو في موقعنا. في مجال الحوسبة هناك مصطلح يدعى بـ “مشكلة الجمهور الكبير جدًّا Thundering herd” حيث تنتظر العديد من العمليات الحدث ذاته، وعند وقوعه تبدأ هذه العمليات بالعمل سويّة، ولكن الخادوم يتعامل مع عملية واحدة فقط، وتتوقّف بقية العمليات عن العمل مجدّدًا، إلا لطلب الوصول إلى المصادر. تستهلك هذه الحالة دورات المعالج وتؤدي في نهاية المطاف إلى توقف النظام عن العمل بشكل كامل. كانت هذه هي المرة الأولى التي نسمع فيها بهذه المشكلة، وقد توقف الموقع الإلكتروني عن العمل لمدة 30 دقيقة قبل موعد بث المقطع الثاني، والسبب أن الكثير من المعجبين قد دخل إلى الموقع الإلكتروني وبدأوا بالقيام بالعديد من الأشياء: تسجيل حسابات جديدة في الموقع، تسجيل الدخول، إضافة صفحة قناة Jonas Brothers إلى المفضَّلة. كل هذه العمليات الديناميكية، إضافة إلى التحديث المستمر للصفحة للتأكد من أنّ البثّ يعمل جيّدًا (أو ما نراه مكافئًا لعملية “إدخال الخدمة في وضع السبات، ثم إيقاظها مجدّدًا”) ولّد ضغطًا هائلًا على خواديم التطبيق، ما تسبّب في توقف الموقع الإلكتروني عن العمل، وفي الوقت ذاته توقّف نظام الفيديو عن العمل أيضًا، بسبب وجود عدد كبير جدًّا من الطلبات المتزامنة، ولم نكن قادرين على توفير ما يكفي من الخواديم للردّ على تلك الطلبات. حاول Emmett و Kyle تحويل الصفحة إلى ذاكرة التخبئة Cache، وإيقاف الخصائص الديناميكية في الموقع الإلكتروني، وإطلاق التعديلات الإنتاجية إلى مشغّل الفيديو وذلك للتحكم فيه يدويًّا عندما يتلقّى نظام الفيديو الطلبات. ومن جهة أخرى كنت أنا وMichale على اتصال مع إدارة Jonas Brothers لنشرح لهم ما يجري (أو لنقل كنا نحاول ذلك). في بداية الأمر، وقبل حلول موعد البثّ المباشر المتفق عليه، أخبرْنا فريقَ الإدارة بأنّنا أوقفنا الموقع عن العمل لغرض الصيانة ولنتأكد من أنّ كلّ الأمور تجري على خير ما يرام (أنا لا أحاول الافتخار بالكذب هنا، ولكن لم أكن أعرف ماذا أقول لهم). ولكن بعد أن تجاوزنا الوقت المحدّد للبثّ المباشر، نفدت من عندنا الأعذار وبدأنا نخبر كل من يتّصل بنا من فريق الإدارة (في الواقع اتصل بنا عدد من الأشخاص الغاضبين كل بضع دقائق) أن عليه التحدث إلى الشخص الذي لم يجب على الهاتف في تلك اللحظة للحصول على آخر المستجدات (كنا أنا و Michael نقف في الغرفة نفسها ونتصبب عرقًا من شدة القلق والتوتر). في تلك اللحظة التي كنا فيها أنا و Michael في قمّة الرعب، دخل علينا مدير مكتبنا Arram (والذي أسّس فيما بعد ZeroCater) وقال عبارة لم أنسها من ذلك اليوم: “أيها الموظفون لا تزجوا بأنفسكم في مشاكل أخلاقية“. أتمنّى لو أنني أدركت حقيقة هذه الكلمات في تلك اللحظة وتمالكتُ نفسي وقدّمتُ مثالًا يحتذى به في الهدوء والثبات في المواقف الصعبة. ولكن بدلًا من ذلك، صرخت في وجهه قائلًا: “ما الذي تتحدّث عنه يا رجل؟” لأشعر بعدها بالأسى والندم على فعلتي هذه، فقد كنت قاب قوسين أو أدنى من تحقيق النجاح لشركتي الناشئة ولكنّي أرى بأمّ عيني كيف أنّ عملائي يبتعدون عنّي رويدًا رويدًا. تمكّن Kyle و Emmett من إعادة الموقع إلى العمل بعد فترة - أحسست أنها عقد من الزمان - وبدأ البث المباشر متأخرًا بـ 25 دقيقة أو أكثر. وكانت النتيجة أن فقدت Hollywood Records ثقتها فينا وأكملت بقية العروض الترويجية مع Ustream، ولكنّنا تمكّنا من تحقيق التوسّع لشركتنا الناشئة. فكرة سيّئة للغاية يدرك مؤسّسو المواقع الاجتماعية على شبكة الإنترنت وجود قاعدة ثابتة من الزوّار المنحرفين والذين يبحثون عن البذاءة في كل مكان، وكان هذا الأمر يتجلّى في Justin.tv بأن يتوجّه رجل إلى غرف الدردشة التي تتضمن امرأة تجلس أمام الكاميرا ليتفوّه بعدد من الكلمات النابية. وقد طوّرنا في موقعنا الإلكتروني أدوات للتحكم تتيح للناشرين حظر مثل هؤلاء الأشخاص عن المحادثة، ولكن، كما يفعل الإرهابيون، لم ينفكّ هؤلاء الأشخاص يجدون الطريقة تلو الأخرى: إنشاء حسابات جديدة، استخدام عناوين IP جديدة، وإيجاد طرق مختلفة للوصول إلى الموقع على الرغم من الجهود الحثيثة التي كنا نبذلها لمنعهم. ولم يقتصر هذا السلوك على المحادثات وحسب، ففي الواقع، يمكنني القول بأنّ أيّ حقل نصي يمكن أن يملأه المستخدم في موقعنا الإلكتروني قد أُدخلت فيه عبارات إباحيّة مختلفة. ولم يختلف الأمر كثيرًا بالنسبة لمحرّك البحث الخاص بموقعنا الإلكتروني، فقد كانت العبارت الإباحية تتصدر قائمة الكلمات الأكثر بحثًا على موقعنا. في أحد الأيام خطرت على بالي فكرة كنت أظنّ بأنّها فكرة ممتازة. كانت أدوات التحكم في موقعنا فعّالة جدًّا في حذف جميع الكلمات والمحتوى الإباحي من موقعنا الإلكتروني، ومع ذلك لم يتوقف الناس عن البحث عن هذه الكلمات. لذا فكّرت أنه لماذا لا نعيد توجيه أي شخص يبحث عن مثل هذه العبارات إلى أحد المواقع الإباحية، وبهذا نضرب عصفورين بحجر واحد، إذ يحصل المستخدم على المحتوى الذي يريده، ونبعده كذلك عن موقعنا الإلكتروني. بعد فترة خطرت لي فكرة أخرى بعد أن تبيّن لي أنّ المواقع الإباحية تحصل على عائدات جيدة من المستخدمين، إذ أن لهذه المواقع رسومًا مرتفعة للتسويق بالعمولة. فلماذا لا نضيف كود التسويق بالعمولة إلى نظام إعادة التوجيه لدينا لنرى إن كان بإمكاننا الحصول على بعض المال من هذه المواقع؟ كان بناء إعادة توجيه عملية البحث أمرًا سهلًا، وقد اعتمدناه ونسينا أمره لفترة طويلة، ولكن بعد عام تقريبًا تلقّينا رسالة إلكترونية من Jason Kincaid من TechCrunch يطلب فيها منا الحديث عن كيفية الحصول على الأموال من خلال إعادة توجيه المستخدمين إلى المواقع الإباحية. لم نعرف أنا و Michael (مؤسسو المشروع التجاري في ذلك الوقت) ماذا نجيب، فقد كنا نظنّ أنّنا لم نرتكب خطأً أخلاقياً ولكنّنا أدركنا أنّ عبارة “الحصول على الأموال من المواقع الإباحية” كانت سيئة للغاية. راسلنا Jason طالبين منه أن يمهلنا بضع ساعات لنردّ على رسالته، وفي تلك الأثناء أزلنا نظام إعادة التوجيه من الموقع الإلكتروني. ولكن Jason نشر الموضوع بعد 30 دقيقة في TechCrunch، وقبل أن نتمكّن حتى من التفكير في أي شيء نقوله. ما تعلّمته من هذه التجارب هو أنّه إن قمت بشيء تعتقد بأنّ الجمهور سيتفاعل معه على نحو سيء، فلا يمكنك التغاضي عنه أو تجاهله أو الاختباء منه، بل عليك معالجته فورًا وأن تتحمّل جميع العواقب. ترجمة - بتصرّف - للمقال Three stories لصاحبه Justin Kan. حقوق الصورة البارزة محفوظة لـ Freepik
  12. ما عليك إلا أن تخبر الآخرين بأنّك ستطلق مشروعك التجاري، لتتلقّى كمًّا هائلًا من التعليقات المثبّطة: في الواقع، هذه الأمور الشائعة ليست إلا هراءً. فعلى سبيل المثال، لنناقش نسبة الفشل (95%) المزعومة. تشير تقارير وزارة العمل الأمريكية إلى أن نسبة المشاريع التجارية التي تنتهي خلال 4 سنوات هي 24% فقط، و17% منها يكون سبب الإنهاء فيها هو الفشل أو الإفلاس، أما الغالبية العظمى منها فهي مشاريع تجارية انتهت إما بسبب بيع المشروع أو تقاعد صاحبه. لا شكّ في أن البدء بمشروع تجاري لا يخلو من المخاطرة، ولكن هذه الادعاءات تعني أنّ من يقوم بذلك شخص جاهل وطمّاع وأناني ومجنون إلى درجة أنّه يلقي بنفسه إلى الفشل. إن كنت تفكّر في البدء بمشروع تجاريّ جديد الآن، فعليك أن تدرّك المخاطر التي ستواجهك، وأعني بها المخاطر الحقيقية. والحقيقة -كالعادة- تقع بين هذه الادعاءات غير المستندة إلى أدلّة وبين مدوّنات الشركات الناشئة التي لا تظهر لقرّائها غير الطريق المفروش بالزهور. بدايةً يجب علينا تحديد معنى “المشروع التجاري”. أظهر إحصاء أجري سنة 2006 في الولايات المتحدة الأمريكية(1) أن نصف المشاريع التجارية في البلاد هي مصدر دخل ثانوي لأصحابها، وليست مصدر الدخل الرئيسي. كما أظهر الإحصاء أنّ ثلثي المشاريع التجارية قد بدأت من المنزل، وأن 21% فقط منها توظّف شخصًا آخر غير صاحب المشروع. وبعبارة أخرى، فإنّ معظم “المشاريع التجارية” هي مشاريع جانبية قد يطمح أصحابها أو لا يطمحون لتطويرها إلى شيء آخر. المشكلة ليست كون كل هذه المشاريع مشاريع جانبية، ولكن المشكلة هي أنّه لا علاقة لبيانات “المشاريع الجانبية” بالحديث عن اتخاذ الخطوة الأهمّ في حياتك “ترك وظيفتك”. أليست المشاريع الجانبية عرضة للفشل - بطبيعة الحال - أكثر من المشاريع التي تضع فيها كل طاقتك ووقتك وجهدك؟ نعم، هذا يعتمد على تعريفك لـ”الفشل”. فقد وجدت دراسة أسترالية(2) أن 64% من المشاريع التجارية يفشل خلال عشر سنوات إن كان تعريف “فشل المشروع التجاري” هو “عدم الاستمرار في امتلاك المشروع”. ولكن “الفشل” قد يعني أي شيء، مثل إهمال المشروع من قبل مؤسّسه - وهي الحالة الأكثر شيوعًا - خصوصًا عندما يكون مشروعًا بيتيًا ولا يُعدّ مصدر الدخل الرئيسي. ورد في الدراسة ذاتها، أنه لو كان تعريف “فشل المشروع التجاري” هو “الإفلاس” فإن نسبة المشاريع التجارية الفاشلة خلال عشر سنوات تنخفض إلى 5.3% فقط. بمعنى آخر، حتى عندما يبدو للعيان أن المشروع التجاري متوقفٌ عن العمل، فإن الإفلاس ليس أمرًا حتميًا. وماذا بشأن ساعات العمل الطويلة التي تسمع عنها؟ في الواقع، هذا صحيح، فكل من أعرفه من ذوي المهن الحرة (وأنا منهم) يعمل أكثر من الموظفين (باستثناء بعض المهن ذات الطبيعة الصارمة مثل الخدمات الطبية والقانونية والمحاسبية). إليك بعض الأرقام الموثوقة: يشير تقرير الحكومة الكندية إلى أن أصحاب المهن الحرة يعملون 5 ساعات أكثر من الموظفين في كل أسبوع. ولكن الحقيقة هنا هي أن 33% من أصحاب المهن الحرة يعملون أكثر من 50 ساعة مقارنة بـ 5% فقط من الموظفين. وماذا عن الحصول على الأموال؟ تشير دراسات الاتحاد الوطني للأعمال المستقلة NFIB إلى أن ثلث المشاريع التجارية يحقق أرباحًا، والثلث الآخر في حالة توازن بين النفقات والعائدات (نقطة تعادل break-even)، أما الثلث الأخير فيخسر الأموال. ممّا سبق يمكن أن نثبت بعض الحقائق: “فقدان المال” أمر سيء للغاية وأسوأ حتى من البقاء دون عمل، وتساوي النفقات والعائدات ليس أفضل بكثير. وهذا يعني أن البدء بمشروع تجاري ينطوي على مخاطرة حقيقية، ولأزيدك من الشعر بيتًا فإنّك لن تجني الأموال في أول 6 إلى 24 شهرًا، وهذا يعني أنّك بحاجة إلى امتلاك ما يكفي من الأموال لتتمكن من الصمود لفترة لا بأس بها، وأنّ عليك وضع قيود مالية على نفسك، لتترك المشروع متى ما تجاوزتها. ولكن، تذكّر أن نصف تلك المشاريع التجارية هي مشاريع جانبية، ومشاريع الهواة شائعة كثيرًا، ولا شيء يربط بين كون مشروع كصناعة عقود الخرز في الغرفة الخلفية لأحد الأشخاص يخسر الأموال وبين تفكيرك في تقديم خدمات استشارية. على كل حال، فإن السؤال الحقيقي هو: “ما هو مقدار المال الذي أتوقع الحصول عليه أو فقدانه من المشروع التجاري الذي سأبدأ به مقارنة بمشروعي الأفضل القادم؟” بالنسبة لمعظم الأشخاص فإن “الأفضل القادم” يعني العمل، ففي استبيان أجرته Gallup سنة 2006 حين تعرضت المشاريع الصغيرة للإغلاق بسبب ارتفاع أسعار الوقود، أعلن 80% تقريبًا من أصحاب المشاريع أنّهم يجنون أموالًا أكثر في الساعة، مقارنة بعملهم في شركات أخرى وفي نفس المجال. وهذه تعتبر أرباحًا وليست عائدات، حتى مع الساعات الإضافية التي تحتاجها المشاريع الصغيرة. إضافة إلى ذلك، فإن نصف أصحاب المشاريع هؤلاء يجنون أموالًا أكثر من خلال المشروع التجاري مقارنة بالعمل الاعتيادي، و76% منه قال بأنّ حالته المادية أفضل عموما. شمل الإحصاء الأمريكي أيضًا “مشاعر” روّاد الأعمال(4): في كل سنة ضمن الفترة الممتدة من عام 1990 و2004، كانت الشركات التي تضم ما لا يزيد عن 4 موظفين والشركات التي تضم أكثر من 500 موظف هي من يصرف أعلى الرواتب. لذا إن كنت لا تمانع في العمل لدى شركة كبيرة مترقبًا الوقت الذي سيتم تنحيتك فيه عن عملك، فمع راتب شهري سيكون هذا هو الرهان الأفضل، أما إن كنت لا ترى هذا جيدًا، فالشركات الصغيرة هي الخيار الأنسب. ولكن بقي لدينا موضوع الظروف الاقتصادية. لا أدري لماذا يعتقد الجميع أن إطلاق مشروع تجاري في ظروف اقتصادية صعبة يبدو أمرًا سيئًا؟ هل السبب هو الاعتقاد بأنّ لا أحد سينفق المال؟ هذا ليس مهمًّا على الإطلاق، إذ لن يكون لديك الكثير من العملاء في أول 6 إلى 12 شهرًا، والعملاء الذين تحصل عليهم في هذه الفترة هم أولئك المتلهّفون إلى منتجك بشدّة، وبما أنّهم متلهّفون للمنتج فلن تؤثّر الظروف الاقتصادية عليهم بتاتًا. في الواقع، من الأفضل أن تكون الحالة الاقتصادية سيّئة، إذ تمرّ جميع الشركات بظروف صعبة، وسيكون بميسورك الحصول على أثاث وإيجار وخدمات رخيصة مثل التصميم الفني وتصميم مواقع الإنترنت، فالأشخاص الجيدون عاطلون عن العمل، والأفضل من ذلك أنّك ستحصل على المساعدة التي تحتاج إليها وبنصف ثمنها أو ستعثر على مؤسس شريك قد فقد وظيفته مؤخّرًا. في Smart Bear مثلًا، وظّفنا مستشارًا في التصميم مقابل ثلث مرتّبه الاعتيادي. تخفّض شركات الإعلان أسعارها حتى دون أن أطلب ذلك منها. الإيجارات الفرعية منتشرة في كل مكان فالشركات تحاول تعويض إيجارها الممتد لسبع سنوات وقد سرّح بعضها نصف فريق العمل فيها، وهذا يعني أنّه الوقت المثالي للحصول على فريق العمل وبرواتب منخفضة. في نهاية المطاف، فإن المسألة مرتبطة بشعورك بالرضا والسعادة، وليس فقط بتحقيق النجاح المادي. ففي العمل العادي، تميل “السعادة” و”الأموال” إلى الارتباط بعلاقة عكسية، فمن الصعب أن تحصل عليهما معًا. يمكن تلخيص هذه الفكرة بشكل جيد من خلال تقييم Juhan Sonin لحياته الشخصية. يمكنك أن تكسر النمطية من خلال إدراة مشروعك التجاري بنفسك، فتجني الأموال وتقوم بما تحبّ القيام به، ولكن المشاريع التجارية الصغيرة مجهد وصعبة ومخيفة، فهل يستحق الأمر ذلك؟ سأجيبك من خلال الرسم البياني التالي من الاستبيان الذي أجرته Gallup (3): إن كانت صاحب مشروع تجاري صغير، فلا بأس أن تشجّع القرّاء ولو ببضع كلمات، فلكلمات التشجيع أثر كبير عندما يشعر المرء بالغلبة. المصادر: 1. استطلاع رأي لأصحاب المشاريع الصغيرة سنة 2006 البيانات. 2. John Watson و Jim E. Everett في مجلة إدارة المشاريع الصغيرة Journal of Small Business Management, أكتوبر سنة 1996. 3. خدمة Gallup الأخبارية، اقتراع Smart Business Index سنة 2006 عثرت عليه من خلال مدونة Corporateprenuer. 4. الملخص الإحصائي الأمريكي سنة 2008 الجدول 0737. البيانات بواسطة infochimps.org. ترجمة - بتصرّف - للمقال Starting a business isn’t as crazy and risky as they say لصاحبه Jason Cohen. حقوق الصورة البارزة محفوظة لـ Freepik
  13. يمكن لعالَم المبيعات أن يكون مربكًا وصعبًا، خصوصًا إن كنت تخطو خطواتك الأولى في مسيرتك المهنية. ويمكن للعمل في هذا المجال أن يكون مربحًا، ولكن تقع على عاتقك مسؤولية كبيرة لتحقيق الأهداف والأرقام المرجوة منك، وهذا يعني الكثير من الضغط والجهد، خصوصًا إن كنت تشعر بأنّك لا تجيد جميع المهارات المطلوبة في مجال المبيعات. فهل هناك خطّة تساعدك على زيادة خبرتك في هذا المجال؟ هناك خطّة بالتأكيد بحسب Kelly Roach، وهي مشجّعة سابقة في دوري كرة القدم الأمريكية NFL والتي تحوّلت فيما بعد إلى محترفة في مجال مبيعات المشاريع التجارية، وفيما يلي سنستعرض نصائح Kelly لتصبح مندوب مبيعات ناجحًا. 1. اعتمد المبادئ الصحيحة إن إدراكك بأنّ المبيعات حاضرة في كل شيء نقوم به هو أهم خطوة في طريقك لتكون مندوب مبيعات ناجحًا، فالمبيعات ليست في المنتجات والخِدْمات التي نشتريها وحسب، بل هي حاضرة في مجتمعاتنا وعلاقاتنا، إذ يمكنك أن تدعو الفنان المفضّل لديك بأنه مندوب مبيعات ذو أسلوب رائع أو أنه تاجر مشاعر إن صح التعبير، ذلك لأنك ترغب في شراء أغانيه أو رسوماته لتعيش نوعًا معينًا من المشاعر. ولكن الفارق بين الفنان وبين أغلب مندوبي المبيعات هو أن الأوّل يتّصف بالعبقرية والشغف تجاه ما يقوم به، ويفترض بمندوب المبيعات المتميّز أن يتّصف بهذه الصفات كذلك. لا يمكن لبائع زيت الأفاعي مثلًا أن يحقق أي نجاح يذكر في وقتنا الحالي لأنّ الناس أصبحوا يمتلكون نوعًا من المناعة تجاه الإعلانات ولن يقعوا في الأفخاخ التي كان آباؤنا وأجدادنا يقعون فيها. لهذا إن كنت تفكّر في أن تكون مندوب مبيعات ناجحًا، فعليك أن تربط مسيرتك المهنية بمنتج تؤمن بأنّه سيجلب الفائدة والنفع للناس، وكلما زاد شغفك تجاه المنتج التي تبيعه، زادت مبيعاتك بقدر ملحوظ. 2. كن دقيقًا بشأن الفوائد إن ما تبيعه في الواقع ليس هو المنتج أو الخِدْمة، بل أنت تبيع النتائج التي يمكن أن تقدمها للناس، فإن كنت تعتقد بأن منتجك يقدّم قيمة مرتفعة لعملائك، فستجد سهولة بالغة في أن تبين لهم وبدقّة كيف أن منتجك سيقدّم لهم القيمة التي يبحثون عنها. هناك أمر آخر لا يقلّ أهمّية عن هذا، وهو التفكير النقدي. مهما كان عرضك التقديمي جيّدًا فإنه لن يكون قادرًا على تغطية جميع السيناريوهات المحتملة، لذا عليك أن تتعرّف على حاجات عملائك وأن تعدّل عرضك التقديمي حسب ذلك. استمع إلى عملائك، وكن مبدعًا، وفكّر خارج الصندوق، قد يكون الأمر صعبًا ولن يخلو من التحدّي ولكنّه سيكون فعّالًا للغاية. 3. تحلَّ بالانضباط في أغلب الأحيان، يتجوّل مندبو المبيعات لمقابلة عملائهم دون أن يكون مديرهم في العمل رقيبًا عليهم طوال اليوم، ولكن بما أنهم مطالبون بتحقيق أهدافهم، فمن المستحيل تحقيق النجاح دون أن يتحلّى مندوب المبيعات بالانضباط والالتزام. صحيح أنّه يمكن لجدول أعمالك أن يكون مرنًا وأن عليك التكيّف مع المستجدّات، ولكن يجدر بك أن تطور في نفسك روح الانضباط. فحتى لو كان لديك الكثير من العمل والكثير من الأهداف التي يجب عليك تحقيقها، يجب عليك أن تكون قادرًا على التركيز على مهامك حتى مع وجود المشتّتات. 4. احتفل بأخطائك يستحيل أن تخلو الحياة والمسيرة المهينة من الأخطاء؛ لذا من الجيد أن تتحلّى بالصبر والقوة لئلّا تقع فريسة الأخطاء التي ترتكبها، بل عليك أن تزداد عزيمة وقوّة وتقف على قدميك من جديد. لو فكّرت في الأمر قليلًا فسترى أنّك في حال لم ترتكب الأخطاء فهذا يعني أنّك لا تجرب خططًا وأساليب جديدة مع العملاء، وبفضل الإخفاق فإنّك تكتسب خبرة إضافية وتتعلّم أمورًا جديدة، وبالتالي ستصبح خبيرًا في مجال عملك. 5. تحلَّ بروح المنافسة يتحلّى مندوبو المبيعات الناجحون بروح المنافسة، إذ يفرضون على أنفسهم معايير صارمة للغاية ويجتهدون ليكونوا الأفضل في شركاتهم، أو بين خبراء المبيعات. ويمكنك أن تبرُز بين أقرانك ومنافسيك من خلال زيادة نشاطك. صحيح أن الكثير من روّاد الأعمال يرغبون في أن تجري الأمور بسلاسلة ودون ارتكاب الأخطاء، ولكن الواقع يقول إنّك لو كنت ترغب في التغلّب على منافسيك فعليك أن تكون مبادرًا وأن لا تخاف الوقوع في الأخطاء. تلعب وتيرة الشراء الدور الأكبر في توجيه المبيعات وتقديم النتائج، إذ يميل الناس إلى الشراء من واحد من آخر ثلاثة أشخاص تعاملوا معهم، وأهمّ شيء في كونك تتحلّى بروح المنافسة هو أن لا تنزعج من الوقوع في الأخطاء. كيف تصبح مندوب مبيعات ناجحًا يواجه مندوب المبيعات صعوبات كثيرة، ويعتمد ذلك على الشركة التي يعمل معها، والمنتج الذي يبيعه، والخبرة والمهارات الذاتية. ومن الجيد أن يركّز مندوب المبيعات على عمله وأن يتحلّى بشخصية جذابّة وانضباط عالٍ منذ البداية، مع أنّ هذه الصفات يمكن اكتسابها مع الوقت. على سبيل المثال، تقول Kelly Roach (وهي مدرّبة ومتحدّثة ناجحة) بأنّها إنسانة انطوائية، فهي هادئة جدًّا وتحب الاستماع إلى الآخرين، ولكنّها في الوقت نفسه مندوبة مبيعاتٍ ناجحة جدًّا، لأنّها تسعى جاهدة لأن تصبح الإنسانة التي تطمح إليها. لذا، ما يميز العمل في مجال المبيعات هو أنّك لست مضطرًّا لأن تمتاز بالصفات المطلوبة لهذا العمل منذ نعومة أظفارك، فما دمت تحبّ عملك ولا تتوقف عن تعلّم أشياء جديدة وتسعى إلى تطوير نفسك، فالنجاح حليفك لا محالة. ترجمة - وبتصرّف - للمقال 5 Tips from Kelly Roach on How to Be a Successful Salesperson لصاحبته Justyna Polaczyk. حقوق الصورة البارزة محفوظة لـ Freepik
  14. يمكن القول بأن المقاييس الزائفة هي بمثابة عباءة الاختفاء المثالية. يطرح عليك مديرك في العمل السؤال التالي: “كيف تجري الأمور؟” فتجيبه: “كل شيء جيّد، فموقعنا الإلكتروني حظي بآلاف الزيارات في الشهر الفائت”. فيستفسر المدير قائلًا: “وهل يعجبهم ما يرونه في الموقع؟” فتردّ عليه قائلًا: “بالتأكيد يعجبهم، فكل واحد منهم يقضي قرابة 3 دقائق في الموقع الإلكتروني و56% منهم يعود إليه مرة أخرى في وقت لاحق”. أنت هنا تستخدم عباءة الإخفاء لتغطي على كونك لا تملك أدنى فكرة عمّا تتحدث عنه، فقد دفعت مديرك إلى الشعور بالراحة تجاه الأرقام، ولكنّك أخفيت احتمالية عدم وجود أية خطة لاتخاذ أية إجراءات إضافية. لنتعلم معًا كيفية تجنّب هذه الحالة، وأن تقول لا لجميع المقاييس الزائفة وعديمة الفائدة، ولكن قبل ذلك يجب علينا أن نتعرف أولًا على المقاييس الزائفة. تعريف المقاييس الزائفة باختصار، هي تلك المقاييس التي قد تبدو جيدة، ولكنّها لا تساعد بالضرورة على اتخاذ قرارات صحيحة بخصوص المشروع التجاري. إليك بعض الأمثلة: عدد الزيارات في موقعك الإلكتروني، معدل مدّة الزيارة، معدل الارتداد، عدد المشتركين أو عدد مرات التحميل. هناك طريقة جيّدة لتعرف ما إذا كان مقياس معيّن زائفًا أم لا، وذلك من خلال اختبار المستثمر. ألق نظرة على المقياس ثم اسأل نفسك: إن أخبرت مستثمرًا حول نتائج هذا المقياس، هل سيكون بمقدوره تقدير ما إذا كان المشروع يستحق أن يضع أمواله فيه أم لا؟ على سبيل المثال، إن أخبرت المستثمر بأن لعبتك الإلكترونية على الإنترنت قد نُزِّلت 10 آلاف مرة، فإنه لن يستطيع إخبارك ما إذا كان الاستثمار في هذه اللعبة مجديًا أم لا. ولكن إن أخبرت المستثمر بعدد المستخدمين النشطين لديك، وبمقدار تفاعلهم ومقدار الأرباح التي تجنيها، فسيكون حينها قادرًا على اتخاذ القرار المناسب. المقاييس الزائفة والمقاييس المؤثّرة الفارق الرئيسي بين المقاييس الزائفة والمقاييس المؤثرة هو أن النوع الأول يبدو جيدًا على الورق وقد يُشعر الإنسانَ العادي بالرضا تجاهها، أما النوع الثاني فسيعمل على إقناعك باتخاذ خطوات وقرارات مؤثّرة. ولكن ما معنى هذا؟ مثلًا، إن كان هدفك هو زيادة إيراداتك فعليك التركيز على إحدى الاستراتيجيات التالية: زيادة عدد العملاء. زيادة حجم معدل التعاملات التجارية. زيادة وتيرة التعاملات التجارية لكل عميل. رفع الأسعار. لنتخيل الآن أنك تتابع أحد المقاييس الزائفة وليكن مثلًا عدد مشاهدات الصفحة. لقد لاحظت أن عدد المشاهدات قد ارتفع بمقدار 30 ألف مشاهدة منذ بداية السنة وأن قاعدة العملاء لديك قد توسعت قليلًا. هل تقدّم لك هذه المعلومات أدنى فكرة حول ما يجب عليك القيام به؟ بالتأكيد لا. بدلًا من ذلك عليك التركيز على هذه المقاييس المؤثرة والمعبّرة: عدد العملاء المهتمّين leads (شهريًا/فصليًا/سنويًا). مجموع العائدات (شهريًا، فصليًا، سنويًا). معدل التحويل. صافي الأرباح. قيمة الطلب. قيمة دورة حياة العميل. عدد التعاملات التجارية. ما يميز هذه المقاييس عن المقاييس الزائفة هو أنّه في كل مرة تلاحظ فيها انخفاض قيمة هذه المقاييس، ستدرك أنّ عليك التصرف بسرعة لتجنب الوقوع في الإفلاس. تحليلات Google، المتهم المذنب بالرغم من أن تحليلات Google هي أداة ممتازة لجمع المعلومات، غالبًا ما يتم استخدامها بصورة غير صحيحة، إذ ينظر مستخدمو هذه الأداة إلى التقارير التي يحصلون عليها وهي متخمة بالكثير والكثير من المعلومات، فيختارون أفضل المقاييس من بينها ويعتمدون عليها بالكامل. ولكن هذا الأسلوب يساهم في تكوين رؤية غير واقعية تمامًا حول المشروع التجاري وتجعل من المستحيل إيجاد أي طريقة لتطويره وتحسينه. إن كنت لا ترغب في الوقوع في فخ المقاييس الزائفة، فإليك بعض المرشحات Filters التي يجب عليك استخدامها في تحليلات Google لموقعك الإلكتروني: استبعد عنوان IP الداخلي (لن تصدق مقدار تدفق الزوار القادم من عنوان IP الخاص بك). تعقُّب التجارة الإلكترونية (لتعرف من أين يأتي عملاؤك الأكثر قيمة). الأهداف (مثل التحويلات). البحث في الموقع (بفضل هذا المرشح ستعرف الأمور التي يبحث عنها عملاؤك في موقعك الإلكتروني). الحملات (تتيح لك قياس العائد على الاستثمار لحملاتك التسويقية). ولكن الحقيقة هي أن لكل هدف تسعى إليه يجب عليك مراقبك مقاييس الاختلاف. فعلى سبيل المثال، سأطلعك على الأهداف الثلاثة الأكثر أهمية بالنسبة إلى شركتنا: إرضاء عملائنا ومساعدتهم على تحقيق أهدافهم باستخدام الأدوات التي نقدمها إليهم. مشاركة خبرتنا وتجربتنا ليتمكن عملائنا من تحقيق الربح وليصبحوا خبراء بدورهم. الحصول على مدخول جيد يتيح لنا القيام بما نحب. هذا يعني أن علينا التركيز على جميع المقاييس المرتبطة بالعملاء مثل: مقياس رضا العملاء، (مثل: الرضا عن المحادثة، الرضا عن معالجة التذاكر، معدلات خدمة العملاء). التسويق بالمحتوى، (مثل: التفاعل، تدفق الزوار، مساهمة العملاء المهتمين leads، معدل النقرات CTR). أهمّ إحصاءات العائدات. لا تسمح للمقاييس الزائفة بأن تخدعك صحيح أن متابعة المقاييس أمر ضرروي لنمو المشروع التجاري وازدهاره، ولكن بعضها قد يتسبب في القضاء على مشروعك التجاري نهائيًا، إذ قد تقع في فخ الاعتقاد بأن مشروعك التجاري يبلي بلاءً حسنًا في حين أن عليك التركيز على تطوير خططك المستقبلية. لهذا في كل مرة تتابع فيها مقياسًا معيّنًا، فإن أفضل وسيلة للتحقق من كونه مفيدًا لمشروعك التجاري أم لا هي طرح الأسئلة التالية: هل سيساعدني على تحقيق المزيد من العائدات؟ هل سيساعدني في الحصول على المزيد من العملاء؟ هل يفسر هذا المقياس سبب زيارة العملاء لموقعي الإلكتروني؟ وبهذا، ستتعرّف على المقاييس المفيدة لمشروعك التجاري، ولن تسمح للأرقام بأن تخدعك مرة أخرى. ترجمة - وبتصرّف - للمقال How Vanity Metrics Gamble with Your Business لصاحبته Justyna Polaczyk. حقوق الصورة البارزة محفوظة لـ Freepik
  15. كاتب هذا المقال هو مصمّم ورائد أعمال تمكّن مؤخّرًا من بيع آلاف النسخ من كتابه الإلكتروني الذي يبيّن من خلاله كيفية تصميم واجهة المستخدم خطوة بخطوة. عمل مع الكثير من الشركات الناشئة وهو كذلك مؤسس Folyo، وهي خدمة تساعد الشركات على إيجاد أفضل وأبرع المصممين المستقلّين. يوضح Sacha في هذا المقال كيف أن التسعير المناسب لكتابه الإلكتروني كان من أهم أسباب النجاح الكبير الذي حقّقه. لامني والدي منذ مدّة على شراء خبزٍ أسمر رخيص الثمن، وصادف حينئذٍ وجود خبز دنماركي مستورد في خزانة المؤن بمنزلنا، فتحدّيت والدي في أن يجري اختبار تذوق لكلا النوعين وهو معصوب العينين، فكانت النتيجة كما توقعت تمامًا، إذ لم يتمكن والدي من التمييز بين نوعي الخبز، على الرغم من أن سعر أحدهما كان ضعف سعر الآخر. يعتقد أغلب الناس أن تفاوت الأسعار هو النتيجة الطبيعية لقيمة السلعة، ويحرص المسوّقون في كل مكان على ترسيخ هذا المعتقد وضمان ديمومته بين الناس، ولكن يدرك علماء النفس بأن للأسعار تأثيرًا أكبر من ذلك، إذ يمكن للتسعير الصحيح أن يساهم بقدر كبير في القيمة الملموسة للمنتج، بل قد يتجاوز الأمر إلى تحديد قيمته بالكامل (هل سمعت بقصة الماس من قبل؟). لطالما كنت منبهرًا بالقوة التي يتمتع بها التسعير، وكثيرًا ما أسمع عن قصص النجاح المرتبطة بالتسعير مثل صائغة تضاعفت مبيعاتها بعد أن رفعت الأسعار ثلاثة أضعاف. وعندما كتبت مؤخرًا كتابي الذي أبيّن فيه للناس كيفية تصميم واجهات المستخدم أدركت مدى أهمية اختيار السعر المناسب في تسويق الكتاب. ولكن لماذا أبيع الكتاب أصلًا؟ ألا تكفي السمعة والشهرة الواسعة ومشتركو الـ RSS؟ إلى جانب الإجابة البديهية والمعروفة عن هذا السؤال (الحصول على الأموال) فإني أعتقد بأن شبكة الإنترنت قد أصبحت متخمة بالأمور المجانية، فأنا شخصيًا أحمّل العشرات والعشرات من الخطوط والأيقونات والكتب ومقاطع الفيديو المجّانية كل أسبوع دون الاستفادة منها بسبب ضيق الوقت. لهذا، توخّيت من تسعير كتابي الإلكتروني أمرين اثنين: أولًا: كنت أخبر الناس بأن محتوى هذا الكتاب أفضل من المحتوى المتوفّر مجّانًا. ثانيًا: زيادة احتمالية قراءة الكتاب بعد تحميله، وذلك لأنّ المستخدم قد دفع مقدارًا لا بأس به من المال لشراءه (وبهذا أكون قد استفدت من مغالطة التكلفة الغارقة Sunk cost). كانت الخطوة الأولى إجراء بعض الأبحاث السوقية الأساسية لمعرفة مدى رغبة الناس في دفع المال، وقد طرحت السؤال على Twitter، وحصلت على إجابات تتراوح فيها الأسعار بين 5 و 10 دولارات. إضافة إلى ذلك، قمت بالاطلاع على بعض الأسئلة الموجودة في Quora، وطرحت هذا السؤال أيضًا: (أيهما أفضل أن تبدأ بسعر منخفض ثم ترفعه تدريجيًا، أم تبدأ بسعر مرتفع ثم تخّفضه تدريجيًا). (ملخص الإجابات: يعتمد الأمر على عدة عوامل). لاحظت كذلك أنّه بسبب متجر التطبيقات الخاص بشركة Apple، فإن الناس قد تعودوا على دفع مبالغ قليلة جدًّا (أقلّ من ثمن فنجان القهوة)، ولكنّي أدركت أيضًا أنّ أي شيء يفوق ثمنه الـ 10 دولارات سيؤدي إلى إطلاق عدد من الميكانيكيات النفسية المختلفة (سأتحدّث عن إثبات هذه النظرية ودحضها بعد قليل). ولما كان هدفي هو الوصول إلى أعلى عدد ممكن من المبيعات وذلك للحصول على جمهور من القراء والتمهيد لمزيد من الكتب مستقبلًا، فقد قرّرت الاستقرار في التسعير ضمن مدى 1 إلى 10 دولارات. بعد أن اتخذت قراري تقريبًا بشأن السعر، كانت الخطوة التالية هي التركيز على تقسيم السوق market segmentation. ولتبسيط الأمور، فإنّ تقسيم السوق يعني أن تطلب من كل شخص أن يدفع السعر الذي يرغب هو في دفعه، وهذا ما يحدث بالضبط عندما تساوم على بضاعة ما في أحد متاجر بكين أو أحد أسواق القدس، إذ يعرض عليك البائع في بداية الأمر سعرًا مرتفعًا للغاية، ولكن لا تتمّ عملية البيع إلا عندما تنجح في إقناع البائع بأن يبيعك البضاعة مقابل أعلى سعر يمكنك دفعه (وبالتالي زيادة أرباحه). وبما أنّ معرفة المقدار الذي يرغب الطرف المقابل في دفعه أكثر صعوبة على شبكة الإنترنت، فعليك ببساطة أن تقدّم نقاط تسعير مختلفة ثم تتيح للناس أن يختاروا بأنفسهم ما يلائم احتياجاتهم. أنا لا أعني هنا بأن تقدم البضاعة ذاتها بسعرين مختلفين، لذا تظهر الحاجة إلى إضافة مزايا إضافية؛ وفي حالتي، قرّرت أن النسخة الممتازة من كتابي الإلكتروني ستتضمن ملفات الفوتوشوب الأصلية. أما آخر أسلوب اتبعته في التسعير كان التسعير الابتدائي المنخفض، وأدى ذلك إلى أمرين: أولًا، ازدياد عدد الأشخاص الذين اشتروا المنتج في المراحل المبكرة، الأمر الذي ساهم في جعل حدث إطلاق الكتاب أكبر وأوسع، ثانيًا: سيساعد على الوصول إلى الكتلة الحرجة (كلما زاد عدد الأشخاص الذين أقدموا على شراء الكتاب، ازداد عدد الأشخاص الذين سيشترون الكتاب في المستقبل، وهو المفهوم المعروف بالدليل الاجتماعي Social proof. إضافة إلى أنّ هذا الأسلوب يعدّ بمثابة مكافأة للمتبنّين الأوائل أعني بهم أولئك الذين جازفوا بأموالهم وأقدموا على شراء الكتاب ليعرفوا ما إذا كان يستحق القراءة أم لا، وهم أولئك الأشخاص الذين يتابعون من كثب، والذين يهتمّون بك كثيرا. هؤلاء الأشخاص مميّزون بالفعل، ويجب أن تعاملهم بتميّز أيضًا. فلنراجع إذن ضوابط التسعير الخاصة بنا: يجب أن تكون هناك نقطتان للتسعير. يجب أن تكون الأسعار مرتفعة بما يكفي لتقديم حسومات أولية. يجب أن يكون السعر ضمن المدى 1 إلى 10 دولارات. والآن مع وجود هذه الضوابط يصبح الأمر واضحًا جدًّا، ولن تجد نفسك أمام الكثير من الخيارات، وتبعًا لذلك فقد وضعت الأسعار التالية لكتابي الإلكتروني: النسخة الاعتيادية: بسعر 5.99 دولار يمكن تخفيضها إلى 2.99$. النسخة الممتازة: بسعر 12.99 دولار يمكن تخفيضها إلى $5.99. يمكنك أن تلاحظ بأنّ سعر النسخة الممتازة هو ضعف سعر النسخة الاعتيادية، وأنّ نسبة التخفيض هي 50% الأمر الذي يجعل الحسابات سهلة. لا بدّ أنك تتساءل الآن عن مدى نجاح هذه الخطة؟ في الواقع كان النجاح مذهلًا. أرسلت صفحة الهبوط الخاصة بالكتاب الإلكتروني إلى موقع Hacker News وسرعان ما حصلت على تقييمات مرتفعة، وجمعت ما يزيد عن 300 صوت، حتى أنّها وصلت إلى المرتبة الثانية في الصفحة الرئيسية لمدّة من الزمن. وكانت نتيجة هذا التدفق الهائل للزوّار على الموقع (22,000 زائر في يوم واحد) الحصول على مبيعات رائعة: ففي أول 48 ساعة، بعت الكتاب 1,476 مرة، وبمجموع عائدات يقدّر بـ 6,663$. وهكذا، يبدو أن خطة التسعير التي اتبعتها كانت مثمرة للغاية، ولكن ما هو السبب الحقيقي وراء هذا النجاح؟ لو اطلعنا على بعض التعليقات في موقع Hacker News فسنتعرف على السبب: أريد أن أقول فقط بأن 2.99 دولار كانت نقطة تسعير ممتازة جدًّا كحافز للشراء، ومع زيادة ملفات PSD فلا مجال للتردد مع 5.99. بالنسبة لي كان نموذج التسعير مثاليًا لمثل هذه الأشياء. فلا مشكلة لدي على الإطلاق في دفع هذا المبلغ. أما بالنسبة لدفع 5.99 مقابل الحصول على ميزات إضافية، فأنا بالفعل سأدفع 2.99 وليس الفارق كبيرًا بين السعرين، ولا يشكل عائقًا أمام الحصول على الميزات الإضافية. لقد أحببت طريقة ترتيب الأمور هنا، ونموذج التسعير كان مثاليًا للغاية. يمكنك أن تأخذ أموالي. يمكننا أن نلاحظ أن هناك عاملين يلعبان دورًا مهمًا في الموضوع: أولًا: نقطة التسعير الأولى والمنخفضة 2.99$ كانت منخفضة بما يكفي لتوليد حافز بالشراء لدى الناس دون أن تطلق ميكانيكيات مقاومة الإنفاق لديهم. ثانيًا: نقطة التسعير الثانية كانت مقاربة بما يكفي للنقطة الأولى الأمر الذي ولّد لدى الناس الشعور بأنّهم قادرون على الحصول على نسخة أفضل من الكتاب الإلكتروني، ما داموا سيشترون الكتاب في جميع الأحوال. وقد كانت الإحصائيات مطابقة للتوقعات: فعلى عكس ما كنت أتوقع، كانت مبيعات النسخة الممتازة هي الأعلى (758 نسخة ممتازة مقابل 718 نسخة اعتيادية). في عالم التسويق، يطلق على هذا الأسلوب اسم (إرساء الأسعار price anchoring)، إذ غالبًا ما يُقْدِم المسوّقون على وضع أسعار مرتفعة للخيارات الممتازة لتبدو الخيارات العادية جذّابة أكثر إذا ما قورنت بها (على سبيل المثال: خطط التسعير التي تتضمن خطة الشركات بسعر 1000 دولار شهريًا، مقابل 10 دولار شهريًا لخطة المستهلكين الاعتيادية). ولكن في حالتنا هذه، حدث العكس تمامًا، فقد ساهم تقارب نقطتي التسعير في أن تبدو النقطة العليا كحسم في السعر. إذًا يمكننا أن نخرج بنظرية التسعير التالية: إن كان السعران متباعدين للغاية، فإن السعر المنخفض سيكون جذّابًا أكثر، ولكن إن كان السعران متقاربين جدًّا، فإن السعر الأعلى سيكون الخيار الأفضل. إنه لمن الصعب بكل تأكيد أن أخبرك عن الدور الحقيقي الذي لعبه التسعير في نجاح الكتاب، ومن المؤكّد كذلك أنّه كان بإمكاني الحصول على المزيد من الأموال لو كان سعر الكتاب 0.99 أو حتى 49.99 دولار. ولكن على كل حال، فإني راضٍ جدًّا عن المبيعات التي حقّقتها وعن التغذية الراجعة التي حصلت عليها، وسأقاوم الرغبة الملحة في طرح السؤال (ماذا لو؟)، إذ يمكنني الإجابة عن هذا السؤال بتأليف كتاب آخر. أتمنى أن تتريّث قليلًا وتلقي نظرة فاحصة على الأسعار المعروضة أمامك عندما ترغب في الاشتراك بخطة شهرية لبرنامج معين أو عندما تتسوق من محل البقالة، فمن يدري، قد تكتشف الأسباب الخفية وراء هذه الأرقام. ترجمة - وبتصرّف - للمقال How Perfect Pricing got me 1500 Sales in 2 Days لصاحبه Jason Cohen. حقوق الصورة البارزة محفوظة لـ Freepik
  16. من المؤكّد بأنّ توضيح التفاصيل التقنية المعقّدة للعملاء الذي لا يمتلكون خلفية تقنية يعدّ أمرًا صعبًا، ومن المحتمل أن يصاب كلا الطرفين بخيبة الأمل نتيجة سوء فهم لتعليق واحد فقط؛ لهذا فإن من الضروري أن تجري الأمور على النحو الصحيح في كل الأوقات. تضمُّ شركتنا عددًا من المطوّرين من جهة وتتعامل مع العملاء من جهة أخرى، وبوصفي مديرة لفريق دعم العملاء، فمكاني بالضبط هو بين هاتين الفئتين، وعادة ما أشبه الأمر بأنّني أبدو كواجهة برمجية API تتوسط المطورين والعملاء. ولكن لا يعرف معظم الناس معنى الواجهة البرمجية. صحيح أنّني أمتلك خلفية تقنية ممتازة، ولكن كيف أوضح هذا الأمر لشخص لا يمتلك أي خلفية تقنية على الإطلاق؟ كيف يفترض بك أن تتعامل مع مثل هؤلاء الأشخاص؟ هنالك فارق كبير بين أن تكون ملمًّا بشيءٍ ما وأن تكون قادرًا على توضيحه لشخص آخر. وبما أنّي أؤدي وظيفة توضيح الأمور بصورة يومية خلال السنوات القليلة الماضية، فقد وضعت أربع نصائح مهمّة تساعدك على التحدّث عن المواضيع التقنية مع الأشخاص الذين لا يمتلكون الخبرة اللازمة. لا تضع أي افتراضات مسبّقة يمكن للافتراضات المسبّقة أن تؤدي بك إلى أمور لا تحمد عقباها، فعندما تتحدّث إلى عملائك يجب أن لا تفترض بأنّهم يعرفون كل شيء وأنّ عبقريتهم توازي عبقرية آينشتاين، وبالمقابل، يجب أن لا تفترض أنّهم لا يفقهون شيئًا على الإطلاق. عندما تتلقى طلبًا من أحد العملاء فإنّك لا تملك أي معلومات عن ذلك العميل، وهنا يمكنك الاستفادة من برنامج يقدّم إليك عددًا من المعلومات الخاصة بالعميل إضافة إلى الطلب. فمثلًا، إن تمكنت من معرفة وظيفة العميل والمدة التي قضاها في استخدام المنتج، ومقدار ما يدفعه لك مقابل الحصول على المنتج، فستساعدك هذه المعلومات على معرفة الأسلوب الأفضل في التواصل مع ذلك العميل. كذلك إن كان بمقدورك الاطلاع على المحادثات السابقة فسيجنّبك هذا الأمر التقليل من الافتراضات المسبّقة تجاه العميل. اللغة في غاية الأهمية إن كانت هذه هي الصورة البارزة لهذا المقال، فسيظن معظم الناس بأنّهم غير معنيون بمحتواه. في الواقع يمكن أن يتسبب استخدام الكلمات الخاطئة في نفور الناس، ولو أرسلت إلى العميل ردًّا يتضمن كلمات غير مفهومة أو غير مناسبة، فإنه سيتجاهل الرد بأكمله، مهما كانت المعلومات المقدّمة في الردّ مفيدة بالنسبة إليه. من هنا، يجب أن يكون هناك توازن بين الوضوح والاختصار في الرد الذي ترسله إلى العميل. فإن كنت تتحدث مع العميل مثلًا حول مشكلة في قاعدة البيانات التابعة له، فبمقدورك أن تقدّم إليه بيانات أداة قياس الأداء أو أن تتحدّث معه عن سرعة تحميل موقعه الإلكتروني. يمكنك أن تلاحظ هنا أنّه وعلى الرغم من أنّك تشير إلى الأمر ذاته، فإنّ الأسلوبين سيبدوان مختلفين تمامًا بالنسبة إلى العميل. القدرة على توضيح الأمور بطرق متعددة هل مررت من قبل بهذا الموقف عندما تلعب لعبة تخمين الكلمة من خلال الرسم؟ يرسم صاحبك هذا الشكل: فلا تعرف ما الذي يقصده بهذا الرسم، فتسأله هل الكلمة هي “طائر”؟ فيرسم هذا الشكل: فتجيبه بسرعة “طائر مقلوب”؟ فيرسم الشكل التالي مرة أخرى: تحدّق فيه مليًّا، فيمزّق الورقة ويبدأ الرسم من جديد على ورقة بيضاء: ولكنّك ترفض إكمال اللعبة لأنّ صاحبك لا يجيدها على الإطلاق. من المؤكّد بأنّك لا ترغب في أن يشعر عملاؤك بهذا الشعور؛ لذا من المهمّ جدًّا أن تكون قادرًا على توضيح الأمور بأكثر من طريقة وأسلوب. يجب أن تكون قادرًا على تقديم الإجابات بصيغ متعددة وفي مواضع مختلفة، كأن تكون على هيئة قائمة مرقّمة، أو رسائل إلكترونية تتضمن صورًا ثابتة أو متحركة gifs، أو اتصالًا هاتفيًا، أو توجيه العميل إلى التوثيقات، ويختلف الأسلوب المتّبع باختلاف الأشخاص الذين تتعامل معهم. فكّر كما يفكّر العميل عندما يطرح عليك العميل سؤالًا مثل: “كيف أهيئ رسالة إلكترونية جديدة لعميلي؟” يجب عليك أن تدرك بأن هذا السؤال يندرج ضمن سلسلة من الأسئلة، إذ سيتبعه سؤال مثل: “هل يمكنني استخدام السمة أو القالب الخاص بي؟”، “هل يمكنني تغيير عنوان المرسِل؟”، “كيف سأرى نتائجي؟” وغيرها الكثير من الأسئلة؛ لذا عندما تجيب على أول سؤال للعميل لا تجعل جوابك محددًا بالسؤال، بل يجب أن تتضمن إجابتك بعض المعلومات التي تساعد في الإجابة عن الأسئلة اللاحقة التي ستطُرح من غير شك. اعمل جاهدًا على أن تتخلص من جميع الافتراضات المسبقة، وأن تفهم جيّدًا الموضوع الذي يسأل عنه العميل، وقدّم إجابات تكون مفهومة من قبل العملاء، ومن المستحسن أن تكون متهيّئًا بشكل جيد لمساعدة عملائك على تحقيق النجاح مع المنتج الذي تقدّمه إليهم. ترجمة - وبتصرّف - للمقال Talking tech with non tech people لصاحبته Sabrina Gordon. حقوق الصورة البارزة محفوظة لـ Freepik
  17. في العالم المثالي، لا حاجة لأن تكون استبيانات الموظفين مجهولة الاسم، ولكن لسوء الحظ لا تتيح معظم الشركات الحرية الكاملة لموظفيها للتعبير عن آرائهم، لذا فإن عدم الإفصاح عن الأسماء يعدّ أمرًا ضروريًا. يسعني القول بأنّ أكبر سبب لعدم الاستجابة بشكل جيد للاستبيان أو تقديم معلومات غير دقيقة فيه، هو القلق الذي ينتاب الأشخاص حول مدى مجهولية الاستبيان الذي يُقدِمون على اﻹجابة عنه؛ فعلى سبيل المثال، إن كنتُ غير واثق بأن المعلومات التي سأدلي بها في الاستبيان ستكون مجهولة المصدر، فهناك فرصة كبيرة لأنْ أدلي بمعلومات مبالغ فيها بشأن رئيسي في العمل، أو قد لا أجيب على الاستبيان من أساسه. يمكن لاستبيانات الموظفين مجهولة الاسم أن تساعد على إزالة عقبة الخوف عن طريق الموظفين، وأن يكونوا أكثر انفتاحًا وصدقًا في الإجابة عن الأسئلة المطروحة في الاستبيان. لنطّلع معًا على بعض الفوائد المترتّبة على مجهولية الاستبيانات، ثم لتوضيح الأمر بصورة أكبر، سأقدم مثالًا عن الآلية التي نتبعها في Officevibe للقيام بذلك. فوائد الاستبيانات مجهولة الاسم إن من أكبر الفوائد المترتّبة على كون استبيانات الموظفين مجهولة الاسم هو دفع الموظفين إلى التعبير عن آرائهم وعن الأمور التي تثير قلقهم، فكون الاستبيان مجهول الاسم يعني أن الموظفين مطمئنون إلى أنّهم لن يقعوا في المشاكل وأنّ لديهم متّسعًا من الحرية للإفصاح عمّا يجول في خاطرهم. ولكن لا يخلو الأمر من المشاكل، ففي الاستبيانات مجهولة الاسم لا يمكنك معرفة الشخص الذي طرح المشكلة، وكل ما يسعك القيام به هو التركيز على التغذية الراجعة Feedback التي حصلت عليها من الاستبيان، وبطبيعة الحال، فإن معرفة هويّة الشخص الذي طرح مشكلة معيّنة أقلّ أهمية بكثير من إيجاد حلّ مناسب لتلك المشكلة. في بعض الأحيان، يكون من الضروري متابعة المشكلة، وهناك عدة طرق للقيام بذلك مع المحافظة على المجهولية (سنتحدث عن هذا بعد قليل)، ولكن إليك بعض الفوائد التي ستجنيها من كون الاستبيان مجهول الاسم. 1. تغذية راجعة صادقة من أعظم فوائد كون الاستبيان مجهول الاسم هو أن الموظفين سيكونون أكثر انفتاحًا وأمانة في التعبير عن آرائهم. فعدم الإفصاح عن هوية الموظف سيمنحه الشعور بالأمان من الناحية النفسية، اﻷمر الذي سيدفعه إلى الحديث عمّا يزعجه دون خوف أو قلق، والعكس بالعكس، فالخوف من عدم مجهولية الأسماء يدفع الموظفين إلى الشعور بالخوف من الوقوع في المشاكل. 2. شعور الموظفين بأن صوتهم مسموع عندما تقدّم إلى موظفيك استبيانًا مجهول الاسم، فأنت تُشعرهم بذلك أن صوتهم مسموع في الشركة، وتُعلمهم بأنّك لا تمانع في تعبيرهم عن آرائهم واستقبال التغذية الراجعة منهم، وبالتالي يكون للموظفين رأي في مجريات الأمور التي تخصّ الشركة التي يعملون فيها. شعور الموظفين بأن صوتهم مسموع سيؤدي بالنتيجة إلى تفاعلهم مع العمل بشكل أكبر، وهذا يؤدي إلى المزيد من الإنتاجية. 3. تحسين نسبة استبقاء الموظفين إن كنت تستجيب للتغذية الراجعة التي يقدّمها إليك العملاء، فهذا يعني - من الناحية النظرية - أنّك تجعلهم أكثر سعادة في عملهم، وهذا يؤدي بالنتيجة إلى زيادة نسبة استبقاء الموظفين Retention في الشركة. إن أكبر خطأ ترتكبه الشركات عند إجراء الاستبيانات (سواء أكانت مجهولة الاسم أم لا) هو عدم الاستجابة للتغذية الراجعة التي يحصلون عليها بعد الاستبيان. في الواقع، فإن عدم الاستجابة للتغذية الراجعة سيحمل أثرًا عكسيًا وسيؤدي إلى عدم تفاعل الموظفين، وشعورهم بالاستياء والغضب، ومع استمرار المشكلة لفترة طويلة، قد يؤدي ذلك إلى تركهم للعمل. من هنا، تساعد الاستبيانات مجهولة الاسم على تحسين نسبة استبقاء الموظفين في شركتك. كيف نتعامل في officevibe مع خصوصية استبيانات الموظفين نحن نحترم بشكل كامل خصوصية جميع المستخدمين، ونحرص دائمًا على أن يشاركوا ما يرغبون هم في مشاركته فقط، لهذا السبب تُحذَف جميع التفاصيل التعريفية من المعلومات التي ترد إلينا. ولكننا في المقابل نرغب في خلق بيئة تتيح للمديرين تشخيص مكامن الخطأ في الشركة، ليكونوا قادرين على إيجاد الحلول المناسبة لها. فعلى سبيل المثال، إن كان المديرون قادرين على تشخيص انخفاض في مؤشر صحة الموظفين وعافيتهم، فسيكون بمقدورهم حينئذٍ المبادرة إلى إيجاد الحلول المناسبة. مثلاً، إن أجبت عن 5 أسئلة في الاستبيان حول رضى الموظفين وكانت جميع إجاباتك بالنفي، فسيكون بمقدور المديرين حينها أن يدركوا بأن النتائج اﻹجمالية سلبية، ولكن دون أن يطلعوا على اﻹجابات الفردية ومعرفة أصحابها. فيما يلي سأوضح اﻷمور بشفافية أكبر، وسأبين لك جميع النشاطات التي نقوم بها واﻷسلوب الذي نتبعه في المحافظة على الخصوصية. أجوبة الاستبيان كما ذكرت مسبقًا، فإن الإجابات تكون مجهولة الأسماء 100%، ولا يمكن لأي مدير أن يعرف صاحب الإجابة على اﻹطلاق. ومن الضروري بالنسبة إلينا أن يدرك جميع الموظفين الذين يستخدمون المنصة هذه الحقيقة، فلن تُعرَض اﻹجابات على المدرين مهما أصرّوا على ذلك. في الواقع، كان هذا الأمر مدار نقاش وبحث طويليْن في الشركة، وقد قرّرنا أنّه من الأفضل أن نتيح للمستخدمين الإجابة على الاستبيانات براحة وطمأنينة حتى لو كان ذلك على حساب إرضاء فضول المديرين. تقرير التفاعل تُجمع كل المعلومات بلا أسماء، وتُعرَض على المدراء على هيئة تقرير تفاعل قوي وبسيط في آن واحد. هذا بالضبط ما يراه المديرون في المنصة، إذ يكون التركيز على الناتج النهائي إضافة إلى المقاييس العشرة لتفاعل الموظفين. أعود وأكرر مرة أخرى بأنّنا لا نعرض الإجابات الفردية للموظفين، فاﻷرقام إجمالية والهدف منها هو الحصول على فكرة عامة عن مجريات الأمور في العمل. إضافة إلى ذلك هناك بعض النصائح التي تساعد على تطوير الأوضاع بالاعتماد على أدنى النتائج التي نحصل عليها من الاستبيانات. تقرير التغذية الراجعة في Officevibe نطرح أسئلة إضافية مرتبطة ببعض الأسئلة المطروحة في الاستبيانات السابقة، وعندما يرسل الموظفون أجوبتهم يتاح لهم اختيار ما إذا كانوا يرغبون في إخفاء هويتهم أم لا. تُعرض جميع هذه المعلومات في تقرير يبيّن التغذية الراجعة التي يمكن للمدير أن يشاهدها. فعلى سبيل المثال، إن كنت مدير فريق تكنولوجيا المعلومات في Seattle، وكانت اﻹعدادات تتيح لك رؤية التغذية الراجعة من تلك المجموعة فقط، فلن تكون قادرًا على مشاهدة أي تغذية راجعة من أي فريق آخر عدا هذا الفريق، ويمكنك رؤية صورة الموظف إن اختار هو ذلك، أما إن اختار إخفاء هويته فلن تكون قادرًا على رؤية صورته الشخصية على اﻹطلاق. الردّ على التغذية الراجعة من أجمل الخصائص المتوفرة في Officevibe هو القدرة على الردّ على التغذية الراجعة الخاصة بالموظفين، وأحد أكبر التحديات التي واجهناها في هذا السياق هو إخفاء معلومات الموظفين مع استمرارهم في الردّ على التغذية الراجعة التي يقدّمونها إلى مديريهم. لهذا، ستبقى هوية الموظف مجهولة دائمًا، لأنّنا نرغب في التركيز على التغذية الراجعة، وليس على الشخص الذي قدّمها، إذ يجب أن يشعر الموظّفون بالراحة عند استخدام هذا النظام. هل استبيانات الموظفين سرّية حقًّا؟ من الممكن الاستعانة بطرف ثالث للمساعدة في إدارة الاستبيانات ونتائجها، ولكن المستخدم يتحمّل جزءًا من المسؤولية أيضًا. نمتلك في Officevibe طرقًا متعددة نضمن من خلالها السرية التامة لإجابات الموظفين، ولكن يمكن تجاوزها إن بُذِل الجهد الكافي لذلك. نحن نعمل على تحسين هذا الأمر باستمرار، مع أني كنت أتمنى أن لا نحتاج أصلًا إلى مثل هذه التحسينات. المشكلة في أغلب الاستبيانات مجهولة الأسماء تكمن في أنّها تتحول إلى ما يشبه المطاردة، إذ بدلًا من التركيز على التغذية الراجعة، تصبح معرفة صاحب تلك التغذية الراجعة الشغل الشاغل، ومن المؤسف القول بأنّ المدير هو المتضرر الوحيد في نهاية المطاف. إن فقدت ثقة أحد الموظفين بك فلن تحصل على تغذيته الراجعة مجدّدًا، وستواجه الكثير من المشاكل غير الموثقة والتي يمكن أن تتحول فيما بعد إلى كوارث حقيقية. سترتفع معدلات التحول Turnover، وسينخفض مستوى التفاعل، وسيسود الشعور بعدم الرضي بين الموظفين، وستتضرر سمعتك وسمعة شركتك و … إلخ. قد تبدو الصورة مأساوية جدًّا، ولكن هذا هو الواقع. يعتمد كل شيء على الثقة، وإن كنت تثق بموظفيك بما يكفي فلن تكون بحاجة إلى جعل استفتاءاتك مجهولة الاسم من الأساس. هل تعتقد بضرورة كون استبيانات الموظفين مجهولة الاسم؟ شاركنا رأيك في التعليقات. ترجمة - وبتصرّف - للمقال Why Using An Anonymous Employee Survey Is Important لصاحبه Jacob Shriar. حقوق الصورة البارزة محفوظة لـ Freepik
  18. سواء أكنت راغبًا في البدء بمشروعك التجاري الجديد، أو في توسيع نشاطك الحالي، لا توجد طريقة أفضل من التمتّع بحضور جيّد في وسائل التواصل الاجتماعي. غير أنّ التمتّع بمثل هذا الحضور لم يعد أمرًا سهلًا كما كان في السابق، وهناك الكثير من الأمور التي يلزمك الاطلاع عليها لتطلق إعلانات ذات جودة عالية في وسائل التواصل الاجتماعي المختلفة. وسنتكلم في هذا المقال عن الأمور الأساسية التي يجب عليك معرفتها لإطلاق حملة تسويقية في وسائل التواصل الاجتماعي. اختر وسائل التواصل الملائمة لعلامتك التجارية ولجمهورك لا تنطبق الحكمة القائلة: "زيادة الخير خيرين" بشكل دائم على وسائل التواصل الاجتماعي، لذا من الأفضل أن تبدأ التسويق في إحدى الوسائل التي تلائم الجميع مثل فيسبوك، والذي يعدّ أكبر شبكة تواصل اجتماعي في العالم حيث يصل عدد المستخدمين فيه إلى 1.5 مليار مستخدم، وهذا يعنّي أنّك ستجد جمهورك هناك بكلّ تأكيد. أما تويتر Twitter وإنستغرام Instagram فيتطلّبان المزيد من الالتزام، إذ يجب أن يكون النشر في هاتين الشبكتين بصورة منتظمة. يعدّ تويتر منصّة جيدة للتواصل مع عملائك بصورة سريعة من خلال وسوم hashtags والأوسمة، أما إنستغرام فيستخدم لنشر الصور، ولكن يجب عليك أن تكون فعّالًا جدًّا في هذه الشبكة لكي يلاحظك الآخرون. الأمر ذاته ينطبق على بنترست Pinterest إحدى شبكات التواصل الاجتماعي التي تعتمد على المحتوى البصري، ولكنّك لن تكون قادرًا على الاستفادة من هذه الشبكات إلا إذا كنت تمتلك صورًا رائعة لمشاركتها أو تثبيتها pinning. أما لو كنت ترغب في مشاركة نجاحات مشروعك التجاري أو الفرص التي حصلت عليها للتعامل مع الشركات الكبرى، فعليك بـ LinkedIn. تتّبع كل شبكة من هذه الشبكات أسلوبًا خاصًّا يميّزها عن الشبكات الأخرى، لذا يجب عليك أن تجري بعض البحوث لتحدّد الشبكة الاجتماعية الأكثر ملائمة لعلامتك التجارية. الإعلانات المموّلة أصبحت من الضروريات عامًا بعد آخر، يزداد التعقيد في مجال الإعلان على وسائل التواصل الاجتماعي؛ وهذا يعني بالضرورة أنّ الإعلانات المجّانية لن تقدّم إليك الشيء الكثير. وتشترط المنصات الكبرى للتواصل الاجتماعي مثل فيسبوك وتويتر أن تدفع مبلغًا من المال إن كنت ترغب في ظهور إعلاناتك على صفحة آخر الأخبار newsfeed الخاصّة بمتابعيك، ففي الواقع، 10% فقط من متابعيك هم الذين يشاهدون منشوراتك المجّانية، أما في تويتر، فإن منشورك سيضيع إلى الأبد في زحمة المنشورات على صفحة آخر الأخبار بعد 15 دقيقة فقط. وعلى الرغم من أنّ الإعلانات المموّلة غير مكلفة، إلا أنّ من الواجب أن تعرف إلى أين يذهب كل فلس تدفعه لهذه الإعلانات. عليك التفكير في الشريحة التي ستوجّه إليها هذا الإعلان، ويمكنك البدء بشريحة صغيرة من الجمهور المستهدف ومن ثم التوسّع بصورة تدريجيّة. إضافة إلى ذلك، يجب أن تتحلّى إعلاناتك بمظهر جذّاب وجميل، لذا احرص على اختيار الصور والكلمات المناسبة. تعقّب الروابط لتتعرف على أداء منشوراتك ينبغي أن تحدّد المنشورات والروابط التي تجلب أكبر عدد من الزوّار، وتعقّب الروابط هو الوسيلة المثلى للقيام بذلك. فبعد أن تتعرف على الأمور التي تجذب اهتمام جمهورك وتحصل على أكبر عدد من النقرات، ستكون قادرًا على تهيئة المحتوى الذي تقدّمه إليهم وفقًا لذلك. هناك العديد من الأدوات المفيدة التي تساعدك على تعقب الروابط منها Google Analytics، Octopost وClickmeter. تزوّد هذه الأدوات كل رابط تقوم بمشاركته مع الجمهور بشيفرة تعقب، تتيح لك معرفة أداء ذلك الرابط بعد نشره للجمهور. لا تنس الاستفادة من الأشخاص المؤثرين الأشخاص المؤثرون هم أولئك الأشخاص الذين يمتلكون عددًا كبيرًا من المتابعين في مختلف وسائل التواصل الاجتماعي وذلك بفضل المحتوى الجيد الذي يقدّمونه والاستخدام الأمثل لهذه الشبكات. ويمكنك الاتفاق مع أحد الأشخاص المؤثرين ليقوم بالترويج لمنتجك وخدمتك، وغالبًا ما يقوم بذلك مقابل مبلغ من المال. احرص على تحديد المعايير التي يجب على شريكك المؤثّر أن يحقّقها، ولا تختر أحدًا بالاعتماد على عدد متابعيه فقط، واحرص على أن ترسم أهدافك وما تريد الوصول إليه قبل أن تتواصل مع الشخص المؤثّر وتتعامل معه. وبعد أن يبدأ الشخص المؤثر بالترويج لمنتجك، سيتحوّل جمهوره إلى متابعتك بعد فترة وجيزة. كما ترى، تعتمد الإعلانات في وسائل التواصل الاجتماعي على الأهداف التي ترسمها لنفسك ومدى قدرتك على تحقيقها، وهناك العديد من الاستراتيجيات التي يمكنك اتباعها في هذا المجال، ولكن في جميع الأحوال، فإنّ نجاح إعلاناتك منوط بجودة المحتوى الذي تقدّمه وبكيفية استخدامك لهذا المحتوى بصورة جيدة. ترجمة - وبتصرّف - للمقال 101 on Advertising Your Business on Social Media لصاحبه Adam Ferraresi. حقوق الصورة البارزة محفوظة لـ Freepik
  19. لا غنى للمرء عن النصيحة سواء في حياته اليومية أو العملية، ولكن يجب الانتباه إلى أمر مهمٍّ للغاية، وهو أنّه يمكن في بعض الأحيان أن يقدّم الأشخاص الجيّدون نصائح سيئة. فكيف تميز بين النصيحة الجيدة والنصيحة السيئة؟ يجب عليك أن لا تتبع جميع النصائح التي نقدّمها إليك في هذه المدوّنة، ومن المؤكد أن الأمر يبدو غريبًا، ولكن مهما بذلنا من جهد فإن النصائح التي نقدّمها ليست ملائمة لجميع المشاريع التجارية، ولو كانت كذلك، لتحولت المدوّنة إلى مدوّنة عامة مملة عديمة الفائدة. بناءً على ذلك، ونظرًا لكوننا نرغب في جعل مدونتنا مفيدة لجميع المشاريع التجارية الصغيرة، فإنّ كل مقال ينشر فيها يمكن أن يلائم فقط بعضًا من هذه المشاريع. وهذا الكلام ليس محصورًا في مدونتنا، بل يشمل جميع المدوّنات التي تقدّم محتوى ذا قيمة عالية في شبكة الإنترنت. ومن المؤكد أن هناك الكثير من النصائح الرائعة التي تقدّمها هذه المدوّنات، ولكن يستهين الكثيرون بفكرة أن يكون المرء قادرًا على تصفية هذه النصائح وتحديد ما يمكن الاستفادة منه وما يجب الابتعاد عنه، إلى جانب إدراك كيفية تطبيق النصيحة على الحالة الخاصّة لمشروعه التجاري. فعلى سبيل المثال، يعدّ Chris Sacca واحدًا من المستثمرين الناجحين جدًّا في الشركات الناشئة، وقد أخبر Chris مؤسسي Dropbox بأنّ عليهم أن يعيدوا توجيه الشركة بدلًا من محاولة تحدّي شركة Google. “لقد تركت Dropbox ﻷني كنت أستخدم Google Drive وقد أخبرت المؤسّسين بأنّ شركة Google ستقضي عليهم”. هل يبدو Chris غبيًا؟ لا، على الإطلاق. بل هو في غاية الذكاء، لكنّ مؤسسي Dropbox كانوا أذكياء أيضًا عندما قرّروا عدم الاستماع لهذه النصيحة. ولك أن تتخيل ما ستؤول إليه الأمور لو أنّهم قد استمعوا إلى النصيحة التي قدّمها إليهم رائد الأعمال والمستثمر الناجح والمشهور. لا شيء أكثر من النصائح في شبكة الإنترنت، فهي منتشرة في كل حدب وصوب، وبعد أن تحدّثت إلى عدد كبير من مؤسسي الشركات الذين ورّطوا أنفسهم بالاستماع إلى النصيحة الخاطئة، قرّرت أن أكتب عن هذا الموضوع المهم، ألا وهو فنّ اختيار النصيحة المناسبة. 5 أسئلة تساعدك على تصنيف أي نصيحة تحصل عليها في كل مرّة أتلقى فيها نصيحة من أحد الأشخاص، أطرح على نفسي خمسة أسئلة، وقد وجدت أن للإجابة عن هذه الأسئلة أثرًا كبيرًا في اتخاذ القرار بشأن الأخذ بالنصيحة أو الإعراض عنها. 1) ما هي وجهة نظر الناصح التي دفعته إلى تقديم هذه النصيحة؟ أحد أكثر الأسئلة شيوعًا في الجامعة - حسبما ما أذكر - هو ما يطرحه طلاب المرحلة الأولى على الطلاب الأقدم: “ما هي المقرّرات التي يجدر بي دراستها؟”. ولكن المشكلة كانت في أنّ بعض الطلاب كانوا يرغبون في دراسة المقرّرات التي تقدّم لهم شيئًا من التحدّي وأكبر قدر من المعلومات التي يمكن لهم تعلمها، وفي المقابل يرغب البعض الآخر بالمقرّرات السهلة والتي تتيح لهم الحصول على أعلى الدرجات مقابل أقل مجهود. ولا شكّ في أنّ وجهات النظر المختلفة هذه ستؤثّر بشكل كبير على طبيعة النصيحة التي سيقدّمها الطلاب القدامى إلى الطلاب الجدد. والأمر ذاته ينطبق على موضوعنا هذا، إذ لا يبحث كل من تطلب منه تقديم النصيحة عن المردود الذي تبحث عنه أنت، فقد يقدّم إليك بعض الأشخاص نصيحة تكون ملائمة في حال كنت ترغب في أن يحقق مشروعك التجاري نموّا بطيئًا وطويل الأمد، وقد يقدّم الآخر نصيحة تكون ملائمة عندما ترغب في أن يتوسّع مشروعك التجاري بصورة سريعة لتعرض بعدها شركتك للبيع، أو عندما ترغب في جذب مستثمرين جدد… الخ. يبدو جليًّا أن مسار العمل مختلف تمام الاختلاف في كل حالة من الحالات السابقة؛ لذا لا تنظر إلى النصيحة وحسب، بل إلى وجهة النظر التي تدعمها. 2) إلى أي مدى تشكل تجربة الناصح انعكاسًا لتجربتي الشخصية؟ صحيح أنّ الحصول على النصيحة من أشخاص مرّوا بتجارب مختلفة عن تجاربنا أمر مفيد للغاية، ولكنه في الوقت نفسه أحد العوامل المؤثرة في اتخاذ القرار بشأن قبول النصيحة من عدمه، إذ من الضروري معرفة ما إذا كانت النصيحة التي نتلقاها مرتبطة بما نقوم به أم لا. يميل الناس إلى تقديم النصيحة من باب “لو كنت مكانك لفعلت كذا وكذا”، ولكن عندما تكون تجربة الناصح مختلفة بشكل جذري - على سبيل المثال حصل هذا الشخص على تمويل مخاطر ويستطيع الاعتماد على هذا التمويل لما يزيد عن 18 شهرًا - فإنّ تلك التجربة ستطغى بشكل كبير على النصيحة التي سيقدّمها، إذ قد تكون النصيحة بأن تقدِم على مجازفات أكبر من المعتاد في حين أنّك لا تمتلك المال الكافي للقيام بذلك. لذا، عندما تتلقى نصيحة من أحد الأشخاص لا تنس أبدًا أن تأخذ تجربته بعين الاعتبار. 3) هل النصيحة متماشية مع آرائي ومعتقداتي؟ هناك حقيقة لا مفرّ منها، وهي أن اﻹنسان بطبعه يميل إلى تقبّل النصيحة التي تتفق مع معتقداته وآراءه على حساب النصيحة التي تناقض تلك المعتقدات. وهذا يعني أنّه عندما يكون اﻹنسان في موضع اتخاذ قرار معيّن بعد تلقّي نصائح من مصادر مختلفة، فإنّه يميل لا شعوريًا إلى النصيحة التي تتّفق مع آرائه. ولكن هذا ليس باﻷمر السيئ في جميع اﻷحوال (سأوضّح ذلك بعد قليل) ولكن يجب توخّي الحذر من هذه المسألة. صحيح أن التجرّد من هذه الانحياز أمر صعب للغاية، ولكن إدراك وجوده يعدّ خطوة مهمّة باتجاه منح جميع النصائح ما تستحقه من التأمّل والتفكير. 4) ما هي أوجه الشبه والاختلاف بين النصائح التي تلقّيتها؟ في أحد اﻷيام قدّم لي أحد المستشارين الذين كنت أعمل معهم نصيحة أعدّها اﻷفضل في حياتي، وكانت بشأن ما يرى أنّ علي فعله تجاه توظيف أحد اﻷشخاص في شركتي. أخبرني ذلك المستشار برأيه حول الموضوع، ثم أردف قائلًا: “وقبل أن تقدم على فعل أي شيء، اسأل ثلاثة أشخاص آخرين”. هذه النصيحة مطابقة تمامًا لفكرة عرض حالتك الصحية على طبيب ثانٍ ومعرفة تشخيصه لها، وهذا أمر ضروري للغاية إذ أنّه يضمن لك الحصول على رؤية أوضح وأشمل حول جميع الخيارات المتاحة أمامك. 5) إذا كانت النصيحة غير ملائمة، هل أستطيع تحمّل التبعات؟ هنالك شخص واحد فقط يتحمّل مسؤولية القرارات التي تتّخذها، وهذا الشخص هو أنت. وإن تضرّرت من اتباع نصيحة أحد اﻷشخاص، فأنت وحدك المسؤول عن ذلك. من هنا عليك أن تنتبه إلى أمرين اثنين: أولًا: عليك تحمّل كامل المسؤولية عند اتخاذ أي قرار. ثانياً: في بعض اﻷحيان يفضّل أن تتبع حدسك وتقع في الخطأ (وأن تتعلم من الخطأ بالطبع) على أن تتبع نصيحة شخص آخر وتقع في الخطأ (وتندم على عدم اتباع حدسك). كيف تطلب النصيحة من اﻵخرين يمكن الاستفادة من الأسئلة الخمسة السابقة في التفكير حول طريقة طلب النصيحة من اﻵخرين. وكلّما كنت واضحًا في طرح اﻷسئلة، كانت اﻹجابات التي ستحصل عليها أوضح، وكانت التغذية الراجعة التي ستحصل عليها أقوى وأفضل. لذا، في كل مرة تطلب النصيحة، احرص على أن تتضمن اﻷمور التالية: النتيجة التي ترغب في الوصول إليها. الخيارات التي تفكّر بها في الوقت الحاضر (إلى جانب تقديم دليل على أنّك فكّرت بشكل جدّي حيال هذه الخيارات). أي أمور مهمّة أخرى مرتبطة بالموضوع. لنأخذ هذا السؤال على سبيل المثال: وقارنه بالسؤال التالي: ما الذي ستفعله لو كنت مكاني؟ أيّ السؤالين يبدو أقوى في نظرك؟ أيّهما سيحصل على النصيحة اﻷفضل في رأيك؟ أيّ منهما سيحصل على إجابة من اﻷساس؟ إن لم تحصل على نصيحة جيّدة، فالسبب على الأرجح هو أنّك لم تقم بطرح السؤال بصورة صحيحة؟ كيف تطبّق هذا اﻷمر في مشروعك التجاري إن الحصول على التغذية الراجعة من أكثر الأمور أهمية بالنسبة إلى مشروعك التجاري بل وإلى حياتك بشكل عام، ولكن تلقي الكثير من النصائح قد يسبب بعض الارتباك أو الحيرة، ومن السهل أن ينسى المرء أن يعتمد على ما تمليه عليه أفكاره عندما يتلقى النصيحة من ذوي الخبرة والدراية. آمل أن تساعدك هذه المقالة في الحصول على نصائح أفضل في المستقبل، وأن تصبح قادرًا على معرفة الوقت والطريقة اﻷنسب للتصرف حيال النصائح التي تتلقّاها. ترجمة - وبتصرّف - للمقال How I Filter the Advice I Get About Business and Life لصاحبه Alex Turnbull. حقوق الصورة البارزة محفوظة لـ Freepik
  20. وصلنا إلى ختام هذه السلسلة وفي الدرس الأخير منها سنتحدث عن لوحة التحكم التي يقدّمها إطار العمل Django بشكل جاهز مع كل مشروع تقوم بإنشائه، ويمكن الاستفادة من لوحة التحكم هذه في إدارة النماذج Models المستخدمة في المشروع إضافة إلى إدارة مجموعات المستخدمين وصلاحياتهم في إجراء التعديلات على الموقع اﻹلكتروني. الولوج إلى لوحة التحكم لنستعرض المسارات الموجودة في ملف mysite/urls.py: urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^polls/', include(polls_urls)), ] نلاحظ هنا وجود مسارين رئيسيين في مشروعنا هذا، وكما هو واضح فإنّ الولوج إلى لوحة التحكم يتطلب استخدام مسار يتضمن الكلمة admin/، وللتأكد من ذلك ابدأ بتشغيل الخادوم الخاص بـ Django ثم توجّه في المتصفّح إلى العنوان التالي: http://127.0.0.1:8000/admin ستظهر الشاشة التالية: ما تراه على متصفحك هو صفحة الولوج log-in إلى لوحة التحكم الخاصة بالمشروع، ومن الواضح أننا نحتاج إلى اسم مستخدم وكلمة مرور لنتمكن من الدخول إلى لوحة التحكم. لإنشاء حساب مستخدم يمكنه الولوج إلى لوحة التحكم توجّه إلى سطر اﻷوامر ونفذ الأمر التالي: python manage.py createsuperuser سيُطلب منك إدخال اسم المستخدم، ويمكنك استخدام الاسم الذي ترغب به: Username: admin ثم سيُطلب منك إدخال عنوان بريدك اﻹلكتروني: Email address: admin@example.com والخطوة اﻷخيرة هي إدخال كلمة المرور مرتين: Password: ********** Password (again): ********** Superuser created successfully. واﻵن توجه إلى نفس العنوان السابق في المتصفّح، ثم أدخل الاسم وكلمة المرور التي قمت بإدخالها قبل قليل، وستكون قادرًا اﻵن على الولوج إلى لوحة التحكم والتي ستظهر بالشكل التالي: نلاحظ في هذه الصفحة إمكانية تعديل بعض اﻷمور الخاصة بالمستخدمين ومجموعات المستخدمين، ولكن لا نرى ذكرًا لتطبيقنا على اﻹطلاق. سنحتاج في الواقع إلى القيام بخطوة إضافية، وهي إخبار لوحة التحكم بأنّ عناصر الصنف Question في ملف النماذج models.py تمتلك واجهة لوحة تحكم، وللقيام بذلك توجّه إلى ملف polls/admin.py وأضف إليه اﻷسطر التالية: from .models import Question admin.site.register(Question) والآن قم بإعادة تحميل الصفحة الرئيسية للوحة التحكم، وسترى ظهور التطبيق ضمن عناصر الواجهة: ﻻحظ أن Django قادر على تمييز أسماء النماذج واستخلاص أسماء ذات مدلولات أوضح بالنسبة للمستخدم، فقد تعرّف Django في مثالنا هذا على النموذج Question باعتباره نموذجًا يحتوي على عدد من العناصر المتمثلة باﻷسئلة، لذا أضاف (s) الجمع إلى الاسم المعروض في لوحة التحكم. واﻵن انقر على Questions وسترى قائمة باﻷسئلة التي أضفناها برمجيًا إلى النموذج Question في الدروس السابقة. يمكنك كذلك النقر على نص السؤال لتتمكن من تعديله أو حذفه: ﻻحظ كيف أن Django قد قام بإنشاء استمارة Form خاصة بالسؤال تتضمن جميع الحقول التي أضفناها في الصنف Question في الملف polls/models.py، إضافة إلى ذلك، يستخدم Django عناصر HTML المناسبة لكل نوع من أنواع الحقول. كذلك يضيف Django بعض شيفرات Javascript مع كل حقل من نوع DateTimeField لاختيار الوقت والتاريخ حسب الحاجة. تخصيص لوحة التحكم رأينا كيف قام Django ببناء لوحة التحكم والاستمارات الخاصة بالنموذج Question بشكل آلي، ولكن سنحتاج غالبًا إلى تخصيص مظهر لوحة التحكم وآلية عملها، ويمكننا القيام بذلك عند تسجيل النموذج في ملف polls/admin.py؛ لذا توجّه إلى هذا الملف وعدّله بالشكل اﻵتي: from django.contrib import admin from .models import Question class QuestionAdmin(admin.ModelAdmin): fields = ['pub_date', 'question_text'] admin.site.register(Question, QuestionAdmin) عرفنا في الشيفرة السابقة صنف model admin وقمنا بتمريره كمعامل ثانٍ للدالة register(). ستعمل هذه الشيفرة على تبديل مواقع حقلي تاريخ نشر السؤال ونص السؤال، ليحل أحدهما محل اﻵخر: يمكن كذلك تقسيم الحقول إلى مجموعات fieldsets وذلك بالشكل التالي: from django.contrib import admin from .models import Question class QuestionAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['question_text']}), ('Date information', {'fields': ['pub_date']}), ] admin.site.register(Question, QuestionAdmin) التعامل مع الاختيارات المرتبطة بالسؤال؟ لم نتعامل لحدّ اﻵن مع الاختيارات المرتبطة باﻷسئلة في تطبيق الاقتراعات، وفي الواقع هنا طريقتان للقيام بذلك: الطريقة اﻷولى هي اتباع نفس الخطوات التي قمنا باتباعها في تسجيل الصنف Question وذلك بتعديل ملف polls/admin.py ليصبح بالشكل التالي: from .models import Choice, Question # ... admin.site.register(Choice) قمنا في هذا الشيفرة باستيراد الصنف Choice إضافة إلى الصنف Question، بعد ذلك سجّلنا الصنف Choice باستخدام الدالة register(). واﻵن ستظهر الصفحة الرئيسية للوحة التحكم بالشكل التالي: ويمكن إضافة اختيارات جديدة بالضغط على أيقونة Add Choice أو Add وستظهر صفحة إضافة الاختيار بالشكل التالي: ﻻحظ أنّه يمكنك اختيار السؤال الذي تودّ ربط الاختيار به وذلك من القائمة المنسدلة المعنونة بـ Question، كما يمكنك إضافة سؤال جديد من هذه الصفحة وذلك بالضغط على علامة (+) الخضراء إلى جانب القائمة المنسدلة، أو تحرير السؤال الذي اخترته بالضغط على أيقونة القلم اﻷصفر. لا تبدو هذه الطريقة مفيدة من الناحية العملية، إذ يجب إضافة السؤال الجديد، ثم إضافة الاختيارات وربطها واحدًا تلو اﻵخر بالسؤال. إذًا، أليس من اﻷفضل أن نقوم بإضافة الاختيارات مباشرة عند إضافة السؤال؟ هذه هي الطريقة الثانية. للقيام بذلك توجّه إلى ملف polls/admin.py ثم عدّله ليصبح بالشكل التالي: from django.contrib import admin from .models import Choice, Question class ChoiceInline(admin.StackedInline): model = Choice extra = 3 class QuestionAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['question_text']}), ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}), ] inlines = [ChoiceInline] admin.site.register(Question, QuestionAdmin) تخبر الشيفرة السابقة Django بأن الاختيارات يتم تحريرها في صفحة التحكم بالسؤال، إضافة إلى تقديم الحقول اللازمة ﻹضافة 3 اختيارات مع كل سؤال. بناء على ذلك ستظهر صفحة إضافة سؤال جديد بالشكل التالي: ستبرز هنا مشكلة صغيرة وهي أنّه في حال وجود عدد كبير من الاختيارات، فإن المساحة التي ستشغلها هذه الاختيارات ستكون كبيرة جدًّا. يقدّم Django طريقة أخرى لعرض الاختيارات وهي على شكل جدول، ويمكن الوصول إليها بتعديل المعامل في الصنف ChoiceInline ليصبح بالشكل التالي: class ChoiceInline(admin.TabularInline): ستظهر صفحة إضافة سؤال جديد بالشكل التالي: واﻵن بعد أن أجرينا التعديلات اللازمة على صفحة إضافة اﻷسئلة، لنجر بعض التعديلات كذلك على الصفحة الرئيسية التي يتم من خلالها عرض جميع اﻷسئلة المتوفرة في التطبيق. في البداية تظهر هذه الصفحة بالشكل التالي: يستخدم Django بصورة افتراضية مخرجات دالة str() لكل حقل من حقول قاعدة البيانات التي يتم عرضها في الصفحة الرئيسية، ولكننا بحاجة هنا إلى عرض جميع الحقول وليس حقل نصّ السؤال فقط. وللقيام بذلك نستخدم الصف list_display والذي سنضمنه أسماء الحقول التي نرغب في عرضها على شكل أعمدة في الصفحة الرئيسية. توجّه إلى ملف polls/admin.py وعدّل الصنف QuestionAdmin لصبح بالشكل التالي: class QuestionAdmin(admin.ModelAdmin): fieldsets =[ (None, {'fields': ['question_text']}), ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}), ] inlines = [ChoiceInline] list_display = ('question_text', 'pub_date', 'was_published_recently') واﻵن يفترض أن تظهر الصفحة الرئيسية بالشكل التالي: ﻻحظ أن Django قام بتسمية العمود اﻷخير بنفس اسم التابع المستخدم في النموذج Question مع استبدال الشرطات السفلية بفواصل، ويمكننا تغيير هذا الاسم وتحسين طريقة عرض المخرجات في هذا العمود بالتوجه إلى ملف polls/models.py وتعديل الصنف Question ليصبح بالشكل التالي: class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') def __str__(self): return self.question_text def was_published_recently(self): now = timezone.now() return now - datetime.timedelta(days=1) <= self.pub_date <= now was_published_recently.admin_order_field = 'pub_date' was_published_recently.boolean = True was_published_recently.short_description = 'Published recently?' أعد تحميل الصفحة الرئيسية ولاحظ الفرق: يمكننا إضافة المزيد من التحسينات إلى هذه الصفحة، فمثلًا يمكننا إضافة عمود جانبي يعمل على تصفية اﻷسئلة حسب تاريخ نشرها، وللقيام بذلك أضف السطر التالي إلى الصنف QuestionAdmin: list_filter = ['pub_date'] سيضيف هذا السطر عمودًا جانبيًا إلى الصفحة الرئيسية يتيح لمدير الصفحة تصفية اﻷسئلة حسب تاريخ النشر. ولكن ماذا لو أردنا البحث عن نص سؤال معين بدلًا من البحث بحسب تاريخ النشر؟ يمكن القيام بذلك بإضافة السطر التالي إلى الصنف QuestionAdmin والذي سيعمل على إظهار صندوق للبحث في الصفحة الرئيسية: search_fields = ['question_text'] بعد إجراء التعديلات السابقة ستظهر الصفحة الرئيسية بالشكل التالي: تعديل مظهر لوحة التحكم الخاصّة بالتطبيق من المؤكّد أننا لا نرغب في ظهور عبارة Django administration في رأس كل صفحة من صفحات لوحة التحكم، ويمكن تغيير هذه العبارة باستخدام نظام قوالب Django، فلوحة التحكم هذه تدار بواسطة Django، وتستخدم الواجهة نظام قوالب Django كذلك. أنشئ مجلّدًا باسم templates في مجلّد المشروع (المجلد الذي يحتوي على الملف manage.py)، ثم توجّه إلى ملف اﻹعدادات الخاص بالمشروع mysite/settings.py ثم أضف الخيار DIRS إلى إعدادات القالب بالشكل التالي: TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] يحدّد السطر الذي أضفناه إلى إعدادات قوالب المسارات التي يجب على Django البحث فيها عن القوالب، وهنا أخبرنا Django بأن عليه البحث عن المجلد templates ضمن المجلد الرئيسي للمشروع BASE_DIR. تعمل الدالة os.path.join على ربط القيمة التي يتم الحصول عليها من BASE_DIR مع اسم المجلد المطلوب وهو templates. واﻵن أنشئ مجلّدًا جديدًا باسم admin داخل مجلد templates الذي أنشأناه قبل قليل، ثم انسخ إليه القالب base_site.html من مجلد admin الموجود ضمن الملفات المصدرية لـ Django في المسار django/contrib/admin/templates. إن واجهت صعوبة في العثور على الشيفرة المصدرية الخاصة بـ Django توجّه إلى سطر اﻷوامر ونفّذ اﻷمر التالي: python -c "import django; print(django.__path__)" واﻵن قم بتحرير ملف base_site.html واستبدل الشيفرة {{ site_header|default:_('Django administration') }} بالعبارة التي ترغب في ظهورها في رأس كل صفحة من صفحات لوحة التحكم، يجب أن تكون الشيفرة مقاربة لما يلي: {% block branding %} <h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1> {% endblock %} من هنا نلاحظ إمكانية إجراء أي تعديل نرغب به على أي قالب من القوالب الخاصة بلوحة التحكم بنفس الطريقة السابقة، فكل ما علينا فعله هو نسخ القالب المطلوب من الملفات المصدرية لـ Django ولصقه في المجلد المخصّص له، ثم إجراء التعديلات المطلوبة. فعلى سبيل المثال، يمكن تخصيص مظهر الصفحة الرئيسية للوحة التحكم وذلك من خلال نسخ الملف template/index.html من الملفات المصدرية لـ Django بنفس الطريقة السابقة، ثم قم بتحرير الملف، وستجد أنّه يستخدم متغيرًا يحمل الاسم app_list. يتضمن هذا المتغير جميع التطبيقات المثبتة في المشروع الذي تعمل عليه. يمكنك اﻵن استبدال هذا المتغير بروابط تأخذ المستخدم إلى مواضع مختلفة من لوحة التحكم، بدلًا من عرض جميع التطبيقات. تغيير لغة العرض في لوحة التحكم من الخصائص التي يتميّز بها إطار العمل Django دعمه للكثير من اللغات، ومن ضمنها اللغة العربية، ويمكن تغيير لغة واجهة لوحة التحكم إلى اللغة التي نرغب بها من خلال التوجّه إلى ملف اﻹعدادات الخاصّ بالمشروع setteings.py ثم تعديل قيمة المتغير LANGUAGE_CODE الافتراضية 'en' إلى رمز اللغة المطلوبة. فمثلًا لتغيير لغة الواجهة إلى العربية: LANGUAGE_CODE = 'ar' وللغة الفرنسية: LANGUAGE_CODE = 'fr' المصدر: توثيقات Django
  21. كثيرًا ما أعاني - كمستثمر في الشركات التقنية ذات معدّلات النمو المرتفعة - من مشكلة التوفيق بين تحقيق الأرباح العالية والنمو السريع للشركة، وهناك اعتقاد سائد في مجال الاستثمار في الشركات التقنية - سائد في الأسواق الخاصة والعامة على حد سواء - مفاده أنّ النموّ أكثر فائدة وقيمة من الربحية، وأنه بعد تحقيق الهيمنة على السوق فإن الأرباح تصبح تحصيل حاصل. يدفع هذا الاعتقاد الشركات إلى الاهتمام بشكل كبير بمجالي التسويق والمبيعات بهدف زيادة معدلات نموّ المشروع التجاري بمستويات تفوق ما يمكن تحقيقه لو تمّ الأمر بصورة طبيعية. تحدّثت في مدونتي قبل بضعة أشهر عن صيغة استنتجتها في أحد اجتماعات مجلس الإدارة، وتنص على أن معدّل النموّ السنوي إضافة إلى هامش التشغيل قبل دفع الضرائب pre-tax operating margin يجب ألّا يقلّ عن 40%. بمعنى أنّك قادرٌ على تحقيق نمو بنسبة 100% في كل سنة وامتلاك هامش تشغيل بنسبة -60%، أو يمكنك المحافظة على مستوى ثابت مع هامش تشغيل بنسبة 40%، أو يمكنك تحقيق نمو بنسبة 20% في كل سنة وتمتلك هامش تشغيل بنسبة 20%. في الواقع، ليس هناك أي سبب بعينه لاختيار هذه النسبة، ولكنّي أحب وضع علاقة بين المستويات المقبولة من الربحية (أو الخسارة) وبين النمو، فقد رأيت الكثير من الشركات التي تستثمر جلّ مواردها لتحقيق النمو، دون التفكير بالفائدة التي يمكن تحصيلها من هذا الاستثمار والخسائر التي قد تترتب عليه. خلال العقد الماضي، عملت واستثمرت في عدد من الشركات عالية المستوى والتي لم تلقِ بالًا لهذه المسألة على الإطلاق، إذ تصل هذه الشركات إلى الربحية في المراحل الأولى من عمرها، لتستثمر الأرباح مرة أخرى في المشروع التجاري، وهكذا تستمر عجلة النمو بالدوران بوتيرة عالية عامًا بعد آخر، وبذلك تنأى هذه الشركات بنفسها عن إنفاق المبالغ الطائلة والبحث عن استثمارات، ومن أفضل الأمثلة على هذه الشركات هي Indeed.com، وهناك العديد من الأمثلة المشابهة وكلها شركات رائعة أكنّ لها وافر الاحترام. تقودني هذه التجارب إلى التشكيك في المعتقد السائد في عالم التقنية والذي يفيد بأنّه إن لم تقم الشركة بالاستثمار بشكل كبير في تحقيق النمو (وخسارة الأموال) فإنّها لا تعمل على زيادة القيمة المحتملة للمشروع التجاري على المدى الطويل. في الواقع، ليس من الضروري أن تسير الأمور بهذه الطريقة، صحيح أنّه يجب على الشركة أن تكون مميّزة بالفعل وأن تمتلك مقومات تؤهّلها لخوض المنافسة في سوق العمل وتجنّب خسارة الأموال، ولكن ربّما يكفي أن يكون مؤسس الشركة ضليعًا في مجال التجارة وريادة الأعمال إلى درجة تمكّنه من تحقيق ذلك. (هذا ما أصف به Paul وRony، مؤسِّسي Indeed.com). إضافة إلى ذلك، أعتقد أن العامل المحفّز للربح، أعني أن تكون العائدات السنوية أكبر من النفقات، يشكّل ضابطة ذات قيمة كبيرة بالنسبة لفريق الإدارة، إذ يحثّهم على التفكير المبدع والعقلاني حيال الاستثمارات التي سيقدمون عليها، ويساعدهم على تجنب الدخول في استثمارات سيئة سواء في الأشخاص أو المنتجات أو المبيعات أو التسويق أو أي منحى آخر من مناحي المشروع التجاري، ويعينهم كذلك على تحويل الشركة إلى شركة قادرة على الصمود أمام الظروف والتحديات الصعبة. وفي حال كانت الشركة "تستثمر في النمو" وليست بحاجة إلى تحقيق الأرباح لأنها حصلت على استثمار كبير يمكّنها من تعويض الخسائر/ فحينئذ تجد الشركة نفسها لا تركّز على اتّخاذ القرارات المُناسبة (من بناء الفريق المُناسب وما إلى ذلك). يتطلب منّا عملنا (كمستثمرين) أن نستثمر في الشركات لكي نساعدها على إدارة الخسائر التشغيلية بهدف إيصال المنتج الذي تقدّمه إلى السوق، وتنمية المشروع التجاري وفريق العمل، وتحقيق الأرباح للمؤسسين والإدارة والمُساهمين في الشركة. وتعاني معظم الشركات التي نعمل معها من خسارة الأموال، وقد اعتدنا على قراءة التقارير المالية income statements المثقلة بالكثير من الخسائر، واعتدنا كذلك على رؤية تقديرات موعد إفلاس الشركة إن استمرت على هذا المنوال. ولكنّي ضقت ذرعًا من رؤية الهدف ذاته يتكرر في جميع الخطط التشغيلية، ألا وهو الوصول بالمشروع التجاري إلى مرحلة يستطيع فيها الحصول على جولة استثمار جديدة وبيع المنتج بأسعار مرتفعة. أعترف بأنّ هذا الأمر جيّد، وهكذا تجري الأمور بين أصحاب رأس المال المخاطر والشركات الناشئة، ولكنّي أفضّل رؤية - في مرحلة معينة - خطّة تشغيلية تهدف إلى الوصول إلى ربحية مستدامة. والسبب وراء ذلك - كما ذكرت سابقًا - هو أن بعض أفضل الشركات التي تعاملنا معها في USV قد وصلت إلى مرحلة الربحية في وقت مبكر جدًّا، وقد حافظت على هذا المستوى حتى مع نمو عائداتها بنسبة 100% عامًا بعد آخر. هذا يعني أنّ الأمر ليس مستحيلًا، وأعتقد أن السبب الذي يدفع روّاد الأعمال إلى التفكير بعدم إمكانية حدوث هذا الأمر هو عدم وجود من يخبرهم بعكس ذلك؛ وها أنا أفعل الآن. ترجمة - وبتصرّف - للمقال Profits vs Growth لصاحبه Fred Wilson. حقوق الصورة البارزة محفوظة لـ Freepik
  22. يفتقر تطبيق الاقتراعات الذي نعمل على إنشائه إلى آلية جيّدة للتصويت على الأسئلة التي يتم عرضها للمستخدم، لذا يجب علينا توفير استمارة تتيح للمستخدم التصويت على الإجابة التي يرغب بها. إضافة إلى ذلك، سنتعرف في هذا الدرس على العروض العامة التي تهدف إلى اختصار الوقت والجهد عبر التخلّص من العمليات المتكررة بصورة دائمة، مثل جلب البيانات من قاعدة البيانات وعرض النتائج في صفحة مستقلة. وفي نهاية الدرس سنتعرف على الملفات الساكنة وسنضيف بعض التنسيقات إلى تطبيق الاقتراعات. إنشاء استمارة بسيطة يفترض أن يكون المستخدم قادرًا على اختيار إحدى الإجابات الخاصة بسؤال معين، ولكن قالب detail بشكله الحالي لا يوفّر هذا اﻷمر، لذا سنحتاج إلى إضافة استمارة إلى هذا القالب. توجّه إلى الملف polls/detail.html في مجلد القوالب templates ثم أضف إليه الشيفرة التالية: <h1>{{ question.question_text }}</h1> {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %} <form action="{% url 'polls:vote' question.id %}" method="post"> {% csrf_token %} {% for choice in question.choice_set.all %} <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" /> <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br /> {% endfor %} <input type="submit" value="صوّت" /> </form> يعمل السطر الأول على جلب نص السؤال ووضعه داخل وسم <h1> لعرضه بشكل واضح وكبير. في السطر الثاني يتم التحقق مما إذا كان المتغير error_message يحمل قيمة أم ﻻ، فإن كان كذلك يتم عرض هذه القيمة وإلا فلا، سنستخدم هذا المتغير بعد قليل في العرض المسؤول عن التصويت، حيث سيحمل هذا المتغير قيمة نصية وهي عبارة عن رسالة نخبر المستخدم فيها أنّه لم يقم باختيار أي إجابة من الإجابات المعروضة. في السطر الثالث أنشأنا استمارة يتم توليد قيمة الحدث action فيه بصورة ديناميكية، وذلك باستخدام الوسم url والمسار vote والمتغير question.id والذي يمثّل الرقم المعرف للسؤال، وستكون طريقة إرسال الحدث هي POST، وبما أننا نعتمد هذه الطريقة، فعلينا الانتباه إلى حماية المعلومات من تزوير الطلب عبر المواقع Cross-site request forgery والمعروف اختصارًا بـ CSRF. ولكن لا تقلق، يوفّر Django نظامًا سهل الاستخدام لتجنّب هذه المشكلة. باختصار، يجب عليك وضع الوسم {% csrf_tocken %} في أي استمارة تعتمد طريقة POST ﻹرسال اﻷحداث. تعمل الحلقة for على إضافة زر اختيار Radio button إلى الإجابات الخاصة بالسؤال الذي اختاره المستخدم، ويتم جلب هذه الإجابات من باستخدام العبارة question.choice_set.all. والآن لنقم بإنشاء العرض الذي سيتحكم في البيانات المرسلة إلى الخادوم. أعتقد أن سير العمل في Django قد أصبح واضحًا في هذه المرحلة، ففي البداية نقوم بتعريف المسار، ثم نربط هذا المسار بالعرض الذي سيكون مسؤولًا عن القيام بأي شيء نرغب به، وبعد ذلك نربط هذا العرض بالقالب الذي سيظهر النتائج. وقد قمنا فعلًا بالخطوة الأولى من سلسلة الخطوات هذه في الدرس الرابع من هذه السلسلة عندما بدأنا الحديث عن المسارات، حيث يتضمن ملف polls/urls.py المسار التالي: url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote') هذا المسار مرتبط بالعرض view والذي قمنا بإنشائه في الدرس نفسه: def vote(request, question_id): return HttpResponse("أنت تصوت على السؤال %s." % question_id) لنقم الآن بكتابة الشيفرة المسؤولة عن عملية التصويت ضمن هذا العرض، لذا توجّه إلى ملف views.py وأضف الشيفرة التالية في بداية الملف: from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse from .models import Choice, Question ثم عدّل دالة vote لتصبح بالشكل التالي: def vote(request, question_id): question = get_object_or_404(Question, pk=question_id) try: selected_choice = question.choice_set.get(pk=request.POST['choice']) except (KeyError, Choice.DoesNotExist): return render(request, 'polls/detail.html', {'question':question, "error_message": "لم تقم بالتصويت على السؤال"}) else: selected_choice.votes += 1 selected_choice.save() return HttpResponseRedirect(reverse('polls:results', args=(question.id,))) لنتكلم عن الشيفرة السابقة بشيء من التفصيل، فهناك عدد من الأمور الجديدة فيها: request.POST هو عنصر شبيه بالقاموس يتيح الوصول إلى البيانات المرسلة من الاستمارة بواسطة اسم المفتاح، وفي حالتنا هذا فإن request.POST['choice'] سوف يرجع قيمة المعرّف الخاص بالجواب الذي اختاره المستخدم، وتكون هذه القيمة على هيئة سلسلة نصية. وجدير بالذكر أن Django يقدّم عنصرًا آخر باسم request.GET ويستخدم عندما تكون طريقة إرسال البيانات في الاستمارة هي GET. يطلق العنصر request.POST['choice] خطأً مفتاحيًا KeyError وهذا النوع من الأخطاء يُطلق عندما لا يكون المفتاح المطلوب (ضمن القاموس) موجودًا ضمن مجموعة المفاتيح المتوفرة، وفي تطبيقنا ينطلق هذا الخطأ عندما ﻻ يختار المستخدم أي إجابة من الإجابات المعروضة أمامه، ويعمل على إعادة المستخدم إلى صفحة التصويت مرة أخرى، ولكن هذه المرة مع إضافة العبارة: “لم تقم بالتصويت على السؤال” إلى المتغير error_message، وبعد أن أصبح هذا المتغير يحمل قيمة معينة، سيقوم قالب detail بعرض الرسالة في المكان المناسب. إن تمت عملية التصويت بنجاح يتم إضافة صوت واحد إلى الأصوات الخاصة بالإجابة المختارة من قبل المستخدم، وقد استخدمنا الصنف HttpResponseRedirect بدلًا من الصنف HttpResponse لإعادة توجيه المستخدم إلى صفحة النتائج. هذا الصنف في الواقع هو أحد الأصناف الفرعية للصنف HttpResponse ويأخذ معاملًا واحدًا وهو عنوان URL الذي ستتم إعادة التوجيه إليه. والهدف من استخدام هذا الصنف هو تجنّب إرسال البيانات مرتين في حال ضغط المستخدم على زر الرجوع في المتصفح، وينصح باستخدام هذا الصنف في كل مرة يتم فيها التعامل بنجاح مع بيانات POST، وهذا الأمر ليس خاصًا بـ Django فقط، بل هو من الممارسات الجيدة في مجال تطوير الويب باستخدام أي لغة برمجية. استخدمنا الدالة reverse() في مشيّد الصنف HttpResponseRedirect لنتجنّب الإدخال اليدوي للمسار الذي نرغب بإعادة توجيه المستخدم إليه. يأخذ المعامل الأول في هذه الدالة اسم العرض أو اسم نمط URL المطلوب إعادة التوجيه إليه. في هذا المثال سيتم توجيه المستخدم إلى المسار الذي يحمل اسم polls:results، ولكن هذا المسار يتضمن متغيّرًا، لذا سنخبر Django بأن يأخذ قيمته من المتغيّر question.id وذلك من خلال المعامل args. بمعنى أنّه لو اختار المستخدم السؤال الذي يحمل الرقم 3، فإن الصنف HttpResponseRedirect سيعيد السلسلة النصية التالية: polls/3/results/ حيث أن قيمة question.id في هذه الحالة هو 3. بعد أن يقوم المستخدم بالتصويت على سؤال معين، تعمل دالة العرض vote() على إعادة توجيهه إلى صفحة النتائج الخاصة بذلك السؤال، فلنقم إذًا بكتابة دالة العرض الخاصّة بالنتائج. توجّه إلى ملف polls/views.py وعدّل الدالة results لتصبح بالشكل التالي: def results(request, question_id): question = get_object_or_404(Question, pk=question_id) return render(request, 'polls/results.html', {'question': question}) والآن، قم بإنشاء القالب المسؤول عن عرض النتائج. في مجلد templates/polls/ أنشئ الملف results.html، وأضف إليه الشيفرة التالية: <h1>{{ question.question_text }}</h1> <ul> {% for choice in question.choice_set.all %} <li>{{ choice.choice_text }} -- {{ choice.votes }} vote{{ choice.votes|pluralize }}</li> {% endfor %} </ul> <a href="{% url 'polls:detail' question.id %}">صوّت مرة أخرى</a> والآن توجّه إلى العنوان التالي في متصفحك بعد تشغيل الخادوم الخاص بـ Django: 127.0.0.1:8000/polls/1/ وستحصل على نتيجة مشابهة لهذه: وبعد التصويت سيتم توجيهك إلى صفحة النتائج: وفي حال عدم التصويت على أي إجابة والضغط على زرّ التصويت، تظهر رسالة الخطأ بالشكل التالي: العروض العامة Generic Views لنلق نظرة على ملف views.py بعد إضافة جميع الدوال إليه: from django.shortcuts import render, get_object_or_404 from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse from .models import Choice, Question def index(request): latest_question_list = Question.objects.order_by('-pub_date')[:5] return render(request, 'polls/index.html', {'latest_question_list': latest_question_list}) def detail(request, question_id): question = get_object_or_404(Question, pk=question_id) return render(request, 'polls/detail.html', {'question': question}) def results(request, question_id): question = get_object_or_404(Question, pk=question_id) return render(request, 'polls/results.html', {'question': question}) def vote(request, question_id): question = get_object_or_404(Question, pk=question_id) try: selected_choice = question.choice_set.get(pk=request.POST['choice']) except (KeyError, Choice.DoesNotExist): return render(request, 'polls/detail.html', {'question':question, "error_message": "لم تقم بالتصويت على السؤال"}) else: selected_choice.votes += 1 selected_choice.save() return HttpResponseRedirect(reverse('polls:results', args=(question.id,))) هل لاحظت أمرًا ما؟ الدالتان detail() وresults() متشابهتان كثيرًا، وفي الواقع الفارق الوحيد بينهما هو القالب الذي يرتبط بكل دالة. إضافة إلى ذلك فإن هاتين الدالتين إضافة إلى دالة index() تقوم بعمل واحد وبسيط، وهو عرض مجموعة من المعلومات على المتصفح. تمثل هذه العروض حالة شائعة جدًّا في عملية تطوير الويب، وهي الحصول على البيانات من قاعدة البيانات بالاستناد إلى معامل يتم تمريره في عنوان URL في المتصفح، ثم تحميل قالب معين، ثم تصيير ذلك القالب على متصفح الإنترنت. لقد ذكرنا في بداية هذه السلسلة أنّ إطار العمل Django يركّز على مبدأ عدم التكرار، وقد رأينا هذا بشكل واضح عند استخدامنا للدوال المختصرة render() و get_object_or_404(). كذلك يوفّر Django في حالتنا هذه طريقة مختصرة للتعامل مع هذه العمليات الشائعة، وهي العروض العامّة. تعمل هذه العروض على اختصار الأنماط المتكررة من الشيفرات إلى درجة لا تعود فيها بحاجة إلى كتابة شيفرة بايثون لكتابة التطبيق. ولاستخدام العروض العامّة يتوجّب علينا إجراء بعض التعديلات البسيطة على شيفرتنا السابقة، ويمكن تلخيص هذه التعديلات بالنقاط التالية: تعديل أنماط URL. الاستغناء عن بعض العروض التي لسنا بحاجة إليها بعد الآن. كتابة عروض جديدة بالاعتماد على عروض Django العامة. تعديل أنماط URL توجّه إلى ملف polls/urls.py وعدّله بالشكل التالي: from django.conf.urls import url from . import views app_name = 'polls' urlpatterns = [ url(r'^$', views.IndexView.as_view(), name='index'), url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'), url(r'^(?P<pk>[0-9]+)/results/$', views.ResultsView.as_view(), name='results'), url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'), ] لاحظ أنّنا استبدلنا <question_id> بـ <pk> في مساري detail و results، وسنتعرف على سبب ذلك بعد قليل. تعديل العروض التعديلات التي سنجريها على العروض ستشمل دوال index(), detail(), results() أما دالة vote() فستبقى دون تغيير: from django.shortcuts import get_object_or_404, render from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse from django.views import generic from .models import Choice, Question class IndexView(generic.ListView): template_name = 'polls/index.html' context_object_name = 'latest_question_list' def get_queryset(self): return Question.objects.order_by('-pub_date')[:5] class DetailView(generic.DetailView): model = Question template_name = 'polls/detail.html' class ResultsView(generic.DetailView): model = Question template_name = 'polls/results.html' لاحظ كيف استغنينا بشكل كامل عن الدوال الثلاثة سابقة الذكر لتحلّ محلّها أصناف تحمل أسماءً مشابهة، ونظرًا لاستخدام الأصناف في هذا النوع من العروض، فإنّها تحمل اسم العروض المستندة إلى الأصناف Class based views. لقد استخدمنا نوعين من أنواع العروض العامة، وهما ListView و DetailView. يلخّص العرض اﻷول عملية عرض جميع العناصر، في حين يلخّص العرض الثاني عملية عرض التفاصيل المرتبطة بعنصر معيّن. يحتاج كل عرض عامٍّ إلى التعرّف على النموذج الذي سيتعامل معه، ويتم التصريح عن ذلك في المعامل model. إلى جانب ذلك، يطلب العرض DetailView أن يتم إسناد قيمة المفتاح الرئيسي المأخوذة من عنوان URL إلى متغير يحمل الاسم pk، لهذا السبب قمنا بتبديل question_id بالاسم الجديد في ملف المسارات urls.py. يبحث العرض DetailView بصورة افتراضية عن القالب المرتبط به في المسار <app name>/<model_name>_detail.html، وهذا يعني أنّ هذا العرض سيستخدم القالب polls/question_detail.html بشكل تلقائي. ويمكن تجاوز هذه القيمة التلقائية من خلال تعيين اسم القالب باستخدام المعامل template_name. ينطبق الأمر ذاته على العرض ListView والذي سيستخدم بشكل تلقائي القالب polls/question_list.html. بقي أن نشير إلى أنّنا كنا نزوّد كل قالب بمتغيرات السياق التي سيستخدمها، وفي مثالنا هذا كانت المتغيرات هي question و latest_question_list. عند استخدام العروض العامّة يتم تزويد العرض DetailView بالمتغير question تلقائيًا، وذلك ﻷننا نستخدم النموذج Question، حيث يستطيع Django تحديد اسم مناسب لمتغيرات السياق بناء على النموذج الذي يرتبط بالعرض العام. ويمكن تجاوز القيمة التلقائية هذه بسهولة وذلك بإسناد اسم المتغير الذي نرغب به إلى المعامل context_object_name، وبهذا نخبر Django بأنّنا نرغب باستخدام هذا الاسم بدلًا من الاسم الذي سينشئه بصورة تلقائية وهو في هذه الحالة question_list. كما يمكنك الإبقاء على الاسم الافتراضي question_list إن كنت ترغب في ذلك، ولكن هنا عليك تغيير اسم المتغير في أي مكان يرد فيه ضمن القوالب. الملفات الساكنة Static Files يبدو تطبيقنا بشعًا أليس كذلك؟ لنقم إذًا بإضافة بعض التنسيقات البسيطة إليه، ولنتعرف على مفهوم الملفات الساكنة. إلى جانب ملفات HTML التي ينشئها الخادوم، تحتاج تطبيقات الويب بشكل عام إلى بعض الملفات اﻹضافية - مثل الصور وملفات جافا سكربت وملفات CSS - لعرض صفحات الويب بشكل منسّق ومرتّب، ويطلق Django على هذه الملفات اسم الملفات الساكنة. سنبدأ أولًا بإنشاء مجلد باسم static في مجلد polls الرئيسي، ثم أنشئ داخل المجلد static مجلّدًا جديدًا باسم polls. بمعنى آخر يجب أن يكون مسار ملف CSS بالشكل التالي: polls/static/polls/style.css. كما هو الحال مع القوالب، فإن Django يبحث بنفس الطريقة عن الملفات الساكنة، واستخدام هذه المجلدات هو أمر تنظيمي يتيح لـ Django التمييز بين الملفات الساكنة الخاصة بكل تطبيق. والآن توجّه من خلال محرّر النصوص إلى ملف style.css وأضف إليه الشيفرة التالية: li a { color: green; text-decoration: none; font-size: 1.3em; } والآن توجّه قالب index.html وأضف الشيفرة التالية في بداية الملف: {% load staticfiles %} <link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}" /> يعمل الوسم load staticfiles في بداية الملف على تحميل الوسم static المسؤول بدوره عن توليد عنوان URL المطلق للملف الساكن المطلوب. والآن أعد تحميل الصفحة الرئيسية وستلاحظ أن الأسئلة قد تلونت باللون اﻷخضر. ولإضافة صورة للخلفية قم بإنشاء مجلد images في نفس المجلد الذي يحتوي الملف style.css ثم ضع فيه الصورة التي ترغب في جعلها خلفية للصفحة، وعلى فرض استخدام صورة باسم background.gif أضف الشيفرة التالية إلى ملف style.css: body { background: white url("images/background.gif") no-repeat right bottom; } أعد تحميل الصفحة الرئيسية، وستلاحظ أن الصورة قد أصبحت خلفية للصفحة. من الجدير بالذكر أنّه لا يمكن استخدام الوسم {% static %} استخدام داخل الملفات الساكنة والتي لا يتم توليدها بواسطة Django، لذا يجب استخدام المسارات النسبية وليست المطلقة لربط الملفات الساكنة بعضها ببعض. ختامًا تعرّفنا في هذا الدرس على كيفية استخدام نماذج الاستبيان في Django بصورة مبسطة، واستخدمنا بعد ذلك العروض العامّة التي تختصر الكثير من الوقت والجهد، وفي النهاية تعرّفنا على مفهوم الملفات الساكنة وكيفية استخدامها في تطبيقات Django. في الدرس القادم وهو الدرس اﻷخير ضمن هذه السلسلة، سنتحدّث بشيء من التفصيل عن لوحة التحكم التي يتم إنشاؤها بصورة تلقائية مع كل مشروع في Django. المصدر: توثيقات Django
  23. Peter Garret هو المغني الرئيسي في فرقة الروك الأسترالية التي تحمل اسم Midnight Oil. يستفيد Peter من شهرته في الغناء والرقص في مجال صناعة الموسيقى كوسيلة لتعزيز نشاطه في مجال حماية البيئة والذي كان له أثر واضح على مستويات عدة. ولكن عندما قرّر Peter الدخول في عالم السياسة حاول أن يعمل على نفس القضايا التي كان يعمل عليها في السابق، ولكنّه لم يحقق أي إنجاز يذكر، بل على العكس من ذلك، فقد كان ذلك الرجل الذكي والمتحمس والموهوب الذي كافح من أجل نشر رسالته في هذه البيئة الجديدة. حال Peter مماثلة بشكل كبير للعديد من الحالات التي نراها وبشكل متكرر لدى فرق الدعم الفني في الشركات الصغيرة لما تشرع في النّمو. العيش في فقاعة من السهل التركيز على العميل بالنسبة إلى فرق العمل الصغيرة، إذ يمكن التحدّث إلى مؤسس الشركة بصورة مباشرة، كما يمكن أن تطلب وبشكل سريع من المطور الرئيسي في الشركة إصلاح ثغرة ما أو إجراء تعديل معين، وبعد أن تجري التغيير الذي ترغب به، يمكنك رؤية التطور الحاصل في مقياس سعادة العملاء، وستغريك النتائج للاعتقاد بأنّك قد حللت المسألة من جذورها، فيصل بك الأمر إلى كتابة مقالة أنيقة في مدونتك تصف فيها دهشتك من حاجة الشركات الكبيرة إلى ذلك العدد الكبير من المدراء وإلى عقد كل تلك الاجتماعات. ولكن ماذا لو تقدّمنا في الزمن لبضع سنوات؟ هل ترى أنك ستبقى قائد الفريق حينها؟ هل ستحافظ خدمة العملاء على نفس الجودة العالية التي تتمتع بها الآن؟ فكّر في الشركات الكبرى التي تتعامل معها باستمرار. والآن ألا زلت تحتفظ بتلك الثقة الكبيرة؟ جميعنا يعتقد بأنّ الخدمات التي نقدّمها في تحسن مستمر، فبطبيعة الحال، لا يرغب أحد في تقديم خدمة عملاء سيئة على الإطلاق. ولكن على أرض الواقع، سقطت بعض الشركات الكبيرة من أعلى المنحدر - إن صحّ التعبير - وهي تقدّم خدمة عملاء سيئة إلى درجة تجعلك تعتقد بأنّها تتعمّد القيام بذلك. قد لا نمرّ أنا وأنت بهذا الحالة، ولكن هذا ليس المسار الوحيد الذي قد تتخذه الشركات في دورة حياتها. الوقوع في مستنقع الرداءة Mediocrity لا بد أنّك قد سمعت بإحدى هذه الحالات: شركة برمجيات تتمتع بتجاوب كبير مع عملائها وباختياراتها الذكية، ولكن ما إن انضمت هذه الشركة إلى شركة أكبر حتى بدأ بريقها بالأفول، فلا تطور ولا تراجع، وكأنها تسير على أرض منبسطة مستوية. مطعم صغير افتُتح مؤخّرًا، يضجّ بالحيوية والنشاط، ويقدّم وجبات طازجة ولذيذة. لكن ما إن أصبح هذا المطعم مشهورًا ومعروفًا بين الناس وبدأ اسمه بالانتشار والتوسع حتى فقد كل الصفات التي كانت تميّزه عن غيره من المطاعم. تشير الإحصاءات إلى أن الخدمات التي تقدمها معظم الشركات هي أدنى ما يمكن له أن يرضي العملاء، ومن المؤسف أن ينتهي الأمر بخدمة العملاء في معظم الشركات إلى الوقوع في الرّداءة، وهذا الأمر بمثابة تحذير يجب الانتباه إليه. لا يختلف اثنان على أن تحقيق النمو أمر صعب للغاية، فكل قرار تتخذه في هذا المجال قد يكون في آن واحد سببًا لجلب الكثير من الأشخاص إلى الشركة وفقدان الكثير منهم أيضًا، وغالبًا ما يعمل صاحب الشركة بسرعة كبيرة مستعينًا بالمعلومات المتوفّرة بين يديه والتي تكون قليلة في أغلب الأحيان، وذلك لاتخاذ قرارات سريعة يهدف من خلالها حماية الشركة من الانهيار، وليس من قبيل العجب أن تؤدي مثل هذه التنازلات الصغيرة على امتداد فترة عمل الشركة إلى تقييد قدرتها على تقديم خدمات جيدة. ولكن لا تيأس، فهنالك طريق ثالث يمكنك أن تسلكه الشركات في مجال خدمة العملاء، ألا وهو تقديم خدمات استثنائية. خذ مثلًا شركات Apple، Ritz Carlton، Costco وغيرها. تحافظ هذه الشركات على مستوى عالٍ من رضا العملاء متفوقة في ذلك على نظيراتها في سوق العمل. ولكن كيف تستطيع هذه الشركات القيام بذلك؟ وما الذي يمكننا القيام به لتوجيه الشركة ودفعها للسير بهذا الاتجاه؟ السير في طريق تقديم الخدمات الاستثنائية إن توسيع نشاط خدمة العملاء في شركة صغيرة ليس على الغالب مشكلة تقنية وحسب، إذ يمكن لخدمة العملاء بحدّ ذاتها أن تصبح مشكلة أيضًا. والتحدي الأكبر الذي يواجه فريق خدمة العملاء هو المحافظة على الانطباع الذي يتركه لدى العملاء، وأن يعملوا كذلك على ترسيخ هذا الانطباع في أذهان العملاء بعد توّسع الشركة ونموّها. ومن هذا المنطلق يرد السؤال التالي: ما الذي يستطيع مدير فريق خدمة العملاء القيام به لمساعدة الشركة على السير في طريق تقديم خدمة عملاء استثنائية قادرة على الاستمرار لفترات طويلة؟ 3 عناصر أساسية لتوسيع خدمة العملاء مهما كانت جودة الخدمة التي تقدّمها أنت وفريق خدمة العملاء في شركتك فلن تكن قادرًا على القيام بجميع الأمور بمفردك. إن لم يشارك بقية موظفي الشركة في خدمة العملاء، فستجد نفسك أنت وفريقك (الخارق) أصبحتم تقومون بترقيعات هنا وهناك بسبب قلّة اهتمام الشّركة بزبائنها. نجاح عملية التوسع مرهون بتضافر جهود الفريق الذي يتعامل مع العملاء بصورة مباشرة (موظفو خدمة العملاء Operators) والمؤثرون الخارجيون (Agitators) والحلفاء الداخليون (المساندون Collaborators). 1- موظفو خدمة العملاء: الفريق الذي يتعامل مع العملاء إن كنت ترغب في تقديم خدمة عملاء ناجحة في شركتك المستقبلية الكبيرة، فيجب على موظفي خدمة العملاء وقادة الفرق والمدراء أن يحرصوا على تنمية مهاراتهم التنظيمية بقدر حرصهم على تنمية مهاراتهم في خدمة العملاء. فكما هو حال Peter Garrett في السياسة، عندما يحاط أصحاب الشركات الصغيرة بأشخاص يمتلكون تجربة إدارة شركات كبيرة فإنهم يجدون أنفسهم معزولين وغير قادرين على التأثير بأي شكل من الأشكال. بعض المقترحات لموظفي خدمة العملاء أتقن التكلم بلغتهم. لربما تكون معتادًا على سرد القصص على العملاء، والعمل باتباع حدسك وشعورك الداخلي أو علاقاتك الشخصية مع الآخرين. ولكن الأمر مختلف في الشركات الكبيرة، فقد تحتاج إلى العروض التقديمية لإقناع الآخرين بأفكارك. لذا عليك أن تتفهّم طريقة سير الأمور في شركتك، وعليك كذلك أن تتعلّم كيف تؤدي عملك بشكل فعال ضمن هذه الحدود. تعلم لغة المال والأعمال: من الضروري أن تمتلك شركتك القدرة على صياغة تقارير وطلبات جذابة وموجّهة بالبيانات data-driven، وذلك في ظل منافسة شديدة مع فرق عمل تمتلك مهارات عالية في تحليل البيانات واستشراف المستقبل؛ لذا عليك الدخول في دورة تدريبية أو العثور على مرشد يساعدك في هذه المهمة، أو حتى التفكير في توظيف مدير متمرّس في هذا المجال ليقدم إليك يد العون. انقل أعضاء فريق خدمة العملاء إلى الأقسام الأخرى: إن سنحت لك الفرصة فحاول نقل أعضاء فريق خدمة العملاء إلى الأقسام الأخرى في مشروعك التجاري. يمكن لموظفي خدمة العملاء نقل مفهوم التركيز على العميل وخدمته إلى تلك الأقسام. قد يكون فقدان فريق دعم العملاء أمرًا صعبًا، ولكن من الأفضل أن يدعم هؤلاء فريقك ويسانده على أن تفقدهم تمامًا. يمكنك مراجعة كتاب “What Got You Here Won’t Get You There” لتحصل على نصائح قيّمة تجعل منك قائدًا ناجحًا. 2. المؤثرون الخارجيون: ما الذي يخطر ببالك عندما تسمع بوظائف خدمة العملاء في شركات البيع بالتجزئة؟ الرواتب المنخفضة، والأرباح المتدنية، والتقدم المحدود، أليس كذلك؟ تناقش زينب تون Zeynep Ton في كتابها “The Good Jobs Strategy” فكرة وجود شركات عملاقة للبيع بالتجزئة والتي تقدّم رواتب وحوافز وساعات عمل جيّدة، مع الاحتفاظ بنسب أرباح عالية. هذا البحث وأمثاله من البحوث الموجهة بالبيانات تساعد أصحاب المشاريع التجارية وبشكل كبير على إدراك أنّ خدمة العملاء ليست مسؤولية فريق دعم العملاء وحسب، بل تتعدى ذلك لتشمل جميع العاملين في المشروع التجاري. المقصود بالمؤثرين الخارجيين هم جميع الكتاب والمعلمين والمتحدثين والباحثين الذين يقدّمون إليك المعلومات اللازمة لتوسيع نطاق خدماتك والتأثير على فريق العمل في شركتك. استفد من المؤثرين الخارجيين: اطلع على أعمالهم: “The Good Jobs Strategy” هو واحد من 27 كتابًا في مجال خدمة العملاء والتي ننصحك بالاطلاع عليها لتنمية مهاراتك وتطوير فريقك. تابع توصياتهم: استفد من قوائم الرواد في مجالات العمل المختلفة والتي يمكنك الوصول إليها من خلال مواقع مثل GetApp لتتعلم من الخبراء في مجال عملك، ولتستفيد كذلك من الأبحاث والأمثلة التي يشاركونها مع الآخرين بين فترة وأخرى. اطلب مساعدتهم: يتطلع الكتاب والناشرون في مجال خدمة العملاء بشكل دائم إلى فهم السوق الذي يعملون فيه، لذا فهم يرغبون بالاستماع إلى جمهورهم؛ لذا يمكنك إطلاعهم على التحديات التي تواجهها في عملك وستحصل في أغلب الأحيان على نصائح مفيدة. 3. المساندون: حلفاؤك داخل الشركة هؤلاء هم مدراء المنتجات، ومحللو البيانات، والخبراء في الشؤون المالية، وهم قادرون على تقديم المساعدة لحل المشاكل المتعلقة بالبيانات، ودعمك في اجتماعات الميزانية المالية الخاصة بالشركة أو تزويدك بالموارد التي تحتاج إليها حسب الظروف. حدّد هؤلاء الأشخاص في شركتك وتعرّف إليهم، وابن علاقات فعّالة معهم. غالبًا ما يتم هذا الأمر في الشركات الصغيرة عن طريق الصدفة وذلك إما من خلال وسائل التواصل الاجتماعي أو بسبب قرب أعضاء الفريق منك، ولكن في الشركات الكبيرة يجب عليك أن تبحث بشكل جدّي عن هؤلاء الأشخاص لتحصل على مساعدتهم ولا تتّكل على الصدفة لتحقيق هذا الأمر. التواصل مع المساندين كن أنت المساند: ابدأ البحث عن الطرق التي يمكن لها أن تساعد بقية أعضاء الفريق في إنجاز أعمالهم. ابحث عن الأشخاص الذين يمكنهم الاستفادة من خبرتك ومعلوماتك حول خدمة العملاء، واعرض عليهم المعلومات التي يرغبون بها. تعلم مهارات التأثير في الآخرين: يمكنك أن تبدأ بمحاضرات Robert Cialdini حول هذا الموضوع إضافة إلى كتب Simon Sinek حول مهارات القيادة والتواصل مع الآخرين. ابحث عن الأشخاص الذي يمكنهم تقديم المساعدة: هل تحتاج إلى المساعدة لإنشاء بعض المُستندات التجارية؟ ابحث عن خبير في تحليل البيانات. أم أنّك ترغب في أن يكون تمثيلك الداخلي أكثر تأثيرًا؟ تحدّث إذًا مع فريق التسويق. ختامًا يمكن لأي شركة أن تسقط من أعلى المنحدر، ويمكن لأي شركة أن تسير ببطء نحو الأرض المستوية الضحلة، ولكنّ من المستحيل أن تسير ببطء في طريق تقديم خدمات استثنائية. كمجتمع يؤمن بضرورة تقديم الخدمات الجيدة، علينا أن نعمل وبشكل فعّال من أجل بناء شركات قابلة للتوسع يكون العملاء فيها الهدف الأول والأخير. نحن هنا في Help Scout نحاول ابتكار نوع جديد من خدمة العملاء، وذلك من خلال المحتوى الذي نوفّره والمنتجات التي نقدّمها والتي من شأنها أن تطوّر العاملين في مجال خدمة العملاء وتزيد من فعاليتهم وكفاءتهم ترجمة - وبتصرّف - للمقال Scaling Customer Service on a Growing Team لصاحبه Mathew Patterson. حقوق الصورة البارزة محفوظة لـ Freepik
  24. غالبًا ما يتم تناول موضوع المنافسة من منظورين يبدوان متناقضين للوهلة الأولى، فهناك من يقلل من شأنه إلى أقصى حد، وهناك من يبالغ فيه بشكل كبير، ولكن الحقيقة تثبت أنّه لا وجود للتناقض على أرض الواقع. يقضي مؤسسو الشركات الناشئة القليل من الوقت في استيعاب وفهم السوق الذي تخوض فيه شركاتهم غمار المنافسة، في حين أنهم وبمجرد أن تنطلق شركتهم الناشئة فإنهم يكادون يقضون جل وقتهم في التفكير في المنافسين الذي سيواجهونهم في السوق. سنتناول في هذا المقال الجوانب المختلفة من المنافسة والأسلوب الأمثل للتعامل مع المنافسين. 1- قم بدراسة السوق قبل أن تطلق شركتك الناشئة يعتمد نجاح الشركة الناشئة على الفرص المتاحة أمامها، ولكي يكون الفريق المؤسس للشركة الناشئة قادرًا على تحديد هذه الفرص عليه أن يقوم بدراسة السوق التي ستنطلق فيها الشركة الناشئة. وبرأيي، فإن أسوأ طريقة لإطلاق شركة ناشئة هي تلك التي تفتقر إلى دراسة وفهم كافيين لطبيعة السوق. ولا يكفي في هذه الدراسة أن يتم تحديد متطلبات العملاء من خلال التحدث إليهم بهذا الشأن، بل يجب أن تتضمن الدراسة أيضًا التعرف على أبرز الشركات المنافسة في مجال العمل. وتبرز هنا عدد من الأسئلة التي يتوجب على المؤسسين أن يجيبوا عليها، من قبيل: هل هناك طرف آخر يعمل على حل هذه المشكلة؟ هل هذه الأطراف هي شركات صغيرة أم كبيرة؟ منذ متى تعمل هذه الشركات في هذا المجال؟ ما هي آلية عمل هذه الشركات؟ هل هي ناجحة في هذا الميدان أم لا؟ وإن لم تكن كذلك، فما هو سبب الفشل؟ إن التعرّف على المنافسين واستيعاب دورهم في السوق يعد من الأمور المصيرية، لأنّك قد تستنتج بأنّه ليس أمامك أي فرصة لتحقيق النجاح إن أطلقت شركتك الناشئة، أو قد يبدي العملاء رغبتهم في المنتج، ولكن المنافسين يقدّمون حلولًا جيدة بالمقابل. مع أنّ التعرّف على المنافسين الحاليين واستيعاب دورهم في السوق يعد من الأمور المصيرية في نجاح أو فشل الشركة الناشئة؛ إلا أنه من النادر أن ترى مؤسّسًا يقضي الوقت الكافي في دراسة السوق والتعرّف على المنافسين الحاليين قبل إطلاق شركته الناشئة. 2- احذر من عدم وجود المنافسة هنالك العديد من الإشارات التي تدفع المستثمرين إلى إعادة التفكير في الاستثمار في الشركة الناشئة أو ربما الامتناع عن القيام بذلك، ومن هذه الإشارات أن يقول المدير التنفيذي: "ليس لشركتنا الناشئة أي منافس، إذ لم يفكر أحد من قبل بهذا الأمر، ونحن أول من يقوم بذلك". بداية، إنّ من مميزات الأفكار الجيدة أنّها أفكار تنافسية، وجميع الأسواق في الوقت الحاضر تنطوي على المنافسة، وعدم وجود المنافسة قد يعني ضمنًا عدم توفّر الفرص أمام الشركة الناشئة، فإما أن لا تكون هناك حاجة لدى العملاء لهذه الفكرة، أو أن الفرص المتاحة في هذا المجال شحيحة وغير مشجّعة. ومن الطبيعي أن يمتلك المستثمرون خبرة أوسع واطلاعًا أكبر مقارنة بالمؤسسين، وهذا يعني أنّهم على معرفة تامّة بالمنافسين المتواجدين في الساحة، فلو أشار المؤسس إلى عدم وجود منافسين لشركته الناشئة فسيعتبر المستثمرون ذلك إشارة سيئة إلى أنّ المؤسّس لم يقم بدراسة السوق، أو أنّه لم يقم بذلك بصورة جيدة، وفي كلتا الحالتين، ينتاب المستثمرين المحتملين حالة من القلق حيال نجاح هذه الشركة الناشئة. 3- تعرّف على منافسيك الحاليين والمستقبليين يختلف المستثمرون عن مؤسسي الشركات في طريقة تفكيرهم حيال الفرص المتاحة أمام الشركة الناشئة، إذ أنّ نظرتهم ليست مقتصرة على الحاضر فقط، وإنما تمتدّ إلى المستقبل. من هنا يتوقع المستثمرون أنْ يكون المؤسسون على معرفة جيدة بالمنافسين ممّن تعرضوا للفشل في الماضي، وأنّ عليهم أنْ يدركوا في الوقت نفسه ما يخبّئه لهم المستقبل من احتمالات وفرص. فعلى سبيل المثال، توجهت الكثير من الشركات في الماضي نحو مجالي الذكاء الاصطناعي Artificial Intelligence والواقع الافتراضي Virtual reality، ولكن لم يحقق أحد أيّ نجاح يذكر. واليوم عادت بعض الشركات الناشئة إلى هذين الميدانين مرة أخرى، معتبرين أنّ الأمور قد تغيرت في الوقت الحاضر. وعلى الرغم من أن هذا الرأي لا يخلو من الصحة، فإن ما يهم المستثمرين هو تحديد الأمور التي تغيرت بالضبط في هذا الوقت، والاطلاع على الظروف التي لم تكن موجودة في الماضي والتي أدى غيابها إلى فشل تلك الشركات. وبنفس الأسلوب، يجب التفكير في المنافسين الذين قد يدخلون السوق في المستقبل، وتصبح الأمور هنا أكثر تعقيدًا، إذ أن هذا الأمر يعتمد على التكهّنات فقط، وهنا تكون الاحتمالات متساوية. وكثيرًا ما يطرح المستثمرون السؤال التالي: ماذا سيحدث لو دخلت شركة Google أو أي شركة عملاقة أخرى في هذا السوق مستقبلًا؟ ومع أنّ التنبؤ بهذا الأمر ليس ممكنًا، إلا أنّ من الجيّد أن يكون المؤسس جاهزًا للإجابة على هذا السؤال في أيّ وقت. 4- حدّد ميزتك التنافسيّة تتمحور عملية دراسة السوق والتعرّف على المنافسين الحاليين والسابقين والمستقبليين على أمر واحد فقط: ما الذي يميّزك عن هؤلاء المنافسين؟ ما هي تصوّراتك الخاصّة؟ وبماذا تختلف عن بقية الشركات؟ وما دور هذا الاختلاف في تحقيق النجاح؟ هنا تظهر أهمية ملائمة المؤسس للسوق Founder-Market fit. فالمؤسسون الذين يمتلكون خبرة جيدة في السوق التي يعملون فيها يمتلكون أيضًا تصوّرات وأفكارًا خاصّة بهم، وهم قادرون على تقديم عروض واقتراحات مميّزة. ومن أفضل الأمور التي يمكن أن تميّز المشروع التجاري عن غيره هي الميزة التنافسية لكل من: المنتج، وأسلوب التوجه إلى السوق Go-to-market، والمبيعات. تنشأ الميزة التنافسية للمنتج عندما يعمل بصورة مختلفة تمامًا عن المنتج الذي يقدّمه المنافسون، أما الميزة التنافسية لأسلوب التوجه إلى السوق فتستند إلى القنوات أو الوسائل التي يمكنك تأمينها والتي لا يستطيع منافسوك القيام بالأمر، في حين تعتمد الميزة التنافسية للمبيعات Sales advantage على خبرتك وفهمك العميق للعملاء وحاجاتهم ومتطلباتهم. يعرّف Peter Thiel في كتابه From 0 to 1، الميزة التنافسية competitive advantage بأنّها عبارة عن سرّ أو مجموعة من الأسرار، بمعنى أنّها شيء تدرك أو تعتقد بأنّه حقيقي دون أن يعلم أحد بذلك. وتساعد هذه الأسرار على تحقيق أداء أفضل بكثير من أداء المنافسين، الأمر الذي سيقود إلى تحقيق النجاح في نهاية المطاف. 5- تابع منافسيك، ولكن تجنّب الضوضاء يقضي المؤسسون الكثير من الوقت في متابعة أخبار المنافسة القائمة في السوق وبشكل يومي تقريبًا، ولكن هذه الأخبار هي مصدر كبير للضوضاء، إذ لا يكاد يمرّ يوم إلا ونسمع فيه خبر إطلاق مشروع معيّن من قبل أحد الأشخاص، ولو كنت تتابع كل شاردة وواردة فيما يتعلّق بأخبار ونشاطات منافسيك، فأؤكد لك أنّ حياتك ستتحول إلى جحيم مطبق. يجب أن تدرك جيّدًا بأن ما يقوم به منافسوك ليس أمرًا مهمًّا، بل المهم هو ما تقوم به أنت، إذ أنك لا تستطيع التحكم في المنتج الخاص بمنافسك أو التحكم في مبيعاته أو في علاقاته العامة. كل ما يسعك القيام به هو التحكم في مشروعك التجاري فقط. لذا فإن أفضل وسيلة للصمود في هذا المنافسة هو التركيز على صنع منتج يتمتّع بأعلى جودة ممكنة وينال رضا العملاء واستحسانهم. لذا؛ وبدلًا من متابعة أخبار منافسيك في كل يوم، حدّد موعدًا فصليًّا - أو على الأكثر شهريًّا - لمتابعة أخبار منافسيك، و- الأهم من ذلك - متابعة أخبار المنتجات التي يقدمونها، وهكذا تكون مطّلعًا على مجريات الأحداث دون أن ترهق نفسك وتجهدها. 6- تفهّم لعبة "تبادل الأفكار" واشترك فيها أتذكر جيدًا - عندما كنت أدير شركتي الناشئة - ذلك الشعور الذي كان يساورني حينما يطلق أحد المنافسين منتجًا أو ميزةً كنّا قد أطلقناها من قبل. نعم، لقد سرق المنافسون فكرتنا بلا شكّ. -والأسوأ من ذلك- لقد قاموا بتنفيذها بشكل أفضل، ولم يشر أحد لا من قريب ولا من بعيد إلى أسبقيتنا في ذلك. غالبًا ما يشتكي المؤسسون من هذه الحالة، ولكن الواقع يشير إلى أن هذا الأمر أصبح من المُسلّمات في الوقت الحاضر، إذ لا تتردد الشركات في أيامنا هذه في نسخ منتجات وتكرار أفكار بعضها البعض، فلا شيء يحمي الأفكار وهي متاحة للجميع؛ لذا يجب على المؤسسين أن يكفّوا عن التذمر، وعليهم أن يقدّروا بأن أفكارهم سوف تسرق لا محالة. يجب أن يكون المنتج أو المشروع التجاري قادرًا على الصمود في بيئة يتم فيها استنساخ تجربة المستخدم وتدفقه user flow. ولكن، يمكنك بالمقابل أن تنقل بعض الأفكار التابعة لمنتجات منافسيك وتستفيد منها في تطوير وتحسين منتجك ومشروعك التجاري. 7- كوّن علاقات مع منافسيك صحيح أن مشاركة الأسرار مع المنافسين أمر غير معقول، ولكن لا شيء يمنع من تكوين علاقات ودّية معهم، فهم أكثر الأشخاص خبرة في كل ما يرتبط بمجال عملكم، ومن المفيد أن تتحدّث إليهم وتتعرف على وجهات نظرهم دون أن تكشف لهم كل شيء. عادة ما يلتقي مؤسسو الشركات بمنافسيهم في المؤتمرات والفعاليات، ومن الطبيعي أن يتم تبادل أطراف الحديث في مثل هذه المناسبات. إن تكوين مثل هذه العلاقات مع المنافسين يعني أن الطرفين يساهمان في إثراء الوسط الذي يعملان فيه، إلى جانب التعرّف على بعضهما البعض بشكل أكبر. لا يستطيع أحد أن يخمّن ماذا يخبئ المستقبل من أحداث، فمن الممكن أن يأتي اليوم الذي تعمل فيه مع أحد منافسيك لتحقيق هدف مشترك، أو ربما تعقدان شراكة فيما بينكما، وبما أنّ الأسواق الزاخرة بالفرص الكبيرة تميل إلى الاندماج، فإن تكوين العلاقات مع المنافسين أمر لا يخلو من الفائدة. 8- كرّس جهودك لتحقيق النجاح بمجرّد أن تدخل شركتك الناشئة إلى السوق، يدخل منتجك وأسلوبك الخاص في حل المشكلة حيّز المنافسة، ولكن لا يستطيع أي شخص أن يطّلع على ما تفكّر به وما تخطط لبنائه في المستقبل. إن سبب نجاحك هو أسلوبك الفريد في حل المشكلة، ولا شأن لمنافسيك بذلك سواء أقاموا بأمر معيّن أم لا، وسواء أنقلوا فكرة محددة أم لا، ففي نهاية المطاف، ليس للمنافسة أهمّية تذكر في قبال امتلاكك للرؤية الصائبة والمرونة الكافية. إن سبب نجاحك هو تخيّلك للمستقبل وقدرتك على نقل عملائك وشركتك والعالم كلّه إلى ذلك المكان. سبب نجاحك هو أن المنتج الذي تقدّمه هو منتجك الخاص، وأنّك تتّبع طريقتك الخاصة في إدارة مشروعك التجاري، ولا يمكن لأيّ منافس أن يسلبك ذلك أو يؤثر فيه لأنّه لا ينظر إلى الأمور من منظارك أنت. إن الفريق المؤسس الجيّد هو ذلك الذي يضع أهدافه نصب عينيه ويبذل ما في وسعه للوصول إليها وتحقيقها بصرف النظر عمّا يقوم به المنافسون؛ لذا فإن الفريق المؤسس الجيد هو الذي يكرّس جهوده كلّها لتحقيق النجاح. ترجمة - وبتصرّف - للمقال 8tips for dealing with competitors لصاحبه Alex Iskold. حقوق الصورة البارزة محفوظة لـ Freepik
  25. تردنا شهريًا مجموعة كبيرة من الأسئلة ضمن تدوينات الأسئلة والأجوبة الأسبوعية كل يوم جمعة، وفي كل شهر أجيب عن الكثير من الأسئلة المطروحة بروابط لإجابات منشورة مسبقًا. وفي كل مرة أرى مجموعة الأسئلة ذاتها من الذين: يحاولون معرفة ما إذا كانت فكرة مشروعهم التجاري جيدة أم لا. تبيّن لهم أن فكرة مشروعهم التجاري جيدة، ويحاولون معرفة طريقة إنجازها. بدؤوا بإنجاز أفكارهم، ولكنهم مصابون بالحيرة حيال الخطوة القادمة. وسأجيب في هذا المقال عن الأسئلة الخمسة الأكثر شيوعًا والتي تردنا من الأشخاص الذين يؤسّسون شركات ناشئة للمرة الأولى في حياتهم، والأسلوب الذي أتبعه في التعامل مع كل من هذه الأسئلة. وقبل البدء، أودّ التركيز على نقطة مهمّة، وهي أن هذه الإجابات لا تمثّل حقيقة ثابتة بل هي نابعة من خبرتي الشخصية، وأنّ من المؤكد وجود أشخاص أكثر خبرة وكفاءة منّي ليجيبوا بشكل أفضل عن هذه الأسئلة. كما أتمنى أن أتعرّف على وجهة نظرك حول هذه الأسئلة في التعليقات. 1- كيف تتحقّق من فكرة مشروع تجاريّ تقنيّ إن كنت لا تجيد البرمجة؟ سؤال: "كيف يمكنك التحقق من فكرة مشروع تجاري تقني إن كنت لا تجيد البرمجة؟" إن كنت تعتقد للوهلة الأولى بضرورة توظيف مطور أو شركة تطوير لمجرد التحقق من فكرة، فعليك التوقف على الفور. يمكن أن أختصر نصيحتي لك في كلمات ثلاث: ارفع سمّاعة الهاتف. كانت انطلاقة مسيرتي المهنية - قبل أن أنشئ شركتي الناشئة الأولى - كمساعد لأخي وكنت أعمل كمستشار للشؤون المالية، وبعد فترة قصيرة بدأت أشعر بالإحباط من عدم وجود أي وسيلة تساعدني على أتمتة عملية إدارة شؤون العملاء، إذ كان كل شيء يتم بصورة يدوية، الرسائل اللاحقة Followups، التعامل مع العملاء المحتملين Lead Nurturing، والتعقب Tracking وغيرها، ففكّرت حينها أنّني ما دمت أواجه هذه المشكلة فمن المحتمل أن يواجهها غيري أيضًا، لذا هيّأت عرضًا تقديميًا تحدّثت فيه عن الحل الذي كان يدور في بالي وهو نظام إدارة العملاء الخاص بالمستشارين الماليين، وتوجّهت بعدها إلى سماعة الهاتف. اتّصلت بعدد من المستشارين الماليين في منطقتي، وتحدّثت معهم حول تجاربهم في هذا المجال وعن المشاكل التي يواجهونها فيه، وأدركت أنّ الكثير منهم يعانون من المشاكل ذاتها. فقرّرت حينها - وحينها فقط - أن أبدأ بتأسيس فريق عمل خاص وبمساعدة من شريكي المؤسس التقني لنشرع في بناء المنتج. لقد جرّبت هذه الطريقة مرارًا وتكرارًا وفي كل الشركات الناشئة التي أسّستها، فيثمر الوقت الذي أقضيه في المراحل الأولى في تطوير حلول أفضل بشكل يفوق كل التوقعات. إن لم تكن قادرًا على بناء النموذج الأولي بنفسك، فإن أسهل طريقة للتحقق من جدوى الفكرة التي تدور في رأسك هي التحدث إلى عملائك المحتملين، وأؤكد لك بأنّك ستدهش من عدد الأشخاص الذي سيرغبون في التعاون معك. 2- هل يجدر بي الحصول على استثمار لتوظيف المطوّرين في مشروعي التجاري؟ سؤال: "باعتبارك شخصًا لا يمتلك خبرة كبيرة في المجال التقني في بدايات شركة الناشئة، ولو عدت بالوقت إلى ذلك الحين، هل كنت ستحصل على المزيد من الاستثمار منذ البداية لتتمكن من توفير فريق أكثر خبرة في أسرع وقت ممكن؟ في الوقت الحالي، أنا أعمل مع أحد المطوّرين على بناء منتجي الخاص، ولكني متأكّد بأنّي لو حصلت على المزيد من الاستثمار لتمكنت من تسريع هذه العملية من خلال توظيف شخص أكثر خبرة أو حتى فريق من المحترفين. صحيح أنّني أرغب في الاحتفاظ بأكبر حصّة من أسهم الشركة، ولكن لا أرغب أن يكون ذلك على حساب الوقت الذي نقضيه الآن في تعلم بناء العجلة من جديد". من الواضح أنّه ليس هناك جواب يمكن أن ينطبق على جميع الشركات الناشئة، ولكن إليك وجهة نظري: هناك عدد من الأمور التي كنت سأقوم بها بشكل مختلف لو تمكنّت من القيام بها مرة أخرى، ولكن من المؤكّد أن الحصول على الاستثمار ليس واحدًا منها على الإطلاق، إذ تكتنف هذه العملية العديد من المخاطر خصوصًا إن تمّت في وقت مبكّر جدًّا، وقد حدث ذلك بالفعل مع عدد من الأصدقاء. أحد أكبر هذه المخاطر هو وجود احتمال كبير - كما هو الحال مع العديد من الشركات الناشئة -للحاجة إلى إعادة التمحور Pivot للوصول إلى المنتج أو السوق الملائم. يقدّم إليك المستثمرون أموالهم بناء على تصوّراتك الحالية، ولكن ليس بالضرورة أن تنال أفكارك وتوجهاتك الجديدة بعد عملية إعادة التمحور استحسان المستثمرين ورضاهم. والمشكلة هي أن الكثير من الأشخاص الذين يفكرون بالاستثمار في شركة ناشئة لا يملكون أدنى فكرة عن الأمر الذي يقدمون عليه، وينتهي بهم المطاف إلى الشعور بالخوف ليتحولوا بذلك إلى مصدر للتشتيت بالنسبة إلى مؤسس الشركة. انخفاض قيمة الأسهم Dilution هو الآخر من الأمور التي تسبب الإحباط لدى مؤسّسي الشركات الناشئة وفرق العمل على حد سواء، إذ ستجد نفسك مضطرًّا إلى تقديم تنازلات أكبر في المرحلة التي يكون فيها المنتج مجرّد فكرة - أو حتى نموذجًا أوليًّا -، في حين أنّه يمكنك تجنب ذلك عندما يكون لدى الشركة شيء من الاجتذاب أو عدد من العملاء. إلى جانب ذلك، يعتمد هذا الأمر على أهدافك أنت، ففي Groove مثلًا، أردنا بناء مشروع تجاري طويل الأمد بدلًا من الجري وراء أهداف قصيرة الأمد. وقد أدت البداية البطيئة إلى جانب قضاء أوقات طويلة جدًّا في التحدث مع العملاء وتحسين المنتج إلى جعله منتجًا لا يقدّر بثمن على المدى الطويل. 3- كيف أبدأ التسويق من الصفر؟ سؤال: "مع الخبرة الكبيرة التي تمتلكها الآن، إن كنت ترغب الآن في التسويق لتطبيقك من الصفر، ما الأسلوب الذي ستعتمده في عملية التسويق، وما هو الجانب الذي سينال القسط الأوفر من جهدك ومالك ووقتك؟" من السهل دائمًا الإجابة عن سؤال كهذا بعد أن تتمكن من إيجاد فكرة يمكن لها أن تحقق شيئًا من النجاح. لو كانت خبرتي الحالية متوفّرة في بدايات Groove لقمت حينها بجميع الأمور التي ساهمت في تحقيق نجاحات كبيرة على طول مسيرة هذا المنتج. ويسعدني أن أقدّم إليك نظرتي حول تلك النجاحات الكبيرة، مع التنبيه على أن هذه الأمور كانت سببًا في نجاح منتجنا، وفي السوق والموقع الخاصّين بنا، وقد لا تحقق أنت النجاح الذي ترجوه باتباعك لهذه الخطوات. على كل حال، لو كنت أملك آلة للعودة بالزمن إلى الوراء لفعلت الأمور التالية منذ اليوم الأول: "لقد راودنا منذ البداية السؤال التالي: "أين سنجد عملائنا؟" الأمر لا يشبه البحث عن عبارات مثل "حلول لصفحات الهبوط" أو "أداة لإنشاء صفحات الهبوط" ، إلى جانب أن الناس لا يعرفون كيف يعثرون عنا. إذًا كيف سنعثر عليهم في هذه الحالة؟ قد شكّل هذا الأمر بالنسبة لنا تحدّيًا مهمًّا جدًّا وجب علينا تجاوزه، فاتخذنا قرار البدء بالتدوين منذ اليوم الأول. [ملاحظة: في الواقع يمكن القول أن التدوين قد بدأ منذ اليوم -165، إذ لم يُطلق المنتج إلا بعد 6 أشهر]. كنّا بحاجة إلى التواصل مع الخبراء، ولأن نصبح نحن خبراء بعد ذلك؛ لذا عملنا جاهدين في التدوين واستضافة المدونين والترويج للمدونة، وعند إطلاق منتجنا كنا نملك سمعة جيدة بين الناس. لقد تحدّث الخبراء الذين أنشأنا علاقات معهم حول منتجنا وأثاروا اهتمام الناس به، وأعتقد أنه لا توجد طريقة أخرى لتحقيق مثل هذا النجاح". وكانت نتيجة هذا الجهد الكبير، إطلاق قوي للمنتج وتسجيل عدد كبير من المستخدمين في وقت قصير جدًّا. تنمية عميقة للعميل وقبل القيام بأي شيء. سأقضي الساعات الطوال في التحدث مع أكبر قدر ممكن من العملاء لأتعرف على المشاكل والصعوبات التي يواجهونها، والأهداف التي يرجون تحقيقها، وللتفكير في الطريقة التي يمكن من خلالها استغلال عملية التسويق في مساعدتهم على تحقيق تلك الأهداف، إلى جانب الاستفادة من هذه الأفكار والتصوّرات لتوجيه عملية تحسين المنتج وتطويره. نشر محتوى قيّم ورائع ومفيد في أقرب وقت ممكن. لقد كنت معجبًا بما قاله Rick Perrault المدير التنفيذي لـ Unbounce في مقابلة معه في مدونتنا حول المنافع الكبير التي حصلت عليها Unbounce من التسويق الجيد بالمحتوى قبل إطلاق منتجها: "لقد راودنا منذ البداية السؤال التالي: "أين سنجد عملائنا؟" الأمر لا يشبه البحث عن عبارات مثل "حلول لصفحات الهبوط" أو "أداة لإنشاء صفحات الهبوط" ، إلى جانب أن الناس لا يعرفون كيف يعثرون عنا. إذًا كيف سنعثر عليهم في هذه الحالة؟ قد شكّل هذا الأمر بالنسبة لنا تحدّيًا مهمًّا جدًّا وجب علينا تجاوزه، فاتخذنا قرار البدء بالتدوين منذ اليوم الأول. [ملاحظة: في الواقع يمكن القول أن التدوين قد بدأ منذ اليوم -165، إذ لم يُطلق المنتج إلا بعد 6 أشهر]. كنّا بحاجة إلى التواصل مع الخبراء، ولأن نصبح نحن خبراء بعد ذلك؛ لذا عملنا جاهدين في التدوين واستضافة المدونين والترويج للمدونة، وعند إطلاق منتجنا كنا نملك سمعة جيدة بين الناس. لقد تحدّث الخبراء الذين أنشأنا علاقات معهم حول منتجنا وأثاروا اهتمام الناس به، وأعتقد أنه لا توجد طريقة أخرى لتحقيق مثل هذا النجاح". وكانت نتيجة هذا الجهد الكبير، إطلاق قوي للمنتج وتسجيل عدد كبير من المستخدمين في وقت قصير جدًّا. توجيه قمة ومنتصف وأسفل قمع حركة الزوّار إلى موقعنا. لم نطلق مدوّنة الدعم الخاصّة بنا إلا بعد سنة تقريبًا من إطلاق مدوّنة شركتنا الناشئة، وكانت مدونة الدعم مكتظة بالزوار منذ إطلاقها، بل وكانت تحصل على نسبة تسجيل أعلى من قِبل العملاء. لقد كانت الفائدة التي جنيناها من كلتا المدونتين عظيمة جدًّا، ومن المؤكد أنّي سأطلق المدونتين منذ البداية. فهم واستيعاب قوة تهيئة محركات البحث SEO في توجيه حركة الزوّار. لقد استغرقت بعض الوقت للتغلب على خوفي من SEO ولإدراك أنّها وسيلة شرعية للحصول على الزّيارات. أما الآن وبعد أن اعتمدنا على الـ SEO بشكل جدي، فإن عدد الزوّار مرتفع بشكل دائم، وأنا أشعر بالندم لعدم استغلال هذه الأداة منذ البداية. الاستعانة بالأشخاص المؤثرين. إن السبب الرئيسي في النجاح الكبير الذي حققته مدونة شركتنا الناشئة كان الاستعانة بالأشخاص المؤثرين، ففي الأيام الأولى من عمر الشركة، كانت حملة الاستعانة بالأشخاص المؤثرين تمنح المدونة الدعم اللازم لبناء قاعدة جيدة من الزوّار لم تتوقف عن النمو من ذلك الحين. ولا زلنا نستخدم نفس الأساليب في كثير من مبادرتنا التسويقية، ولو كنت أعلم فائدة هذه الحملات منذ البداية، لكان موقعنا مختلفًا تمامًا في يومنا هذا. 4- كيف أجعل شركتي الناشئة الصغيرة تبدو كبيرة وموثوقة؟ سؤال: "عمري 21 عامًا وقد بدأت لتوي مشروعًا تجاريًا يعنى بالتجميل إضافة إلى مدونة وهي في مراحلها الأولى. هل لديك أية نصائح لجعل الشركة الناشئة الصغيرة تبدو كمشروع تجاري احترافي؟" ردّة فعلي الأولى على هذا السؤال ستكون تحذير السائل من مغبّة هذا الأمر، فبالنسبة إلى مشروع تجاريٍّ صغير - وخصوصًا إذا كان يبيع شيئًا للمستهلكين - هناك نقطة قوة فارقة وهي القدرة على استغلال الحجم الصغير للمشروع كنقطة إيجابية في مجال التسويق. لا بأس في أن تكون شركتك الناشئة صغيرة إن كان ذلك يعني أن عملائك سيحصلون على المزيد من الفائدة من الدعم الشخصي الذي يقدّمه مشروع تجاري يعتني بهم ويهتم بأمورهم بشكل أكبر، وإن كان ذلك يعني أيضًا أن يشعر العملاء بأنّهم يدعمون مشروعًا تجاريًا صغيرًا بدلًا من إحدى الشركات العملاقة. ولكن لو تجاوزنا كل ذلك، سنواجه واحدًا من أهم العوائق التي يجب التغلب عليها في مجال التسويق، وهو السؤال الذي يطرح العملاء بشكل دائم: "ما الذي يدفعني للوثوق بك؟"، وكشركة ناشئة، يجب العمل بشكل أكبر للإجابة على هذا السؤال. وإليك نصيحتي في هذا المجال: اعمل على إنتاج محتوى قيّم يمكن له أن يساعد العملاء في حلّ مشاكلهم، سواء أكان هذا المحتوى مدوّنة أو مقاطع فيديو أو وسائل بصرية أو غيرها. إن تمكنت من تقديم شيء مفيد إلى العميل قبل أن يقدم على شراء المنتج، فستتولد لديه ثقة كافية تجاهك تجعله غير مهتمّ بما لو كان موقعك الإلكتروني ذو مظهر جميل أم لا. إن كنت ترى بأنّ موقعك الإلكتروني لا يظهر بمظهر احترافي وكنت تشعر بالقلق حيال ذلك ولا تستطيع تحمل تكاليف توظيف مصمّم للقيام بهذه المهمة، فيمكنك الاعتماد على نسخة مُحسّنة من Wordpress كأن تستخدم إطار عمل Genesis إضافة إلى قالب مدفوع يكون مناسبًا لمجال عملك. التحقق ثم التحقق ثم التحقق (Validation): أ. حاول الحصول على توصيات من عملائك، مهما كان عددها قليلًا. ب. انشر تدوينات من قبل الأشخاص المؤثرين في مجال عملك، وضع شعاراتهم على موقعك فيما بعد. جـ . اعقد شراكات مع شركات ذات سمعة كبيرة، وضع شعاراتها على موقعك الإلكتروني. د. ابن علاقات استشارية مع أشخاص معروفين في مجال عملك، واحصل منهم على اقتباسات يمكنك وضعها فيما بعد على موقعك الإلكتروني. والأهم من ذلك كله، هو أن لا تشعر بالقلق حيال التشبه بالشركات المنافسة الكبيرة، فلن تكون التغييرات التي ستجريها خافية على أحد، ولكنّك في المقابل ستخسر أهمّ ما يميزك عن غيرك ويمنحك قيمة كبيرة في مجال التسويق، ألا وهو: شركتك الناشئة صغيرة، وهناك شريحة من العملاء التي تحبّ هذه الصفة في الشركة. 5- ما هي أفضل نصيحة تقدمها إلى روّاد الأعمال المبتدئين؟ سؤال: "مرحبًا أليكس، ما هي أفضل نصيحة تقدمها إلى روّاد الأعمال المبتدئين؟" في السنوات القليلة الماضية، كان لهذا السؤال نصيب وافر من التفكير بالنسبة إليّ، وبكل صراحة، هناك المئات من الدروس التي تعلّمتها والتي أتمنّى أنني كنت مطّلعًا عليها عندما بدأت في هذا المجال. وفي الواقع، هذه هي الطريقة التي نشأت بها مدونة الموقع، وكم تمنّيت لو كنت قادرًا على قراءة كل مقالة في اليوم الأول. والكثير من الدروس التي تعلمتها كانت نتيجة لأخطاء يجب على رائد الأعمال الوقوع فيها لكي يتعلّم منها بطريقة صحيحة. وإن أردت اختيار ثلاث نصائح كان لها الأثر الكبير عليّ والتي يمكن لأي رائد أعمال مبتدئ أن يستفيد منها فيمكن أن أقول: تحدّث مع عملائك في كل يوم. مهما كانت درجة انشغالك، يجب أن يكون هذا الأمر في قمة أولوياتك، وإن لم يكن الأمر كذلك، فلن تستطيع متابعة منتجك، ولن تكون قادرًا على معرفة ما يحتاجه الناس منه، ولن يكون بوسعك معرفة ما إذا كنت تقدّم إليهم ما يريدون أم لا. لن تحصل دائمًا على كل ما تريد. الشراكات، التخفيضات على أسعار البرمجيات المرتفعة، تدوينات الضيوف... لن تحصل على أي من هذه الأمور ما لم تمتلك الشجاعة لأن تطلب ما تريد. وإن لم تكن قادرًا على تحمل تكاليف أمرٍ ما، فعليك بالابتكار. احرص على تعلم أشياء جديدة. اقرأ، واستوعب كل شيء يرتبط بمشروعك التجاري، حتى لو لم يكن ذلك مرتبطًا بعملك أنت. على سبيل المثال، يمكنك توظيف محاسب للعمل في شركتك الناشئة، ولكن الاطلاع على العمل الذي يقوم به هذا المحاسب سيساعدك على اختيار المُحاسب الأمثل للعمل، إلى جانب استيعاب مشروعك التجاري بشكل أعمق وأفضل. حان دورك الآن آمل أن تساعدك هذه الإجابات على بلورة أفكارك تجاه هذه الأسئلة الملحّة والضرورية، ومع ذلك أرغب في الاطلاع على وجهات نظر مختلفة حول هذه الأسئلة في التعليقات. كيف ستجيب إذًا على هذه الأسئلة؟ ترجمة - وبتصرّف - للمقال 5Key Questions About Validating and Launching a Business Idea, Answered لصاحبه Alex Turnbull. حقوق الصورة البارزة محفوظة لـ Freepik
×
×
  • أضف...