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

محمد ناولو2

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

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

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

9 متابعين

المعلومات الشخصية

آخر الزوار

2570 زيارة للملف الشخصي

إنجازات محمد ناولو2

عضو نشيط

عضو نشيط (3/3)

10

السمعة بالموقع

  1. بعد أن تعرفنا على كيفية صناعة بودكاست ناجح في المقال السابق من سلسلة صناعة البودكاست، سنتحدث في هذا المقال عن كيفية رفع حلقات البودكاست على الإنترنت واختيار المكان المناسب لرفعها عليه. لكي يتمكن الأشخاص من سماع البودكاست، سنحتاج إلى اختيار مضيف بودكاست، إذ تُعَد شركات استضافة البودكاست بمثابة الوسيط. يظن الكثير من الأشخاص أنه يمكن رفع التسجيلات الصوتية مباشرةً على iTunes، ولكن هذا ليس صحيحًا، لأنه عادةً ما يكون حجم التسجيلات الصوتية كبيرًا جدًا ويجب تخزينها في مكان ما، وهنا يأتي دور استضافة البودكاست. هناك الكثير من خدمات الاستضافة التي يمكن المفاضلة بينها، يمكن ذكر بعض منها كما يلي: استضافة Buzzsprout تُعَد استضافة Buzzsprout واحدةً من أكثر الأسماء شهرةً وسمعةً في مجال استضافة البودكاست؛ إذ من السهل التنقل في موقعهم الإلكتروني، كما يشاركون فيه الكثير من المعلومات المفيدة فيما يتعلق بالبودكاست، لذا تُعَد استضافة Buzzsprout خيارًا قويًا بالنسبة للمبتدئين. بعض المزايا التي تقدمها استضافة Buzzsprout: الاتصال بأدلة البودكاست المشهورة إحصائيات وتحليلات لبرنامج البودكاست الذي سنقدمه مشغل من Buzzsprout يمكن تحميله على موقعنا الإلكتروني تحسين تلقائي للتسجيلات تفريغ التسجيلات الصوتية لنصوص مكتوبة التسويق بالعمولة للمساعدة في تحقيق الدخل علامات تقسيم بين أجزاء التسجيلات توليد مقاطع فيديو من التسجيلات الصوتية لمنصات التواصل الاجتماعي تقدم استضافة Buzzsprout مجموعةً من الخطط الشهرية، وأرخص خطة لها هي 12 دولارًا شهريًا، والتي تسمح برفع ما يعادل 3 ساعات من التسجيلات الصوتية شهريًا. الخطة الأفضل هي 24 دولارًا شهريًا، والتي تتيح إمكانية رفع 12 ساعة من التسجيلات، إضافةً إلى 2 دولار لكل ساعة إضافية؛ كما يمكن تجربة الاستضافة مجانًا لمدة 90 يومًا برفع ساعتين من التسجيلات. استضافة PodBean استضافة Podbean موجودة منذ عام 2006، فقد استضافت أكثر من 310 آلاف مدونًا صوتيًا، وهي من الاستضافات سهلة الاستخدام أيضًا، ويمكن تجربتها مجانًا من خلال خطتها المحدودة. يتم الحصول على المزايا الآتية عند استخدام استضافة PodBean: واجهة سهلة الاستخدام استضافة غير محدودة (تختلف حسب الخطط) موقع بودكاست مجاني جدولة النشر مشغل يمكن تضمينه في الموقع التكامل مع البريد الإلكتروني مشاركة الحلقات عبر منصات التواصل الاجتماعي مشاركة الحلقات مع أدلة البودكاست الشهيرة إحصائيات وتحليلات متنوعة تتراوح أسعار خطط استضافة Podbean من المجانية إلى 79 دولارًا شهريًا؛ ويتم إصدار الفواتير سنويًا. أما عن الخطة المجانية، فيمكن من خلالها تخزين ما يصل إلى 5 ساعات من التسجيلات. تبلغ تكلفة الاشتراك في الخطة الأفضل 79 دولارًا شهريًا، مع مساحة تخزين وحيز نطاق تراسلي غير محدودين، لكن مع ذلك، قد لا تكون هذه الخطة ضرورية للعديد من مقدمي البودكاست المبتدئين. استضافة Captivate تُعَد استضافة Captivate من أحدث الاستضافات في هذه القائمة؛ إذ ينصب التركيز الأساسي لاستضافة Captivate على مساعدة مقدمي برامج البودكاست على تنمية جمهورهم، وفي الآتي بعض المزايا التي توفرها استضافة Captivate: واجهة سهلة الاستخدام دعم فني على مدار 24 ساعة فواتير شهرية نشر عبر وسائل التواصل الاجتماعي والمواقع الإلكترونية الربط مع جميع أدلة البودكاست الرئيسية التكامل مع إضافات ووردبريس WordPress plugin إحصائيات وتحليلات متنوعة تتراوح أسعار Captivate من 19 دولارًا شهريًا مقابل 30 ألف تحميل شهريًا إلى 99 دولارًا شهريًا مقابل 300 ألف تحميل شهريًا. تقدم استضافة Captivate أيضًا نسخةً تجريبيةً مجانيةً مدتها 7 أيام، لكي تتمكن من اختبار خدماتهم. استضافة Transistor استضافة Transistor هي استضافة بودكاست أُطلقت عام 2018، وهي من أحدث الاستضافات على الساحة حاليًا، وقد أُنشئت على أيدي مقدمي برامج بودكاست؛ إذ تستضيف اليوم أكثر من 4000 بودكاست، بما في ذلك بعض البرامج المشهورة، مثل بودكاست Basecamp وبودكاست VH1 وغيرهم. من مزايا استضافة Transistor ما يلي: ربط مع العديد من أدلة البودكاست تحليلات بودكاست مفصلة إضافة مشغل التسجيلات مباشرةً ضمن موقعنا الإلكتروني عدد غير محدود من الحلقات تقدم استضافة Transistor ثلاث خطط تبدأ من 19 دولارًا شهريًا وحتى 99 دولارًا شهريًا، وتتيح خطة المبتدئ Starter إمكانية الحصول على 20 ألف عملية تحميل شهريًا، بينما تتيح خطة الشركات Business ما يساوي 250 ألف عملية تحميل شهريًا. على الرغم من أن استضافة Transistor لا تقدم أي خطة استضافة مجانية كما تفعل العديد من الشركات الأخرى في هذه الصناعة، لكن خططهم المدفوعة توفر الكثير من الدعم العملي خلال تنمية الجمهور. استضافة Spreaker أُطلقت استضافة Spreaker عام 2010، وتستضيف اليوم آلاف برامج البودكاست مع ملايين المستخدمين النشطين شهريًا. في عام 2018، استحوذت على استضافة Spreaker شركة Voxnest، وهي شركة متخصصة في مجال تقنيات الصوت. من مزايا استضافة Spreaker ما يلي: استضافة برامج بودكاست متعددة نظام إدارة المحتوى لمراجعة كل شيء يتعلق ببرنامج البودكاست الذي سنقدمه الربط مع أدلة البودكاست الرئيسية المساعدة على تحقيق الدخل من برامج البودكاست إحصائيات حول المستمعين الترويج للبودكاست للوصول إلى جمهور أوسع تقدم استضافة Spreaker ثلاث خطط تبدأ من 0 دولارًا شهريًا وحتى 250 دولارًا شهريًا. الخطة المجانية محدودة للغاية ولا تتضمن ميزات متقدمة، مثل موجز RSS القابل للتخصيص أو تحقيق الدخل التلقائي. مع مرور الوقت على استخدام Spreaker، قد تكون هناك حاجة للترقية إلى إحدى خططهم المدفوعة للحصول على الميزات المتقدمة التي تساعد على تقديم بودكاست احترافي أكثر. خاتمة بهذا نكون قد تعرفنا على أبرز الخيارات المتاحة بمجال استضافات البودكاست، وسنتعرف في المقال التالي على نصائح لإنجاح البودكاست والتسويق له وتحقيق مداخيل منه. ترجمة -وبتصرّف- للمقال How to Start a Podcast and Make Money لصاحبه Ryan Robinson. اقرأ أيضًا المقال السابق: صناعة بودكاست ناجح في 9 خطوات مدخل إلى عالم صناعة البودكاست اختيار المعدات المناسبة لصناعة البودكاست
  2. يقول رجل الأعمال جيسون لمكين Jason Lemkin أن هناك 4 مراحل للأعمال التجارية: الشريحة الأولى من العملاء: تكون عند إطلاق المنتج ويبدأ بعض العملاء بتجربته، وحينها تحاول استكشاف مدى ملائمة المنتج مع السوق أقل من مليون دولار: عندما لا يكون بإمكاننا إنفاق الكثير من الأموال وتطوير العمل، ولكن هناك إيرادات قادمة أكثر من 2 مليون دولار: عندما نبدأ العجلة في الدوران ويصبح بإمكاننا البدء في الإنفاق أكثر من 10 ملايين دولار: هنا نكون قد رسخنا أنفسنا جيدًا في السوق تبدو الأمور بسيطة، أليس كذلك؟ ربما يكون الأمر بهذه البساطة، لكن بالنسبة إلى معظم رواد الأعمال، لن يكون الأمر بهذه السهولة؛ فالأشخاص الذين ستحتاج إلى التعامل معهم أو البيع لهم مختلفون تمامًا بين هذه المراحل الأربعة. في الواقع، الشريحة الأولى من العملاء  غير كافيين للوصول إلى 10 ملايين دولار من الإيرادات السنوية. ولهذا السبب سنشرح بهذا المقال كيف يمكن العثور على العملاء المناسبين والكافين للوصول بأعمالنا التجارية إلى مرحلة "أكثر من 10 ملايين دولار". كيفية تقبل الناس للابتكارات الجديدة حسب منحى روجرز بعد ابتكار أي منتج وطرحه في السوق لأول مرة، سيكون الإقبال عليه ضعيفًا في البداية، وستبدأ فئة قليلة من الأشخاص بتجربته، ثم سيتشجع آخرون ويجربونه، حتى يحظى المنتج المبتكر بالانتشار وتتبناه الأغلبية من العملاء. وصف الباحث إيفرت روجرز Everett Rogers المراحل السابقة لكيفية تقبل الناس للابتكار الجديد في كتابه "انتشار الابتكارات Diffusion of Innovations"، إذ قسم الناس إلى خمس فئات حسب تبنيهم للأفكار والابتكارات الجديدة، وهم: المبتكرون Innovators: هم أول الأفراد الذين يتبنون الابتكار، وهم على استعداد لتحمل المخاطر، وعادةً ما ينتمون إلى الفئات الأصغر سنًا، ويكونون من طبقات اجتماعية عالية، كما يتمتعون بذكاء مالي كبير، وهم ذوو مهارات اجتماعية جيدة المتبنون الأوائل Early Adopters: هم ثاني أسرع فئة من الأفراد الذين يتبنون الابتكار الجديد، إذ يتمتع هؤلاء الأفراد بأعلى درجة من القيادة والحكمة الأغلبية المبكرة Early Majority: يتبنى الأفراد في هذه الفئة الابتكار بعد فترة زمنية لا بأس بها، مقارنةً مع المبتكرين والمتبنين الأوائل؛ إذ يميل أفراد هذه الفئة إلى أن يكونوا أبطأ في عملية التبني، ويتمتعون بمكانة اجتماعية أعلى من المتوسط، ونادرًا ما يشغلون مناصب قيادية عالية الأغلبية المتأخرة Late Majority: هذه الفئة هي من النوع الانقيادي الذي ينتظر الآخرين حتى يتبنوا الابتكار ثم يقدم على تجربته، وهم عادةً ما يتمتعون بمكانة اجتماعية أدنى من المتوسط المتخلفون Laggards: الأفراد في هذه الفئة هم آخر من يتبنى الابتكارات الجديدة. وعلى عكس الفئات السابقة، لا يظهر هؤلاء الأفراد أي نوع من القيادة في الرأي، وعادةً ما يكون لديهم نفور من التغيير، وهم غالبًا من كبار السن الذين يلتزمون بالتقاليد القديمة؛ كما أنه المرجح أن تكون لديهم أدنى مكانة اجتماعية وأقل قدرة مالية توسع جيفري مور Geoffrey Moore في نظرية روجرز، وبنى عليها كتابه "عبور الهوة Crossing the Chasm" الذي نشره عام 1991، الذي شرح فيه كيفية تسويق الابتكارات والتقنيات الجديدة، وكيفية زيادة عدد الأشخاص المتبنين للمنتج أو الابتكار، وهو ما وصفه بمصطلح عبور الهوة Crossing the Chasm. أهمية عبور الهوة في تحليل فئات السوق الفكرة الأساسية من عبور الهوة هي أن العملاء في أي سوق ينتمون إلى واحدة من خمس مجموعات: المبتكرون، والمتبنون الأوائل، والأغلبية المبكرة، والأغلبية المتأخرة، والمتخلفون؛ وأن الطريقة التي تبيع بها لهذه المجموعات من العملاء يجب أن تعكس المرحلة التي وصل إليها الناس في الاعتماد على ابتكارك. يتناول مور في كتابه أهمية العثور على  شريحة العملاء الأولى للحصول على موطئ قدم في السوق، وهو أمر ذو أهمية قصوى للشركات الناشئة في المراحل المختلفة من نموها: رواد أعمال لديهم منتج ويبحثون عن شريحة العملاء المناسبة يحدث ذلك عندما يكون لدينا حل ونريد البحث عن المشكلة التي سيعالجها، أو البحث عن الشريحة التي تعاني من أكبر قدر من هذه المشكلة. المهمة صعبة، لكن إذا كانت التقنية التي نريد نشرها ذات قيمة، فسنتمكن من العثور على سوق لها. رواد أعمال لديهم قاعدة عملاء كبيرة ويتطلعون إلى تنمية أعمالهم في هذا الصدد يروي كاتب المقال إتيان جاربوجلي Etienne Garbugli قصته: رواد أعمال يبيعون منتجاتهم إلى المتبنين الأوائل ويتطلعون إلى عبور الهوة هنا أيضًا يروي إتيان جاربوجلي قصته: تحليل فئات السوق في Psykler عندما بدأ إتيان جاربوجلي العمل في Psykler، كان لدى الشركة بالفعل عملاء في مجالات الأدوية والطيران والاستشارات، لكن كان استخدام الأداة منخفضًا، ومن الواضح أنها لم تكن تناسب السوق؛ لذا جلس مع المؤسس وحددا المجالات الأربعة التي شعرا أنه يمكن لأداة Psykler إضافة قيمة حقيقية إليها، وهي الأدوية، وصناعة برمجيات المؤسسات، والاستشارات، والتكامل. فيما بعد، أجريا سلسلةً قصيرةً من المقابلات مع العملاء، فأدركا أن الصناعات بطيئة الحركة مثل الرعاية الصحية والاتصالات والتعليم والدفاع من الصعب جدًا تلاؤمها مع أداة Psykler. لقد أدركا أيضًا أن الشركات التي تبيع الخدمات التقنية مثل ذكاء الأعمال والأمن تضطر إلى البيع بسعر مرتفع للمديرين التقنيين والمديرين التنفيذيين، لذا فإنهم كانوا حريصين على نجاح عملية البيع، فقد كانت هناك خسارة كبيرة إذا لم تسير تلك الاجتماعات على ما يرام. واستنادًا إلى كل عمليات البحث التي أجرياها، أدركا أن Psykler في شكله الحالي هو الأنسب للشركات الاستشارية في المجالات الأمنية. وبعد أن عملا على تحسين العرض التقديمي وفهما القطاع جيدًا، بدأ المنتج بالفعل في جذب المستخدمين الأوائل، ثم تحسين المنتج والتسويق لتلبية احتياجات السوق الجديد. كيفية إجراء تحليل فئات السوق في عملك لتحقيق النجاح في تحليل فئات السوق، لا بد من الخروج من المكتب والتحدث مع العملاء المحتملين والعملاء الحاليين. يمكن البدء بإدراج القطاعات الأربعة أو الخمسة التي نشعر أنه يمكن لشركتنا أو منتجنا تقديم قيمة حقيقية لها، ثم نجري سلسلة سريعة من 3 إلى 5 مقابلات مع العملاء في كل من هذه القطاعات، مع الاستماع إلى الصعوبات التي يمكن لمنتجنا تسهيلها. لا بد من التركيز على الشرائح التي يمكن مساعدتها، مع الاستمرار في إجراء المقابلات مع المؤسسات حتى الوصول إلى أفضل شريحة سوقية للمنتج. ترجمة -وبتصرّف- للمقال How to Find Your Best Customers with a Market Segmentation Analysis لصاحبه Etienne Garbugli. اقرأ أيضًا البحث في السوق والتعرف على فرصة السوق والسوق المستهدف 15 طريقة لإيجاد الزبائن الذين سيشترون منتجك حتى قبل أن تشرع في بنائه ما هي شخصيات المشتري وكيف تساعدك على فهم عملائك وتطوير نشاطك التجاري كيفية إجراء بحث السوق
  3. انتشرت في الآونة الأخيرة عدة مقالات ومنشورات عبر الإنترنت لأشخاص مهتمين بمجال تحسين محركات البحث SEO، أبدَو فيها غضبهم الشديد من التدقيق المتزايد الذي تمارسه جوجل على ترتيب نتائج البحث، وعندما ننظر إلى التعليقات، سنرى الكثير من الأشخاص يتحدثون عن انتهاء عصر تحسين محركات البحث SEO، وأنها لم تَعُد مناسبةً لتسويق المحتوى؛ لكن هل هذه الادعاءات صحيحة؟ هل يمكننا الاعتماد على استراتيجيات تحسين محركات البحث SEO في الجهود التسويقية بعد الآن؟ في الواقع، تتعرض العديد من المواقع الإلكترونية إلى تخفيض ترتيبها في نتائج البحث بعد ظهور خوارزمية جوجل التي تُطلَق عليها تسمية تحديث المحتوى المفيد Helpful Content Update. بالمقابل، تمكنت بعض المواقع القليلة من تجاوز هذه الخوارزمية بنجاح دون أن يتأثر ترتيب ظهورها، لكن ما الذي كانت تفعله بالضبط هذه المواقع حتى استطاعت تجاوز هذه الخوارزمية؟ تعالج جوجل أكثر من 3.5 مليار عملية بحث يوميًا، لذا فهي تعمل باستمرار على تصنيف صفحات الويب وأرشفتها، مع ذلك لا داعي للقلق، إذ ما يزال بالإمكان الحصول على عشرات الآلاف من الزيارات اليومية لمنشورات المدونات. الاختلاف هنا هو أن خوازرميات واستراتيجيات تحسين محركات البحث SEO التي كنا نعرفها سابقًا قد تغيرت، لذا فإننا بحاجة إلى التطور معها. لقد اختفت في الآونة الأخيرة العديد من المواقع التي كانت تحصل سابقًا على تصنيف جيد في صفحات نتائج البحث على جوجل. هذا التراجع وصل إلى انخفاض الزيارات بنسبة 95% أو أكثر، لكن هذا لا يعني أن إستراتيجيات تحسين محركات البحث SEO السابقة قد انتهت، إنما قد تطورت وتغيرت، وهنا يجب علينا أن ننظر إلى العلامات التجارية التي ما زالت تحتل نتائج البحث الأولى، ونحلل ما الذي فعلته بالتحديد لتحافظ على مكانتها. بداية الضجة التي تتحدث عن احتمال انقراض تحسين محركات البحث SEO في أغسطس من عام 2022، أصدر جوجل تحديثًا جديدًا لخوارزميات تحسين محركات البحث باسم تحديث المحتوى المفيد Helpful Content Update، قدم فيه تصنيف لمستوى المواقع حسب الفائدة التي تقدمها، وهو ما يؤثر بطبيعة الحال على ظهور صفحات المواقع في نتائج بحث جوجل. تعمل هذه الخوارزمية على مراقبة المحتوى الجديد والحالي باستمرار، بحيث إذا استمر المحتوى غير المفيد في صفته غير المفيدة، فسيضع المصنف علامةً على الصفحات لتخفيض ترتيبها في نتائج البحث. مع ذلك هذا لا يعني أنها نهاية تلك المواقع، إذ ما يزال بإمكان أصحاب هذه المواقع إحياء مواقعهم وتحسين ظهورها في نتائج البحث إذا حدثوا محتوى الصفحات إلى محتوى يهتم بتقديم الفائدة، ويضع الزوار في المقام الأول. كيفية تطوير إستراتيجية تحسين محركات البحث SEO تؤكد الشكاوى الكثيرة في المنتديات ووسائل التواصل الاجتماعي على هذا التأثير، لكن هذا التحول لا يعني أن تحسين محركات البحث SEO قد انقرض، بل أن هناك بعض الأمور التي يجب أخذها بالحسبان لتطوير إستراتيجية تحسين محركات البحث SEO، مثل: 1. نشر المحتوى الذي يهتم بمشكلات القراء ويوفر حلول عملية لهم يريد محرك البحث جوجل التأكد من كتاب الموقع لديهم الخبرة الكافية في المجال الذي يكتبون فيه، لذلك قبل نشر أي مقالة، لا بد من الحرص على احتواء إستراتيجية المحتوى على خارطة طريق أو جدولة محتوى لنشر المقالات المفيدة باستمرار؛ كما لا بد من نشر المقالات التي تعكس فهم احتياجات القراء المحتملين وتقدم حلول لمشكلاتهم فقط. لا بد من رسم خطة لكيفية استخدام الروابط الداخلية بين المقالات خلال مرحلة تخطيط المحتوى، وعندما يحين وقت الكتابة، يجب أن يكون نص الرابط Anchor Text ذا صلة بالرابط الذي ستضيفه؛ كما يجب أن تأخذ الروابط الداخلية القراء إلى صفحات ذات صلة بالموضوع ومفيدة لهم. لفعل ذلك، يمكن توفير ملخص سريع عن كل مقال أو موضوع سنكتب عنه ضمن إستراتيجية المحتوى التي سنضعها، وقبل كتابة أي مقال مخطط له، يجب إعادة استثمار الوقت في البحث عن: لمن نكتب: لا بد من رسم شخصية الجمهور المستهدف المثالي، مع الأخذ في الحسبان التركيبة السكانية لهم، مثل العمر والجنس والموقع الجغرافي ومستوى الخبرة، للتمكن من تحديد ما إذا كنا سنكتب للمبتدئين أو الخبراء في موضوع معين المعضلة التي تواجه القراء: يجب تحديد مستوى التفاصيل التي يجب التعمق بها لمعالجة مشكلاتهم بفعالية. لا بد من تجنب الطريقة التي تكتفي بتلخيص وجهات نظر الآخرين، أو إنتاج كمية كبيرة من المحتوى حول عدة مواضيع متنوعة، بل يجب أن تكون وفقًا لاستراتيجية محتوى واضحة ودقيقة. فعلى سبيل المثال، إذا كنا ندير متجرًا إلكترونيًا يبيع ألعاب الدمى للأطفال بأسعار مقبولة، فيمكنننا التخطيط لكتابة محتوى حول كيفية صناعة ألعاب الدمى بأنفسنا لتوفير المال. في هذه الحالة، نكون قد قدمنا محتوى مفيد وفعال للأشخاص الذين يريدون الحصول على ألعاب دمى لكنهم يبحثون عنها بتكلفة منخفضة. 2. وضع إستراتيجية محتوى فعالة أثناء البحث عن العملاء، يمكن الاستفادة من أدوات البحث عن المواضيع والكلمات المفتاحية، مثل أداة SEMrush وأداة BuzzSumo؛ إذ يمكن لهذه الأدوات توفير المساعدة اللازمة على إنشاء خطة محتوى. ومن الأمثلة الجيدة على إستراتيجيات المحتوى الفعالة التي يمكنها اتباعها، هي إستراتيجية المحتوى العنقودي Cluster Content. إستراتيجية المحتوى العنقودي Cluster Content هي خطة محتوى تعتمد على نشر مجموعة من المقالات المرتبطة ببعضها البعض، والتي تتناول موضوعات متشابهة، وغالبًا ما يكون هناك مقال أساسي يتفرع منه مجموعة من المقالات الأخرى. فعلى سبيل المثال، يمكن نشر مقال عن التسويق الإلكتروني، بحيث يكون هذا المقال بمثابة المقال الرئيسي الذي سيتفرع عنه مجموعة من المقالات التي سنتحدث فيها عن التسويق بالمحتوى والتسويق عبر وسائل التواصل الاجتماعي والتسويق عبر المؤثرين، وكذلك مقالات تتحدث عن مفاهيم أساسية في التسويق الإلكتروني، مثل الوصول إلى العملاء المحتملين والبحث عن الكلمات المفتاحية وغير ذلك. 3. الابتعاد عن الحشو اعتاد الكتاب فيما مضى على تكرار ذكر الكلمة المفتاحية في المقال وتوزيعها بطريقة جيدة على أجزائه، وقد كانوا يحصلون بهذه الطريقة على ترتيب جيد ضمن نتائج البحث عن هذه الكلمة المفتاحية؛ لكن في الوقت الحالي، لم تَعُد طريقة حشو الكلمات المفتاحية فعالة؛ مع ذلك هذا لا يعني تجاهل الكلمة المفتاحية بالمطلق، بل استخدامها بحكمة وعند الحاجة، ويجب أيضًا استخدامها ضمن عنوان المقال وضمن عنوان URL، وفي المقدمة والصور ومقاطع الفيديو وبعض العناوين الفرعية. كذلك الأمر فيما يتعلق بطول المقال، فبدلًا من التركيز على عدد كلمات محددة، علينا ترك مادة البحث الخاصة بموضوعنا هي التي تحدد طول المحتوى الذي نحتاجه، فعندما تكون 500 كلمة كافية لتغطي المعلومات التي تريد تقديمها، لا داعي لأن نكتب 1000 كلمة للوصول إلى عدد الكلمات الذي فرضناه على أنفسنا مثلًا. في بعض الأحيان، يتناول مقال موجز مكون من 500 كلمة موضوعًا أفضل من مقال مكون من 2000 كلمة مليئة بالحشو والإطناب والتكرار الذي لا فائدة منه. لذا من المهم منح الأولوية دائمًا لتقديم قيمة حقيقية للقارئ وتلبية احتياجاته، بدلًا من الوصول إلى عدد عشوائي من الكلمات أو حشو الكلمات المفتاحية ضمن المقال. 4. إبداء الخبرة وعمق المعرفة ستساعد إضافة التجارب الشخصية أو الأمثلة المحددة على بناء الثقة أمام محرك البحث جوجل وستظهر فهمنا العميق للموضوع، فإذا كننا نكتب حول إستراتيجيات تحسين محركات البحث SEO مثلًا، فسيكون من الأفضل كتابة قصص نتحدث فيها عن الدروس التي تعلمناها من تجاربنا الشخصية أو تجارب زملائنا. بهذه الحالة، سيتفاعل القراء مع قصتنا وسيقدرونها، لأنهم سيدركون أن النصيحة جاءت من شخص واجه نفس التحديات التي يواجهونها. يمكن أيضًا توظيف كتاب متخصصين خاضوا تلك التحديات أو يمكن إجراء مقابلات مع أشخاص رائدين في الصناعة التي نكتب عنها، مع ذكر كيفية تغلبهم على التحديات. 5. التأكد من وجود هدف رئيسي للموقع الإلكتروني يجب أن يُظهر الموقع الإلكتروني هدفًا واضحًا للعلامة التجارية، بحيث يوجه جهودنا في إنشاء المحتوى؛ إذ يساعد وجود هدف أساسي على التوافق مع خوارزميات جوجل، بعض النظر عما إذا كان الهدف للتثقيف أو البيع أو الترفيه أو الإعلام. فعلى سبيل المثال، إذا كان موقعنا مخصصًا لمساعدة الشركات الصغيرة على النمو، فيجب أن نقدم في المحتوى قصص نجاح فريدة لعلامات تجارية نجحت في تحقيق أساليب نمو مختلفة. 6. المحافظة على تحديث المحتوى تحديث المحتوى باستمرار يدل على مصداقية الموقع ويزيد من مكانته، لذا لا بد من العمل على مراجعة محتوى الموقع وتحديثه بانتظام ليحتوي على أحدث المعلومات والتوجهات، لأن المحتوى القديم والمعلومات التي لم تَعُد صالحة قد تؤدي إلى تضليل القراء والإضرار بسمعة العلامة التجارية عند محركات البحث، وكذلك القراء المستهدفين. في الختام كشفت شركة جوجل Google ذات مرة في إحدى منشوراتها عن معلومات مهمة: إذا تعرض الموقع الإلكتروني لانخفاض في الظهور في صفحات نتائج البحث نتيجة خوارزمية تحديث المحتوى المفيد من جوجل، أو في حال القلق حول احتمالية التعرض لهذا مستقبلًا، فلا بد من البدء في مراجعة استراتيجية المحتوى على الموقع الإلكتروني، واتباع النصائح التي ذكرناها في الأعلى. ترجمة -وبتصرّف- للمقال ?Why SEO is Not Dying Sooner? and How to Stay Ahead of The Curve لصاحبه Victor Oluponmile Godwin. اقرأ أيضًا الأخطاء الشائعة في تصميم المواقع الإلكترونية والتي تضر بتحسين محركات البحث كيفية الحصول على الروابط الخلفية لتحسين محركات البحث تقنيات تحسين محركات البحث السيئة والقديمة التي يجب تجنبها أدوات مجانية لتحسين محركات البحث
  4. بعد أن تعرفنا بالمقالات السابقة من سلسلة صناعة البودكاست على ما هو أنواع البودكاست والمعدات اللازمة للانطلاق في صناعة البودكاست، سنتحدث الآن عن الخطوات العملية لصناعة بودكاست؛ وفيما يلي 9 خطوات مهمة لصناعة بودكاست ناجح مثل المحترفين. 1. تطوير مفهوم خاص حول محتوى البودكاست المراد تقديمه يمكن تشبيه عملية بناء المفهوم الخاص حول البودكاست باختيار المجال المراد التدوين فيه، لذا لا بد من الإجابة عن الأسئلة التالية: ما المجالات التي أنا شغوف بها للغاية؟ ما هي المجالات الأخرى التي أهتم بها؟ هل أنا قادر على التحدث عن هذه المجالات لعدة أشهر أو حتى سنوات؟ اختيار مجال محتوى البودكاست يمكن البدء بتقديم بودكاست دون اختيار مجال محدد، لكن من الصعب جدًا تنمية جمهور مرتبط بهذا البودكاست دون أن يعرفوا نوعية المحتوى الذي سيستمعون إليه؛ كما أنه من الصعب أيضًا تسويق ومشاركة البودكاست دون وجود استهداف واضح. إن اختيار مجال متخصص لا يعني إلزامية اختيار موضوع ضيق للغاية، فكما ذكرنا سابقًا، من الممكن اختيار مجال ضيق أو واسع جدًا، لكن الأمر الرئيسي الذي يجب الحرص عليه -بغض النظر عن مجال التخصص- هو التأكد من تقديم قيمة حقيقة للمستمع، ويجب هنا التفكير في الكيفية التي سيبدو عليها البرنامج بالمقارنة مع برامج البودكاست الأخرى التي تتناول أفكار مماثلة. التفكير في اللجمهور المستهدف عندما الرغبة في إطلاق برنامج بودكاست، ثمة جانب مهم يجب أخذه في الحسبان، وهو الجمهور المستهدف لهذا البودكاست، فعند اختيار مجال محتوى البودكاست، لا بد من تخيل المستمع المثالي لهذا المحتوى. يجب التفكير في: هل سيشارك الجمهور المستهدف نفس اهتماماتنا؟ هل يوجد بالفعل مجتمع من الأشخاص الذين يبحثون عن المحتوى الذي نريد تقديمه؟ لا بد لنا هنا من تذكر أن محتوى البودكاست يجب أن يدور حول ما نريد التحدث عنه من ناحية، وما يهتم جمهورنا بالاستماع إليه من ناحية أخرى. ما الهدف من البودكاست الذي نريد إطلاقه؟ هذه أيضًا من الأمور التي يجب أن نفكر بها في هذه المرحلة، فهل هو بودكاست نريد تقديمه لعدد قليل من الأصدقاء، أم أننا نأمل في الوصول إلى جمهور أكبر؟ وهل نسعى إلى تقديم المتعة؟ أم أن هدف البودكاست تعليمي أكثر؟ إن التفكير في هذه الأسئلة مبكرًا سيساعدنا على تجنب الانحراف عن المسار في المستقبل. 2. تسمية البودكاست تُعَد عملية تسمية البودكاست صعبةً نسبيًا. ورغم أن هذا الجانب قد لا يكون مهمًا للغاية في مرحلة ما، لكنه مع ذلك يبقى ذا أهمية نسبية. لكن مع ناحية أخرى، يُعَد تغيير اسمه أسهل قليلًا مقارنةً مع المدونة، فعند اختيار اسم المدونة، فمن المرجح اختيار اسم نطاق Domain مشابه لهذا الاسم، لذا يقتضي تغيير الاسم تغيير عنوان الموقع الإلكتروني، وبالتالي فإن المشكلة ستكون أكبر بكثير. على الجانب الآخر، يُعدّ تغيير اسم البودكاست أسهل قليلًا؛ إذ من الممكن تغيير اسم البودكاست من خلال تعديل خلاصة الموقع RSS، وبالتالي لن تخاطر بفقدان الجمهور الحالي لبرنامجك. وعلى الرغم من أنه يمكن تغيير اسم البودكاست لاحقًا، إلا أنه من الأفضل البدء باسم مناسب يمكن الاستمرار معه حتى النهاية، وفي ما يلي بعض النصائح المفيدة للمساعدة على تسمية البودكاست: التأكد من أن الاسم حصري تمامًا مثل استخدام البحث عن اسم النطاق عند إطلاق مدونة، يجب أيضًا تجربة البحث عن اسم البودكاست الذي نريد اختياره، للتأكد من أن الاسم حصري وغير مستهلك من قبل. كخطوة أولى، لا بد من البحث في تطبيق البودكاست لمعرفة ما إذا كان الاسم مأخوذًا أم لا، وأنه لا يوجد اسم مشابه له للغاية. إذا لم يظهر الاسم في البحث، فمن الأفضل التحقق مرةً أخرى من خلال البحث على جوجل من خلال إدخال الاسم الذي تريد البحث عنه + "بودكاست". إذا كنا نريد إطلاق مدونة وبودكاست معًا، فلا بد من التأكد من توفر النطاق domain أيضًا. قد يكون من المفيد التحقق مما إذا كان الاسم متاحًا لحسابات منصات التواصل الاجتماعي المفضلة لدينا، لأننا قد نستخدم وسائل التواصل الاجتماعي لتسويق للبرنامج مستقبلًا. في بعض الحالات، قد نجد أن شخصًا ما قد استخدم الاسم الذي اخترناه، لكنه لم ينشر شيئًا منذ سنوات عديدة، هنا يمكننا المفاضلة بين استخدامه أو لا، لكن يُفضل اختيار اسم جديد لمنع ارتباك المستمعين في المستقبل، كما قد تكون عرضةً لخطر انتهاك حقوق الملكية. تحديد طول اسم البودكاست قد يصل اسم البودكاست إلى 255 حرفًا، لكن ليس من الجيد أن يكون الاسم طويلًا للغاية، وذلك لتفادي قص اسم البودكاست على بعض الأجهزة مثل الهواتف المحمولة، إلى جانب تسهيل تذكر الاسم على الناس. فكلما زاد طول الاسم، أصبح من الصعب حفظه؛ وسيكون من الأسهل انتشار الاسم القصير وحصوله على اهتمام أكبر، إذ يمكن للناس تذكره وتداوله بسهولة. تشير إحدى الدراسات إلى أن 75% من أسماء البودكاست تتكون من 29 حرفًا أو أقل، كما أن معظم أسماء برامج البودكاست المشهورة تتكون من 20 حرفًا أو أقل. تجنب حشو الكلمات المفتاحية حشو الكلمات المفتاحية هو عملية اختيار الكلمات التي يبحث عنها الأشخاص ووضعها في عناوين البودكاست وأوصاف الحلقات والمحتويات الأخرى بهدف زيادة انتشار المحتوى. صحيح أن الاستخدام الحكيم للكلمات المفتاحية في وصف البودكاست هو أمر مفيد، لكن حشو الكلمات المبالغ فيه في العناوين والأوصاف إلى الحد الذي لم يَعُد بالإمكان قراءتها سيعرضنا لخطر الإزالة من بعض منصات البودكاست، مثل منصة iTunes. على سبيل المثال، إذا كان لدينا بودكاست يتحدث عن التسويق وريادة الأعمال، فقد نفكر في إضافة كلمات مفتاحية مثل: ريادة الأعمال | مشاريع جانبية | أصحاب المشاريع الصغيرة | الدخل السلبي | تسويق المحتوى | التسويق الإلكتروني | تطوير الأعمال | صحيح أنه سيتم تغطية كل هذه المواضيع في البودكاست الذي نقدمه، لكن هذا النوع من حشو الكلمات المفتاحية غير محبذ وغير مسموح به على iTunes. وكذلك الأمر بالنسبة لشركة آبل Apple، فإذا راجعنا صفحة المساعدة الخاصة بالبودكاست فسنرى أنها تنص بوضوح على ما يلي: من المقبول تمامًا اختيار عنوان يتيح للأشخاص معرفة موضوع البودكاست الذي تقدمه، وهو ما توصي به شركة آبل: يمكن اختصار الأمر بأنه يجب استخدام الكلمات المفتاحية، لكن بحكمة ومنطق دون حشو الكلمات والإكثار منها. 7. تسجيل حلقة البودكاست الأولى والآن، وبعد تحديد الشكل الذي نريد أن يبدو عليه برنامجنا، وبعد امتلاكنا للأجهزة والبرامج التي نحتاجها، حان الوقت لتسجيل الحلقة الأولى من البرنامج، وهو أمر رائع للغاية، لذا سنذكر في ما يلي بعض الأشياء التي يجب أخذها في الحسبان: لا داعي للقلق في حال عدم تلبية التوقعات العالية يتشابه البدء في تسجيل برنامج بودكاست مع عملية البدء في كتابة أول كتاب، أي أن أول شيء نكتبه قد لا يكون أفضل أعمالنا، لكنه أفضل من عدم كتابة أي شيء. على سبيل المثال، قد لا تحظى حلقتنا الأولى بأفضل جودة صوت، لكن لا داعي لترك الأمر يمنعنا من البدء. وكما هو الحال مع أي نوع من أنواع تسويق المحتوى، مثل التدوين والنشر على يوتيوب، ستتحسن الأمور تدريجيًا وسيزداد عدد المتابعين شيئًا فشيئًا، لذا لا داعي للقلق إذا لم تحقق الحلقات الأولى نتائج مزلزلة؛ إذ ستتحسن الأمور مع الوقت، وسيأتي يوم نعود فيه إلى حلقاتنا الأولى لإدراك مدى تحسننا. تحديد المحاور الرئيسية للحلقة إذا لم نكن نُعِد حلقةً مكتوبةً بالكامل، فيجب أن يكون لدينا شيء أشبه بالخطوط العريضة أو المحاور الرئيسية للحلقة، بحيث تساعدنا على تجنب التشتت عند نفاد الأشياء التي نريد قولها، كما أنها مهمة لكي لا يتجاوز طول الحلقة المتوقع. يمكننا جعل الأمر بسيطًا أو معقدًا كما نريد، ولكن من المهم أن يكون لدينا مخطط واضح لكل حلقة بودكاست، بما في ذلك الموضوعات المحتملة التي نرغب في تغطيتها؛ فإذا كنا نجري مقابلة مع شخص ما مثلًا، فلا بد من وضع قائمة بالأسئلة التي نرغب في طرحها. صحيح أننا قد لا نتمكن من طرح كل هذه الأسئلة، لكن وجود قائمة طويلة سيجنب المقابلة حالة الركود أو التشتت. إعداد مكان التسجيل لا بد من اختيار مكان جيد للتسجيل. يلجأ الكثير من الأشخاص إلى تسجيل حلقات البودكاست في المنزل، وليس هناك مشكلة في ذلك، لكن من الجيد أن يكون لدينا مكان مخصص للتسجيل ضمن المنزل. قد يكون من المناسب عزل الصوت قدر الإمكان لتجنب الضوضاء في الخلفية، وسيكون هذا مفيدًا على وجه الخصوص في المنازل التي يوجد فيها أطفال أو عدد كبير من الأفراد. يستخدم بعض مقدمي البودكاست خزانة ملابس كبيرة للتسجيل بها، كونها تحفظ الصوت وتحتوي على الكثير من المواد الناعمة التي تمتص الصوت من حولها. 8. تحرير الحلقة يُعًد تحرير حلقات البودكاست من أكثر الأجزاء استهلاكًا للوقت، لكنه في ذات الوقت مهم للغاية ويمكن أن يحدث فرقًا كبيرًا، إذ يمكن في هذه المرحلة إضافة مقدمة وخاتمة، وإصلاح الأخطاء الصوتية، وإزالة لحظات الصمت والأقسام المملة من التسجيل؛ أي أنه يمكن تحويل التسجيل متوسط الجودة إلى تسجيل أفضل بكثير عند امتلاك مهارات التحرير الجيدة. لن نتحدث هنا عن كيفية تحرير الملفات الصوتية، لأن استخدام كل برنامج يختلف عن الآخر، لكن بغض النظر عن البرنامج الذي سنختاره، من المهم أن تكون تسجيلاتنا ممتعة وخالية من لحظات الصمت الطويلة أو الفواصل بين الكلام، وهي من أفضل الممارسات التي ستبقي المستمعين أكثر تفاعلًا، ومن المرجح أن يبقوا متواجدين طوال الحلقة. 9. وضع خطة نشر بعد تسجيل الحلقة الأولى من برنامج البودكاست وتحريرها، لا بد من القيام ببعض الأشياء قبل نشرها للعالم. تسجيل حلقات إضافية عوضًا عن تسجيل حلقة بودكاست واحدة ورفعها بسرعة على منصة استضافة، يُفضل تسجيل بعض الحلقات وتحريرها، ومن ثم مباشرة رفع الحلقات وفق خطة نشر. السبب في ذلك أنه من السهل التخلف عن مواعيد النشر عندما يتعلق الأمر بأي نوع من أنواع إنشاء المحتوى. فلنفترض أننا نريد مثلًا نشر حلقة بودكاست جديدة أسبوعيًا أو مرتين في الأسبوع أو حتى شهريًا؛ من المهم في هذه الحالة أن تكون لدينا هنا بعض الحلقات الجاهزة والمجدولة للنشر لضمان الالتزام بالمواعيد حتى في الحالات الطارئة، أو في حال استغرق تسجيل الحلقة وقتًا أطول من المتوقع. إذا كنا نجري مقابلات مع الضيوف في برنامجنا، فقد نجد أن الأمر يستغرق وقتًا إضافيًا لتحديد مواعيد لقاء مع الأشخاص المناسبين، وإذا كان برنامجنا يتطلب الكثير من الكتابة والبحث، فقد نجد أن بعض الحلقات تحتاج إلى المزيد من العمل قبل أن تصبح جاهزة، لذا من المهم التأكد من توفير حلقات إضافية لضمان استمرار الإنتاج وبالجودة اللازمة. تحديد معدل نشر الحلقات فيما يتعلق بمعدل نشر الحلقات، يمكن القول بأن الأمر هو إلى حد ما مسألة رأي، لكن هناك بعض العوامل التي يجب أخذها في الحسبان: ما مقدار الوقت الذي سنكرّسه لبرنامجنا؟ ما هو طول حلقة البودكاست في برنامجنا؟ ما مقدار الوقت الذي نريد قضاءه في التسجيل؟ ما الهدف من البرنامج؟ هل نسعى إلى تحقيق الأرباح من البرنامج؟ ستساعدنا الإجابة عن الأسئلة السابقة في تكوين فكرة واقعية عن معدل تسجيل ورفع حلقات جديدة من برنامجنا، لكن بكل الأحوال، عندما نكون في البداية لا داعي للمبالغة في طموحاتنا، فقد تكون مرة واحدة في الشهر كافية، ومع نمو البرنامج والبدء في جني الأموال منه، يمكن التفكير في زيادة معدل التسجيل. خلاصة القول هي أن نكون متسقين ونلتزم بتسجيل ورفع حلقات جديدة بانتظام، كما يجب اختيار يوم محدد ووقت ثابت لنشر الحلقات، بحيث يتوقع جمهورنا متى سننشر حلقتنا التالية. خاتمة بهذا نكون قد وضحنا كيفية صناعة بودكاست وتحضيره للنشر وترتيب آلية نشره، وسنتحدث في المقال التالي عن كيفية انتقاء الاستضافة الأنسب لصناعة البودكاست. اقرأ أيضًا المقال السابق: اختيار المعدات المناسبة لصناعة البودكاست أنواع البودكاست مدخل إلى عالم صناعة البودكاست إنشاء المحتوى وصناعة الآراء: التدوين والبودكاست
  5. بعد أن بنينا مفهومنا حول البودكاست في المقالات السابقة من هذه السلسلة وعرفنا دوافع إطلاق برنامج بودكاست، حان الوقت لتحديد المعدات الأساسية التي سنحتاجها لإطلاق برنامجنا، وهي موضوعنا بهذا المقال. قد يكون من الممكن تسجيل وتحرير تسجيلات البودكاست مباشرةً من الهاتف المحمول، لكن للحصول على جودة صوت أفضل وتحرير أسهل، لا بُد من الاستثمار في بعض المعدات الإضافية. وبطبيعة الحال، هناك بعض الأجهزة والمعدات التي يُوصى بأن تكون لدينا قبل البدء في تسجيل حلقات البودكاست، إذ ستسهل علينا عملية التسجيل وسترفع من جودة عملنا، ولن تضع على كاهلنا أعباء مادية كبيرة. حاسوب محمول أو ثابت يُعد الحاسوب جهازًا أساسيًا لتسجيل وتحرير ملفات الصوت MP3، أما نوع العلامة التجارية التي يجب اختيارها فهي مسألة تتعلق بتفضيلاتنا الشخصية، وكذلك الحال بالنسبة للجهاز الذي أن يكون من النوع الثابت أو المحمول؛ إذ يعتمد الأمر على ميزانيتنا وما نرغب في استخدامه. لاقط الصوت أو الميكروفون Microphone يُعَد الميكروفون أو لاقط الصوت من المعدات الضرورية لمقدمي برامج البودكاست، وهناك الكثير من الأنواع المتاحة التي يمكننا الاختيار من بينها، فهناك الميكروفونات رخيصة الثمن (أقل من 100 دولار) وبعضها ذات جودة مقبولة ويُنصح بالبدء بها؛ وهناك الميكروفونات الأكثر احترافية، والتي قد تكون خيارًا مناسبًا للمستقبل. عند البدء في البحث عن الميكروفونات، سيتعين علينا الإجابة على عدة أسئلة، أحدها هو ما إذا كنا نريد ميكروفونًا مكثفًا Condenser أم ديناميكيًا Dynamic، وهناك عدد لا بأس به من الاختلافات بين الاثنين، لذا فإن الأمر يستحق التفكير والمقارنة لاختيار الأنسب. الميكروفون المكثف Condenser من المعروف أن الميكروفون المكثف حساس جدًا للضوضاء، فهو يلتقط حتى الأصوات الضعيفة، لكن ما يميزه أنه يعطينا صوتًا أقرب للطبيعي مقارنةً مع الميكروفون الديناميكي. وبطبيعة الحال، يمكن أن تكون هذه الحساسية جانبًا سلبيًا إذا كانت لدينا الكثير من الضوضاء في مكان التسجيل، فإذا كنا نعيش مثلًا مع شركاء في السكن أو كان لدينا أطفال صغار، فقد يكون التسجيل محبطًا باستخدام الميكروفون المكثف، لذلك إذا قررنا اختيار الميكروفون المكثف، فعلينا التفكير أيضًا في عزل الصوت في مكان التسجيل لتجنب مشكلة الضوضاء. يجب الانتباه هنا إلى أنه حتى الغرفة التي نظن أنها هادئة نسبيًا قد تصدر بعض الأصوات التي يلتقطها الميكروفون، مثل صوت المروحة أو مكيف الهواء أو نظام التدفئة أو غير ذلك. وصحيح هنا أنه يمكنك تحرير هذه الأصوات وحذفها بعد جلسة التسجيل، لكن من الأفضل تقليل أكبر قدر ممكن من التلوث الضوضائي من البداية، حتى تحصل على أفضل جودة صوت ممكنة بعد التحرير والمونتاج. من الخيارات المتاحة لتقليل التلوث الضوضائي، نذكر إضافة حاجب الرياح Windscreen، وهو عبارة عن نوع من القماش المثقب الذي يوضع فوق الميكروفون للمساعدة في منع التقاط الضوضاء وأصوات النفس. صحيح أنه لن يلغي جميع الضوضاء الخارجية، لكنه مفيد ويساعد على تخفيفها. من الأمور التي يجب أخذها في الحسبان هنا هي أن الميكروفونات المكثفة غير متينة، وهذا لا يعني أن الميكروفون لن يدوم لفترة طويلة، لكن إذا كنا نخطط للسفر أو تحريك الميكروفون كثيرًا مثلًا، فسنحتاج إلى التعامل معه بعناية شديدة. الميكروفون الديناميكي Dynamic قد يكون هذا النوع مناسبًا أكثر إذا كنا نخطط للتنقل كثيرًا، فهو أكثر متانة، كما أنه لا يلتقط الكثير من الضوضاء الخارجية، فعلى سبيل المثال، إذا كنا نخطط لإجراء مقابلات مع الأشخاص في شوارع المدينة، فسيكون الميكروفون الديناميكي هو النوع المناسب، نظرًا لأننا لن نضطر إلى تعديل وحذف الكثير من الضوضاء في الخلفية؛ لكن من ناحية أخرى، تمتلك الميكروفونات الديناميكية معدل تردد أقل، وقد تجعل من الصوت مختلفًا قليلًا عن الحالة الطبيعية ليصبح مشابهًا لصوت الراديو، لذا فإن الطريقة التي نريد أن يبدو عليها البودكاست لها علاقة كبيرة باختيار نوع الميكروفون. إذا كنا نريد أن نبدو مثل مذيع الراديو التقليدي، فيمكن للميكروفون الديناميكي أن ينتج هذا الصوت، بينما للحصول على صوت أقرب للطبيعي، يُفضل اختيار الميكروفون المكثف؛ أما من ناحية السعر، يتمتع الميكروفون الديناميكي بسعر أقل عمومًا. ميكروفون USB أم ميكروفون XLR هناك أمر آخر قد يهمنا عند اختيار الميكروفون، وهو اختيار ميكروفون بمخرج USB أو بمخرج XLR، والفرق بين الاثنين بسيط إلى حد ما، إذ أن لكل منهما مخرج اتصال مختلف، مع ذلك يمكن توصيل الميكروفون من نوع مخرج USB مباشرةً بجهاز الحاسوب، في حين يجب توصيل الميكروفون من نوع مخرج XLR أولًا بجهاز وسيط، مثل وحدة الخلط أو ميكسر الصوت Mixer قبل توصيله بالحاسوب. يُعَد ميكروفون USB مناسبًا في عدة حالات لأننا لن تحتاج إلى أي معدات إضافية من أجل استخدامه، فكل ما سنحتاج إليه هو سلك USB وميكروفون وجهاز حاسوب؛ مع ذلك يرى محبو ميكروفونات XLR أن هذه الأخيرة ذات جودة أعلى وتنتج تسجيلات صوتية أفضل. وبالعموم، يمكن القول أنه إذا كنا نبحث عن الإعداد السهل والتكلفة المنخفضة، فإن ميكروفون USB هو الخيار الأنسب، بينما إذا كنا نتطلع إلى تقديم بودكاست احترافي، فقد يكون من الأفضل الاعتماد على ميكروفون XLR مع وحدة الخلط (الميكسر)، كونها تتيح مزيدًا من التحكم في التسجيلات. قدرات التقاط الصوت من الاتجاهات ثمة أمر آخر يجب أخذه في الحسبان عند شراء ميكروفون، وهو قدرته على التقاط الصوت من الاتجاهات المختلفة. في الواقع، هناك خمسة أنواع رئيسية من الميكروفونات يمكن تصنيفها حسب قدرتها على التقاط الصوت؛ إذ يلتقط كل منها الصوت بطريقة مختلفة، وفيما يلي شرح عن الأنواع الخمسة حتى تتمكن من اختيار النوع الذي يناسب احتياجاتك: الميكروفونات من النوع القلبي Cardioid microphones: يتميز هذا النوع من الميكروفونات بنمط الالتقاط الأمامي، فهي تلتقط الصوت الذي يقع أمام الميكروفون، كما قد تلتقط بعض الأصوات من الجانب، لكن معظم الأصوات الملتقطة تكون أمام الميكروفون. الميكروفونات متعددة الاتجاهات Omnidirectional microphones: تلتقط الميكروفونات من هذا النوع الصوت من كل الاتجاهات بالتساوي، لذا قد يستخدم مقدمو البودكاست هذا النوع إذا كانوا يحتاجون إلى إنشاء تسجيلات صوتية من عدة زوايا مختلفة، لكن عادةً ما لا يكون هذا هو الخيار الأفضل لبرامج البودكاست، لأنه من المحتمل أن يلتقط الكثير من الضوضاء في الخلفية. الميكروفونات ذات الشكل 8 أو الميكروفونات ثنائية الاتجاه: وهي الميكروفونات التي تلتقط الأصوات من الجانبين. إذا كنت مهتمًا بإجراء بودكاست بأسلوب المقابلة، فقد تكون مهتمًا بهذا النوع، فهو يعمل على التقاط الأصوات من الجزء الأمامي والخلفي من الميكروفون فقط، دون التقاط الأصوات من الجوانب. فهي ميكروفونات Shotgun: يتشابه هذا النوع من الميكروفونات إلى حد كبير مع الميكروفونات القلبية، لكن ما يميزها أن التقاط الصوت فيها أكثر اتجاهًا، لذا سيلتقط هذا النوع من الميكروفونات الصوت الموجود أمامه مباشرةً، وسيحجب جميع الضوضاء المحيطة الأخرى. الميكروفونات متعددة الأنماط Multi Pattern أو الميكروفونات القابلة للتبديل Switchable: يتيح هذا النوع من الميكروفونات القدرة على التبديل بين الاتجاهات للتمكن من استخدام الميكروفون في المواقف المختلفة. حامل الميكروفون قد يكون الميكروفون مزودًا بحامل، ولكن إذا لم يكن كذلك، فلابد من شراء شيء ما لإبقائه ثابتًا، ولهذا الغرض، يُعَد الحامل من النوع Stand أقل تكلفةً، لكنه عبارة عن ذراع مستقيمة غير قابلة للانحناء، في حين يوفر الحامل من نوع Boom Arm خصائص أفضل تسهل التحكم أكثر بوضعية الميكروفون، إذ به ثلاث أذرع مربوطة بمفاصل. حامل الصدمات Shock Mount حامل الصدمات هو أي جهاز أو عتاد من الممكن استخدامه لتقليل الضوضاء، وهو شيء يستحق الاستثمار فيه فعلًا، إذ يمتص حامل الصدمات أي حركة تحدث حول الميكروفون، فلو حصل اصطدام بالطاولة مثلًا عن طريق الخطأ أثناء التسجيل، فسوف يمتص حامل الصدمات هذه الحركة. يؤدي حامل الصدمات Shock Mount دوره جيدًا على نحو خاص إذا كنت تستخدم حامل ميكروفون من النوع Boom Arm، ولكنه مفيد أيضًا إذا كنت تستخدم حاملًا من النوع stand. مرشح البوب Pop Filter مرشح البوب Pop Filter هو أشبه بقطعة قماش مثقبة تصفي الأصوات الانفجارية التي تخرج أثناء الكلام، مثل حرف الباء المشدد، بحيث إذا كان المتحدث قريبًا جدًا من الميكروفون ولم يكن مرشح البوب متاحًا، فقد يصدر صوتًا مرتفعًا ومزعجًا من شأنه تشتيت انتباه المستمع ويزعجه أذنه، ولهذا السبب يُفضِّل العديد من الأشخاص استخدام مرشح البوب على ميكروفوناتهم. سلك USB يُعد سلك USB من العتاد الأساسي، سواءً اخترنا استخدام ميكروفون ذي مخرج USB أو ميكروفون ذي مخرج XLR، ففي حال استخدمنا ميكروفون USB، فسنحتاج إلى سلك USB لنصل به الميكروفون بالحاسوب مباشرة؛ أما في حال استخدام ميكروفون XLR، فسنحتاج إلى سلك USB لتوصيل موحد مستوى الصوت مع الحاسوب. موحد مستوى الصوت Mixer موحد مستوى الصوت Mixer هو جهاز يُستخدم لجمع الأصوات من عدة إشارات وأجهزة استقبال الصوت، بحيث في حال كنا نجري مقابلة مع أكثر من ضيف، فالطبيعي أن يتحدث أحدهما بصوت عالٍ، بينما قد يمتلك الآخر صوتًا أخفض، وهنا لتوحيد مستوى الصوت وعدم إرهاق المستمع بهذا التباين، يمكن استخدام موحد مستوى الصوت للتحكم في مستوى صوت التسجيلات لكل الضيوف، عن طريق تضخيم الصوت الهادئ وتخفيف صوت الضيف الأكثر قوةً. وللتنويه، تجدر الإشارة هنا إلى أنه إذا كنا نعتمد على ميكروفون ذي مخرج XLR، فسنحتاج بالتأكيد إلى استخدام موحد مستوى الصوت، في حين أن ذلك لن يكون ضروريًا إذا كنا نستخدم ميكروفون ذي مخرج USB؛ مع ذلك يبقى موحد مستوى الصوت مفيدًا لتحسين جودة الصوت في البرنامج، لأنه يمنح المزيد من التحكم في التسجيلات الصوتية؛ إذ يشتمل جهاز موحد مستوى الصوت على مزايا أخرى، مثل تحسين الصوت المدمج، والنسخ الاحتياطي للتسجيلات الصوتية، وكذلك القدرة على الإنتاج المباشر للصوت وإضافة مؤثرات صوتية على التسجيلات. 4. اختيار برنامج التسجيل والتحرير يُعَد تسجيل الصوت وتحريره من الأمور الأساسية لأي برنامج بودكاست، وقد يكون تحرير الصوت وتعديله من المهام التي تستغرق وقتًا طويلًا للغاية، لذا يجب الحرص على اختيار برنامج سهل الاستخدام مع امتلاكه الإمكانيات التي تغطي احتياجاتنا، وفيما يلي قائمة ببعض برامج التسجيل والتحرير الجيدة: برنامج GarageBand Garageband هو برنامج تحرير مجاني متاح حصرًا على نظام Mac، يوفر إمكانية استخدام محرر صوت متعدد المسالك، ويُعد سهل الاستخدام ومناسب للمبتدئين في مجال البودكاست. وكما هو الحال في ووردبريس WordPress، هناك أيضًا مكونات إضافية متاحة لبرنامج Garageband والتي توفر المزيد من الخيارات المتقدمة. فيما يلي قائمة ببعض المزايا الأخرى لبرنامج Garageband: مكتبة صوتية كاملة إضافة مؤثرات صوتية ضغط الملفات ميزة المكون الإضافي Visual EQ لتحسين الصوت مع ذلك قد يكون البرنامج مناسبًا أكثر للأعمال المنتشرة، لكن للأعمال الاحترافية للغاية والمتقدمة جدًا، يفضل البحث في خيارات أفضل. برنامج Audacity برنامج Audacity هو محرر صوت مجاني ومفتوح المصدر، يعمل مع أجهزة Mac، والأجهزة التي تعمل بأنظمة التشغيل Windows و Linux و GNU، مما يعني أنه يمكن للمستخدمين تطويره. بالمقارنة مع برنامج Garageband، يمكن القول بأن برنامج Audacity يحتاج إلى تدريب أكثر، فهو صعب الاستخدام، كما أن واجهته ليست جذابة، لكن على الرغم من ذلك، يقدم برنامج Audacity العديد من الميزات التي قد تحتاجها للتسجيل والتحرير، بما في ذلك: مقياس لشدة الصوت Level meters تسجيل متعدد المسالك Multi-track recordings ضغط الملفات إزالة الضجيج من التسجيلات القدرة على تسجيل الصوت مباشرةً المؤثرات الصوتية مثل تغيير السرعة أو درجة الصوت يمكن إضافة أي تأثيرات تريدها عن طريق المكونات الإضافية تحرير ملفات الصوت بتنسيقات WAV أو AIFF أو FLAC أو MP2 أو MP3 أو Ogg Vorbis الآن، وبعد أن تحدثنا عن البرامج المجانية، دعونا نلقي نظرةً على بعض البرامج المدفوعة. برنامج هيندنبورغ Hindenburg تقدم شركة Hindenburg Systems العديد من برامج تحرير الملفات الصوتية، وكل من هذه البرامج مزود بمجموعة من الميزات؛ والخيار الأقل كلفةً بين هذه البرامج هو برنامج Hindenburg Journalist الذي يشتمل على الميزات التالية: القدرة على العمل على جميع أنظمة التشغيل المختلفة التحرير غير المدمر Non-destructive editing، والمقصود بها القدرة على التحرير التجريبي دون تخريب ملف الصوت الأصلي إضافة المؤثرات الصوتية حافظة للتخزين المؤقت تسجيل متعدد المسالك Multi-track recordings ربط المسارات تحرير ملفات صوتية بتنسيقات WAV أو MP3 أو M4a أو AIFF صحيح أن برنامج Hindenburg ليس الخيار الأرخص بين البرامج المدفوعة، لكن ما يميزه هو أنه يستهدف على وجه الخصوص الأشخاص العاملين في مجال الراديو والبودكاست. برنامج Apple Logic Pro X برنامج Apple Logic Pro X هو عبارة عن محطة رقمية احترافية لتحرير الملفات الصوتية، وهو قد يناسب الأشخاص الذين لديهم معرفة ببرنامج Garageband ويبحثون عن برنامج ذات ميزات أعلى للارتقاء بعملهم، كما يمكن نقل الملفات بين البرنامجين بسهولة. من المهم الإشارة هنا إلى أن برنامج Logic Pro X احترافي جدًا، وهو موجه بالأساس للموسيقيين، لكنه يأتي مع عدد كبير من المزايا التي تفيد مقدمي البودكاست أيضًا، وفيما يلي بعض المزايا التي ستحصل عليها مع برنامج Logic Pro X: الإيقاع الذكي Smart Tempo توفر المكونات الإضافية يمكننا استخدامه كموحد لمستوى الصوت في حال أردنا العمل عليه انطلاقًا من هاتف بنظام iOS مؤثرات صوتية وآلات موسيقية تعديل سرعة الصوت أدوات لترميم الملفات الصوتية وإصلاحها أدوات تحرير متقدمة يعمل برنامج Apple Logic Pro X فقط على أجهزة Mac، لذا لن يكون البرنامج مفيدًا للأشخاص الذين يستخدمون أنظمة تشغيل أخرى. برنامج أدوبي أوديشن Adobe Audition برنامج أدوبي أوديشن Adobe Audition هو برنامج تحرير صوتيات احترافي بنظام اشتراك شهري، وهو يلبي الكثير من احتياجات العاملين في مجال الموسيقى، إضافةً إلى مقدمي برامج البودكاست، وفيما يلي أهم المزايا التي يحتويها: إمكانية ضبط مستويات الصوت مكتبة تحتوي على العديد من المؤثرات الصوتية دون حقوق ملكية تسجيل متعدد المسالك مصادر تعليمية ونصائح فيما يخص البودكاست التقليل من الضوضاء في التسجيلات إمكانية تعديل جهارة الصوت أدوات لترميم الملفات الصوتية وإصلاحها إمكانية تصدير الملفات الصوتية بتنسيقات متعددة السلبية الأكبر في برنامج أدوبي أوديشن هو أنه لا يمكنك دفع الرسوم لمرة واحدة وامتلاك حقوق استخدام البرنامج للأبد، بل يجب أن تدفع شهريًا، وهو ما يمكن أن يكون مقلقًا لمقدمي البودكاست، خاصةً المبتدئين منهم. الأمر الإيجابي هو أنه يمكن دفع اشتراك شهري لجميع تطبيقات أدوبي، والذي قد يوفر بعض التكاليف في حال الحاجة لاستخدام برامج أدوبي أخرى، مثل برنامج أدوبي فوتوشوب Adobe Photoshop أو أدوبي إليستريتور Adobe Illustrator وغيرها من تطبيقات أدوبي. برنامج ديسكريبت Descript برنامج ديسكريبت Descript هو برنامج تسجيل صوت مختص بتسجيلات البودكاست ويتطلب دفع اشتراك شهري أيضًا، فعلى مدار السنوات العديدة الماضية، عملت الشركة المبرمجة على الكثير من الأشياء الجديدة والرائعة لمقدمي برامج البودكاست. في البداية، سيتلقى البرنامج الملفات الصوتية ويحولها إلى ملفات نصية قابلة للتحرير، بحيث إذا كنا نريد اقتطاع جزء من الصوت، فيمكننا القيام بذلك بنفس السهولة التي نحرر بها مستند مكتوب. ميزة رائعة أخرى في برنامج ديسكريبت وهي أنه يمكننا إضافة كلمات جديدة إلى تسجيلاتنا، بحيث إذا أردنا تغيير كلمة ما، فيمكننا فعل ذلك بسهولة باستخدام خاصية Overdub، التي يمكن استعمالها حصرًا بصوت مستخدم البرنامج وليس بأصوات الآخرين. فيما يلي ملخص لبعض المزايا الإضافية التي يتمتع بها برنامج ديسكريبت، مع العلم أن بعض هذه المزايا خاص في خطط الاشتراك المتقدمة: التعاون على تحرير الملفات ضمن فريق عمل ميزة Overdub التي تتيح إمكانية إضافة كلمات جديدة إلى التسجيل تحويل الصوت إلى نصوص مكتوبة كشف المتحدث التحرير متعددة المسارات دمج الأصوات بخاصية Crossfades تتبع مسارات الصوت تصدير الملف بتنسيقات متنوعة برنامج زنكاستر Zencastr يتشابه برنامج زنكاستر Zencastr مع برنامج Hindenburg في كونه يستهدف مقدمي برامج البودكاست، لذا فهو خيار مناسب آخر، وفيما يلي بعض المزايا المميزة التي يقدمها برنامج زنكاستر: مسارات منفصلة لكل ضيف لوحة صوت Soundboard من أجل التحرير المباشر Live على البثوث الصوتية التكامل مع التخزين السحابي تقنية VoIP مدمجة، لذا لن نضطر إلى استخدام خدمات جهة خارجية التسجيل بتنسيق WAV يمكنه العمل على أنظمة تشغيل متعددة ومع ذلك، لدى زنكاستر بعض السلبيات، منها أنه ليس من السهل تحميل الملف الصوتي إلى مضيف بودكاست، مثل آبل Apple أو جوجل بودكاستس Google Podcasts، وسنحتاج لذلك إلى خدمة خارجية مثل Anchor؛ إلى جانب كون تكلفته عالية بعض الشيء؛ إذ صحيح أن البرنامج يتيح إصدارًا مجانيًا محدودًا، لكن هناك رسوم شهرية للإصدار المتقدم وتكلفتها ليست بالقليلة، خاصةً وأنه قد اشتكى بعض المستخدمين من أن الخدمة قد لا تكون جيدةً في بعض الأحيان. كما أن واحدة من الميزات الرئيسية المفترضة لهذا المنتج هي قدرته على تسجيل أصوات الضيوف من موقع آخر، لكن في الواقع، أبلغ بعض المستخدمين أن الضيوف لم يكونوا قادرين على الاتصال، كما فُقدت الملفات الصوتية بعد التسجيل في بعض الأحيان. برنامج بودكاسل Podcastle برنامج بودكاسل Podcastle هو عبارة عن منصة توليد صوت تعاونية مدعومة بالذكاء الاصطناعي تساعد المبتدئين والمحترفين على إنشاء ملفات بودكاست ذات جودة احترافية بسهولة. أفضل ما في برنامج بودكاسل هو أنه يحتوي على واجهة سهلة الاستخدام، مما يجعل العملية سهلة وممتعة للغاية. إضافةً إلى ذلك، يُعَد برنامج بودكاسل مفيدًا للغاية لمسجلي الكتب الصوتية وللمعلمين ولكل من يعمل في مجال الصوتيات، وفي ما يلي بعض الميزات الرئيسية لهذا البرنامج: تسجيل صوت بدقة عالية HD مقابلة عن بعد متعددة المسارات إزالة الضوضاء في الخلفية محرر صوت مدعوم بالذكاء الاصطناعي تحويل النص إلى كلام مكتبة واسعة من المؤثرات الصوتية تصدير الملفات بتنسيقات متعددة إزالة لحظات الصمت في الملفات الصوتية كما هو الحال في برنامج Descript، من الممكن تحرير الملف الصوتي عن طريق تحويله إلى نص وإزالة جميع الأجزاء غير الضرورية مباشرةً من محرر النصوص، كما يمكن استخدام محول الصوت إلى نص للحصول على نسخ مكتوبة من البودكاست الخاص بنا، والتي يمكنك نشرها لاحقًا على موقعك الإلكتروني، أو استخدامها في تحسين محركات البحث SEO لبرنامجنا. هناك ثلاثة خيارات اشتراك متاحة في برنامج بودكاسل، إذ يمكن البدء بالحزمة المجانية التي تحتوي على كل ما نحتاجه لبدء رحلتنا في عالم البودكاست، وإذا قررنا لاحقًا زيادة مستوى الاحترافية، فيمكننا تجربة الحزم المتقدمة، مثل حزمة Storyteller والتي تأتي بسعر 11.99 دولارًا شهريًا، أو حزمة Podcastle Pro التي تكلف 23.99 دولارًا شهريًا. وبالنسبة للمؤسسات الكبيرة، يقدم البرنامج حزمة الفريق التي يتم تخصيصها وفقًا لاحتياجات شركتك. تسجيل المقابلات عن بعد في حال كنا نخطط لإجراء مقابلات مع بعض الضيوف، فقد نجد أن بعض ضيوفنا بعيدون عن منطقتنا، لذا عوضًا عن استقبالهم في المنزل، يمكن ببساطة استخدام برامج التسجيل التي تتيح لنا إمكانية التسجيل عن بُعد، فبالإضافة إلى برنامج زنكاستر Zencastr، هناك بعض البرامج الأخرى المتاحة، أهمها: برنامج سكوادكاست Squadcast برنامج سكوادكاست Squadcast هو برنامج تسجيل رائع لا يتطلب التثبيت على الجهاز أو استخدام أي مكونات إضافية، فقد لا يكون الشخص الذي نريد إجراء المقابلة معه مهتمًا بتنزيل البرنامج على حاسوبه؛ لذا يُعَد هذا البرنامج خيارًا مناسبًا لإجراء مقابلات لمرة واحدة. باستخدام برنامج سكوادكاست، سيكون بإمكاننا جدولة المقابلات وتسجيل الصوت في ملفات بصيغة WAV منفصلة وتنظيمها ضمن مكتبة، كما يتم حفظ التسجيلات في نسخ احتياطية سحابية. باختصار، البرنامج سهل الاستخدام وكل ما على الطرفين فعله هو استخدام متصفح عادي لتشغيله. برنامج سكايب Skype يُعَد سكايب Skype من الخيارات المتاحة لإجراء مقابلات بودكاست عن بُعد، لكن قد لا يكون الخيار الأفضل لعدة أسباب، منها أن الصوت المسجل منخفض الجودة ولا يمكنك تنزيله إلا بصيغة ملف فيديو MP4، كما أن هناك مشكلات أخرى تتعلق بالاتصال وتقطيع الصوت، مع ذلك أدرجناه ضمن هذه القائمة لأن الكثير من مقدمي البودكاست يستخدمونه كبرنامج لإجراء المقابلات عن بُعد وتسجيل المقابلات عليه، لكن في الواقع هو ليس بالخيار الذي يُوصى به. برنامج زووم Zoom في حال البحث عن خيار مجاني، فقد يكون برنامج زووم Zoom هو الخيار الأنسب، ورغم أنه يحتوي على إصدارات متقدمة، لكن بالنسبة للاجتماعات الشخصية مثل تلك التي تُعقد في مقابلة البودكاست، فإن الإصدار المجاني كاف وجيد. صحيح أن برنامج زووم لا يقدم العديد من الميزات التي تقدمها البرامج الأخرى مثل سكوادكاست Squadcast، لكنه يسجل ملفات صوتية بجودة عالية ويحفظ صوت كل متحدث في مسار مختلف. 5. حفظ حقوق الملكية وتسجيل العلامة التجارية لبرنامجك قد لا تكون حقوق الملكية للبرنامج أول ما يخطر بالبال في بداية الأمر، لكنها من الأمور التي يجب أن توليها اهتمامًا جديًا عند اتخاذ قرار شق الطريق في عالم البودكاست. لنكن واضحين، لن نؤدي في هذا المقال دور المحامي ونشرح الأمور القانونية، لكن من المهم الأخذ في الحسبان أنه من المهم جدًا حفظ حقوق الملكية للبرنامج وتسجيل العلامة التجارية لضمان حمايتها مستقبلًا، وللحصول على فهم واضح للأمور والممارسات القانونية، يكفي التواصل مع محام متخصص للمساعدة على تسجيل البرنامج قانونيًا. يمكن البحث عن استشارة قانونية أونلاين، عبر زيارة منصة مستقل الذي يحتوي على أفضل المستقلين من كل المجالات، يمكننا البحث ضمن قائمة المحامين في قسم الاستشارات القانونية واختيار المحامي الذي نشعر أنه قد يلبي احتياجاتنا. خاتمة بهذا نكون قد تعرفنا في هذا المقال على المعدات التي يمكن استخدامها للخروج ببودكاست احترافي، وسنتعرف في المقال التالي من هذه السلسلة على كيفية صناعة البودكاست. ترجمة -وبتصرّف- للمقال How to Start a Podcast and Make Money لصاحبه Ryan Robinson. اقرأ أيضًا المقال السابق: أنواع البودكاست مدخل إلى عالم صناعة البودكاست إنشاء المحتوى وصناعة الآراء: التدوين والبودكاست
  6. لدى كل بودكاست طبيعة ونوع محتوى مختلف عن الآخر، فبعض مقدمي البودكاست يجهزون النصوص قبل تقديمها، وبعضهم يقدم محتوى ارتجالي مباشر؛ لذا يجب أن تحدد طبيعة المحتوى الذي تريد تقديمه وتنسيقه، وسنناقش فيما يلي بعض أشكال البودكاست المختلفة مع دعم كل شكل بأمثلة حقيقية: الشكل الأول: بودكاست المقابلات لعل أكثر أساليب البودكاست شيوعًا هو أسلوب المقابلة، وعادةً ما يشتمل هذا الأسلوب على مضيف واحد أو اثنين ومتحدث ضيف لكل حلقة، بحيث يكمن دور المحاور المضيف في طرح الأسئلة والأفكار، في حين يسترسل الضيف في الحديث عن تلك الأفكار، كما قد يشارك الجمهور بعض التجارب الواقعية التي مر بها. من الأمثلة الرائعة على بودكاست المقابلات: بودكاست بلا فشل Without Fail يستكشف برنامج بلا فشل الذي يقدمه أليكس بلومبرج Alex Blumberg فكرة الفشل، وضيوف هذا البرنامج ليسوا جميعًا مشهورين، لكن النقطة المشتركة فيما بينهم هي تجارب الفشل التي مروا بها. بودكاست كيف حققت هذا مع جاي راز Guy Raz هو عبارة عن بودكاست مقابلات مع رواد الأعمال وأصحاب المشاريع التجارية الذين يتحدثون عن قصص نجاحهم، ومن بين الأشخاص الذين استُضيفوا في هذا البرنامج جيمي ويلز Jimmy Wales مؤسس موقع ويكيبيديا، وكاترينا ليك Katrina Lake من شركة Stitch Fix. بودكاست نيرديت Nerdette بودكاست نيرديت Nerdette هو بودكاست تستضيفه غريتا جونسن Greta Johnsen وتناقش فيه مجموعة من المواضيع المتعلقة بالأفلام والكتب والموسيقى، وغير ذلك من أشكال الترفيه؛ كما تغطي أي شيء تجده مثيرًا للاهتمام، بما في ذلك الجواسيس في الحروب والبرمجة والنساء في رحلات الفضاء. استضافت غريتا جونسن العديد من المشاهير، مثل توم هانكس Tom Hanks وستيفن كينغ Stephen King ومارجريت أتوود Margaret Atwood وتيا تايلور Tia Taylor وجورج مارتن George Martin وغيرهم. بودكاست فنجان لعل أشهر برنامج بودكاست عربي هو بودكاست "فنجان"، الذي يستضيف فيه عبد الرحمن أبو مالح مجموعة من الضيوف الذين يتخصص كل منهم في مجال معين؛ ويصف عبد الرحمن أبو مالح برنامجه بجملة "لا معايير ولا مواضيع محددة، لكن الأكيد أن هناك متعة وفائدة". استضاف عبد الرحمن على مدار السنوات الطويلة مجموعةً كبيرةً من الخبراء العرب، من بينهم ياسر الحزيمي المتخصص في تطوير الذات وعلم النفس البشريّة، وقد وصلت حلقته التي حملت عنوان "كيف تنجح العلاقات مع ياسر الحزيمي" إلى أكثر من 100 مليون مشاهدة على يوتيوب، لتحظى بذلك على الرقم القياسي من غينيس كأكثر حلقة بودكاست استماعًا في العالم. الشكل الثاني: البودكاست الفردي شكل آخر شائع للبودكاست، وهو البودكاست الفردي الذي يتحدث فيه شخص واحد طوال الوقت؛ وقد يكون هذا الشكل الأسهل من ناحية التحرير والمونتاج، لكن تقديم محتوى مقنع وذي قيمة للمستمع قد يكون أمرًا صعبًا في البودكاست الفردي. ومن أمثلة قنوات البودكاستات الفردية الناجحة، نذكر: قرية العجائب من الأمثلة العربية التي يمكننا طرحها بهذا الخصوص، قناة قرية العجائب على اليوتيوب، والتي يقدم حلقاتها بدر العلوي؛ إذ تُعَد قناته من أنجح القنوات التي تتحدث عن قصص الغموض والجرائم، فما من حلقة تقرييًا إلا وتجاوزت المليوني مستمع. يتبع بدر العلوي طريقة السرد الهادئ للقصص، مع التلاعب بنبرات صوته التي تضيف الحماسة إلى المستمع؛ فيسرد قصص الهروب من السجون، أو قصص سرقات البنوك، وكذلك قصص النجاة من الحوادث الصعبة ونحو ذلك من القصص التي تشد انتباه الكثير من المستمعين من كل الفئات العمرية. الشكل الثالث: مضيف أو عدة مضيفون ومجموعة من الضيوف إذا كنت تبحث عن نوع مختلف من البودكاست بأسلوب المقابلة، فيمكنك أيضًا تجربة وجود مضيف مع مجموعة من الأشخاص الضيوف، وعادةً ما يبدو هذا النوع من برامج البودكاست وكأنك تستمع إلى محادثة مشوقة. من عيوب هذا الأسلوب أنه قد يكون من الصعب العثور على عدة ضيوف لكل حلقة، لكن قد يكون المردود العالي دافعًا لتحمل هذا العناء؛ لذا خذ في الحسبان أنه يمكن أن يكون تنظيمًا صعبًا، لا سيّما إذا كنت من مقدمي البودكاست الجدد. ومن الأمثلة على برامج البودكاست من هذا النوع: بودكاست Go Time بودكاست Go Time هو بودكاست تقني يجمع لجنة من الخبراء الذين يناقشون الأخبار والمعلومات التقنية المستقبلية. يضم هذا البودكاست نفس مجموعة الأشخاص كل أسبوع، لكن في بعض الأحيان يستضيفون أشخاصًا مميزين آخرين، وعادةً ما يغطون موضوعات تخص المبرمجين وتصميم التطبيقات وغير ذلك. الشكل الرابع: البودكاست الثنائي قد يكون البودكاست الثنائي أحد أسهل أشكال البودكاست التي يمكن تقديمها، فهو لا يحتاج سوى شخصين يتبادلون الحديث فيما بينهما، فليس هناك ضيف ومحاور، بل هم نفس الشخصين يتقاسمون الوقت للحديث عن موضوعات مختلفة. من مزايا هذا الشكل هو أنه لا يوجد شخص واحد سيتحدث طوال الوقت، كما أنك لن تحتاج إلى البحث عن الضيوف واستدعائهم إلى برنامجك في كل مرة؛ لكن الجانب السلبي هو أنه يتعين على هذين الشخصين تقديم كل المحتوى، ولا يمكنهما استخلاص أي محتوى إبداعي من الضيوف. ومن الأمثلة على برامج البودكاست الثنائي: بودكاست That’s Weird بثت قناة That's Weird آخر حلقة لها في يناير 2020، وقد كان برنامج بودكاست ثنائي يتناول الكثير من الموضوعات المتنوعة، فقد تحدث مقدما البرنامج آشلي وكريستي عن نظريات المؤامرة والتاريخ والأحداث الغريبة التي حدثت حول العالم. ومن المواضيع التي تناولها البرنامج كانت وفاة جيفري ابشتاين Jeffrey Epstein، وكارثة تشيرنوبيل Chernobyl، وقضية القاتل المتسلسل تيد بندي Ted Bundy. الشكل الخامس: بودكاست لقصص حقيقية بمحتوى مكتوب Scripted تعتمد الكثير من برامج البودكاست على إبداع الضيوف والمحاورين، دون أن يكون هناك أي تحضير مسبق للنصوص التي ستُقدم في البرنامج، لكن هناك الشكل الآخر الذي يعتمد على سكريبت أو نصوص مكتوبة مسبقًا، وأول شكل من هذا النوع ستتحدث عنه هي القصص الحقيقية. في الواقع، يُعد برنامج Hardcore History الذي ذكرناه في الأعلى مثالًا على كل من البودكاست الفردي والبودكاست الذي يقدم قصصًا حقيقيةً بمحتوى تمت كتابته والبحث فيه مسبقًا. الشكل السادس: بودكاست لقصص خيالية بمحتوى مكتوب Scripted الشكل الآخر من برامج البودكاست ذات المحتوى المكتوب مسبقًا هي البرامج التي تقدم قصص خيالية، والتي تُسمى أيضًا برامج البودكاست الدرامية؛ وغالبًا ما تكون القصص التي تُقدم متسلسلة، بحيث تكون عبارة عن حلقات مترابطة يمكن للجمهور الاستماع إليها أسبوعيًا أو كل أسبوعين لمعرفة الأحداث الجديدة من القصة. يمكن أن تكون هذه النوعية من القصص فعالةً جدًا في كسب شغف الجمهور والحفاظ على اهتمامهم، لكن هذا النوع من المحتوى يتطلب قدرًا كبيرًا من العمل في كتابة وتسجيل الحلقات، خاصةً إذا كان يتضمن ممثلين صوتيين متنوعين. ومن الأمثلة على هذا الشكل من برامج البودكاست: بودكاست مغامرات فين كاسبين Finn Caspian الغريبة مغامرات فين كاسبين الغريبة هي قصة خيالية للأطفال؛ إذ يروي جوناثان ميسينجر Jonathan Messinger القصة بأكملها، لذا لم يكن هناك حاجة إلى وجود الكثير من الممثلين الصوتيين الآخرين. يصف ميسينجر البودكاست بأنه عبارة عن قصة تضم مجموعة من الألغاز؛ إذ ينشر حلقةً جديدةً أسبوعيًا يروي فيها قصة صبي يبلغ من العمر 8 سنوات وأصدقاؤه يتنقلون في الفضاء ويحلون الألغاز. الشكل السابع: مزيج مما سبق إذا دمجنا كل الأنواع السابقة معًا، فسنحصل على شكل جديد من أشكال البودكاست، بحيث يمكن أن يضم هذا البودكاست مجموعةً من الضيوف في بعض الأحيان، كما يمكن أن يقتصر في أحيان أخرى على ضيف واحد. ويمكن أيضًا إعداد محتوى سابق لحلقات معينة، أو ترك الأمر لإبداع الضيوف في حلقات أخرى. علاوةً على ذلك، قد يحتوي البودكاست على عدة عناصر مختلفة في حلقة واحدة، فقد تبدأ الحلقة بمحاور منفرد يتحدث لفترة معينة، ثم يستقبل مجموعة من الضيوف الذين يكملون الحلقة. هذا النوع من البودكاست المختلط هو مزيج حر يمكن تشكيله على حسب احتياجات مقدم البودكاست. بمعنى آخر، يتيح لك هذا النوع اختيار ما تريد فعله بين أسبوع وآخر. فيما يلي مثال على البودكاست المختلط: بودكاست جوكو Jocko Podcast يعتمد بودكاست جوكو على تنسيق مميز، ففي بداية الحلقة، يقوم جندي البحرية السابق جوكو ويلينك Jocko Willink بمراجعة كتاب يتعلق بالجيش؛ إذ تتمحور الحلقة حول القيادة والجيش واللياقة البدنية والصحة العامة. في الجزء الأخير من الحلقة، يجيب جوكو ويلينك Jocko Willink والمحاور الآخر معه في الحلقة إيكو تشارلز Echo Charles على أسئلة المستمعين، كما قد يستقبل ويلينك ضيوفًا آخرين في بعض الحلقات. خاتمة بهذا نكون قد ذكرنا أنواع البودكاست المتاحة بعالم البودكاست، وسنتعابع في المقال التالي من هذا الدليل شرح كيفية اختيار الأدوات المناسبة لصناعة بودكاست. ترجمة -وبتصرّف- للمقال How to Start a Podcast and Make Money لصاحبه Ryan Robinson. اقرأ أيضًا المقال السابق: مدخل إلى عالم صناعة البودكاست إنشاء المحتوى وصناعة الآراء: التدوين والبودكاست الكلمات المفتاحية وأنواع مطابقتها دليل البحث عن الكلمات المفتاحية للمسوق بالمحتوى
  7. منذ صياغة مصطلح شبكة الويب العالمية World Wide Web عام 1990، تحولت مواقع الويب من مجرد صفحات HTML ثابتة إلى تطبيقات متقدمة تؤدي وظائف فعالة ومعقدة للغاية. يتوفر بين أيدينا اليوم آلاف الموارد الرقمية والمطبوعة التي تشرح لنا بالتفصيل كيفية تطوير أنواع مختلفة من تطبيقات الويب. كما أن بيئات التطوير ذكية إلى الحد الذي يمكّنها من اكتشاف وإصلاح العديد من الأخطاء التي عانى المطورون فيما مضى كثيرًا لإصلاحها. علاوةً على ذلك، هناك الكثير من منصات التطوير المختلفة التي تحوّل بسهولة صفحات الويب الثابتة البسيطة إلى تطبيقات تفاعلية. تشترك جميع أنماط وممارسات ومنصات التطوير هذه في عوامل مشتركة، وجميعها معرضة لأخطاء متشابهة ناجمة عن طبيعة تطبيقات الويب. الهدف من نصائح تطوير الويب التي نستعرضها في هذا المقال هو تسليط الضوء على أهم الأخطاء الشائعة التي يقع بها مطورو الويب في مراحل مختلفة من العمل، لذا فإن فهمك الجيد لهذه الأخطاء سيجنّبك الوقوع بها، ويساعدك لتصبح مطورًا أفضل. يتناول هذا المقال بعض المواضيع العامة المشتركة بين جميع مطوري الويب، مثل التحقق Validation والأمان Security وقابلية التوسع Scalability وتحسين محركات البحث SEO. وبالتأكيد فإنك لست مضطرًا إلى التقيد بالأمثلة الواردة في هذا المقال، فالهدف منها تقديم فكرة عن المشكلات المحتملة التي قد يواجهها مطورو الويب والانتباه لها عند تطوير موقعك. الخطأ الأول: عدم التحقق من صحة المدخلات Validation إن التحقق من صحة المدخلات من جانبي العميل والخادم أمر ضروري لا غنى عنه، وجميعنا سمع بالنصيحة الذهبية «لا تثق أبدًا في البيانات التي يدخلها المستخدم» ومع ذلك، فإن الأخطاء الناجمة عن التحقق من صحة المدخلات هي أخطاء متكررة الحدوث. من العواقب الشائعة لهذا الخطأ هو حقن إس كيو إل SQL Injection، إذ يتواجد هذا الخطأ سنويًا في قائمة أواسب OWASP التي تحتوي على أهم 10 مخاطر في أمن تطبيقات الويب. لذا توفر معظم أطر عمل تطوير الواجهات الأمامية قواعد تحقق مميزة وسهلة الاستخدام، كما تستخدم معظم أطر عمل تطوير الواجهات الخلفية تعليقات توضيحية بسيطة لضمان التزام البيانات المقدمة بالقواعد المتوقعة. قد تستغرق عملية التحقق وقتًا طويلًا، ولكن مع ذلك، يجب أن يأخذ التحقق من صحة الإدخال حقه من الشيفرات البرمجية لتطبيقك، ويحب ألا تتجاهل ذلك أبدًا لتحقيق أمان مواقع الويب. الخطأ الثاني: الاستيثاق Authentication دون الحصول على تصريح Authorization قبل أن نخوض عميقًا في شرح هذا الخطأ، لا بُدّ من شرح المصطلحين السابقين وتوضيح كل منهما: الاستيثاق Authentication: يُقصد به التحقق من أن الشخص الذي يدخل البيانات هو مستخدم محدد، من خلال تقديم بيانات الأمان الخاصة به على النحو الصحيح، مثل كلمة المرور، والإجابة على أسئلة الأمان، ومسح بصمات الأصابع، ونحو ذلك. التصريح Authorization: هو التأكد من أن مستخدمًا معينًا لديه حق الوصول إلى مورد محدد، أو أن لديه التصريح لتنفيذ إجراء ما. ويمكن اختصار الأمر بأن الاستيثاق هو التحقق من شخصية الكائن، بينما التصريح هو تحديد ما يمكن لهذا الكائن فعله. أما لتوضيح الخطأ الذي يحدث هنا، فدعونا نأخذ المثال التالي: ضع في الحسبان أن متصفحك يحتفظ بمعلومات المستخدم المسجلة حاليًا كما يلي: { username:'elvis', role:'singer', token:'123456789' } عند تغيير كلمة المرور، يجري تطبيقك طلب من النوع POST كما يلي: POST /changepassword/:username/:newpassword في التابع ‎/‎changepassword‎، يمكنك التحقق من تسجيل دخول المستخدم وعدم انتهاء صلاحية المفتاح token، ومن ثم يمكنك إيجاد ملف تعريف المستخدم بناءً على المعامل :‎‎‏‏‏‏‎username‎ ومن ثم تغير كلمة مرور المستخدم. لقد تحققت من أن المستخدم سجل دخوله بطريقة صحيحة، ومن ثم عملت على تنفيذ طلبه بتغيير كلمة المرور الخاصة به. إلى هنا تبدو الأمور وكأنها على ما يُرام، أليس كذلك؟ للأسف الجواب هو لا، وإليك التوضيح. في هذه المرحلة، من المهم التحقق من أن المستخدم الذي ينفذ الإجراء والمستخدم الذي تغيرت كلمة مرور حسابه هو الشخص نفسه، إذ يمكن التلاعب بالمعلومات الموجودة في المتصفح، ويمكن لأي مستخدم ذي خبرة تحديث اسم المستخدم username:'elvis'‎ بسهولة إلى اسم المستخدم username:'Administrator'‎ باستخدام أدوات المتصفح المضمّنة فيه. لذا فإننا في هذه الحالة ركزنا فقط على الاستيثاق Authentication معتمدين على أن المستخدم قد قدم اعتماديات الأمان. يمكننا أيضًا إضافة التحقق من أنه لا يمكن تنفيذ تابع ‎/‎‎‎‎‎‎changepassword إلا من قِبل المستخدمين الذين تجاوزوا عملية الاستيثاق Authentication. ومع ذلك، ما تزال الخطوات غير كافية لحماية المستخدمين من محاولات الاختراق الضارة. يجب أن تحرص على أن تتحقق من الهوية الفعلية للشخص الذي يقدم الطلب، وكذلك محتوى الطلب ضمن تابع ‎/changepassword‎‎ إضافةً إلى حصول المستخدم على التصريح Authorization المناسب للطلب، مع التأكد من أن المستخدم لا يمكنه تغيير سوى بياناته. الاستيثاق Authentication والتصريح Authorization هما وجهان لعملة واحدة، لذا لا تعاملهما على نحو منفصل أبدًا. الخطأ الثالث: عدم الجاهزية للتوسع في ظل عالمنا اليوم الذي يتسم بالتطور السريع، ومسرعات الأعمال startup accelerators والوصول العالمي السريع للأفكار المميزة، تسعى العديد من الشركات إلى طرح الحد الأدنى من منتجاتها MVP في السوق في أقرب وقت ممكن، لذا فإن ضغط الوقت المستمر هذا يدفع حتى فرق تطوير الويب الجيدة إلى تجاهل بعض المشكلات أحيانًا. يُعَد التوسع من الأهداف الأساسية للكثير من فرق العمل، وهنا تبرز فكرة مفهوم الحد الأدنى من المنتج MVP، لكن إذا بالغت في إطلاق أقل حد ممكن من منتجك، فإنك ستقع ضحيةً للعديد من المشكلات الخطيرة. لسوء الحظ، لا يكفي اختيار قاعدة بيانات وخادم ويب قابليْن للتطوير، أو فصل مكونات التطبيق على خوادم مستقلة، فهناك الكثير من التفاصيل الأخرى التي يجب أن تهتم بها لكي تتجنب إعادة بناء أجزاء مهمة من تطبيقك فيما بعد، وهو ما يصبح مشكلةً كبيرةً في تطوير الويب. لنفترض مثلًا أنك اخترت تخزين صور الملفات الشخصية لمستخدمي تطبيقك مباشرةً على خادم الويب، والذي يُعد حلًا جيدًا للغاية، إذ يمكن للتطبيق الوصول إلى الملفات بسرعة، مع توفر طرق لمعالجة الملفات في كل منصة تطوير، كما يمكنك تقديم هذه الصور كمحتوى ثابت، مما يؤدي إلى الحد الأدنى من التحميل على تطبيقك. ولكن ما الذي سيحدث عندما ينمو تطبيقك وتضطر حينها إلى استخدام عدد من خوادم الويب من خلال موزع الأحمال Load balancer، حينها ستفشل عملية التوسع لسبب بسيط مثل صور الملف الشخصي، على الرغم من التوسيع الجيد الذي أجريته على مساحة تخزين قاعدة البيانات وخوادم حالة الجلسة وخوادم الويب. ستضطر في الحالة السابقة إلى تنفيذ نوع ما من خدمة مزامنة الملفات، والتي ستؤدي إلى تأخير في التحميل، ناهيك عن أخطاء 404 التي ستتسبب بها، أو قد تجد حلًا آخر لتوزيع الملفات على خوادم الويب لديك. لقد كان بالإمكان تجاوز كل المشكلات السابقة من خلال استخدام موقع تخزين ملفات مشترك أو قاعدة بيانات أو أي حل آخر للتخزين السحابي. ربما كان بإمكانك تنفيذ كل ذلك خلال بضعة ساعات عمل إضافية، والأمر يستحق ذلك المجهود. الخطأ الرابع: عدم تحسين محركات البحث SEO بطريقة صحيحة أحد أهم الأسباب وراء فشل تحسين صفحات الويب وملاءمتها مع سياسات تحسين محركات البحث SEO هو التضليل الذي يمارسه بعض الأشخاص الذين ينتحلون صفة خبراء تحسين محركات البحث. يظن الكثير من مطوري الويب أن لديهم المعرفة الكافية عن مجال تحسين محركات البحث SEO، وأن الأمر ليس معقدًا ولا يحتاج إلى خبرات متخصصة، ولكن هذا ليس صحيحًا، إذ يتطلب إتقان تحسين محركات البحث قضاء وقت طويل في البحث عن أفضل الممارسات والقواعد المتغيرة باستمرار حول كيفية فهرسة صفحات الويب في محركات البحث جوجل Google وبينغ Bing وياهو Yahoo. إذا لم تجرب بنفسك باستمرار وتعمل على تتبع النتائج وتحليلها بدقة، فكن على يقين بأنك لست خبيرًا في تحسين محركات البحث SEO، ويجب ألا تدّعي أنك متخصص في هذا المجال. تحسين محركات البحث ليس مجرد إعداد محتوى جيد، وإضافة الوسوم tags والكلمات المفتاحية والبيانات الوصفية meta-data، ونصوص بديلة عن الصور، وإعداد خريطة الموقع ونحو ذلك. بل يشمل أيضًا التخلص من المحتوى المتكرر، والحصول على بنية موقع يمكن لمحركات البحث الزحف بداخلها لفهرستها، مع زيادة سرعة تحميل صفحات الموقع، وتربيط داخلي جيد. كما هو الحال مع قابلية التوسع، يجب أن تفكر في تحسين محركات البحث منذ اللحظة التي تبدأ فيها بإنشاء تطبيقك على الويب، لأنك إن أجلت الأمر إلى أوقات متأخرة، فقد تجد أن الأمر يتطلب إعادة برمجة تطبيقك بالكامل. الخطأ الخامس: التأخر في معالجة الطلبات أحد أفضل الأمثلة على هذا الخطأ هو إرسال بريد إلكتروني بناءً على إجراء يقوم به المستخدم، إذ يعتقد الكثير من المطورين أن الحل الأمثل هو الاتصال عبر بروتوكول SMTP. وبروتوكول SMTP هو اختصار لنقل البريد البسيط الآمن، وهو بروتوكول اتصال يُستخدم لإرسال رسائل بريد إلكتروني من الخوادم إلى العملاء مباشرةً، مع ضمان سلامة البيانات وسريتها. ومع ذلك، هناك بعض المشكلات التي ستواجهها مع هذه الطريقة، فعلى سبيل المثال، لنفترض أنك أنشأت متجرًا لبيع الكتب عبر الإنترنت، وتتوقع أن تبدأ مشروعك بتلقي بضعة مئات الطلبات يوميًا، لذا يمكنك إرسال رسائل تأكيد للمستخدمين عبر البريد الإلكتروني في كل مرة يقوم فيها المستخدم بإرسال طلب لشراء كتاب. قد تكون هذه الطريقة مجدية في البداية، لكن ما الذي سيحدث عندما يتسع نشاطك التجاري، وتتلقى فجأةً آلاف الطلبات التي سيؤدي كل منها إلى إرسال رسائل تأكيد عبر البريد الإلكتروني؟ سيؤدي حينها إلى تأخر عمليات تأكيد الطلبات، أو سيتراجع وقت استجابة تطبيقك إلى حد كبير، لأنه سيتعامل مع رسائل البريد الإلكتروني عوضًا عن المستخدمين. يجب التعامل مع أي إجراء يستهلك الوقت أو يضيف عبئًا على المعالج من خلال العمليات خارج تطبيقك، بينما يعمل تطبيقك على إصدار طلبات HTTP في أقرب وقت. في هذه الحالة، يجب أن يكون لديك خدمة بريد خارجية تستلم الطلبات وترسل الإشعارات إلى المستخدمين. الخطأ السادس: عدم تحسين استخدام حيز النطاق التراسلي Bandwidth تجري معظم عمليات التطوير والاختبار في بيئة تجريبية على شبكة محلية، لذلك عندما تعمل على تنزيل 5 صور خلفية يبلغ حجم كل منها 3 ميجابايت عبر شبكتك المحلية السريعة، فقد لا تكتشف أي مشكلة تتعلق بسرعة التحميل، ولكن عندما يبدأ المستخدمون بتحميل صفحة رئيسية بحجم 15 ميجابايت عبر شبكة 3G على هواتفهم الذكية، ستبدأ حينها بتلقي العديد من شكاوى العملاء. سيساعدك تحسين استخدام حيز النطاق التراسلي Bandwidth على تعزيز أداء تطبيقك بدرجة كبيرة، ولكي تتمكن من الحصول على هذا التعزيز، ستحتاج إلى إجراء بعض الحيل التي يستخدمها العديد من مطوري الويب الخبراء، ومن الأمثلة على هذه الحيل: تصغير minification كامل نصوص جافا سكريبت. تصغير كامل نصوص CSS. ضغط compression نصوص HTTP من الخادم. تحسين حجم الصور ودقتها. الخطأ السابع: عدم تهيئة التطبيق لأحجام شاشات مختلفة لقد كان التصميم المتجاوب Responsive design مع أحجام شاشات مختلفة موضوعًا مهمًا في السنوات الأخيرة، إذ أدى ازدياد استخدام الهواتف الذكية ذات الأحجام المختلفة إلى ظهور العديد من الطرق الجديدة للوصول إلى المحتوى عبر الإنترنت، وقد رافقت هذه الطرق الجديدة مجموعة من مشكلات تطوير الويب. يتزايد يوميًا عدد زيارات المواقع الإلكترونية التي تأتي من الهواتف الذكية والأجهزة اللوحية، لذا من أجل ضمان التنقل السلس في صفحات موقعك الإلكتروني، والوصول إلى كامل المحتوى، يجب أن تتيح للمستخدمين الوصول إلى موقعك من جميع أنواع الأجهزة. هناك العديد من الأنماط والممارسات التي يمكن اتباعها لبناء تطبيقات ويب متجاوبة مع مختلف أنواع الأجهزة. الأكثر شهرة بين أطر العمل هذه هو إطار العمل بوتستراب Bootstrap، وهو إطار عمل مجاني ومفتوح المصدر مُعتمَد من كل منصة تطوير رئيسية، لذا كل ما عليك فعله هو الالتزام بأنماط وممارسات Bootstrap عند إنشاء تطبيقك، وستحصل على تطبيق ويب متجاوب دون أي مشكلة. لاستخدام إطار العمل بوتستراب Bootstrap بكفاءة عالية، يُفضَّل أن يكون لديك خبرة جيدة في كيفية التعامل مع لغات تطوير الويب الأساسية، مثل HTML و CSS و JavaScript، إضافةً إلى إدراك جيد لمفهوم التصميم المتجاوب. إذا لم يكن لديك معرفة كافية بها، فيمكنك التعرف عليها في المسار الأول من دورة تطوير واجهات المستخدم التي تقدمها أكاديمية حسوب. دورة تطوير واجهات المستخدم ابدأ عملك الحر بتطوير واجهات المواقع والمتاجر الإلكترونية فور انتهائك من الدورة اشترك الآن الخطأ الثامن: عدم التوافق بين المتصفحات تخضع عملية التطوير في كثير من الحالات إلى جدول زمني ضيق، إذ يسعى المطورون إلى إصدار التطبيقات في أسرع وقت ممكن، وحتى مطورو الويب الجيدون غالبًا ما يركزون على تقديم الوظائف أكثر مما يركزون على التصميم، صحيح أن معظم المطورين لديهم عدد من المتصفحات المثبتة على أجهزتهم، مثل المتصفح كروم Chrome وفايرفوكس Firefox وغيرها.. لكنهم في معظم الحالات يستخدمون برنامجًا واحدًا فقط من هذه البرامج. من الممارسات الشائعة بين المطورين هي استخدام متصفح واحد أثناء التطوير، وعندما يقترب التطبيق من الاكتمال، يبدأ المطورون في اختباره على متصفحات أخرى، وهو أمر منطقي تمامًا، على افتراض أن لديك ما يكفي من الوقت لاختبار وإصلاح المشكلات التي تظهر في هذه المرحلة. ومع ذلك، هناك بعض النصائح التي يمكنك اتباعها في تطوير الويب، والتي يمكن أن توفر لك وقتًا كبيرًا عندما يصل تطبيقك إلى مرحلة الاختبار على المتصفحات، وهي: صحيح أنك لست بحاجة إلى اختبار التطبيق على جميع المتصفحات في أثناء عملية التطوير، إذ يستغرق الأمر وقتًا طويلاً ولن يكون فعالًا، لكن لا يعني ذلك أنه لا يمكن تبديل المتصفحات بين حين وآخر، إذ يمكنك استخدام متصفحًا مختلفًا كل يومين، وستتعرف على الأقل على المشكلات الرئيسية في وقت مبكر من مرحلة التطوير. كن حذرًا عند إلغاء دعم تشغيل تطبيقك على النسخ القديمة من المتصفحات، فهناك العديد من المنظمات التي قد تكون بطيئة في اعتماد البرامج الجديدة، إذ يمكن لهذه المنظمات أن تضم آلاف المستخدمين الذين يعملون هناك والذين يحتاجون إلى الوصول إلى تطبيقك، ولا يمكنهم تثبيت أحدث متصفح مجاني لأسباب الأمن الداخلي وسياسات العمل في المنظمة. تجنب التعليمات البرمجية التي تكون خاصة بمتصفح واحد، بل ابحث عن حلول متوافقة مع جميع المتصفحات. الخطأ التاسع: عدم التخطيط لقابلية النقل Portability الافتراضات العشوائية هي رأس كل المشكلات، وعند الحديث عن قابلية النقل Portability، فإن ذلك ينطبق عليها أكثر من أي شيء آخر. والمقصود بقابلية النقل هو القدرة على تشغيل التطبيق على أي بيئة أو عتاد أو نظام تشغيل. لعلك صادفت الكثير من المشكلات في تطوير الويب، مثل تحديد مسارات الملفات أو قيم أخرى مثل السلاسل النصية المخصصة للاتصال بقاعدة البيانات بشكل ثابت داخل الشيفرة البرمجية، أو افتراض أن مكتبة معينة ستكون متاحة على الخادم الذي سيتضيف التطبيق، وغير ذلك من المشكلات. من الخطأ افتراض أن بيئة تطوير التطبيق (خلال مرحلة برمجته) ستتوافق مع بيئة الإنتاج (بعد الانتهاء منه ونشره للمستخدمين)، والتطبيق المثالي هو التطبيق الذي يحتاج الحد الأدنى من الصيانة والإصلاح maintenance-free، لذلك: تأكد من إمكانية توسيع نطاق تطبيقك وتشغيله على بيئة خوادم متعددة عبر توزيع الأحمال. توفير ملفات إعداد configuration file بسيطة وواضحة، وربما في ملف إعداد واحد. تعامل مع الحالات الاستثنائية عندما لا تكون إعدادات خادم الويب كما يجب. الخطأ العاشر: استخدامات غير فعالة لواجهة RESTful API قد يستخدم المطورون حلولًا غير مجدية لا تهدف إلى تحقيق أي فائدة ويظنون أنها ستعمل بشكل جيد، لكنها تنتهي بوقوع مشكلات أكبر، على سبيل المثال احتلت واجهات برمجة التطبيقات المعتمدة على فلسفة RESTful APIs مكانة عالية في تطوير الويب، حتى أن كل تطبيق ويب تقريبًا يعتمد على إحدى أنواع خدمات REST، سواءً للاستخدام الداخلي أو بالتكامل مع النظام الخارجي، لكن ما يزال هناك الكثير من أنماط وخدمات RESTful معطلة ولا تلتزم بالممارسات المتوقعة. لكن ثمة خطآن شائعان عند كتابة RESTful API، هما: استخدام أفعال أو توابع HTTP Verbs خاطئة: كما هو الحال مثلًا عند استخدام طريقة الطلب GET لكتابة البيانات، إذ أن طريقة الطلب GET في بروتوكول HTTP تُستخدم فقط لجلب البيانات وليس للتعديل عليها، وهي مصممة لتكون ثابتة وآمنة، لذا فإنه بغض النظر عن عدد المرات التي تُستخدم فيها طريقة GET لاستدعاء البيانات من نفس المورد، فإن الاستجابة ستكون دائمًا هي نفسها، ويجب ألا يحدث أي تغيير في حالة التطبيق. عدم إرسال رموز حالة status codes صحيحة: ومن أفضل الأمثلة على هذا الخطأ الشائع هو إرسال رسائل خطأ مع رمز إجابة 200، إذ يشير هذا الرمز في الأساس إلى أن كل شيء على ما يُرام. HTTP 200 OK { message:'there was an error' } يجب إرسال الرمز HTTP 200 OK عندما لا ينتج عن الطلب أي خطأ، أما في حالة وجود خطأ ما، فيجب إرسال الرموز 400، 401، 500 أو أي رمز حالة آخر مناسب للخطأ الذي حدث. في الختام يُعد تطوير الويب مصطلحًا واسعًا يمكن أن يشمل الكثير من المجالات، مثل تطوير المواقع الإلكترونية، أو خدمات الويب، أو تطبيقات الويب المعقدة. الهدف الرئيسي من هذا المقال هو تذكيرك بأنه يجب دائمًا الانتباه إلى الاستيثاق Authentication والتصريح Authorization، والتخطيط لإمكانية التوسع، وعدم افتراض الأشياء بسرعة، إضافةً إلى تكون على استعداد دائم للتعامل مع قائمة طويلة من مشكلات تطوير الويب التي يمكن أن تواجهها. ترجمة -وبتصرّف- للمقال The 10 Most Common Mistakes Web Developers Make: A Tutorial for Developers لصاحبه Demir Selmanovic. اقرأ أيضًا مدخل إلى OAuth 2 ما أنواع الأخطاء التي تظهر على موقع إلكتروني، وكيف نتعامل معها؟ الأخطاء الشائعة في تصميم المواقع الإلكترونية والتي تضر بتحسين محركات البحث الأخطاء القاتلة الواجب على مصممي مواقع الإنترنت تجنبها الاستيثاق عبر token authentication في تطبيق Node.js و React
  8. والآن بعد أن تعرفنا على كيفية استرجاع البيانات باستخدام الاستعلامات queries وكيفية إرسال البيانات باستخدام الطفرات mutations، أصبح بإمكاننا تجربة شيء أكثر صعوبة. سنتعلم في هذا المقال كيفية إنشاء نظام لإضافة التعليقات comments والإعجابات likes. إنشاء تطبيق حديث باستخدام جانغو Django وفيو Vue - الجزء الأول إنشاء تطبيق حديث باستخدام جانغو Django وفيو Vue - الجزء الثاني إنشاء تطبيق حديث باستخدام جانغو Django وفيو Vue - الجزء الثالث إنشاء نظام التعليقات Comments لنبدأ بقسم التعليقات، لكن قبل الخوض عميقًا في الشيفرات البرمجية، هناك بعض الأشياء التي يجب تذكرها. أولًا، ولأسباب الحماية، يمكن فقط للمستخدمين الذين سجلوا دخولهم إضافة التعليقات. الأمر الثاني، يمكن لكل مستخدم ترك تعليقات متعددة، لكن كل تعليق لا يمكن أن يتبع إلا لمستخدم واحد، أي يمكن أن نجد تعليقات كثيرة لمستخدم واحد، لكن لا يمكن أن نجد تعليق يتبع لعدد من المستخدمين. أمر آخر يمكن تجدر الإشارة له وهي أن كل مقال يمكن أن يحتوي عدة تعليقات، لكن كل تعليق يتبع لمقال واحد فقط. وأخيرًا، يجب أن يوافق المشرف على التعليق قبل ظهوره على صفحة المقال. ما الذي يظهر للمستخدم في حال عدم تسجيل الدخول: والآن بعد تسجيل الدخول: إعداد الواجهة الخلفية مع أخذ الملاحظات السابقة في الحسبان، لنبدأ بإنشاء نموذج للتعليقات. يُفترض أن تكون الشيفرات البرمجية التالية واضحةً بالنسبة لك إذا كان لديك معرفة جيدة بكيفية العمل مع إطار العمل جانغو. # Comment model class Comment(models.Model): content = models.TextField(max_length=1000) created_at = models.DateField(auto_now_add=True) is_approved = models.BooleanField(default=False) # Each comment belongs to one user and one post user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True) post = models.ForeignKey(Post, on_delete=models.SET_NULL, null=True) والآن تابع وطبِّق التغييرات التي أجريتها على النماذج. انتقل إلى الطرفية terminal وفعِّل الأوامر التالية: python manage.py makemigrations python manage.py migrate ستحتاج أيضًا إلى إعداد GraphQL في الواجهة الخلفية. يمكنك إضافة نمط بيانات جديد يسمى CommentType لتمثيل التعليقات والتعامل معها ضمن واجهة GraphQL على النحو التالي: class CommentType(DjangoObjectType): class Meta: model = models.Comment الآن بالنسبة للطفرة mutation، لاحظ أن هناك ثلاثة أشياء يحتاج جانغو إلى معرفتها لإضافة تعليق، وهي محتوى التعليق، والمستخدم الذي يريد إضافة هذا التعليق، والمقال الذي يريد ترك التعليق عليه. سنكتب الكود التالي لإضافة تعليق جديد باستخدام GraphQL: class CreateComment(graphene.Mutation): comment = graphene.Field(types.CommentType) class Arguments: content = graphene.String(required=True) user_id = graphene.ID(required=True) post_id = graphene.ID(required=True) def mutate(self, info, content, user_id, post_id): comment = models.Comment( content=content, user_id=user_id, post_id=post_id, ) comment.save() return CreateComment(comment=comment) class Mutation(graphene.ObjectType): . . . create_comment = CreateComment.Field() تذكر إضافة صنف CreateComment داخل صنف Mutation. إعداد الواجهة الأمامية لإعداد الواجهة الأمامية، لننتقل إلى الملف Post.vue حيث المكان الذي تظهر فيه التعليقات. يُرجى ملاحظة أن هناك بعض التعليمات البرمجية محذوفة في الأمثلة التالية، بهدف ألا تكون الشيفرات طويلة جدًا، لكن إذا كنت تريد الحصول على التعليمات البرمجية الكاملة، فيمكنك تنزيل التعليمات المصدرية من هنا. <script> import { POST_BY_SLUG } from "@/queries"; import CommentSectionComponent from "@/components/CommentSection.vue"; export default { name: "PostView", components: { CommentSectionComponent }, data() { return { postBySlug: null, comments: null, userID: null, }; }, computed: { // Filters out the unapproved comments approvedComments() { return this.comments.filter((comment) => comment.isApproved); }, }, async created() { // Get the post before the instance is mounted const post = await this.$apollo.query({ query: POST_BY_SLUG, variables: { slug: this.$route.params.slug, }, }); this.postBySlug = post.data.postBySlug; this.comments = post.data.postBySlug.commentSet; }, }; </script> الملف query.js: export const POST_BY_SLUG = gql` query ($slug: String!) { postBySlug(slug: $slug) { . . . commentSet { id content createdAt isApproved user { username avatar } numberOfLikes likes { id } } } } `; بدايةً، يمكنك في الخطاف create()‎ استرجاع المقال المطلوب، إضافةً إلى التعليقات باستخدام الاستعلام POST_BY_SLUG الذي يظهر في الأعلى. ستحتاج بعد ذلك في خاصية computed إلى تصفية التعليقات التي لم يوافق عليها المشرف. وأخيرًا، ستعمل على تمرير التعليق ومعرف المنشور post ID ومعرف المستخدم user ID إلى CommentSectionComponent. الملف CommentSectionComponent.vue: <template> <div class="home"> . . . <!-- Comment Section --> <!-- Pass the approved comments, the user id and the post id to the comment section component --> <comment-section-component v-if="this.approvedComments" :comments="this.approvedComments" :postID="this.postBySlug.id" :userID="this.userID" ></comment-section-component> </div> </template> لنلقِ الآن نظرة عميقة على مكون قسم التعليقات. يحتوي هذا المكون على قسمين، القسم الأول هو نموذج يسمح للمستخدم بترك التعليقات، والذي يظهر فقط عندما يسجل المستخدم دخوله، والقسم الثاني هو قائمة بالتعليقات الموجودة. الملف CommentSection.vue <script> import { SUBMIT_COMMENT } from "@/mutations"; import CommentSingle from "@/components/CommentSingle.vue"; import { useUserStore } from "@/stores/user"; export default { components: { CommentSingle }, name: "CommentSectionComponent", setup() { const userStore = useUserStore(); return { userStore }; }, data() { return { commentContent: "", commentSubmitSuccess: false, user: { isAuthenticated: false, token: this.userStore.getToken || "", info: this.userStore.getUser || {}, }, }; }, props: { comments: { type: Array, required: true, }, postID: { type: String, required: true, }, userID: { type: String, required: true, }, }, async created() { if (this.user.token) { this.user.isAuthenticated = true; } }, methods: { submitComment() { if (this.commentContent !== "") { this.$apollo .mutate({ mutation: SUBMIT_COMMENT, variables: { content: this.commentContent, userID: this.userID, postID: this.postID, }, }) .then(() => (this.commentSubmitSuccess = true)); } }, }, }; </script> من المُفترض أنك على معرفة جيدة بكيفية استخدام الوحدة Pinia التي ثبتناها في المقال السابق للتحقق مما إذا كان المستخدم قد سجل دخوله، وكيفية استخدام props لتمرير المعلومات بين المكونات المختلفة، لذلك سنتخطى هذه الأمور وسنركز على تابع SubmitComment()‎. عند استدعاء هذا التابع، فإنها ستختبر ما إذا كان التعليق فارغًا، وإذا لم يكن كذلك، فسوف تستخدم طفرة SUBMIT_COMMENT لإنشاء تعليق جديد. تُعرّف طفرة SUBMIT_COMMENT كالتالي: الملف mutations.js: export const SUBMIT_COMMENT = gql` mutation ($content: String!, $userID: ID!, $postID: ID!) { createComment(content: $content, userId: $userID, postId: $postID) { comment { content } } } `; الشيفرة التالية هي كود HTML ضمن ملف CommentSection.vue وهي المسؤولة عن عرض قسم التعليقات في واجهة المستخدم. لاحظ أننا استخدمنا مكونًا آخر في نهاية الشيفرة وهو CommentSingle.vue وذلك لعرض تعليق واحد. قسم HTML من ملف CommentSection.vue <template> <div class=". . ."> <p class="font-bold text-2xl">Comments:</p> <!-- If the user is not authenticated --> <div v-if="!this.user.isAuthenticated"> You need to <router-link to="/account">sign in</router-link> before you can leave your comment. </div> <!-- If the user is authenticated --> <div v-else> <div v-if="this.commentSubmitSuccess" class=""> Your comment will show up here after is has been approved. </div> <form action="POST" @submit.prevent="submitComment"> <textarea type="text" class=". . ." rows="5" v-model="commentContent" /> <button class=". . .">Submit Comment</button> </form> </div> <!-- List all comments --> <comment-single v-for="comment in comments" :key="comment.id" :comment="comment" :userID="this.userID" > </comment-single> </div> </template> والآن دعونا نلقي نظرة عميقة على الملف CommentSingle.vue قسم HTML من ملف CommentSingle.vue: <template> <div class="border-2 p-4"> <div class="flex flex-row justify-start content-center items-center space-x-2 mb-2" > <img :src="`http://127.0.0.1:8000/media/${this.comment.user.avatar}`" alt="" class="w-10" /> <p class="text-lg font-sans font-bold"> {{ this.comment.user.username }} </p> </div> <p> {{ this.comment.content }} </p> </div> </template> قسم جافا سكريبت من ملف CommentSingle.vue: <script> export default { name: "CommentSingleComponent", data() { return { . . . }; }, props: { comment: { type: Object, required: true, }, userID: { type: String, required: true, }, }, }; </script> إنشاء نظام التفاعل بالإعجاب Like فيما يتعلق بنظام الإعجاب Like، فهناك أيضًا بعض الأمور التي يجب أخذها في الحسبان. بدايةً، يجب على المستخدم تسجيل الدخول للتفاعل والإعجاب بالتعليق، كما هو الحال مع كتابة التعليقات، لكن يمكن لأي مستخدم رؤية عدد الإعجابات حتى وإن لم يكن مسجلًا. الأمر الثاني هو أنه يمكن لكل مستخدم وضع إعجاب واحد فقط لكل مقال، وسيؤدي النقر فوق زر "أعجبني" مرةً أخرى إلى إزالة الإعجاب الأول. وأخيرًا، يمكن للمقال الواحد الحصول على إعجابات عديدة من مستخدمين مختلفين. إعداد الواجهة الخلفية لنبدأ مرة أخرى بالنماذج models. بما أنه يمكن لكل مقال الحصول على العديد من الإعجابات من عدة مستخدمين، ويمكن لكل مستخدم إضافة العديد من الإعجابات للعديد من المقالات، فإن هذه تُعَد علاقة متعدد إلى متعدد بين المنشور post والمستخدم user. لاحظ أيضًا أننا في هذه المرة أنشأنا دالة get_number_of_likes()‎‎ لتحصيل إجمالي عدد الإعجابات. تذكر تطبيق هذه التغييرات على قاعدة البيانات باستخدام الأوامر التي تحدثنا عنها سابقًا. # Post model class Post(models.Model): . . . # Each post can receive likes from multiple users, and each user can like multiple posts likes = models.ManyToManyField(User, related_name='post_like') . . . def get_number_of_likes(self): return self.likes.count() ومن ثم نضيف الأنواع types والطفرات mutations. class PostType(DjangoObjectType): class Meta: model = models.Post number_of_likes = graphene.String() def resolve_number_of_likes(self, info): return self.get_number_of_likes() لاحظ التعليمة self.get_number_of_likes()‎ في السطر 8 التي تستدعي الدالة get_number_of_likes()‎ التي عرّفتها في النموذج. ولإضافة إعجاب إلى منشور، يجب عليك معرفة كل من معرّف id المقال، ومعرّف id المستخدم الذي يريد التفاعل بإعجاب مع هذا المقال. لاحظ الكود المكتوب من السطر 11 إلى السطر 14، إذا كان المنشور يحتوي على إعجاب من المستخدم الحالي، فسيؤدي الضغط على زر الإعجاب إلى إزالة الإعجاب السابق، وإذا لم يكن كذلك، سيُضاف إعجاب إلى المقال. إعداد الواجهة الأمامية سنحتاج الآن إلى إضافة زر الإعجاب إلى صفحة النشر، لذا ارجع إلى Post.vue. قسم HTML من Post.vue. <template> <div class="home"> . . . <!-- Like, Comment and Share --> <div class=". . ."> <div v-if="this.liked === true" @click="this.updateLike()"> <i class="fa-solid fa-thumbs-up"> <span class="font-sans font-semibold ml-1">{{ this.numberOfLikes }}</span> </i> </div> <div v-else @click="this.updateLike()"> <i class="fa-regular fa-thumbs-up"> <span class="font-sans font-semibold ml-1">{{ this.numberOfLikes }}</span> </i> </div> . . . </div> . . . </div> </template> قسم جافا سكريبت من Post.vue <script> import { POST_BY_SLUG } from "@/queries"; import { UPDATE_POST_LIKE } from "@/mutations"; . . . export default { . . . async created() { . . . // Find if the current user has liked the post let likedUsers = this.postBySlug.likes; for (let likedUser in likedUsers) { if (likedUsers[likedUser].id === this.userID) { this.liked = true; } } // Get the number of likes this.numberOfLikes = parseInt(this.postBySlug.numberOfLikes); }, methods: { updateLike() { if (this.liked === true) { this.numberOfLikes = this.numberOfLikes - 1; } else { this.numberOfLikes = this.numberOfLikes + 1; } this.liked = !this.liked; this.$apollo.mutate({ mutation: UPDATE_POST_LIKE, variables: { postID: this.postBySlug.id, userID: this.userID, }, }); }, }, }; </script> لاحظ أننا حذفنا بعض التعليمات البرمجية في المثال السابق كي لا تكون طويلةً جدًا، ولكن ما تزال هناك أربعة أمور نحتاج إلى التحدث عنها في هذا المثال. أولاً، فيما يتعلق بالاستعلام POST_BY_SLUG الذي تستخدمه لاسترجاع المقال، يجب التأكد من أنه يجلب عدد الإعجابات والمستخدمين الذين تفاعلوا مع المقال. الملف query.js: export const POST_BY_SLUG = gql` query ($slug: String!) { postBySlug(slug: $slug) { . . . numberOfLikes likes { id } . . . } } `; الخطوة التالية، في الخطاف created()‎، وبعد أن تسترجع المنشور، يجب عليك تحديد ما إذا كان المستخدم الحالي موجودًا في قائمة المستخدمين الذين تفاعلوا مع المنشور. فيما بعد، عند استدعاء الدالة updateLike()‎، ستعمل هذه الدالة على تغيير عدد الإعجابات وذلك في حال تفاعل المستخدم مع بالمنشور أو لم يتفاعل. وأخيرًا، ستعمل الدالة updateLike()‎،على تحديث عدد إعجابات المنشور في الواجهة الخلفية باستخدام طفرة UPDATE_POST_LIKE. الملف mutations.js: export const UPDATE_POST_LIKE = gql` mutation ($postID: ID!, $userID: ID!) { updatePostLike(postId: $postID, userId: $userID) { post { id title likes { id } } } } `; تحدي برمجي والآن بعد أن تعلمنا كيفية إنشاء نظام التعليقات ونظام التفاعل بالإعجاب، دعنا نفكر في تحدٍّ أكبر، فماذا لو أردنا إنشاء نظام تعليق متداخل، بحيث نتيح للمستخدمين إمكانية التعليق على تعليق آخر؟ إذًا كيف يمكننا تغيير الشيفرات البرمجية السابقة لجعل ذلك ممكنًا؟ جرب العمل على ذلك وفكر وكيف يمكننا إنشاء نظام للتفاعل بإعجاب على التعليقات. يمكنك الاطلاع على كامل الكود المصدري الذي يحتوي على التطبيق العملي للوظائف التي مرت معنا في سلسلة المقالات هذه. الخلاصة بهذا نكون قد تعرفنا على طريقة إضافة التعليقات والإعجابات على المقالات ووصلنا لنهاية هذه السلسلة من المقالات التي شرحنا من خلالها كيفية إنشاء تطبيق ويب حديث من صفحة واحدة باستخدام إطارالعمل جانغو Django كواجهة خلفية، وإطار العمل فيو Vue كواجهة أمامية، مع استخدام GraphQL كلغة للتفاعل مع واجهة برمجة التطبيقات API التي تربط بينهما. ترجمة -وبتصرّف- للمقال Create a Modern Application with Django and Vue #3. اقرأ أيضًا المقال السابق: إنشاء تطبيق حديث باستخدام Django و Vue | الجزء الثاني: ربط الواجهة الخلفية والأمامية مدخل إلى المكتبة GraphQL واستعمالاتها في بناء تطبيقات الويب الحديثة بناء تطبيق ويب لإدارة معلومات العملاء باستخدام جانغو Django وريآكت React إنشاء نماذج جانغو Django Models وربطها بقاعدة البيانات تعرف على أمان تطبيقات جانغو
  9. لا يمكن أن تخفى على أحد الشعبية الكبيرة التي تحظى بها المدونات الصوتية، أو ما تُعرف بمصطلح البودكاست Podcast في يومنا هذا، فهي وسيلة رائعة لجذب الجمهور والتفاعل معهم بطرق لا يمكن للمحتوى المكتوب تحقيقها. ونتيجةً لهذه الشعبية المتزايدة للبودكاست، يتطلع الكثير من الأشخاص إلى إطلاق بودكاست جديد خاص بهم، ويتساءلون عن الطريقة الأفضل لبدء هذا العمل، لذلك ترجمنا هذا الدليل الشامل الذي نضع فيه خبرات متراكمة في صناعة البودكاست وجني الأرباح منه؛ فسواءً كنت ترغب في إطلاق بودكاست مستقل، أو دمجه مع مدونتك العادية، فإن الدخول إلى عالم البودكاست خطوة صائبة ومهمة في هذا الوقت. هذا المقال هو المقال الأول من سلسلة صناعة البودكاست، التي سنتناول فيها تاريخ البودكاست وأنواعه، والمعدات التي يمكن العمل بها؛ إلى جانب تقديم نصائح حول كيفية إنجاح هذا المجال. تاريخ البودكاست Podcast قبل أن نتطرق إلى كيفية إطلاق البودكاست، دعونا نرجع خطوةً إلى الوراء ونتحدث عن بدايات البودكاست تاريخيًا. في الواقع، بدأ البودكاست لأول مرة عام 2004 عندما تعاون أحد منتجي فيديو MTV مع مطور البرامج ديف وينر Dave Winer لإنشاء شيء جديد أطلقوا عليه اسم iPodder. أتاح هذا البرنامج الجديد إمكانية تنزيل بث الراديو عبر الإنترنت على جهاز iPod، كما أنشأ مطور البرامج وينر خدمة Real Simple Syndication Feed والتي تُعرف اختصارًا بـ RSS، وهي مكون رئيسي في البث الصوتي. بعد إنشاء جهاز iPodder، عمل المطورون الآخرون على تطوير وتحسين الفكرة الأصلية، وفي ذاك الوقت، لم يكن للبودكاست أو البث الصوتي أي اسم خاص به، وبقي على هذا الحال حتى أواخر عام 2004، حين صيغت كلمة Podcasting لأول مرة من قِبل الكاتب بن هامرسلي Ben Hammersley في مقال له نُشر في صحيفة الغارديان؛ فقد كتب هامرسلي حينها: كان كريستوفر ليندون Christopher Lyndon الصحفي السابق في مجلة نيويورك تايمز والإذاعة الوطنية العامة من أوائل رواد التدوين الصوتي Podcasting؛ فقد كان أول من سجل صوته على على ملف MP3 ونُشر عبر خدمة RSS. وفي ذات المقال السابق الذي نُشر على صحيفة الجارديان، نُقل عن ليندون قوله: كما هو الحال مع التدوين الكتابي، قدم البودكاست فرصةً للشخص العادي ليوصل صوته إلى الناس، فأنت لا تحتاج إلى الاستثمار في معدات باهظة الثمن أو التسجيل في إستوديو احترافي لإصدار التسجيلات الصوتية للمستمعين. ومع مرور الوقت، ازدادت شعبية البودكاست وأضحى مجالًا متناميًا؛ إذ يستمع المزيد من الأشخاص إلى برامج البودكاست ويسجل آخرون لجماهيرهم. وإن كنت تسأل عن سبب قبول الناس لهذا المحتوى وتعلقهم به، فإليك السبب. ما الأمر الجذاب في البودكاست؟ إذا كنت ما تزال متشككًا حول مدى نجاح البودكاست، فإليك بعض الأسباب المشجعة على دخول عالم البودكاست. المحتوى الصوتي مناسب للكثيرين فكر في الأمر على هذا النحو: يقضي الكثير من الأشخاص وقتًا لا بأس فيه في التنقل بين المنزل ومكان العمل، لذا يمكنهم الاستماع إلى الراديو أو الموسيقى أو البودكاست خلال ذلك؛ فوفقا لصحيفة نيويورك بوست، يقضي الأمريكيون ما معدله 35 دقيقة يوميًا في التنقل، أو بعبارة أخرى، 19 يوم عمل كامل في كل عام، وبالنسبة لبعض الأشخاص الآخرين، فإن المدة قد تكون أطول من ذلك؛ وبما أنهم لا يستطيعون القراءة بأمان خلال القيادة، فإن خيار الاستماع مناسب جدًا لهم. علاوةً على ذلك، لا ينحصر الأمر على استماع الأشخاص للملفات الصوتية أثناء تنقلاتهم اليومية، بل قد يشمل أوقات إعداد وجبة الإفطار في الصباح، أو خلال تنظيف المنزل وطي الغسيل والاعتناء بحديقة المنزل، أو خلال الاعتناء بالأطفال ونحو ذلك. الشعبية المتزايدة للبودكاست من الأسباب المهمة أيضًا للانضمام إلى مجتمع البودكاست، هي الشعبية الهائلة للبودكاست؛ فعلى الرغم من أنك قد اعتقدت ذات مرة أن شعبية البودكاست مجرد موضة مؤقتة وستنتهي، إلا أن الإحصائيات تثبت عكس ذلك؛ فوفقًا لتقارير أبحاث أجرتها شركة Statista، كان 22% فقط من السكان البالغين في الولايات المتحدة يعرفون معنى كلمة البودكاست عام 2006؛ بينما في عام 2022 ارتفع هذا الرقم ليصل إلى 79%، ومن المتوقع أن يصل عدد المستمعين إلى البودكاست إلى أكثر من 100 مليون مستمع بحلول نهاية عام 2024 في الولايات المتحدة الأمريكية. تحسن إمكانية البحث لعل أحد العيوب الرئيسية للبودكاست في بداياته هو ضعف إمكانية البحث والاستكشاف، فقد كان من الصعب البحث عن ملفات البودكاست والوصول إليها، مما اضطر عدد كبير من صناع محتوى البودكاست إلى تسجيل محتوى مع عدم القدرة إلى إيصاله إلى عدد كبير من المستمعين. لكن مع تزايد شعبية البودكاست، تكافح الكثير من الشركات ذات الأسماء الكبيرة، مثل سبوتيفاي Spotify، وجوجل Google، لحل هذه المشكلة. وبدءًا من عام 2021، عملت جوجل على فهرسة ملفات البودكاست، بحيث يمكن البحث عنها عبر محرك البحث الخاص بها، والاستماع إليها مباشرةً على صفحة البحث. نشرت مجلة فوربس مؤخرًا مقالًا تناولت فيه هذه المشكلة، وقد أوضح رواد الأعمال سيرجي ريفزين Sergei Revzin وفاديم ريفزين Vadim Revzin المشكلة بقولهم: وأضاف سيرجي ريفزين Sergei Revzin وفاديم ريفزين Vadim Revzin: عملت سبوتيفاي أيضًا مع صناع البودكاست لتعزيز وصول محتواهم إلى المهتمين به؛ ففي فبراير من عام 2020، قال المؤسس والرئيس التنفيذي لشركة سبوتيفاي في بيان صحفي: كانت الأخبار السابقة نبأً رائعًا لصناع محتوى البودكاست، وواعدةً للأشخاص الذين يحاولون تنمية جمهورهم. البودكاست وسيلة رائعة لتقديم محتوى ممتع لقد تحدثنا عن الكثير من الأسباب المشجعة على الدخول إلى عالم صناعة محتوى البودكاست، لكن لا يمكن لهذه الفقرة أن تنتهي دون أن نتطرق إلى سبب مهم للغاية، وهو أنه يمكنك إنشاء محتوى بودكاست ترفيهي أو مسلٍ للمستمعين. على الرغم من أن صناعة البودكاست موجودة منذ عام 2004، لكن ما تزال الفرص متاحةً أمامك للإبداع؛ إذ يمكنك تقديم بودكاست حول أي شيء يهمك. يمكن أن يكون مجال تخصصك ضيقًا، مثل الحديث عن لعبة معينة، كما يمكن أن يكون واسعًا وتتحدث فيه عن مجال عام، مثل الحديث عن الرياضة عمومًا، أو الحديث عن تطوير الذات، وسنناقش هذه الجزئية بتوسع في الأجزاء القادمة من المقال، لكن ما يجب أن تعرفه الآن هو أن لديك خيارات عديدة لمحتوى البودكاست. يمكنك إجراء مقابلات مع الضيوف، بحيث يتحدث كل ضيف في المجال الذي يتقنه، أو يمكنك تقديم محتوى قصص خيالية كانت أو واقعية؛ وفي كلتا الحالتين، يجب أن تتقن عناصر سرد القصص؛ إذ يبدو الأمر كما لو أننا عدنا بالزمن إلى منتصف القرن الماضي، حين كانت تجتمع العائلة حول الراديو لسماع الأخبار، أين كان الأمر ممتعًا جدًا آنذاك. خاتمة بهذا نكون قد وصلنا إلى نهاية هذا المقال، وسنتحدث في المقال القادم حول أنواع البودكاست. ترجمة -وبتصرّف- للمقال How to Start a Podcast and Make Money لصاحبه Ryan Robinson. اقرأ أيضًا إنشاء المحتوى وصناعة الآراء: التدوين والبودكاست الكلمات المفتاحية وأنواع مطابقتها دليل البحث عن الكلمات المفتاحية للمسوق بالمحتوى
  10. سنوضح في مقال اليوم الخطوات اللازمة لربط الواجهة الخلفية backend مع الواجهة الأمامية frontend من سلسلة مقالات تطوير تطبيق مدونة حديث باستخدام جانغو وفيو. هذا المقال هو جزء من سلسلة مقالات تتحدث حول كيفية إنشاء تطبيق حديث باستخدام جانغو Django وفيو Vue: إنشاء تطبيق حديث باستخدام جانغو Django وفيو Vue - الجزء الأول. إنشاء تطبيق حديث باستخدام جانغو Django وفيو Vue - الجزء الثاني. إنشاء تطبيق حديث باستخدام جانغو Django وفيو Vue - الجزء الثالث. إن الشائع حاليًا في ربط الواجهتين الأمامية والخلفية لتطبيق ما هو استخدام تقنية تسمى REST API. ومصطلح API هو اختصار للواجهة البرمجية للتطبيقات Application Programming Interface، وهي تشير إلى الاتصال بين تطبيقين برمجيين، أما REST فهو اختصار لنقل الحالة التمثيلية Representational State Transfer، وهو يشير إلى بنية محددة يتبعها هذا النوع من الاتصال. يتكون طلب REST API عادةً من نقطة وصول endpoint تتصل مع الخادم، إضافةً إلى طريقة HTTP وترويسة Head وجسم Body. تحتوي الترويسة على عناصر التعريف meta، مثل التخبئة caching واستيثاق المستخدم user authentication واختبار AB، بينما يحتوي الجسم على البيانات التي يريد العميل إرسالها إلى الخادم. ومع ذلك، فإنه ثمة خلل بسيط في REST API، وهو أنه من المستحيل تصميم واجهات برمجية تجلب البيانات التي يحتاجها العميل بالضبط، إذ من الشائع أن تجلب REST API بيانات زائدة أو ناقصة. ولذلك، طُوّرت لغة الاستعلام غراف كيو إل GraphQL بهدف حل هذه المشكلة، إذ تستخدم المخططات schemas للتأكد من جلب البيانات المحددة فقط لكل طلب، وسنرى كيف يحدث ذلك لاحقًا. إعداد غراف كيو إل GraphQL باستخدام جانغو Django لنبدأ بإعداد غراف كيو إل GraphQL في الواجهة الخلفية، ستحتاج إلى تثبيت حزمة جديدة تسمى graphene-django وهي حزمة توفر مجموعة من الأدوات والميزات التي تسهل عملية تطوير واجهات GraphQL داخل تطبيقات Django عبر تفعيل الأمر التالي: pip install graphene-django انتقل بعد ذلك إلى مجلد settings.py وابحث عن المتغير INSTALLED_APPS. يجب عليك إضافة graphene-django داخل المجلد لكي يتمكن جانغو من العثور على هذه الحزمة. INSTALLED_APPS = [ . . . "blog", "graphene_django", ] إعداد graphene-django ما زال هناك بعض المهام التي يجب عليك إنجازها قبل أن تتمكن من استخدام GraphQL. أولاً، ستحتاج إلى إعداد نمط الرابط URL pattern لخدمة الواجهات البرمجية للتطبيقات APIs في GraphQL، والذي يحدد كيفية تطابق عناوين URL مع عرض معين في تطبيق Django ويستخدم لتحويل طلبات المستخدم إلى العرض المناسب لمعالجتها. للقيام بذلك انتقل إلى الملف urls.py وأضف الشيفرة التالية: from django.views.decorators.csrf import csrf_exempt from graphene_django.views import GraphQLView urlpatterns = [ . . . path("graphql", csrf_exempt(GraphQLView.as_view(graphiql=True))), ] وبعد ذلك، أنشئ المخططات schemas وحدد لجانغو مكان العثور عليها في مجلد settings.py. تتبع مخططات GraphQL نمطًا يسمح لجانغو بترجمة نماذج قاعدة البيانات database إلى GraphQL وبالعكس، ولنأخذ فيما يلي نموذج الموقع Site model كمثال: class Site(models.Model): name = models.CharField(max_length=200) description = models.TextField() logo = models.ImageField(upload_to='site/logo/') class Meta: verbose_name = 'site' verbose_name_plural = '1. Site' def __str__(self): return self.name أنشئ ملف schema.py داخل مجلد المدونة blog. import graphene from graphene_django import DjangoObjectType from blog import models # Define type class SiteType(DjangoObjectType): class Meta: model = models.Site # The Query class class Query(graphene.ObjectType): site = graphene.Field(types.SiteType) def resolve_site(root, info): return ( models.Site.objects.first() ) كما هو واضح، يُقسم هذا الملف إلى ثلاثة أجزاء. أولًا، يجب عليك استيراد الحزم والنماذج اللازمة. ثم يُصرّح عن صنف SiteType ويُربط مع نموذج الموقع. وأخيرًا، يستخدم الصنف Query الذي يسمح لك باسترداد المعلومات عبر GraphQL API. أما لإنشاء معلومات أو تحديثها، فستحتاج إلى استخدام صنف آخر يُدعى Mutation والذي سنتحدث عنه بالتفصيل في المقال الثالث من السلسلة. توجد الدالة Resolve_site داخل الصنف Query وهي تعمل على استرجاع السجل الأول من النموذج Site model (أي تعيد الكائن الأول الموجود في قاعدة البيانات المرتبطة بهذا النموذج). ترتبط هذه الدالة تلقائيًا مع متغير يحمل نفس الاسم site، هذا يعني أنه عند استدعاء الدالة، ستكون النتيجة متاحة مباشرةً من خلال المتغير site دون الحاجة إلى تحديد اسم جديد له، إذ يعمل هذا الجزء تمامًا مثل Django QuerySet لاسترجاع البيانات من قاعدة البيانات. إذَا عندما تستدعي الدالة Resolve_site فإنها سترجع لك السجل الأول من نموذج Site ووتخزنها في المتغير site تلقائيًا، مما يسهل الوصول إلى هذه البيانات لاحقًا. إنشاء المخططات Schemas يمكنك الآن تكرار نفس الطريقة لجميع النماذج، ولكي تتجنب الحجم الكبير لملف المخطط، يمكنك فصله إلى ثلاثة ملفات، وهي: schema.py types.py queries.py ملف schema.py import graphene from blog import queries schema = graphene.Schema(query=queries.Query) ملف types.py import graphene from graphene_django import DjangoObjectType from blog import models class SiteType(DjangoObjectType): class Meta: model = models.Site class UserType(DjangoObjectType): class Meta: model = models.User class CategoryType(DjangoObjectType): class Meta: model = models.Category class TagType(DjangoObjectType): class Meta: model = models.Tag class PostType(DjangoObjectType): class Meta: model = models.Post queries.py import graphene from blog import models from blog import types # The Query class class Query(graphene.ObjectType): site = graphene.Field(types.SiteType) all_posts = graphene.List(types.PostType) all_categories = graphene.List(types.CategoryType) all_tags = graphene.List(types.TagType) posts_by_category = graphene.List(types.PostType, category=graphene.String()) posts_by_tag = graphene.List(types.PostType, tag=graphene.String()) post_by_slug = graphene.Field(types.PostType, slug=graphene.String()) def resolve_site(root, info): return ( models.Site.objects.first() ) def resolve_all_posts(root, info): return ( models.Post.objects.all() ) def resolve_all_categories(root, info): return ( models.Category.objects.all() ) def resolve_all_tags(root, info): return ( models.Tag.objects.all() ) def resolve_posts_by_category(root, info, category): return ( models.Post.objects.filter(category__slug__iexact=category) ) def resolve_posts_by_tag(root, info, tag): return ( models.Post.objects.filter(tag__slug__iexact=tag) ) def resolve_post_by_slug(root, info, slug): return ( models.Post.objects.get(slug__iexact=slug) ) والآن، يجب عليك إخبار جانغو بمكان العثور على ملف المخطط، لذا انتقل إلى settings.py وأضف الشيفرة التالية: # Configure GraphQL GRAPHENE = { "SCHEMA": "blog.schema.schema", } ولكي تتأكد من عمل المخططات على النحو الصحيح، افتح المتصفح وانتقل إلى http://127.0.0.1:8000/graphql، يجب أن تشاهد واجهة GraphiQL على النحو التالي: لاحظ كيف نسترجع المعلومات في هذا المثال، هذه لغة GraphQL، وهذه هي الطريقة التي سنسترجع بها البيانات في الواجهة الأمامية، والتي سنشرحها لاحقًا. إعداد CORS قبل أن ننتقل إلى الواجهة الأمامية، ثمة شيء يجب الاهتمام به. افتراضيًا، لا يمكن نقل البيانات إلا داخل التطبيق نفسه لأسباب الحماية، ولكننا نحتاج إلى تدفق البيانات بين تطبيقين مختلفين، ولمعالجة هذه المشكلة، يجب تمكين وظيفة CORS، وهي اختصار لـ Cross Origin Resource Sharing والتي تعني مشاركة الموارد ذات الأصول المختلفة. أولاً، ثبِّت حزمة Django-cors-headers. ومن داخل تطبيق الواجهة الخلفية، فعِّل الأمر التالي: pip install django-cors-headers أضف "corsheaders" إلى المتغير INSTALLED_APPS: INSTALLED_APPS = [ . . . "corsheaders", ] ثم أضف "corsheaders.middleware.CorsMiddleware" إلى المتغير MIDDLEWARE لتمكين دعم CORS في تطبيق جانغو: MIDDLEWARE = [ "corsheaders.middleware.CorsMiddleware", . . . ] وأخيرًا، أضف الشيفرة التالية إلى settings.py: CORS_ORIGIN_ALLOW_ALL = False CORS_ORIGIN_WHITELIST = ("http://localhost:8080",) # Matches the port that Vue.js is using إعداد Apollo باستخدام Vue.js والآن، حان الوقت للانتقال إلى الواجهة الأمامية. أولًا، يجب تثبيت مكتبة Apollo، إذ تتيح لك استخدام GraphQL في تطبيق Vue. ويمكنك تثبيتها من خلال تفعيل الأمر التالي: npm install --save graphql graphql-tag @apollo/client ضمن مجلد src، أنشئ ملف جديد باسم apollo-config.js وأضف له الشيفرة التالية: import { ApolloClient, createHttpLink, InMemoryCache, } from "@apollo/client/core"; // HTTP connection to the API const httpLink = createHttpLink({ uri: "http://127.0.0.1:8000/graphql", // Matches the url and port that Django is using }); // Cache implementation const cache = new InMemoryCache(); // Create the apollo client const apolloClient = new ApolloClient({ link: httpLink, cache, }); ثم انتقل إلى main.js واستورد apolloClient كي تتيح لتطبيقك القدرة على التفاعل مع واجهات GraphQL واسترجاع البيانات بشكل ديناميكي: import { apolloClient } from "@/apollo-config"; createApp(App).use(router).use(apolloClient).mount("#app"); أصبح بإمكانك الآن استخدام لغة GraphQL لاسترجاع البيانات من الواجهة الخلفية، ولتطبيق مثال عملي على ذلك، سننتقل إلى App.vue وهناك سنستعيد اسم موقعنا بكتابة الكود التالي: <template> <div class="container mx-auto max-w-3xl px-4 sm:px-6 xl:max-w-5xl xl:px-0"> <div class="flex flex-col justify-between h-screen"> <header class="flex flex-row items-center justify-between py-10"> <div class="nav-logo text-2xl font-bold"> <router-link to="/" v-if="mySite">{{ mySite.name }}</router-link> </div> . . . </header> . . . </div> </div> </template> <script> import gql from "graphql-tag"; export default { data() { return { mySite: null, }; }, async created() { const siteInfo = await this.$apollo.query({ query: gql` query { site { name } } `, }); this.mySite = siteInfo.data.site; }, }; </script> يُفضِّل البعض إنشاء ملف منفصل لجميع الاستعلامات queries، ومن ثم استيراده إلى ملف فيو كما في الكود التالي: ملف src/queries.js import gql from "graphql-tag"; export const SITE_INFO = gql` query { site { name } } `; ملف App.vue . . . <script> import { SITE_INFO } from "@/queries"; export default { data() { return { mySite: null, }; }, async created() { const siteInfo = await this.$apollo.query({ query: SITE_INFO, }); this.mySite = siteInfo.data.site; }, }; </script> صفحة الصنف Category تبقى لدينا الآن مشكلة من المقال السابق، عندما نستدعي موجه router، فكيف لهذا الموجه أن يعرف الصفحة التي يجب إعادتها؟ فعلى سبيل المثال، عندما نضغط على رابط Category One يجب إرجاع قائمة المنشورات التي تنتمي إلى الصنف الأول Category One، ولكن كيف يمكن للموجه القيام بذلك؟ دعونا نرى مثالًا. أولًا، في ملف router/index.js الذي عرفنا فيه جميع الوجهات لدينا، يجب علينا تعيين جزء من نمط الرابط URL pattern كمتغير. ففي المثال التالي، سيتم تعيين الكلمة بعد /category/ كمتغير Category. وسيكون بالإمكان الوصول إلى هذا المتغير في مكون CategoryView. import { createRouter, createWebHistory } from "vue-router"; . . . const routes = [ { path: "/", name: "Home", component: HomeView, }, { path: "/category/:category", name: "Category", component: CategoryView, }, . . . ]; const router = createRouter({ history: createWebHistory(process.env.BASE_URL), routes, }); export default router; وبعد ذلك، في عرض AllCategories (الذي سيُظهر قائمة بجميع التصنيفات)، سنعمل على تمرير بعض المعلومات إلى المتغير Category. <template> <div class="flex flex-col place-content-center place-items-center"> <div class="py-8 border-b-2"> <h1 class="text-5xl font-extrabold">All Categories</h1> </div> <div class="flex flex-wrap py-8"> <router-link v-for="category in this.allCategories" :key="category.name" class=". . ." :to="`/category/${category.slug}`" >{{ category.name }}</router-link > </div> </div> </template> وفي عرض Category يمكننا الوصول إلى المتغير Category باستخدام الخاصية this.$route. <script> // @ is an alias to /src import PostList from "@/components/PostList.vue"; import { POSTS_BY_CATEGORY } from "@/queries"; export default { components: { PostList }, name: "CategoryView", data() { return { postsByCategory: null, }; }, async created() { const posts = await this.$apollo.query({ query: POSTS_BY_CATEGORY, variables: { category: this.$route.params.category, }, }); this.postsByCategory = posts.data.postsByCategory; }, }; </script> وأخيرًا، يمكن استرجاع المنشورات باستخدام الاستعلام POSTS_BY_CATEGORY. export const POSTS_BY_CATEGORY = gql` query ($category: String!) { postsByCategory(category: $category) { title slug content isPublished isFeatured createdAt } } `; ومع هذا المثال، من المفترض أن تكون قادرًا الآن على إنشاء صفحتي المنشور post التي تعرض محتوى منشو أو مقالة معينة، وصفحة الوسم tag التي تظهر قائمة بالمنشورات المرتبطة بوسم معين. إنشاء وتحديث المعلومات باستخدام الطفرات Mutations ذكرنا في المقال السابق من هذه السلسلة أنه يمكننا استخدام الاستعلامات queries لاسترجاع المعلومات من الواجهة الخلفية وإرسالها إلى الواجهة الأمامية. ومع ذلك، من الشائع في تطبيقات الويب الحديثة أن ترسل المعلومات من الواجهة الأمامية إلى الواجهة الخلفية. وللقيام بذلك، لا بُدّ من الحديث عن مفهوم جديد في GraphQL يُسمى الطفرة mutation. ملاحظة: تُستخدم الطفرات mutations لتغيير البيانات في الخادم. فإذا أراد المستخدم مثلًا إضافة أو تحديث أو حذف بيانات عليه أن يستخدم mutation لإرسال طلب بالتعديل المطلوب والخادم يقوم بتحديث البيانات وإرجاع النتيجة. نعود إلى الواجهة الخلفية وننتقل إلى ملف cd في مجلد blog وننشئ ملف باسم Mutations.py. سنكتشف في المثال التالي كيفية نقل البيانات إلى الواجهة الخلفية لإنشاء مستخدم جديد. import graphene from blog import models, types # Mutation sends data to the database class CreateUser(graphene.Mutation): user = graphene.Field(types.UserType) class Arguments: username = graphene.String(required=True) password = graphene.String(required=True) email = graphene.String(required=True) def mutate(self, info, username, password, email): user = models.User( username=username, email=email, ) user.set_password(password) user.save() return CreateUser(user=user) لاحظ في السطر 7 من الكود أعلاه أن UserType مرتبط بنموذج المستخدم User model. أما في الأسطر من 9 إلى 12، فلاحظ أنه لإنشاء مستخدم جديد، يجب إضافة ثلاث عناصر هي اسم المستخدم وكلمة المرور والبريد الإلكتروني. أما الأسطر من 15 إلى 18، فيجب أن تكون واضحة لك، فهي ذات الطريقة التي تنشئ من خلالها عنصرًا جديدًا باستخدام Django QuerySet. السطر 19 مسؤول عن تعيين كلمة المرور، ولأسباب تتعلق الحماية لا يمكنك حفظ كلمة المرور الأصلية للمستخدم في قاعدة البيانات لديك، ويمكن تشفيرها من خلال التابع set_password()‎‎. والآن، يجب عليك تضمين ملف Mutation.py في مخطط GraphQL، لذا انتقل إلى schema.py: import graphene from blog import queries, mutations schema = graphene.Schema(query=queries.Query, mutation=mutations.Mutation) ولتتأكد من أنه يعمل على النحو الصحيح، افتح المتصفح وانتقل إلى http://127.0.0.1:8000/graphql للوصول إلى واجهة GraphiQL. mutation { createUser( username: "testuser2022" email: "testuser2022@test.com" password: "testuser2022" ) { user { id username } } } من المفترض أنك تعرف كيفية استخدام ذلك في الواجهة الأمامية. على سبيل المثال: <script> import { USER_SIGNUP } from "@/mutations"; export default { name: "SignUpView", data() {. . .}, methods: { async userSignUp() { // Register user const user = await this.$apollo.mutate({ mutation: USER_SIGNUP, variables: { username: this.signUpDetails.username, email: this.signUpDetails.email, password: this.signUpDetails.password, }, }); // Do something with the variable user . . . }, }, }; </script> src/mutations.js import gql from "graphql-tag"; export const USER_SIGNUP = gql` mutation ($username: String!, $email: String!, $password: String!) { createUser(username: $username, email: $email, password: $password) { user { id username } } } `; استيثاق المستخدم User authentication والآن بعد أن تعرفت على كيفية إرسال البيانات إلى الواجهة الخلفية، لن تواجه صعوبةً كبيرةً في استيثاق المستخدم User authentication. في البداية، ستطلب من المستخدم إدخال اسم المستخدم وكلمة المرور الخاصين به وإرسال تلك المعلومات إلى الواجهة الخلفية، ثم في الواجهة الخلفية، سيعثر جانغو على المستخدم بناءً على الاسم، وسيحاول مقارنة كلمة المرور المُدخلة مع كلمة المرور المخزنة في قاعدة البيانات، وإذا تطابقت الكلمتان، سيكون بإمكان المستخدم تسجيل الدخول. ومع ذلك، قد تواجه هذه العملية بعض العقبات في الممارسة العملية. فبدايةً، تُعد عملية إرسال كلمة مرور المستخدم ذهابًا وإيابًا عملية غير آمنة تمامًا. لذا ستحتاج إلى طريقة ما لتشفير البيانات. الطريقة الأكثر استخدامًا هي تقنية JWT وهي اختصار لـ JSON Web Token. إذ تعمل هذه الطريقة على تشفير بيانات بصيغة JSON إلى ترميز بصيغة token. يمكنك رؤية مثال عليها من هنا. سيُحتفظ بهذا الترميز ضمن التخزين المحلي للمتصفح، وطالما بقي هذا الترميز ضمن ذاكرة المتصفح، سيبقى تسجيل الدخول قائمًا. المشكلة الثانية سببها نظام مكونات فيو Vue. فكما تعلم كل مكون مستقل بذاته فإذا تغير أحد المكونات، فإنه لا يؤثر على المكونات الأخرى. لكننا في هذه الحالة نريد أن تشترك جميع المكونات في نفس الوضعية، فإذا سجل المستخدم دخوله، نريد أن تتعرف جميع المكونات الأخرى على حالة المستخدم أثناء تسجيل الدخول. لذلك ستحتاج إلى مكان مركزي لتخزين هذه المعلومات حين يقوم المستخدم بتسجيل الدخول، ويجب أن تكون جميع المكونات قادرة على قراءة البيانات من ذلك المكان. ولتحقيق بذلك، ستحتاج إلى استخدام Pinia، وهي مكتبة Vue جديدة أُنشئت من خلال Vuex. دمج JWT في الواجهة الخلفية في البداية، سندمج JWT مع الواجهة الخلفية لجانغو، لذلك ستحتاج إلى تثبيت حزمة أخرى باسم django-graphql-jwt: pip install django-graphql-jwt انتقل الآن إلى ملف settings.py وأضف برنامجًا وسيطًا، وكذلك الاستيثاق في الواجهة الخلفية. ستحل هذه الإعدادات مكان الإعدادات الافتراضية لجانغو، وهو ما يتيح استخدام JWT. MIDDLEWARE = [ "django.contrib.auth.middleware.AuthenticationMiddleware", ] # Configure GraphQL GRAPHENE = { "SCHEMA": "blog.schema.schema", 'MIDDLEWARE': [ 'graphql_jwt.middleware.JSONWebTokenMiddleware', ], } # Auth Backends AUTHENTICATION_BACKENDS = [ 'graphql_jwt.backends.JSONWebTokenBackend', 'django.contrib.auth.backends.ModelBackend', ] لاستخدام هذه الحزمة، انتقل إلى موقع muts.py وأضف الشيفرة التالية: import graphql_jwt class Mutation(graphene.ObjectType): token_auth = graphql_jwt.ObtainJSONWebToken.Field() verify_token = graphql_jwt.Verify.Field() refresh_token = graphql_jwt.Refresh.Field() يمكننا الآن اختباره في واجهة GraphiQL: في حال كلمة مرور خاطئة في حال مستخدم موثوق كما هو واضح، فإن متطلبات تسجيل الدخول هي اسم المستخدم وكلمة المرور، وإذا تم التحقق من وثوقية هذا المستخدم بنجاح (أي أدخل اسم مستخدم وكلمة مرور صحيحة) سيُرسل من الواجهة الخلفية ترميز مشفر token. ويمكن حفظ هذا الترميز في ذاكرة المتصفح. يمكنك أيضًا تخصيص سلوك ObtainJSONWebToken من خلال العودة إلى Mutions.py: # Customize the ObtainJSONWebToken behavior to include the user info class ObtainJSONWebToken(graphql_jwt.JSONWebTokenMutation): user = graphene.Field(types.UserType) @classmethod def resolve(cls, root, info, **kwargs): return cls(user=info.context.user) class Mutation(graphene.ObjectType): token_auth = ObtainJSONWebToken.Field() لاحظ أن ObtainJSONWebToken يتوسع إلى JSONWebTokenMutation الافتراضي، ومن ثم في صنف Mutation، ويمكنك استخدام ObtainJSONWebToken عوضًا عن ذلك. يمكن الآن الحصول على مزيد من المعلومات حول المستخدم عبر GraphQL. استخدام حزمة بينيا Pinia في الواجهة الأمامية حان الوقت الآن لحل المشكلة الثانية في الواجهة الأمامية. والخطوة الأولى هي تثبيت بينيا Pinia. npm install pinia اذهب الآن إلى main.js وتأكد من أن تطبيقك يستخدم بينيا Pinia. import { createPinia } from "pinia"; createApp(App).use(createPinia()).use(router).use(apolloProvider).mount("#app"); ارجع الآن إلى مجلد src وأنشئ مجلد باسم stores، وهو المجلد الذي سنخزن فيه جميع بيانات التطبيق. في الوقت الحالي، كل ما تحتاج إليه هو تخزين القيم الخاصة بالمستخدم (بيانات تسجيل الدخول) وسنحافظ على المعلومات فيه حتى بعد تحديث الصفحة، لذا أنشئ ملف باسم user.js من أجل التعامل مع التخزين كما يلي: import { defineStore } from "pinia"; export const useUserStore = defineStore({ id: "user", state: () => ({ token: localStorage.getItem("token") || null, user: localStorage.getItem("user") || null, }), getters: { getToken: (state) => state.token, getUser: (state) => JSON.parse(state.user), }, actions: { setToken(token) { this.token = token; // Save token to local storage localStorage.setItem("token", this.token); }, removeToken() { this.token = null; // Delete token from local storage localStorage.removeItem("token"); }, setUser(user) { this.user = JSON.stringify(user); // Save user to local storage localStorage.setItem("user", this.user); }, removeUser() { this.user = null; // Delete user from local storage localStorage.removeItem("user"); }, }, }); لاحظ أن هذا مخزن البيانات يتكون من ثلاثة أقسام، وهم state و getters و actions. تساعد هذه الأقسام الثلاثة في إدارة حالة التطبيق بطريقة منظمة وسهلة وإذا كنت على معرفة جيدة بكيفية إنشاء تطبيق فيو Vue فيُفترض أن يكون ذلك مفهومًا بالنسبة لك. تشبه state في Pinia الدالة data() ‎ في مكون فيو Vue، إذ تعمل على تحديد المتغيرات، باستثناء أن يمكن لجميع المكونات الوصول إلى هذه المتغيرات. في مثالنا، سيحاول فيو Vue الحصول على الترميز المشفر في ذاكرة المتصفح، فإذا لم يكن موجودًا، سيأخذ المتغير قيمة null. أما getters فهي توازي المتغيرات computed، إذ تنفذ إجراءات بسيطة، وعادةً ما يقتصر عملها على إرجاع قيمة state فحسب. وهنا أيضًا يمكن لجميع المكونات والصفحات الوصول إلى المتغيرات. وأخيرًا، يمكن تشبيه actions بـ methods الموجودة في مكون فيو Vue. كما أنها تؤدي بعض الإجراءات باستخدام الحالات states. وفي هذه الحالة، أنت تعمل على حفظ أو إزالة الترميز المشفر للمستخدم ومعلوماته. ثمة شيء آخر عليك ملاحظته، وهو أنه لا يمكنك حفظ الكائنات objects في الذاكرة المحلية، وإنما يمكنك حفظ السلاسل النصية strings فقط. لذا يجب عليك استخدام stringify()‎ و parse()‎ لتحويل البيانات إلى سلسلة، ومن ثم إعادتها إلى كائن. ستحتاج بعد ذلك إلى استخدام هذا المخزن عند تسجيل دخول المستخدم، وقد أنشأنا ملف SignIn.vue مثل هذا: <script> import { useUserStore } from "@/stores/user"; import { USER_SIGNIN } from "@/mutations"; export default { name: "SignInView", setup() { const userStore = useUserStore(); return { userStore }; }, data() { return { signInDetails: { username: "", password: "", }, }; }, methods: { async userSignIn() { const user = await this.$apollo.mutate({ mutation: USER_SIGNIN, variables: { username: this.signInDetails.username, password: this.signInDetails.password, }, }); this.userStore.setToken(user.data.tokenAuth.token); this.userStore.setUser(user.data.tokenAuth.user); }, }, }; </script> نلاحظ في السطر 2 استيراد مخزن المستخدم User store الذي أنشأته. في السطور 9-12، استدعاء مخزن المستخدم User store في الخطاف setup، وهو ما يجعل التعامل مع بينيا Pinia أسهل دون أي وظائف خريطة إضافية. في السطرين 32-33، استدعاء الإجراءين setToken()‎ و setUser()‎ اللذيْن أنشأناهما منذ قليل، وهو ما سيحفظ المعلومات داخل الذاكرة المحلية. هذه هي الطريقة التي يمكنك من خلالها تسجيل دخول المستخدم، ولكن ماذا لو كان المستخدم قد سجل دخوله أساسًا، لنلقي نظرة على هذا المثال: <script> import { SITE_INFO } from "@/queries"; import { useUserStore } from "@/stores/user"; export default { setup() { const userStore = useUserStore(); return { userStore }; }, data() { return { menuOpen: false, mySite: null, user: { isAuthenticated: false, token: this.userStore.getToken || "", info: this.userStore.getUser || {}, }, dataLoaded: false, }; }, async created() { const siteInfo = await this.$apollo.query({ query: SITE_INFO, }); this.mySite = siteInfo.data.site; if (this.user.token) { this.user.isAuthenticated = true; } }, methods: { userSignOut() { this.userStore.removeToken(); this.userStore.removeUser(); }, }, }; </script> نحاول في السطرين 18- 19 الحصول على الترميز المشفر token ومعلومات المستخدم user info من المخزن Store. في السطور 31-33، إذا كان الترميز المشفر token موجودًا، فسيُعد المستخدم مستوثقًا authentication . في السطور 38-41، ستعمل الطريقة userSignOut()‎ على تسجيل خروج المستخدم عند استدعائها. بعد أن تعرفنا على كيفية استرجاع البيانات باستخدام الاستعلامات queries ووضحنا كيفية إرسال البيانات باستخدام الطفرات mutations، سنشرح في المقال التالي طريقة إنشاء نظام تعليقات وتفاعلات إعجاب لتطبيق المدونة الخاص بنا. ترجمة -وبتصرّف- للمقال Create a Modern Application with Django and Vue #2. اقرأ أيضًا المقال السابق: إنشاء تطبيق حديث باستخدام Django و Vue | الجزء الأول: الأساسيات تطوير الواجهة الأمامية لمواقع الويب Frontend Web Development تطوير الواجهة الخلفية لمواقع الويب Backend Web Development مقارنة بين أطر الواجهات الأمامية: Angular و React و Vue
  11. يعد إطار العمل جانغو Django إطار ويب كامل full-stack يمكننا من خلاله إنشاء كل من الواجهة الأمامية frontend والواجهة الخلفية backend معًا وهو قائم على لغة بايثون Python، ويتبع نمط تصميم MTV وهو اختصار للنمط البنائي للبرمجيات نموذج Model قالب Template عرض View. لكن في جانغو، عندما يطلب المستخدم النهائي صفحة ويب، يجب تصيير rendering الصفحة أولًا في الواجهة الخلفية، ومن ثم تُرسل صفحة HTML الناتجة إلى المستخدم. وفي هذه الحالة، عندما يكون لديك عدد كبير من المستخدمين، سيضع ذلك ضغطًا كبيرًا على خادمك. لحل هذه المشكلة، يقسم المطورون التطبيق إلى قسمين هما الواجهة الخلفية والواجهة الأمامية وعندما يطلب المستخدم صفحة ويب، لن تصيّر الواجهة الخلفية لصفحة الويب، بل يكفي أن تجمع البيانات الضرورية فقط وتنقل إلى الواجهة الأمامية. وهنا يأتي دور العميل ليستخدم هذه البيانات ويعرض صفحة الويب داخل المتصفح مباشرة، وبالتالي يخفف الضغط على الخادم. سنتحدث في سلسلة المقالات هذه حول كيفية إنشاء تطبيق حديث من صفحة واحدة باستخدام جانغو Django كواجهة خلفية، وفيو Vue كواجهة أمامية، وغراف كيو إل GraphQL كلغة لمعالجة API تربطهما معًا. هذا المقال هو جزء من سلسلة مقالات تتحدث حول كيفية إنشاء تطبيق حديث باستخدام جانغو Django وفيو Vue: إنشاء تطبيق حديث باستخدام جانغو Django وفيو Vue - الجزء الأول. إنشاء تطبيق حديث باستخدام جانغو Django وفيو Vue - الجزء الثاني. إنشاء تطبيق حديث باستخدام جانغو Django وفيو Vue - الجزء الثالث. مراجعة سريعة عن جانغو لنبدأ بمراجعة سريعة حول إطار عمل جانغو Django، جانغو هو إطار عمل ويب يعتمد على لغة بايثون ويتبع النمط البنائي MTV، الذي هو اختصار لثلاث كلمات: النموذج Model: عبارة عن واجهة تتيح لنا التفاعل مع قاعدة البيانات، مثل استرجاع السجلات أو إنشائها أو تحديثها أو حذفها. القالب Template: يمثل الواجهة الأمامية من إطار العمل، وهو الجزء الذي سيراه المستخدمون النهائيون. العرض View: يمثل الواجهة الخلفية للتطبيق، إذ يستخدم النموذج Model للتفاعل مع قاعدة البيانات، مثل استرجاع البيانات التي يطلبها المستخدم، ثم يعمل العرض View على معالجة هذه البيانات بطريقة ما، وتظهر النتيجة للمستخدم عبر القالب Template الذي عادةً ما يكون مخصصًا. في سلسلة المقالات الحالية؛ سنستخدم جانغو للواجهة الخلفية فقط، أي لن نستخدم القوالب والعروض في جانغو، ونستستخدم عوضًا عن ذلك Vue.js لبناء الواجهة الأمامية و GraphQL كطريقة للتواصل بين الواجهة الأمامية والخلفية. إنشاء مشروع جانغو جديد الطريقة التي سنعتمد عليها هي فصل مجلد الواجهة الخلفية عن مجلد الواجهة الأمامية، لذا فإن أول خطوة هي إنشاء هيكل المشروع بالطريقة التالية: blog ├── backend └── frontend انتقل إلى مجلد backend، وأنشئ بيئة بايثون افتراضية جديدة. وبيئة بايثون الافتراضية هي بيئة معزولة لكل تثبيت بايثون جديد، لذا عندما تعمل على تثبيت حزم داخل هذه البيئة الافتراضية لن يؤثر ذلك على بيئة بايثون الخاصة بنظامك، وهو أمر بالغ الأهمية لاسيما إذا كنت تستخدم نظام تشغيل لينكس Linux أو ماك أو إس macOS، ولا تريد التأثير على ملفاتهما الأساسية. cd backend python3 -m venv env سيؤدي الأمر السابق إلى إنشاء مجلد جديد يُدعى env مع إنشاء البيئة الافتراضية بداخله. ولتنشيط هذه البيئة الافتراضية، استخدم الأمر التالي: source env/bin/activate إذا كنت تستخدم نظام تشغيل ويندوز Windows، فاستخدم الأمر التالي عوضًا عن السابق، كما يُنصح بتثبيت WSL: env/Scripts/activate بعد تنشيط البيئة الافتراضية، ستبدو الطرفية Terminal كما في الشكل أدناه. لاحظ وجود (env) أمام اسم المستخدم، منا يدل على أنك تعمل حاليًا في البيئة الافتراضية. يمكنك الآن إنشاء مشروع جانغو جديد. python -m pip install Django django-admin startproject backend بعدها يمكنك إنشاء تطبيق جديد باسم blog: python manage.py startapp blog في النهاية، يجب أن يكون هيكل المشروع كما يلي: . ├── backend │ ├── backend │ ├── blog │ ├── manage.py │ └── requirements.txt └── frontend إنشاء النماذج Models تذكر أن النماذج هي عبارة عن واجهة يمكننا استخدامها للتفاعل مع قاعدة البيانات، وواحدة من المزايا الرائعة في جانغو هي أنه يمكنك تلقائيًا معرفة التغييرات التي أجريتها على النماذج، وتوليد ملفات التهجير migration files المقابلة، والتي يمكن استخدامها لإجراء تغييرات على قاعدة البيانات. نموذج الموقع Site Model لنبدأ بالنموذج Site الذي يخزن المعلومات الأساسية لموقعك على الويب. class Site(models.Model): name = models.CharField(max_length=200) description = models.TextField() logo = models.ImageField(upload_to='site/logo/') class Meta: verbose_name = 'site' verbose_name_plural = '1. Site' def __str__(self): return self.name نلاحظ في السطر الرابع الأمر ImageField الذي يخبر جانغو بتحميل الصورة إلى مجلد 'site/logo/' ولتحقيق ذلك، عليك القيام بشيئين اثنين. أولاً، يجب عليك تثبيت حزمة Pillow، إذ يحتاجها جانغو لمعالجة الصور. python -m pip install Pillow ثانيًا، ستحتاج إلى إعداد توجيه جديد لمكان التخزين في settings.py إذ يجب أن تخبر جانغو بالمكان الذي ستخزن فيه هذه الوسائط، وما هي عناوين URL التي ستستخدمها للوصول إلى هذه الملفات. import os # Media Files MEDIA_ROOT = os.path.join(BASE_DIR, 'mediafiles') MEDIA_URL = '/media/' تشير الإعدادات السابقة إلى أن ملفات الوسائط ستُخزن داخل ملف ‎‎/‎‎‎‍‎‎‎‎‎‎‎‎‎‎‎‎‎mediafiles وسنحتاج إلى استخدام البادئة /media/ قبل عنوان URL للوصول إلى الملفات. فعلى سبيل المثال، سيؤدي عنوان URL التالي http://localhost:3000/media/example.png إلى استرجاع الصورة /mediafiles/example.png. نموذج المستخدم User Model النموذج التالي هو نموذج المستخدم User model، ولحسن الحظ، فإن جانغو يأتي مزودًا بنموذج مستخدم مدمج، والذي يوفر الوظائف الأساسية المتعلقة بالأذونات permission والتراخيص authorization. ومع ذلك، سنجرب في مشروعنا هذا شيئًا أكثر تعقيدًا، مثل إضافة صور أفاتار avatar للملف الشخصي وإضافة سيرة ذاتية وبعض المعلومات الأخرى، ولتحقيق ذلك، ستحتاج إلى إنشاء نماذج مستخدم جديدة، والتي نوسع فيها الصنف AbstractUser، ومعنى نوسعه extends أي نرث منه صنف جديد لنخصصه وفق حاجتنا أو نضيف له المزيد من الميزات. from django.contrib.auth.models import AbstractUser # New user model class User(AbstractUser): avatar = models.ImageField( upload_to='users/avatars/%Y/%m/%d/', default='users/avatars/default.jpg' ) bio = models.TextField(max_length=500, null=True) location = models.CharField(max_length=30, null=True) website = models.CharField(max_length=100, null=True) joined_date = models.DateField(auto_now_add=True) class Meta: verbose_name = 'user' verbose_name_plural = '2. Users' def __str__(self): return self.username هكذا يبدو صنف AbstractUser في جانغو: ‎from django.contrib.auth.models import AbstractUser # New user model class User(AbstractUser): avatar = models.ImageField( upload_to='users/avatars/%Y/%m/%d/', default='users/avatars/default.jpg' ) bio = models.TextField(max_length=500, null=True) location = models.CharField(max_length=30, null=True) website = models.CharField(max_length=100, null=True) joined_date = models.DateField(auto_now_add=True) class Meta: verbose_name = 'user' verbose_name_plural = '2. Users' def __str__(self): return self.username كما هو واضح، يوفر هذا النموذج بعض الحقول الأساسية، مثل الاسم الأول واسم العائلة ونحو ذلك. ستحتاج بعد ذلك إلى التأكد من أن جانغو يستخدم نموذج المستخدم الجديد كنموذج مستخدم افتراضي، لذلك انتقل إلى ملف إعدادات التطبيق settings.py وأضف له التوجيه directive التالي: # Change Default User Model AUTH_USER_MODEL = 'blog.User' نماذج الفئة Category والوسم Tag والمنشور Post class Category(models.Model): name = models.CharField(max_length=200) slug = models.SlugField() description = models.TextField() class Meta: verbose_name = 'category' verbose_name_plural = '3. Categories' def __str__(self): return self.name class Tag(models.Model): name = models.CharField(max_length=200) slug = models.SlugField() description = models.TextField() class Meta: verbose_name = 'tag' verbose_name_plural = '4. Tags' def __str__(self): return self.name class Post(models.Model): title = models.CharField(max_length=200) slug = models.SlugField() content = RichTextField() featured_image = models.ImageField( upload_to='posts/featured_images/%Y/%m/%d/') is_published = models.BooleanField(default=False) is_featured = models.BooleanField(default=False) created_at = models.DateField(auto_now_add=True) modified_at = models.DateField(auto_now=True) # Each post can receive likes from multiple users, and each user can like multiple posts likes = models.ManyToManyField(User, related_name='post_like') # Each post belong to one user and one category. # Each post has many tags, and each tag has many posts. category = models.ForeignKey( Category, on_delete=models.SET_NULL, null=True) tag = models.ManyToManyField(Tag) user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True) class Meta: verbose_name = 'post' verbose_name_plural = '5. Posts' def __str__(self): return self.title def get_number_of_likes(self): return self.likes.count() لاحظ كيف تنفذ ميزة الإعجاب بالمنشورات (Like system) في السطر 13، وهو لا يعتمد على النوع البسيط IntegerField (وهو حقل لتخزين القيم الصحيحة) ولكنه يعمل تمامًا مثل الوسوم Tags. ويمكنك استخدام الدالة get_number_of_likes()‎‎‎ لتحصل على عدد الإعجابات لكل منشور. نموذج التعليقات Comment model والآن دعونا نخطو خطوةً نحو الأمام، وننشئ قسمًا مخصصًا للتعليقات لهذا التطبيق: class Comment(models.Model): content = models.TextField(max_length=1000) created_at = models.DateField(auto_now_add=True) is_approved = models.BooleanField(default=False) # Each comment can receive likes from multiple users, and each user can like multiple comments likes = models.ManyToManyField(User, related_name='comment_like') # Each comment belongs to one user and one post user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True) post = models.ForeignKey(Post, on_delete=models.SET_NULL, null=True) class Meta: verbose_name = 'comment' verbose_name_plural = '6. Comments' def __str__(self): if len(self.content) > 50: comment = self.content[:50] + '...' else: comment = self.content return comment def get_number_of_likes(self): return self.likes.count() إعداد لوحة التحكم في جانغو والآن حان الوقت لإعداد لوحة التحكم أو لوحة الإدارة في جانغو، لذا افتح ملف admin.py واكتب فيه التالي: from django.contrib import admin from .models import * # Register your models here. class UserAdmin(admin.ModelAdmin): list_display = ('username', 'first_name', 'last_name', 'email', 'date_joined') class CategoryAdmin(admin.ModelAdmin): prepopulated_fields = {'slug': ('name',)} class TagAdmin(admin.ModelAdmin): prepopulated_fields = {'slug': ('name',)} class PostAdmin(admin.ModelAdmin): prepopulated_fields = {'slug': ('title',)} list_display = ('title', 'is_published', 'is_featured', 'created_at') class CommentAdmin(admin.ModelAdmin): list_display = ('__str__', 'is_approved', 'created_at') admin.site.register(Site) admin.site.register(User, UserAdmin) admin.site.register(Category, CategoryAdmin) admin.site.register(Tag, TagAdmin) admin.site.register(Post, PostAdmin) admin.site.register(Comment, CommentAdmin) فيما يتعلق بـ CommentAdmin، فإن __str__ تشير إلى الدالة __str__() في نموذج التعليق. والتي ستعيد أول 50 حرفًا في السلسلة وتدمجها مع السلسلة .... والآن، فعِّل خادم التطوير وتأكد ما إذا كانت كل وظيفة تعمل على النحو الصحيح: python manage.py runserver وقبل الانتقال إلى الخطوة التالية، لا تنسَ إضافة بعض المعلومات الجانبية إلى مدونتك. مراجعة سريعة حول فيو جي إس Vue.js والآن بعد أن انتهينا من إعداد الواجهة الخلفية، حان الوقت للانتقال إلى الواجهة الأمامية، وبذلك الانتقال سنبدأ باستخدام فيو جي إس Vue.js في الجزء الثاني من مقالنا هذا لإعداد الواجهة الأمامية في تطبيقنا. قبل الخوض عميقًا، سنبدأ بمراجعة سريعة حول فيو جي إس Vue.js في حال لم تستخدمه من قبل، فيو جي إس Vue.js هو أحد أطر عمل جافا سكريبت JavaScript المخصصة لبناء الواجهات الأمامية، إذ يوفر لك نظامًا بسيطًا معتمدًا على المكونات، ما يسمح لك بإنشاء واجهات مستخدم تفاعلية. المقصود بـ "معتمدًا على المكونات" يعني أن المكون الجذري App.vue بإمكانه استيراد مكونات أخرى، وهي الملفات ذات الامتداد .vue، ويمكن لهذه المكونات استيراد المزيد من المكونات الأخرى، ما يسمح لك بإنشاء أنظمة معقدة ومتطورة للغاية. يحتوي الملف النموذجي ذو الامتداد .vue على ثلاثة أقسام، القسم الأول هو <template> يتضمن شيفرات بلغة HTML أما القسم الثاني فهو <script> ويتضمن شيفرات بلغة JavaScript، والقسم الأخير <style> يتضمن شيفرات بلغة CSS. يمكنك في قسم <script> التصريح عن ارتباطات bindings جديدة داخل التابع data()‎‎ ، ويمكنك بعد ذلك عرض هذه الارتباطات داخل قسم <template> باستخدام الأقواس المزدوجة المتعرجة {{Binding}}. ستُغطى هذه الارتباطات المُصرَّح عنها في التابع data()‎‎ تلقائيًا داخل نظام تفاعل فيو Vue، وهذا يعني أنه عندما تتغير قيمة الارتباط Binding، سيتغير المكون المقابل تلقائيًا، دون الحاجة إلى تحديث الصفحة. يمكن أن يحتوي القسم <script> أيضًا على توابع أخرى غير data()‎‎ ، مثل computed وprops. كما يتيح لنا <template> ربط البيانات باستخدام توجيهات مثل v-bind و v-on و v-model. إنشاء مشروع Vue.js جديد يمكن تثبيت وإنشاء تطبيق Vue باستخدام أداة سطر الأوامر Vue، لكننا في هذه المرة سنتبع طريقة مختلفة إذ سنستخدم أداة إنشاء واجهات أمامية تسمى Vite، مع ملاحظة أن الكلمة تُنطق veet وتعني سريع باللغة الفرنسية، والتي أنشأها ذات الشخص الذي أنشأ Vue.js. انتقل الآن إلى مجلد frontend ونفذ الأمر التالي: npm init vue@latest سيُطلب منك العديد من الخيارات، ولهذا المشروع، كل ما عليك فعله إضافة Vue Router: ✔ Project name: … <your_project_name> ✔ Add TypeScript? … No / Yes ✔ Add JSX Support? … No / Yes ✔ Add Vue Router for Single Page Application development? … No / Yes ✔ Add Pinia for state management? … No / Yes ✔ Add Vitest for Unit testing? … No / Yes ✔ Add Cypress for both Unit and End-to-End testing? … No / Yes ✔ Add ESLint for code quality? … No / Yes ✔ Add Prettier for code formating? … No / Yes Scaffolding project in ./<your_project_name>. . . Done. إذا كنت ترتاح أكثر مع لغة برمجة جيدة، فيمكنك اختيار تثبيت TypeScript وإن كنت تحتاج إلى التصحيح التلقائي والتنسيق التلقائي للتعليمات البرمجية التي تكتبها، فيمكنك تثبيت ESlint وPrettier، ستؤدي عملية التثبيت هذه إلى إنشاء ملف package.json في دليل مشروعك، والذي يقوم بتخزين الحزم المطلوبة وإصداراتها. ستحتاج بعد ذلك إلى تثبيت هذه الحزم داخل مشروعك. cd <your_project_name> npm install npm run dev ثمة شيء أخير قبل البدء في إنشاء الواجهة الأمامية للتطبيق، نحن نستخدم في مشروعنا هذا إطار عمل بلغة CSS يُدعى TailwindCSS، لذا لتثبيته، نفذ الأمر التالي: npm install -D tailwindcss postcss autoprefixer npx tailwindcss init -p سيؤدي ذلك إلى إنشاء ملفين، الأول هو tailwind.config.js والثاني postcss.config.js، وإذا كنت تريد معرفة المزيد عن Tailwind فيمكنك الاطلاع على مقال مقارنة بين Bootstrap و Tailwind CSS، كما يمكنك الاطلاع على الدليل الرسمي لـ Tailwind. انتقل إلى tailwind.config.js وأضف المسار إلى جميع ملفات قالبك: module.exports = { content: ["./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}"], theme: { extend: {}, }, plugins: [], }; أنشئ ملف ‎./src/index.css وأضف توجيهات ‎@tailwind لكل طبقة من طبقات Tailwind’s layers. @tailwind base; @tailwind components; @tailwind utilities; والآن، استورد الملف الذي أنشأته حديثًا ‎‎‎‎‎./src/index.css إلى ملف ‎‎./src/main.js‎‎‎‎‎‎‎‎‎‎‎‎‎ import { createApp } from "vue"; import App from "./App.vue"; import router from "./router"; import "./index.css"; const app = createApp(App); app.use(router); app.mount("#app"); والآن، من المفترض أن تكون قادرًا على استخدام Tailwind داخل ملفات ‎.vue، وللتأكد، دعنا نختبر ذلك. <template> <header> . . . <div class="wrapper"> <HelloWorld msg="You did it!" /> <h1 class="text-3xl font-bold underline">Hello world!</h1> . . . </div> </header> . . . </template> لاحظ أننا أضفنا عنوان <h1> بعد <HelloWorld>، إذ يستخدم العنوان أصناف Tailwind. مكتبة Vue Router لاحظ أن مجلد مشروعك مختلف قليلًا في هذه المرة: يوجد داخل المجلد الرئيسي src مجلد router ومجلد views، إذ يحتوي مجلد router على ملف index.js، والذي يمكنك من خلاله تحديد وجهات مختلفة، بحيث تشير كل وجهة route إلى مكون view موجود داخل مجلد views، ويمكن أن يوسع كل view بعد ذلك إلى مكونات أخرى داخل مجلد المكونات Components. تزودنا Vue بمثال على ذلك في ملف index.js: import { createRouter, createWebHistory } from "vue-router"; import HomeView from "../views/HomeView.vue"; const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes: [ { path: "/", name: "home", component: HomeView, }, { path: "/about", name: "about", // route level code-splitting // this generates a separate chunk (About.[hash].js) for this route // which is lazy-loaded when the route is visited. component: () => import("../views/AboutView.vue"), }, ], }); export default router; لاستدعاء موجه router ما، انظر في داخل ملف App.vue، وعوضًا عن الوسم <a>، يُستخدم الوسم <RouterLink> المستورد من حزمة vue-router لإدارة التنقل بين الصفحات في تطبيق Vue.js. <script setup> import { RouterLink, RouterView } from "vue-router"; . . . </script> <template> <header> . . . <div class="wrapper"> . . . <nav> <RouterLink to="/">Home</RouterLink> <RouterLink to="/about">About</RouterLink> </nav> </div> </header> <RouterView /> </template> عند إخراج الصفحة، سيُستبدل الوسم ‎<RouterView/>‎‎‎‎‎ بالعرض المطابق، وإذا لم تكن ترغب في استيراد هذه المكونات، فكل ما عليك هو استخدام الوسم router-link to="">‎> و <router-view> عوضًا عن ذلك. إنشاء وجهات routes باستخدام Vue router سنحتاج في مدونة تطبيقنا إلى إنشاء ست صفحات على الأقل، سنحتاج‏ إلى صفحة رئيسية والتي تعرض قائمة بأحدث الصفحات في المدونة، كما سنحتاج إلى صفحة الأقسام والتي تعرض جميع الأقسام أو الوسوم في المدونة، وصفحة أخرى لتعرض قائمة بالمقالات التي تنتمي إلى الأقسام أو الوسوم، وأخيرًا صفحة المقال التي تعرض محتوى المقال إضافةً إلى التعليقات. فيما يلي الموجهات التي أنشأناها، إذ يوجه الوسم @ نحو مجلد src. import { createRouter, createWebHistory } from "vue-router"; import HomeView from "@/views/main/Home.vue"; import PostView from "@/views/main/Post.vue"; import CategoryView from "@/views/main/Category.vue"; import TagView from "@/views/main/Tag.vue"; import AllCategoriesView from "@/views/main/AllCategories.vue"; import AllTagsView from "@/views/main/AllTags.vue"; const routes = [ { path: "/", name: "Home", component: HomeView, }, { path: "/category", name: "Category", component: CategoryView, }, { path: "/tag", name: "Tag", component: TagView, }, { path: "/post", name: "Post", component: PostView, }, { path: "/categories", name: "Categories", component: AllCategoriesView, }, { path: "/tags", name: "Tags", component: AllTagsView, }, ]; const router = createRouter({ history: createWebHistory(process.env.BASE_URL), routes, }); export default router; لاحظ أننا نعمل في هذا المقال على إنشاء الواجهة الأمامية فقط، ولم نصل إلى مرحلة نقل البيانات حتى الآن، لذا لا تقلق حول كيفية العثور على المنشورات أو الأقسام أو الوسوم في الوقت الحالي. إنشاء العروض والصفحات والمكونات توضح الصور التالية واجهة المستخدم الأمامية التي أنشأناها لهذا المشروع، ويمكنك إنشاؤها لديك إما باعتماد الشيفرات البرمجية في هذا المقال، أو كتابة الشيفرات البرمجية الخاصة الخاص بك كما يمكنك العثور على الكود البرمجي الكامل من هنا. الصفحة الرئيسية Home Page جميع التصنيفات All Categories جميع الوسوم All Tags صفحة تسجيل الدخول Sign In صفحة إنشاء حساب Sign Up صفحة المنشور المفرد Post قسم التعليقات على المنشور Comments صفحة الملف الشخصي للمستخدم Profile قسم تعليقات المستخدمين User Comments ترجمة -وبتصرّف- للمقال Create a Modern Application with Django and Vue #1 اقرأ أيضًا تطبيق عملي لتعلم إطار عمل جانغو - الجزء الأول: إنشاء موقع ويب هيكلي لمكتبة محلية معالجة طلبات الويب عبر العروض views في تطبيق جانغو بناء تطبيق ويب لإدارة معلومات العملاء باستخدام جانغو Django وريآكت React إنشاء تطبيق بسيط من خلال Vue.js إنشاء تطبيق جانغو وتوصيله بقاعدة بيانات
  12. سنقدم في هذا الدليل 10 نصائح تساعدك على كتابة محتوى بطريقة أسرع، والتغلب على مشكلة قفلة الكاتب writer’s block التي تصيب بعض الكتاب؛ ليس بسبب نقص المهارة، إنما نتيجة عوامل نفسية؛ كما يشرح المقال كيفية بناء عادة منتظمة تساعدك على نشر محتوى قيّم وإيجابي للقراء. لا شك أن تعلم الكتابة السريعة يُعَد أمرًا ضروريًا لتصبح مدونًا ناجحًا، لأنك تحتاج إلى نشر محتوى ثابت بانتظام لجذب الجمهور والمحافظة عليهم؛ أما أن تنشر بعض المقالات من حين إلى آخر وتنتظر لحظات الإلهام لتأتيك، فهو أمر لا ينفع مع من يسعى إلى بناء مدونة ناجحة، إذ لا بُدّ من اتباع إيقاع نشر منتظم، حتى يستمر القراء بزيارتك مدونتك وقراءة المزيد من مقالاتك. قد تبدو الكلمات السابقة رائعةً من الناحية النظرية، وربما أعطتك دفعةً من الحماسة، لكن كيف يبدو الأمر من الناحية الواقعية؟ عندما تفتح مستندًا فارغًا لكتابة محتوى جديد، قد تجد نفسك محدقًا فيه لفترة طويلة دون كتابة أي شيء، ومن ثم تعلن استسلامك. في ذات الصدد، قد تتمكن من كتابة شيء ما، ولكنك تشعر أنك تكتب بعشوائية دون اتباع منهج واضح، أو أنها مجرد جمل إنشائية لا تقدم للقارئ أي قيمة حقيقية؛ كما قد تنتهي من كتابة منشوراتك، ثم تشعر أنها متخبطة تأخذ القارئ في متاهة من المعلومات المتداخلة، فينتهي به المطاف دون تحقيق أي فائدة. قد تظن في قرارة نفسك أنك غير مؤهل لتكون كاتبًا ناجحًا وسريعًا، لكن كن على ثقة بأنه يمكنك تحقيق هدفك إذا فهمت النصائح التالية وبذلت جهدك في تطبيقها. 1. اكتب كل يوم إن أمكن ذلك إذا سألت الكتاب الناجحين من كل المجالات -وليس المدونات فقط- عن سر نجاحهم، فسيخبرك الكثير منهم عن أهمية الكتابة اليومية؛ وهو ما يمكنك تطبيقه عمليًا من خلال منح الكتابة جزءًا أساسيًا من برنامجك اليومي، وقد تستمر في ذلك حتى في أيام العطل والأعياد، أو يمكنك الاقتصار على أيام العمل. الجميل في الانتظام اليومي للكتابة هو أنك ستصل إلى نتائج رائعة بعد فترة دون أن تشعر أنك قد بذلت وقتًا طويلًا في الكتابة. فعلى سبيل المثال، إذا كتبت 500 كلمة فقط يوميًا، ستصل في نهاية العام إلى أكثر من 100 ألف كلمة، حتى وإن لم تكن تكتب في عطلات نهاية الأسبوع وأخذت إجازة لبضعة أسابيع. مع العلم أنك عندما تصبح سريعًا في الكتابة، لن تستغرق في كتابة 500 كلمة ٱكثر من 30 دقيقة. من المهم أن تجد وقتًا من برنامجك اليومي تركز فيه جيدًا على الكتابة، وقد يكون ذلك في الصباح الباكر، أو خلال استراحة الغداء، أو ربما في المساء المتأخر بعد أن ينام أطفالك، أو أيًا كان الوقت الذي يناسبك. إذا لم تكن الكتابة اليومية مناسبةً لطبيعة حياتك، أو إذا كنت تفضل جلسات كتابة بعدد أقل ولمدة أطول، فاحرص على أن تكتب مرتين على الأقل أسبوعيًا. 2. ابدأ بكتابة الخطوط العريضة لهيكلة منشورك الخطوة الأولى لكتابة أي محتوى هي وضع حجر الأساس له، وهذا من خلال تحديد الٱفكار الرئيسية التي سيتناولها منشورك، فهي أشبه بالهيكل العظمي الذي من خلالها ستتمكن من معرفة ما يجب كتابته في بداية المنشور وفي منتصفه وفي نهايته، وستكون أمامك بعض الأفكار الأساسية التي يمكن أن تشكل العناوين الفرعية لمنشورك. إذا كنت تهدف إلى أن كتابة منشورك بسرعة، فقد تظن أن وضع مخطط المنشور ما هو إلا مضيعة للوقت، لكن الحقيقة أن البدء بمخطط المنشور سيساعدك على أن تنجز عملك بسرعة أكبر. سيساعدك مخطط المنشور في البقاء على المسار الصحيح، حتى لا ينتهي بك الأمر في التخبط بين الأفكار والتنقل العشوائي بين المواضيع. علاوةً على ذلك، يمكن لمخطط المنشور أن يبقيك متحفزًا حتى النهاية، كونه يتيح لك معرفة المقدار الذي أنجزته من منشورك، والمقدار المتبقي الذي ما يزال عليك كتابته. 3. اكتب مسودتك الأولى على شكل نقاط في البداية، لن تحتاج إلى كتابة فقرات كاملة أو حتى جمل كاملة، لأنك بالتأكيد ستراجع ما كتبت وترتبه ضمن جمل وفقرات متناسقة؛ لذلك ابدأ عملك بكتابة بعض الأفكار والإلهامات التي تدور في رأسك، واترك ترتيب هذه الأفكار إلى المرحلة التالية. أمور مثل العناوين والاقتباسات والصور وأي محتوى داعم آخر يمكنك تأجيله حتى الانتهاء من كتابة المسودة، لكن الأمر المهم في الوقت الحالي أن تدون أهم الأفكار لديك على الصفحة. وأخيرًا، احرص على تدوين أفكارك على شكل نقاط بسيطة، ولا تشغل نفسك كثيرًا بأمور التنسيق التي غالبًا ما تشتت انتباه الكتاب وتمنعهم من الوصول إلى أفضل مستوياتهم في الكتابة. 4. اكتب بالترتيب الذي تريده ليس من الضروري أن تبدأ عملك بكتابة المقدمة ومن ثم إكمال المقال بالترتيب حتى كتابة الخاتمة، بل يمكنك أن تبدأ بكتابة القسم الذي يجذبك أكثر؛ فإذا كنت تكتب مقالًا من النوع "10 نصائح …" لتعلم القارئ كيفية القيام بشيء ما، فيمكنك أن تبدأ بكتابة النصيحة 3، ثم النصيحة 7، ومن ثم تعود إلى كتابة باقي النصائح. إن وجود المخطط الأولي لمنشورك سيسهل عليك مهمة التنقل كثيرًا، وهي إحدى الأسباب الرئيسية التي يجب أن تدفعك إلى كتابة المخطط الأولي في البداية، فقد ترغب في كتابة الأقسام الأصعب أولًا، وبالتالي تتشجع لإنهاء القسم السهل المتبقي، أو قد ترغب في البدء في الأقسام السهلة كنوع من الإحماء قبل الانتقال إلى الأجزاء الأكثر تعقيدًا في منشورك. 5. اكتب تحت الضغط من خلال تحديد موعد نهائي ثابت من الجيد أن تحدد لنفسك تاريخًا ووقتًا معينًا يجب أن تنشر فيه مقالتك، وعند حلول ذلك الوقت، يجب أن تنشر كل ما كتبته. ولا تقلق حول ما إذا كان المحتوى مثاليًا أو أنه ليس كذلك، إذ يمكنك العودة إليه وتحديثه في اليوم التالي أو الأسبوع التالي أو حتى الشهر المقبل. يكتشف العديد من الكتاب قدرتهم على الكتابة السريعة عندما يواجهون موعدًا نهائيًا عليهم الالتزام به. وبصفتك مدونًا، ليس من المُتوقع أن يكون لديك محررًا أو مديرًا ينتظر عملك، وهذا صحيح، لكن تذكر أن لديك قراءً وجمهورًا ينتظرون منشوراتك. ولكي تزيد حماستك في الكتابة، يمكنك إخبار القراء بأنك ستنشر منشورًا جديدًا كل يوم جمعة مثلًا على مدونتك، مما يمنحك موعدًا نهائيًا محددًا عليك الالتزام به؛ أو في حال كنت تنشر على وسائل التواصل الاجتماعي، فيمكنك إخبار أصدقائك والمتابعين بأنك ستنشر منشورًا جديدًا بحلول الساعة السادسة مساءً كل يوم، أو في أي وقت آخر قد تختاره. يمكن أن يكون الشعور بالمسؤولية العلنية دافعًا قويًا للغاية، ومن المرجح أن تنجز كتابتك بسرعة ٱكبر بكثير، لأنك تتسابق مع الزمن لتوفي بالموعد الذي قدمته لجمهورك، كما قد تجد في الموعد الثابت للنشر عاملًا يساعدك على زيادة التركيز. سيساعدك الموعد الثابت أيضًا على استغلال الوقت بالطريقة المثالية، فعلى سبيل المثال، قد تكتب لمدة ساعة قبل أن تذهب لاصطحاب أطفالك من المدرسة، أو ربما تكتب لمدة 30 دقيقة قبل بداية مباراة كرة القدم التي ترغب في مشاهدتها. 6. إضافة مؤقت للمحافظة على تركيزك في الكتابة السريعة إذا كنت عاجزًا عن الالتزام بموعد نهائي ثابت، فيمكنك تجربة استخدام مؤقت، والذي قد يساعدك على زيادة تركيزك أثناء الكتابة. الطريقة الأكثر شيوعًا لاستخدام مؤقت هي تقنية الطماطم أو تقنية البومودورو Pomodoro Technique، والتي تشير إلى العمل لمدة 25 دقيقة، مقابل استراحة لمدة 5 دقائق؛ إذ يمكنك تكرار ذلك 3 مرات قبل أخذ استراحة لمدة أطول (20-30 دقيقة). ومع ذلك، ليس من الضروري ٱن تتقيد بالأرقام السابقة، إذ يمكنك ضبط مؤقتك بالمدة الزمنية التي تناسبك، كما يمكنك التنويع ما بين المهام التي تحتاج إلى تركيز عالٍ والمهام التي تحتاج إلى تركيز أقل. على سبيل المثال، يمكنك كتابة مقال لمدة 20 دقيقة، ثم الرد على رسائل البريد الإلكتروني لمدة 20 دقيقة أخرى، ومن ثم العودة مجانًا إلى الكتابة لمدة 20 دقيقة أخرى. تُعَد عملية ضبط المؤقت بمثابة التزام تجاه نفسك، وكأنك تقدم لنفسك وعدًا بأنك ستكتب ولن تتشتت بشيء آخر لمدة 25 دقيقة. إذا كنت ما تزال تواجه صعوبةً في المحافظة على تركيزك، فيمكنك تجربة مكون إضافي للمتصفح مثل Strict Workflow لحظر مواقع الويب التي تشتت انتباهك أثناء فترات العمل؛ وإذا لم يكن لديك تطبيق مؤقت، فيمكنك ببساطة البحث على جوجل "المؤقت" ومن ثم اختيار المدة التي تريدها والضغط على زر التشغيل. 7. وضع هدف محدد لرفع الإنتاجية علاوةً على ضبط مؤقت، قد تجد أن من المفيد لك تحديد هدف واضح لنفسك حول عدد الكلمات التي تريد كتابتها، فقد تضع على سبيل المثال هدفًا يوميًا من الكلمات يجب إنجازه، أو قد تحدد مدة معينة لإنجاز ما تبقى من مقالك. ستساعدك الأهداف الذكية على تحسين تركيزك وزيادة سرعة عملك، فإذا كنت تعمل على مشروع طويل، مثل كتابة كتاب إلكتروني، فإن تعيين هدف لعدد الكلمات قد يكون أسلوبًا فعالًا للبقاء على المسار الصحيح. وهنا قد يتبادر إلى ذهنك سؤال "ما هو الهدف الجيد لعدد الكلمات؟" الإجابة في الواقع تختلف من شخص إلى آخر بناءً على سرعة الكتابة ومقدار الوقت المتاح لديك. واحدة من الطرق التي يمكنك اتباعها هي كتابة مقال بطول ألف كلمة، وحساب المدة المستغرقة لكتابته، ومن ثم وضع هدف لإكمال الألف كلمة التالية بمدة زمنية أقل من المدة المستغرقة في المرة الأولى. إذا كنت تعاني من نقص التحفيز، فحاول تحديد هدفين مختلفين لعدد الكلمات، هدف الحد الأدنى وهدف مثالي. فعلى سبيل المثال، يمكنك تعيين 100 كلمة يوميًا كحد أدنى لعدد الكلمات المنجزة، وتحديد 500 كلمة يوميًا كهدف مثالي تسعى إلى تحقيقه، ففي الأيام الصعبة والمشغولة، قد تكتفي بكتابة 100 كلمة ويكون ذلك بمثابة نجاح لك؛ ولكن عندما تكون كل الأمور على ما يُرام ولديك متسع من الوقت، فقد تسعى إلى الوصول إلى 500 كلمة كاملة. 8. بناء عادات كتابة خاصة بك لدى العديد من المدونين عادات خاصة لبدء يومهم، ويمكن أن يكون ذلك أمرًا بسيطًا، مثل قراءة أهدافهم، وفتح مستنداتهم التي يعملون عليها وتدوين 3-5 أفكار رئيسية يخططون لتغطيتها خلال اليوم. يحب بعض الأشخاص إضافة عناصر حسية إلى طقوس الكتابة، مثل إضاءة شمعة أو شرب فنجان من القهوة المفضلة، كما قد يبدأ آخرون بوقت قصير من التأمل أو قراءة بعض الاقتباسات الملهمة. مع ذلك، لا تجعل طقوس كتابتك طويلة جدًا أو معقدة، لأن ذلك لن يخدمك في تعلم الكتابة السريعة، بل الأفضل أن تختار أشياء تستغرق بضعة دقائق فقط؛ كذلك، يجب أن تكون مرنًا ولا تتشبث بعاداتك دائمًا، لا سيما إذا كنت تكتب في أكثر من مكان مختلف، فليس من المناسب مثلًا أن تضيء شمعتك إذا كنت تعمل في مكتبة عامة. قد يكون من المناسب لك أيضًا أن تبني عادات فائقة السرعة لاستخدامها في الأوقات التي تكون فيها بحاجة إلى إعادة التركيز أثناء جلسة الكتابة، فقد تقاطعك مكالمة هاتفية، ثم تتشتت على منصات التواصل الاجتماعي مثلًا؛ حينها، يمكنك إعادة التركيز عن طريق إغلاق التطبيقات وعلامات التبويب غير المهمة على متصفحك قبل أخذ بعض الأنفاس العميقة. 9. لا تحرر أثناء الكتابة إحدى الأخطاء المؤكدة التي تؤدي إلى إبطاء وتيرة عملك هي التحرير أثناء الكتابة، إذ لا يمكن القيام بالأمرين معًا في آن واحد؛ فإذا كتبت جملةً ثم حذفتها، ثم كتبت جملة أخرى وحذفت نصفها، ثم كتبت أكثر قليلًا، ثم رجعت وأصلحت بعض الأخطاء المطبعية أو عدلت عنوان منشورك، فمن الصعب حقًا إحراز أي تقدم بهذه الطريقة. حاول قدر الإمكان أن تكتب منشورًا كاملًا قبل البدء بتحريره، لأنك عندما تدخل في عملية الكتابة، سيكون من السهل الاستمرار فيها، وبمجرد حصولك على مسودة كاملة، يمكنك مراجعة منشورك بالكامل ومعرفة ما يجب تغييره، وقد تكون التعديلات أقل مما تظن. إضافةً إلى عدم التحرير أثناء الكتابة، حاول ألا تتوقف ٱثناء الكتابة وتتشتت في البحث عن الأشياء، وإذا كنت بحاجة إلى التحقق من معلومة معينة أو إضافة رابط ما، فما عليك سوى إضافة تعليق على المستند أو تمييز النص بلون مختلف حتى تتمكن من العودة إليه لاحقًا. صحيح أن الأمر قد يستغرق 30 ثانيةً فقط للتحقق من معلومة ما، ولكنه سيعرقل تقدمك، وقد ينتهي بك الأمر في حلقة تشتت الانتباه؛ إذ يؤدي التحقق من رابط في مدونة صديقك إلى قراءة أحدث مقالاته، والنقر على رابط آخر، والتمرير عبر منصات التواصل الاجتماعي، وما إلى ذلك. 10. استخدم أداة تعديل النصوص Text Expander للعبارات الشائعة هل تجد نفسك تستخدم ذات العبارات في عدد كبير من منشورات مدونتك؟ هل تفكر أحيانًا في الإشارة إلى مدونة أخرى باسم طويل وترى أن ذلك يستغرق وقتًا في الكتابة؟ أو هل ترغب في تدوين الاسم الكامل للمنتج بسرعة؟ يمكنك الحصول على كل المزايا السابقة باستخدام أداة تعديل النصوص text expander، والتي تتيح لك استبدال الاختصار أو الرمز القصير بالاسم الكامل تلقائيًا. على سبيل المثال، يمكنك تحويل الاختصار "SME" تلقائيًا إلى الاسم الكامل "Social Media Examiner". يمكنك أيضًا استخدام أداة تعديل النصوص لتصحيح الأخطاء الإملائية، أو لتعديل الأحرف الكبيرة والصغيرة في بداية الكلمات، بحيث إذا كتبت كلمة ووردبريس باللغة بالإنجليزية بهذه الطريقة "Wordpress" مثلًا، فستعمل الأداة على تصحيحها تلقائيًا إلى الشكل "WordPress". هناك الكثير من أدوات تعديل النصوص المختلفة، يمكنك استخدام أداة Text Expander التي تحتوي على نسخة تجريبية مجانية لمدة 30 يومًا، وكذلك أداة Beeftext التي تُعَد خيارًا مجانيًا جيدًا لنظام التشغيل Windows. يمكنك أيضًا استخدام أدوات تعديل النصوص لأغراض أخرى، مثل الردود التلقائية على رسائل البريد الإلكتروني الشائعة التي تتلقاها من القراء. يجب أن تلاحظ أن هذه الٱدوات لا تساعدك على تسريع كتابتك فوريًا، لكنك مع الوقت ستلاحظ نتائجها الرائعة وقدرتها على توفير الوقت الذي تقضيه في الكتابة. في الختام مهما كانت سرعة كتابتك الحالية، كن على يقين بأنك قادر على تحسينها، وقد عايش الكثير من المدونين التطورات الهائلة التي طرأت على مستوياتهم في الكتابة مع استمرارهم الدؤوب في العمل بانتظام ومحاولة تطوير أنفسهم وزيادة سرعتهم في الكتابة. قد تجد أن بعض هذه النصائح لا تتماشى مع طبيعة عملك أو أنها لا تساعدك على تسريع كتابتك، كما قد تجد أنك ملتزم فعلًا ببعض منها، مثل الكتابة اليومية؛ أو ربما تشعر أن بعض هذه النصائح تزيد الضغط عليك، مثل استخدام المؤقت، لذا اختر النصائح التي تشعر أنها تناسبك، فليس من الضروري أن تطبقها كلها. ومع ذلك، حاول تجربة كل النصائح الواردة في هذا المقال، حتى وإن كنت قد جربت شيئًا من قبل وفشلت في تنفيذه بالكامل، فقد تتمكن من الاستفادة منه في هذه المرة وتكتشف كيفية الكتابة بطريقة أسرع. في هذا الأسبوع، يمكن أن تركز على نصيحة واحدة أو نصيحتين، وسترى خلال وقت قصير الفرق الذي طرأ على كتابتك، ولا تيأس إذا لم تتحسن سرعة كتابتك من يوم إلى آخر، فمجرد تحسنك بنسبة 10% كل أسبوع يعني مضاعفة سرعة كتابتك بعد 9 أسابيع. ترجمة -وبتصرّف- للمقال How to Write Faster Blog Content لصاحبه Ryan Robinson. اقرأ أيضًا كيف تنظم جدول أعمالك ككاتب حر بدوام كامل؟ 9 خطوات لكتابة مقالات بشكل أسرع وزيادة أرباحك كمُستقل مدخل إلى التدوين ونشر المدونات وما يتعلق بها عبر منصة ووردبريس
  13. عندما تريد دخول عالم التجارة الإلكترونية، يجب أن تكون لديك فكرة واضحة عن المنصة المناسبة لعملك، إذ ليس من الصائب أن تختار منصةً عشوائيةً لإنشاء متجرك الإلكتروني، لأن ذلك مرتبط إلى حد كبير بمصير نشاطك التجاري ومستقبلك ونجاحك. ستصادف خلال رحلتك العديد من أصحاب الأعمال غير الراضين عن منصات متاجرهم الإلكترونية، لذا يجب أن تحرص على ألا تندرج ضمن هذه القائمة. وسواءً كان عملك صغيرًا أم كبيرًا، يجب أن تختار منصة التجارة الإلكترونية بعناية، لأن تغيير المنصة لاحقًا قد يفرض عليك تكاليفًا وأعباءً أنت في غنى عنها. هنا، إن فشلت في اختيار المنصة المناسبة، فسينعكس ذلك على نمو ونجاح متجرك الإلكتروني في المستقبل. ولهذا السبب، يُعدّ البحث الاستباقي حول المنصات والميزات التي تقدمها أمرًا في غاية الأهمية. إذا ذهبت إلى أي شركة برمجيات لتطوير متجرك الإلكتروني، فإن إحدى الأسئلة الأساسية التي ستُطرح عليك هي عن المنصة التي تريد بناء متجرك الإلكتروني عليها، وصحيح أنهم سيرشدونك إلى بعض الخيارات، ولكن القرار النهائي لك. إن اختيار منصة التجارة الإلكترونية المناسبة لنشاطك التجاري يعني إيجاد التوازن الصحيح بين متطلباتك كتاجر من جهة، وبين متطلبات عملائك من جهة أخرى. لذلك سنُجري في مقالنا هذا مقارنةً بين منصتين رائدتين في التجارة الإلكترونية، هما شوبيفاي Shopify وماجنتو Magento. ما هو شوبيفاي Shopify؟ شوبيفاي Shopify هو منصة مختصة بالتجارة الإلكترونية، تتيح للمطورين أو أصحاب الأعمال إمكانية إنشاء مواقعهم على الإنترنت دون الحاجة إلى أي خبرات تقنية، وهو يأتي مع خيارين: شوبيفاي العادي Shopify: هو حل استضافة يمنح أصحاب الأعمال التجارية حرية تخصيص واجهات متاجرهم الإلكترونية وبيع المنتجات وإدارة أعمالهم التجارية عبر الإنترنت. شوبيفاي متقدم Shopify Plus: منصة متعددة القنوات تتمتع بمستوى تخصيص أعلى، مع دعم وميزات أقوى من شوبيفاي العادي. ما هو ماجنتو Magento؟ ماجنتو Magento هو منصة للتجارة الإلكترونية طُوِّرت عام 2007 باستخدام تقنيات مفتوحة المصدر، وهي منصة مرنة قابلة للتخصيص والتطوير بدرجة كبيرة. وهي تأتي أيضًا في شكلين: ماجنتو مفتوح المصدر Magento Open Source: هو منصة مجانية ذاتية الاستضافة توفر جميع الوظائف لتطوير المتاجر الإلكترونية من الصفر. متجر ماجنتو Magento Commerce: هي النسخة المدفوعة من ماجنتو، ويستخدمها أصحاب الأعمال التجارية والمطورين الذين يريدون حلًا شاملًا وسريعًا لتحسين متاجرهم الإلكترونية وتعزيز مبيعاتهم. الاختلافات الرئيسية بين ماجنتو وشوبيفاي ثمة جوانب عديدة يختلف فيها ماجنتو وشوبيفاي عن بعضهما البعض، لذا إليك فيما يلي مقارنة سريعة في كل جانب: الانتشار في الوقت الحالي، يُعدّ ماجنتو منصة التجارة الإلكترونية الأكثر استخدامًا، إذ يعتمد عليه 14% من المتاجر الإلكترونية، بينما تبلغ نسبة مستخدمي شوبيفاي 6% من المتاجر الإلكترونية حول العالم. إذا كنت تريد مقارنة شوبيفاي مع ماجنتو من حيث الانتشار، فإن أفضل طريقة هي معرفة نسبة العلامات التجارية الشهيرة التي تستخدم كل منصة. وهنا نلاحظ أن الشركات الكبرى مثل نايك Nike وروزيتا ستون Rosetta Stone وأوليمبوس Olympus تستخدم ماجنتو؛ في حين أنه لدى شوبيفاي بعض الأسماء الكبيرة، مثل تسلا Tesla ومتجر Los Angeles Lakers، لذا فإن كلا المنصتين تفتخران بشركات ناجحة تعتمد عليها. من الناحية البرمجية ثمة فارق كبير جدًا بين شوبيفاي وماجنتو من الناحية البرمجية، إذ يستخدم ماجنتو لغة PHP، بينما يستخدم شوبيفاي لغة Liquid. إضافةً إلى ذلك، شوبيفاي ملكية خاصة، أي أنه مغلق المصدر؛ بينما ماجنتو منصة مفتوحة المصدر، ما يعني أنه متاح مجانًا ويمكنك تعديل التعليمات البرمجية وإجراء أي تغييرات وفقًا لاحتياجاتك ومتطلباتك، ولكن النظام المغلق لا يسمح لك بهذه التسهيلات. يمكن مع ماجنتو التعديل على الشيفرات البرمجية للقالب حتى يناسب الاحتياجات المحددة للمتاجر، في حين لا يمكن ذلك مع شوبيفاي. ولذلك فإن شوبيفاي هو الحل الأمثل والمناسب للمتاجر البسيطة، لكنه لا يناسب المتاجر المعقدة التي تتطلب تغييرات في الشيفرات المصدرية. السعر يجب عليك في البداية تحديد ميزانيتك لأعمالك في التجارة الإلكترونية، نظرًا لأن بعض المنصات أغلى بكثير من غيرها. عند اختيار النظام الأساسي لمتجرك الإلكتروني، احرص على مراعاة جميع التكاليف، وليس فقط التكاليف الأولية لإنشاء المتجر، وقد تشمل التكاليف البعيدة أشياء مثل الصيانة والأمن والاستضافة وغير ذلك. شوبيفاي: حل بأسعار مقبولة لدى شوبيفاي عدد من خطط الاشتراك التي تختلف في أسعارها، لكن خطة شوبيفاي الأساسية تبدأ بسعر 29 دولارًا وتحتوي على الحد الأدنى من الميزات؛ أما الخطط الثانية فهي أكثر تقدمًا، ويتراوح سعرها بين 79 إلى 299 دولارًا شهريًا؛ بينما شوبيفاي المتقدم Shopify Plus، يعتبر مخصص للشركات الكبيرة، وتبدأ أسعار الاشتراك فيه من حوالي 2000 دولار شهريًا. كلما اخترت خطة اشتراك أعلى، ستتمكن من الوصول إلى المزيد من الميزات، مثل استعادة سلة التسوق المهجورة، والحصول على تقارير وإحصائيات متقدمة، وبطاقات الهدايا. وفيما يلي صورة توضح أسعار خطط الاشتراك في شوبيفاي، مع مميزات كل خطة. أما رسوم المعاملات، فإن شوبيفاي يفرض رسوم على المدفوعات التي تتم من خلال بوابات الدفع الخارجية، وتتراوح نسبة الرسوم بين 0.5% إلى 2%؛ لذا كلما زاد عدد المعاملات التي تجريها، زادت تكلفة رسوم المعاملات شهريًا. لكن باستخدام بوابة الدفع المباشرة الخاصة بشوبيفاي، يمكنك تجنب دفع أي رسوم. ماجنتو: مرتفع الثمن ماجنتو هو إطار عمل مفتوح المصدر يمكن تنزيله مجانًا، والاستضافة فيه ذاتية، لكن يجب الدفع مقابل خدمات الاستضافة الخارجية. تعتمد تكلفة ماجنتو على المنتج الذي تستخدمه؛ كما يجب عليك تغطية جميع رسوم الاستضافة والأمان والتطوير والتصميم، ويمكن أن تصل تكلفة الاستضافة إلى 3.95 دولارًا شهريًا من شركات مثل SiteGround أو HostGator. يُعدّ حل الاستضافة الذي تختاره مهمًا جدًا، إذ يمكن أن يؤثر على سرعة الموقع ومساحة تخزينه وعدد المنتجات التي يمكن لموقعك إدارتها. لذلك إذا كنت تستخدم ماجنتو، فيمكنك اختيار أي حلول استضافة تريدها حسب احتياجاتك، على عكس استضافة شوبيفاي. وإذا كنت تبحث عن التكلفة النهائية لكل من ماجنتو وشوبيفاي، فأنت بحاجة إلى حساب الملحقات الإضافية أيضًا. علاوةً على ذلك، عادةً ما يلجأ مستخدمو ماجنتو إلى توظيف مطور ماجنتو لتطوير الموقع وإعداد المتجر، لذلك ينبغي حساب تكلفة المطورين ضمن التكلفة التقريبية للمشروع. لا يتقاضى ماجنتو أي رسوم مقابل تنزيله واستخدامه، لكن ستحتاج إلى شراء خطة استضافة. وإذا كنت تريد اختيار خطة استضافة، فيُفضَّل ألا تلجأ إلى الاستضافات الرخيصة. بل اختر عرض نطاق ترددي Bandwidth أفضل وحزمة تحسين إضافية. يتحسن أداء ماجنتو مع الاستضافات الجيدة، لذلك يجب دراسة خدمات الاستضافة جيدًا قبل اختيار واحدة منها، لأن ذلك سيؤثر بالتأكيد على أداء متجرك الإلكتروني، لا سيّما عندما يصبح متاحًا للجمهور ويزداد عدد زواره. إذا كنت تبحث عن الخيار الأوفر، فإن شوبيفاي هو الأنسب لك، كما أن تكلفته النهائية واضحة ويمكن التنبؤ بها، فهي تشمل تكلفة شهرية حسب الخطة، إضافةً إلى رسوم محددة لكل عملية بيع. الأمان لا بُدّ للأمان أن يتربّع على قمة أولوياتك عندما تخطط لإنشاء متجرك الإلكتروني، فوفقًا لإحدى التقارير، 61% من المتسوقين لن يشتروا أي منتجات من موقع إلكتروني يفتقد إلى إشارات الأمان، مثل شهادة SSL. لا يمكن للمتاجر الإلكترونية تحمل أي هجمات يمكن أن تقلل من عدد الزوار وتدمر ثقتهم في العلامة التجارية أيضًا، لذلك من الضروري بذل جهد إضافي لتأمين موقعك الإلكتروني، وإليك فيما يلي مقارنة بين شوبيفاي وماجنتو من ناحية الأمان: شوبيفاي: آمن شوبيفاي عبارة عن منصة قائمة على نظام البرمجيات كخدمة SaaS، لذا فهي آمنة، وهذه ميزة لصالح شوبيفاي. فضلًا عن ذلك، يحقق شوبيفاي جميع الفئات الستة لمعايير PCI، كما تتضمن المواقع التي يستضيفها شهادة أمان SSL. ماجنتو: يعتمد الأمان فيه على معاييرك يعتمد الأمان في ماجنتو على المطورين ومدى الأمان الذي يريدون تحقيقه. فحتى بالنسبة للأشياء البسيطة مثل شهادة SSL، يجب على المطورين الاهتمام بالموقع للحصول عليها. سيصحح ماجنتو بعض المخاطر الأمنية المعروفة، مثل ثغرة حقن SQL التي عرّضت حوالي 300 ألف متجر ماجنتو للخطر عام 2019، لكن تبقى مسؤولية تحديث موقعك وحمايته بالكامل ضمن مسؤوليات مطوري ماجنتو. تحسين محركات البحث SEO يشتري معظم المستخدمين منتجاتهم عبر الإنترنت من خلال استخدام محركات البحث، لذلك من المهم جدًا تهيئة صفحات متجرك الإلكتروني لملائمة محركات البحث، بحيث تظهر صفحات منتجاتك في أول نتائج محركات البحث. في الواقع، عند الحديث عن تحسين محركات البحث SEO، فإن منصات التجارة الإلكترونية متساوية إلى حد ما، خاصةً عندما تنظر إلى المكونات الإضافية. يُعدّ شوبيفاي أفضل في هذا المجال بالنسبة للمبتدئين، لكن بالنسبة لمن لديهم بعض الخبرات في مجال تحسين محركات البحث، فسيكون من الأفضل لهم تثبيت ماجنتو. لا يسمح ماجنتو بتحرير البيانات الوصفية، لكنه يتيح إمكانية إنشاء منتجات حيوية وتخصيص صفحات منتجاتك، مما يعزز تحسين محركات البحث في موقعك، وهو أمر لن تجده مع نظام البرمجيات كخدمة SaaS، مثل شوبيفاي. والآن، من الواضح أن ماجنتو يأتي في المركز الأول في مجال تحسين محركات البحث، نظرًا لقدرته على تخصيص عملية تحسين محركات البحث يدويًا، بينما يأتي شوبيفاي في المرتبة الثانية. السرعة والأداء تُعدّ سرعة متجرك الإلكتروني وأدائه من العوامل الرئيسية التي قد تؤثر على تحسين محركات البحث الخاصة بمتجرك، ومن الأمور المثبتة عمليًا أنه كلما زادت مدة تحمل صفحات موقعك الإلكتروني، زادت احتمالية خسارة العملاء المحتملين، ليذهبوا إلى متاجر المنافسين. شوبيفاي: أداء متوسط يقدم شوبيفاي حل استضافة، لذا لا داعي للقلق بشأن سرعة موقعك وأدائه، إذ لا يمكنك أساسًا التحكم في بيئة الاستضافة أو ضبط مستوى الخادم. وفي حال واجهت أي مشكلات تتعلق بالسرعة، فيجب التواصل مع فريق الدعم الفني في شوبيفاي. ماجنتو: أسرع وأكثر سلاسة على عكس شوبيفاي، يُعرف ماجنتو بمرونة التحكم فيه واختيار مزود الاستضافة، لأن ماجنتو عبارة عن منصة ذاتية الاستضافة، فهي تسمح لك باختيار الخادم الذي تريده، وإجراء جميع التعديلات اللازمة لتعزيز أداء موقعك الإلكتروني. ستتحمل بالتأكيد تكاليف كبيرة إذا قررت الاعتماد على خدمات مزودي استضافة ماجنتو Magento Web Hosting Providers، لكنك ستحصل على تجربة بسرعات تحميل عالية وأداء مستقر وحرية تخصيص موقعك الإلكتروني كما تشاء. إذًا مرةً أخرى، ماجنتو يتفوق من ناحية السرعة والأداء على شوبيفاي. ملخص سريع إليك في الصورة التالية مقارنةً سريعةً بين كل من شوبيفاي وماجنتو: في الختام يعتمد الأمر بأكمله على الميزات التي تبحث عنها والخدمات التي تريد الحصول عليها، ويمكن القول بأن ماجنتو خيار أفضل إذا كنت تريد رحلات عملاء مخصصة لا يجدونها في أي مكان آخر؛ أما شوبيفاي، فهو خيار مفيد للتجار الذين يريدون إنشاء متجر إلكتروني مع امتلاكهم خبرات برمجية متواضعة. إذا كنت ما تزال محتارًا، فانظر إلى ميزانيتك، إذا كنت تستطيع تغطية تكاليف ماجنتو، فهو الخيار الأفضل؛ أما إذا لم تكن لديك الميزانية والوقت لإنشاء موقع فريد، فإن شوبيفاي هو الخيار المناسب للحصول على موقع بواجهة متجر جيدة تقدم للعملاء المعلومات التي يحتاجون إليها. ترجمة -وبتصرّف- للمقال ?Shopify vs Magento – Which One to Choose For Your e-Commerce Website لصاحبه Kiran Beladiya. اقرأ أيضًا مقارنة بين ووردبريس WordPress وشوبيفاي Shopify للتجارة الإلكترونية أيهما أفضل، شوبيفاي أم ووكومرس؟ نقل متجرك الإلكتروني من شوبيفاي Shopify إلى ووكومرس WooCommerce
  14. يُعدّ وجود تطبيقات شوبيفاي جيدة لبيئات مختلفة مثل التطوير والإنتاج أمرًا مهمًا في سوق تطبيقات شوبيفاي. وعلى الرغم من أنها فكرة واضحة ومباشرة، إلا أن الكثير من المطورين مازالوا يواجهون صعوبةً في إتقان هذا المجال، لا سيّما المطورين الجدد، وذلك بسبب عدم إصدار شوبيفاي أي أدلة موثقة تشرح كيفية تطوير تطبيقات شوبيفاي، وهو ما يؤدي إلى قضاء المطورين ساعات طويلة في محاولة فهم العملية. المشكلة لاختبار أي تطبيق على شوبيفاي، من الضروري إنشاء اتصال بين التطبيق الموجود على جهازك المحلي والتطبيق الموجود في لوحة تحكم شوبيفاي بارتنر Shopify Partner Dashboard. عملية إنشاء تطبيق جديد في لوحة التحكم بارتنر partner dashboard والاتصال مع التطبيق الجديد تتم تلقائيًا عند إنشاء تطبيق جديد باستخدام واجهة سطر أوامر شوبيفاي Shopify CLI عبر (npm init @shopify/app@latest). وبعد ذلك، حالما تطلق خادم التطوير عن طريق تشغيل الأمر npm run dev، ستعمل واجهة سطر أوامر شوبيفاي Shopify CLI على تحديث عنوان الويب URL في إعدادات التطبيق للإشارة إلى عنوان الويب URL الجديد، وهو ما ينقل الطلبات إلى ذ لديك. عند نقل التطبيق إلى مرحلة الإنتاج، سيتعيّن عليك تحديث عنوان الويب URL للتطبيق يدويًا مع عناوين الويب URL التي تستضيف تطبيقك عليها؛ لذا لا يُنصح باستخدام التطبيق نفسه في مراحل التطوير المتقدمة، لأن تفعيل الأمر npm run dev سيؤدي إلى تحديث عناوين الويب URL للإشارة إلى خادم التطوير المحلي لديك، مما يؤدي إلى تعطل التطبيق، وهذه نقطة مهمة يجب أخذها في الحسبان خلال تطوير تطبيقات شوبيفاي. توضح الصورة أدناه ما ذكرته منصة شوبيفاي في أدلتها الرسمية حول الموضوع السابق: يحافظ بعض الأشخاص على تعليمات برمجية متطابقة لإصدارات مختلفة من نفس التطبيق، وهو ليس بالحل المثالي، إذ تفرض هذه الطريقة العديد من التحديات في الحفاظ على تزامن قواعد التعليمات البرمجية. عوضًا عن الطريقة السابقة، إليك فيما يلي حلًا بسيطًا يتضمن إنشاء وصيانة تطبيقات مختلفة لبيئات متعددة باستخدام قاعدة تعليمات برمجية واحدة. وعلى الرغم من أننا سنستخدم قالب بلغة Node كمثال، لكن يمكن تطبيق هذا الحل مع لغة روبي Ruby ولغة php. الحل يتكون التطبيق من جزأين، الجزء الأول هو التطبيق نفسه، والذي يتضمن الواجهة الأمامية والخلفية وتكون استضافته من عندك؛ أما الجزء الثاني فهو امتداد قالب التطبيق، والتي يستضيفها شوبيفاي. وبما أن هذين المكونين يتطلبان استضافةً منفصلة، فيجب إدارة كل منهما على حدة. الجزء الأول: التطبيق أنشئ تطبيقًا جديدًا من لوحة تحكم بارتنر partner dashboard واستخدم معرف العميل ID الذي أُنشئ حديثًا وكلمة سر العميل لنقل التطبيق إلى مرحلة الإنتاج، وإليك فيما يلي شرحًا مفصلًا أكثر: 1. إنشاء تطبيق جديد أنشئ تطبيقًا جديدً يدويًا في لوحة تحكم شوبيفاي بارتنر Shopify Partner Dashboard، ويمكنك متابعة لقطات الشاشة أدناه لفهم الخطوات جيدًا: 2. استخدام بيانات اعتماد التطبيق الجديد خلال إنشاء التطبيق في مرحلة الإنتاج ستختلف الخطوات الآن اعتمادًا على مزود الاستضافة الذي تستخدمه، لكن يبقى المبدأ الأساسي على حاله، إذ يجب أن تحتوي متغيرات البيئة على بيانات اعتماد التطبيق الجديد، والتي تتكون من معرف العميل وكلمة سر العميل. على سبيل المثال، إذا كنت تريد نشر تطبيق باستخدام fly.io، فستحتاج إلى إضافة بيانات اعتماد التطبيق الجديد في ملف fly.toml. سيؤدي الآن تفعيل الأمر npm run dev على جهازك المحلي إلى إنشاء التطبيق الجديد وربطه مع التطبيق الأقدم في لوحة التحكم بارتنر partner dashboard. لكن عند نقل التطبيق إلى مرحلة الإنتاج (مثلًا باستخدام الأمر flyctl Publish --build-arg في fly.io)، فسيؤدي ذلك إلى إنشاء التطبيق وتوصيله مع التطبيق الجديد في لوحة تحكم بارتنر partner dashboard. الجزء الثاني: امتداد قالب التطبيق عملية نقل امتداد قالب التطبيق إلى مرحلة الإنتاج عملية واضحة ومباشرة، فعوضًا عن استخدام الأمر npm run، يجب عليك استخدام الأمر npm run deploy -- --reset سيؤدي هذا إلى مسح الإعدادات المحفوظة لأمر النشر، وهو أمر ضروري لأن الامتداد أُنشئ في تطبيق أقدم، وعند استخدام الأمر --reset سيطالبك Shopify CLI باختيار التطبيق الذي تريد نشر امتداد قالب التطبيق عليه. لاحظ أن هذه الخطوة لا تؤثر على الإعدادات المحفوظة للأمر npm run dev، مما يعني أن تفعيله سيستمر في نشر امتداد قالب التطبيق في التطبيق الاختباري الأقدم. في الختام باتباع هذه الخطوات، سيكون بإمكانك تحقيق النتائج المرجوّة، إذ يؤدي تشغيل الأمر npm run dev إلى نقل كل من التطبيق وامتداد قالب التطبيق إلى مرحلة اختبار التطبيق؛ بينما يؤدي تشغيل الأمر npm runploy -- --reset إلى نقل امتداد قالب التطبيق فقط إلى مرحلة الإنتاج، وفي الأخير، يؤدي تشغيل نص التفعيل مثل flyctl Publish --build-arg إلى نقل التطبيق فقط إلى مرحلة الإنتاج. الفائدة الرئيسية لهذا الأسلوب هي أنه يمكنك الاحتفاظ بتطبيقات متعددة لبيئات مختلفة باستخدام قواعد تعليمات برمجية واحدة، لكن بإعدادات تكوين مختلفة. ترجمة -وبتصرّف- للمقال Design a Separate Production App in Shopify لصاحبه Aditya Malani. اقرأ أيضًا شرح تفصيلي لكيفية إنشاء متجر إلكتروني على شوبيفاي Shopify كيف تزيد حركة المرور لمتجرك على شوبيفاي Shopify 20 من أفضل قوالب شوبيفاي Shopify مقارنة بين ووردبريس WordPress وشوبيفاي Shopify للتجارة الإلكترونية
  15. هل تفكر في نقل متجرك الإلكتروني من شوبيفاي Shopify إلى ووكومرس WooCommerce؟ قد تبدو عملية نقل متجرك الإلكتروني من منصة إلى أخرى أمرًا صعبًا، لكن نقل منتجاتك وعملائك وطلباتك إلى ووكومرس WooCommerce أسهل مما قد تعتقد. في الواقع، ثمة حل لا يتطلب أي تدخل فعلي، ويضمن لك نقل متجرك الإلكتروني بكل سلاسة؛ كما أنك لا تحتاج إلى امتلاك أي معرفة تقنية، فكل ما عليك فعله هو ربط المنصتين معًا وستكون جاهزًا للانطلاق. سنتعرف في هذا المقال على مزايا ووكومرس WooCommerce وعلى طريقة نقل متجرك الإلكتروني بسلاسة من شوبيفاي Shopify إلى ووكومرس WooCommerce. لماذا قد تختار ووكومرس بدلا من شوبيفاي؟ إليك فيما يلي بعض الأسباب التي قد تدفعك إلى نقل متجرك الإلكتروني من شوبيفاي إلى ووكومرس: تحكم أفضل في متجرك الإلكتروني يتيح لك ووكومرس إمكانية التحكم الكامل في متجرك الإلكتروني كونه مفتوح المصدر، مما يمنحك القدرة على تخصيصه كيفما تريد، إذ يمكنك تصميم متجرك الإلكتروني الذي تريده بالضبط دون أي قيود. فعلى سبيل المثال، يعتمد ترتيب صفحات متجرك الإلكتروني في نتائج محركات البحث على العمل الذي تقوم به في موقعك والمحتوى ضمنه، لذا يتيح لك ووكومرس تعديل أي جانب من جوانب تحسين محركات البحث، بغض النظر عن ارتباط هذا الجانب بالأمور التقنية. علاوةً على ذلك، ستستفيد من تكامل ووكومرس السلس مع ووردبريس، وهو ما يساعدك على نشر محتوى منظم وعالي الجودة. على سبيل المثال، تؤدي شركة The Coffee Bros عملًا رائعًا في دمج محتوى مدونتها مع متجرها الإلكتروني، إذ تجيب منشورات المدونة على أسئلة المستخدمين، مثل "ما هي أفضل درجة حرارة ماء لصنع القهوة؟"، بحيث يتمكن العملاء من العثور على المعلومات التي يحتاجون إليها دون مغادرة الموقع. دمج بوابة الدفع يتيح كل من ووكومرس وشوبيفاي التكامل مع حلول الدفع الرئيسية، لكن ما يميز ووكومرس أنه يتيح الاتصال ببوابات الدفع المتخصصة الأقل شهرة، والتي قد تكون ضروريةً لبعض المتاجر، ويمكنك من هنا معرفة بوابات الدفع المتاحة مع ووكومرس. وعلى النقيض من ووكومرس، تفرض شوبيفاي رسوم معاملات إضافية على جميع بوابات الدفع الخارجية. فبعد أن عمل أصحاب المتاجر الإلكترونية بكل طاقاتهم على إضافة منتجات رائعة وتسويقها لعملاء جدد، فإن أسوأ ما يمكنهم مواجهته هو تضييق هوامش أرباحهم، إذ يمكن أن تصل رسوم المعاملات الإضافية إلى آلاف الدولارات من الإيرادات المفقودة حتى في المتاجر الإلكترونية الصغيرة. النسخ الاحتياطي يتيح لك شوبيفاي إمكانية تصدير بيانات العملاء وطلباتهم، لكنه يفرض عليك دفع رسوم مالية مقابل إنشاء نسخة احتياطية لتصميم متجرك الإلكتروني وإعداداته. على الجانب الآخر، يوفر ووكومرس مجموعةً متنوعةً من خيارات النسخ الاحتياطي الممتازة والمجانية. ومع نمو متجرك الإلكتروني، سيكون من الضروري امتلاك أكبر قدر ممكن من التحكم في متجرك، لكي تتمكن من اتخاذ القرار الأفضل حسب كل حالة. على سبيل المثال، عند توسيع نطاق متجرك الإلكتروني، قد تحتاج إلى نقله إلى استضافة ويب أفضل، بحيث يتحمل عدد الزوار المتزايد، ويوفر خيارات أمان متقدمة، وهو ما يوفره لك ووكومرس، إذ يمكنك اختيار أي مزود استضافة تريده. مرونة وتخصيص لا حدود لهما واحدة من أكبر الفوائد التي ستحصل عليها مع ووكومرس هي مرونته، إذ يُعَد ووكومرس مفتوح المصدر، مما يعني أنه يمكن لأي شخص نسخ الشيفرة المصدرية والتعديل عليها بالطريقة التي يريدها. على الجانب الآخر، لا يمكنك التعديل على شوبيفاي كونه مغلق المصدر، إذ تحتفظ المنصة بالملكية الكاملة على الشيفرة البرمجية الأساسية. تتيح لك الأنظمة مفتوحة المصدر مثل ووردبريس خيارات تخصيص واسعة، إذ يمكن للمطورين إنشاء مكونات إضافية أو قوالب لتوفير وظائف وخصائص جديدة. يحتوي متجر إضافات ووردبريس على أكثر من 54000 خيار مجاني لتطوير كل جوانب متجرك الإلكتروني، مثل التصميم والتسويق وغير ذلك؛ كما يحتوي ووكومرس على متجر واسع يضم أكثر من 300 إضافة تختص بالمتاجر الإلكترونية. إذا كانت منتجاتك معقدة أو فريدة، فيمكنك إعداد متجرك بالطريقة التي تريدها باستخدام ووكومرس، وإليك فيما يلي بعض الطرق التي تمكّنك من ذلك: قبول الودائع من العملاء أو تقديم خطط دفع متنوعة. السماح للمتسوقين بدمج المنتجات وتشكيل مجموعات. بيع صورك عبر الإنترنت بطريقة ممتعة بصريًا. إضافة الحقول وإزالتها والتعديل عليها في صفحة الدفع. عرض ترقيات إضافية على المنتجات، مثل تخصيصها أو تغليفها على شكل هدايا. كما يمكنك بالتأكيد بيع أي شيء تريده، بما في ذلك المنتجات والخدمات وحتى التنزيلات والاشتراكات والعضويات والحجوزات، وإليك فيما يلي بعض الأمثلة على الأنشطة التجارية التي تستخدم ووكومرس: شركة Phi Phi Pirate Boat: هي شركة تقدم رحلات بالقوارب، لذا فهي تبيع حجوزات لرحلات خاصة حول جزر Phi Phi التايلاندية. برنامج PHLearn: يقدم عضويات التي تتيح للمستخدمين الوصول إلى مكتبة من قوالب التصميم والبرامج التعليمية. متجر TipoType: يختص ببيع تراخيص المنتجات الرقمية. مشروع It Gets Better: هي منظمة غير ربحية تبيع منتجات ملموسة وتقبل التبرعات عبر الإنترنت. متجر Mike's Organic Delivery: يختص ببيع اشتراكات في برامج غذائية صحية مع توصيل المنتجات أسبوعيًا للعملاء. أما من ناحية تصميم متجرك الإلكتروني، فإن تكامل ووكومرس مع ووردبريس يوفر لك مزايا كثيرة؛ فمن خلال محرر قوالب ووردبريس المجاني مثلًا، يمكنك إنشاء أي تصميم تريده، سواءً لصفحات الهبوط أو منشورات المدونة أو تصنيفات المنتجات أو غيرها من الصفحات، إذ يمكنك إضافة العناصر التي تريدها، من نصوص وصور ومقاطع فيديو وأعمدة وغير ذلك، وكل ذلك ببضع نقرات فقط دون الحاجة إلى امتلاك أي خبرات برمجية أو توظيف مطور. هناك أيضًا الكثير من قوالب المواقع الإلكترونية التي يمكنك الاعتماد عليها، منها قوالب قابلة للتخصيص، ومنها قوالب يمكنك تصميمها بنفسك عبر سحب العناصر إلى المكان الذي تريده، لذا يمكن أن تختار تصميمًا بسيطًا أو معقدًا كما تريد. فيما يلي بعض الأمثلة على المتاجر التي تستخدم ووكومرس لإنشاء تصميمات جميلة: يدمج متجر AeroPress رسومًا متحركة ورسومات مخصصة في صفحته الرئيسية. يحظى متجر Good Dye Young بتجربة مدونة فريدة مثل علامته التجارية. لدى متجر ShadowTrader صفحات هبوط فعالة لكل خيار من خيارات الطلبات لديهم. يوفر متجر Green Dinner Table لعملائه صفحة أسئلة وأجوبة سهلة الاستخدام، وتحمل علامتهم تجارية. يعرض متجر Magna-Tiles صور المنتجات بطريقة ممتعة ومميزة. تحكم أكبر في عملية التسعير الاشتراك في ووردبريس أو ووكومرس مجاني، لكنك ستتحمل تكاليف اسم النطاق Domain Name والاستضافة وأي توسعات أخرى ترغب في إضافتها. يمكنك اختيار أي مزود وإضافة التوسعات حسب احتياجاتك، أي لن تكون مضطرًا إلى الدفع مقابل الوظائف التي لا تستخدمها. على الجانب الآخر، إذا كنت تستخدم شوبيفاي، فستتحمل تكاليف ما يلي: الخطط الشهرية: اعتمادًا على خطة شوبيفاي التي اخترتها، يمكن أن تدفع بين 29 إلى 299 دولارًا شهريًا. وكلما زادت المزايا التي تريدها، كان عليك أن تدفع أكثر. على سبيل المثال، إذا كنت ترغب في تقديم أسعار شحن لحظية، فأنت بحاجة إلى استخدام الخطة المتقدمة من شوبيفاي. الإضافات: تتطلب العديد من إضافات شوبيفاي رسومًا شهريةً، فإذا كنت تريد إضافة قوائم انتظار لمنتجاتك مثلًا، فستتكلف حوالي 14.99 دولارًا شهريًا، وهو ما يعادل حوالي 180 دولارًا سنويًا. بالمقابل، العديد من إضافات ووكومرس مجانية، وغالبًا ما تفرض الإضافات المدفوعة رسومًا سنويةً مقبولة، مما يساعدك على توفير الكثير من الأعباء المالية. فعلى سبيل المثال، تكلفك إضافة قائمة الانتظار 49 دولارًا سنويًا فقط. المعاملات: إذا كنت تستخدم بوابة دفع خارجية، فإن شوبيفاي يأخذ ما من 0.5% إلى 2% مقابل كل معاملة، إضافةً إلى أي رسوم تفرضها بوابة الدفع، فحتى لو كان لديك عدد قليل من المعاملات يوميًا، فقد تخسر أرباحًا تقدر بآلاف الدولارات سنويًا. بالمقابل، لن تُفرض عليك أي رسوم إضافية في ووكومرس، ما يعني أنه بإمكانك توفير تكاليف إضافية. تكاليف الشحن والأدوات يسمح شوبيفاي للتجار بفرض رسوم الشحن وطباعة الملصقات من حساباتهم، كما يتضمن تطبيق الخصومات من شركات الشحن، لكن لكي تتمكن من عرض الأسعار اللحظية من شركات الشحن، يجب أن يكون لديك اشتراك في الخطة المقدمة، والتي تأتي بسعر مرتفع وهو 299 دولارًا شهريًا. تقدم ووكومرس ملحق WooCommerce Shipping الذي يتيح لك إمكانية طباعة الملصقات بسهولة من لوحة التحكم، مع إمكانية حساب الخصومات من شركات الشحن؛ كما يتيح لك إمكانية عرض أسعار الشحن اللحظية من شركات النقل مقابل 79 دولارًا سنويًا. واحدة من أكبر الاختلافات التي يجب ملاحظتها بين ووكومرس وشوبيفاي هو أن ووكومرس يدعم أصحاب الأنشطة التجارية الصغيرة، فعلى الرغم من أن نظامهم الأساسي مجاني تمامًا، لكنهم لا يكتفون ذلك، بل يقدمون موارد وأدوات إضافية مثل ملحق WooCommerce Shipping دون أي تكلفة مرتفعة. عندما تبدأ رحلتك في عالم التجارة الإلكترونية أو تحاول توسيع نشاطاتك التجارية، فإنه من المهم بالنسبة لك أن تحتفظ بأقل قدر ممكن من التكاليف، وهو ما يتيحه لك ووكومرس، فهو يساعدك على استثمار أموالك في المجالات التي تنمّي أعمالك وتجعلها أكثر نجاحًا. خيارات منتجات غير محدودة خيارات المنتجات هي الخيارات المقدمة للعملاء لكل منتج، فإذا كنت تبيع قمصانًا مثلًآ، فيمكنك تقديم قمصان باللون الأحمر والأزرق والأخضر والأصفر، وبمقاسات XS - 3XL؛ لذا سيصل عدد خيارات القمصان إلى 28 اختلافًا. واعتمادًا على طبيعة منتجاتك، قد يكون لديك عدد كبير من خيارات المنتجات، وهنا سترغب بكل تأكيد في أن يتمكن عملاؤك من اختيار المنتج المناسب لاحتياجاتهم. يحدد شوبيفاي خيارات المنتجات بـ 100 خيار فقط، فإذا كنت تبيع أحذيةً رجاليةً متوفرةً بثلاثة مقاسات عرض (ضيقة وعادية وواسعة)، وأحجام قياسية من 6 إلى 15 (بما في ذلك نصف المقاسات)، وثلاثة ألوان؛ فسيكون لديك 153 اختلافًا، وفي هذه الحالة ستتجاوز الحد الذي يسمح به شوبيفاي. لكن مع ووكومرس، يمكنك عرض أي عدد تريده من خيارات المنتجات. الانضمام إلى مجتمع متماسك استخدامك لووكومرس يعني أنك انضممت لمجتمع من الأشخاص الذين يرغبون في التعلم والنمو معًا. يجتمع سنويًا مئات الآلاف من المطورين وأصحاب المواقع من أكثر من 400 مدينة حول العالم ليبحثوا سبل تطوير ووكومرس. وفي كل تحديث لووردبرس، يساهم مئات المتطوعين المتحمسين لإنشاء برامج رائعة، كما يقدم هذا المجتمع المساعدة في منتديات الدعم الممتازة، حيث يمكنك إرسال أي سؤال والحصول على إجابات من مجموعة متنوعة من الآراء. وبغض النظر عن المشكلة التي تواجهك، هناك دائمًا شخص جاهز لمساعدتك. كيفية الانتقال من شوبيفاي إلى ووكومرس إذا كان لديك متجر إلكتروني على شوبيفاي وترغب في الانتقال إلى ووكومرس، فقد تشعر بأن المهمة مرهقة، فأنت لا تريد فقد بيانات العملاء وطلباتهم الحالية، وتريد أن تكون العملية سهلة وسلسة قدر الإمكان، لذا إليك الحل! ستحتاج أولًا إلى اختيار خطة استضافة، وتثبيت ووردبريس وتفعيل ووكومرس. وإليك فيما يلي كتاب من أكاديمية حسوب يشرح بالتفصيل كيفية إنشاء المواقع والمتاجر الإلكترونية عبر ووردبريس مع ووكومرس، كما يمكنك تصفح الكتاب على شكل مقالات تشرح كل خطوة من العملية، مثل مقال تثبيت إضافة WooCommerce وضبطها وبدء العمل على إنشاء متجر إلكتروني. من المهم ملاحظة أن نقل بيانات متجرك الإلكتروني من شوبيفاي إلى ووكومرس لا يعني نقل التصميم أيضًا، لكن هناك العديد من القوالب المجانية والمدفوعة التي يمكنك الاختيار من بينها وإنشاء أي تصميم تريده. وبعد ذلك، سيكون بإمكانك نقل بيانات متجرك من شوبيفاي إلى ووكومرس، وهناك عدة طرق آمنة لذلك، وهي: 1. التصدير والاستيراد اليدوي على الرغم من أن الأمر قد يستهلك بعض الوقت، لكن يبقى نقل البيانات اليدوي أمرًا مجانيًا، وإليك الخطوات فيما يلي: تصدير وتحميل بيانات منتجاتك من شوبيفاي. في لوحة التحكم الخاصة بك على ووردبريس، انتقل إلى ووكومرس WooCommerce ثم المنتجات Products. اضغط على "استيراد Import" في الأعلى، وستجد هناك أداة product CSV importer التي تسهّل عليك عملية استيرادات الملفات التي تضم بيانات منتجاتك. انقر فوق "اختيار ملف Choose File" وحدد ملف CSV الذي تريد استيراده، ثم انقر فوق "متابعة Continue". ستشاهد شاشة تخطيط الأعمدة، إذ يحاول ووكومرس تلقائيًا مطابقة الأعمدة في ملف CSV مع حقول المنتجات في ووكومرس. قد ترى أنك بحاجة إلى تخطيط بعض الأشياء بنفسك، لذا يمكنك إجراء ذلك باستخدام القوائم المنسدلة الموجودة على يمين كل صف. أخيرًا، انقر فوق "Run the Importer" لبدء الاستيراد، وانتظر حتى تنتهي العملية بأكملها. إذا كنت ترغب أيضًا في استيراد بيانات العملاء والطلبات من شوبيفاي، فيمكنك استخدام بعض الملحقات مثل Migrate & Import Shopify to WooCommerce أو Customer/Order/Coupon CSV Import Suite. 2. توظيف أحد الخبراء إذا لم تكن ترغب في نقل بيانات متجرك بنفسك، فيمكنك الاستعانة بمتخصص ليتولى الأمر نيابةً عنك. ويمكنك الوصول إلى أحد هؤلاء المتخصصين عبر منصة مستقل، أكبر منصة عربية للعمل الحر، إذ تضم نخبة كبيرة من المطورين والمبرمجين. 3. استخدم ملحق Cart2Cart يساعدك ملحق Cart2Cart على نقل بيانات متجرك إلى ووكومرس عبر ثلاث خطوات سهلة، كما يمكنك اختبار العملية من خلال النقل التجريبي المجاني الذي يوضح بالضبط كيفية عمل النقل. علاوةً على ذلك، لا تحتاج عملية النقل إلى أي خبرات تقنية، وسيكون بالإمكان أيضًا إبقاء متجرك على شوبيفاي فعالًا في الخلفية. فيما يلي بعض البيانات التي يمكن نقلها عبر ملحق Cart2Cart: بيانات المنتجات: مثل الأسماء والأرقام التسلسلية SKU والأوصاف والأسعار والأوزان والخيارات المتاحة لكل منتج. معلومات أصناف المنتجات: بما في ذلك الأسماء والأوصاف وعناوين صفحات الويب URL. بيانات العملاء: مثل أسمائهم وبريدهم الإلكتروني وعناوين سكنهم وأرقامهم وغير ذلك. بيانات الطلبات: مثل التواريخ والمعرّفات والحالات والكميات والخصومات وتفاصيل الشحن. القسائم: أسماء القسائم والأكواد ومقدار الخصومات. منشورات المدونة: ويشمل العناوين والأوصاف والتواريخ وعناوين الويب URL والمحتوى والصور. صفحات الموقع: بما في ذلك العناوين والتواريخ وعناوين الويب URL والحالات. مقابل تكلفة إضافية، يمكن لملحق Cart2Cart إنشاء 301 عملية إعادة توجيه لكل عناوين الويب URL في متجرك الإلكتروني، وهو أمر مفيد للغاية للحفاظ على ترتيب صفحاتك ضمن نتائج محركات البحث. كيفية استخدام Cart2Cart يمكنك إكمال عملية نقل البيانات في ثلاث خطوات: حدد منصة التجارة الإلكترونية المصدر (والتي هي في هذه الحالة شوبيفاي). وكل ما عليك فعله هو تقديم عناوين الويب الحالية وتفاصيل واجهة برمجة التطبيقات API. أنشئ اتصالًا مع منصة التجارة الإلكترونية الهدف (والتي هي ووكومرس)، إذ يمكنك تثبيت جسر الاتصال المطلوب على موقعك على ووردبريس يدويًا أو تلقائيًا. حدد أنواع البيانات التي تريد نقلها ومطابقتها مع حقول ووكومرس المقابلة. والآن، كل ما عليك فعله هو بدء عملية النقل والانتظار حتى النهاية، ويمكن أن تختلف مدة النقل بناءً على حجم متجرك الإلكتروني. ماذا عن الأمان؟ الأمان من الأمور الحساسة التي ستهتم لها، فأنت تريد حماية بيانات العملاء وبيانات الطلبات، لذا يحرص ملحق Cart2Cart على جعل عملية النقل آمنة قدر الإمكان. على سبيل المثال، تُنفّذ عملية النقل على خادم مخصص منفصل باستخدام تشفير SSL لحماية بياناتك. يمكن فقط لموظفي ملحق Cart2Cart المصرح لهم عرض تفاصيل تسجيل الدخول، كما أنه لا تُخزّن أي من هذه المعلومات بعد اكتمال عملية النقل. إضافةً إلى ذلك، يضمن المسؤولون عدم الكشف عن بياناتك لأطراف ثالثة أو استخدامها لأي أغراض أخرى. كم تكلف خدمة Cart2Cart؟ يعتمد السعر الدقيق على حجم متجرك الإلكتروني والبيانات التي تريد نقلها، إذ تبدأ التكلفة من 69 دولارًا، والتي تشمل نقل ما يصل إلى 1000 منتج و500 عميل و500 طلب، ويمكن أن يزيد السعر بناءً على حجم متجرك. وهناك ترقيات متاحة توفر وظائف إضافية، مثل عمليات إعادة التوجيه 301 ونقل منشورات المدونة. في الختام سواءً اخترت نقل البيانات بنفسك، أو وظّفت خبيرًا لذلك، أو استخدمت ملحق Cart2Cart؛ فإنه بإمكانك نقل متجرك بسرعة وكفاءة من شوبيفاي إلى ووكومرس، وهو خيار جيد سينعكس على عملائك وإيراداتك. ترجمة -وبتصرّف- للمقال How to Migrate from Shopify to WooCommerce (and Why You Should) لصاحبته Kathryn Marr. اقرأ أيضًا مقارنة بين ووردبريس WordPress وشوبيفاي Shopify للتجارة الإلكترونية شرح تفصيلي لكيفية إنشاء متجر إلكتروني على شوبيفاي Shopify دمج شوبيفاي shopify مع ووردبريس عبر تضمين زر الشراء أيهما أفضل، شوبيفاي أم ووكومرس؟
×
×
  • أضف...