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

واثق الشويطر

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

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

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

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

    4

آخر يوم ربح فيه واثق الشويطر هو أبريل 24 2020

واثق الشويطر حاصل على أكثر محتوى إعجابًا!

5 متابعين

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

آخر الزوار

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

إنجازات واثق الشويطر

عضو نشيط

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

56

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

5

إجابات الأسئلة

  1. عندما تبدأ تعلم قواعد البيانات لأول مرة، ستواجه عدة مشكلات في التعامل مع النصوص العربية، ولأنها خاصةٌ باللغة العربية لن تجد حلولًا سهلة على الإنترنت. نحاول في هذا المقال تلخيص حلول لحل هذه المشكلة الشائعة في قواعد البيانات. هناك حروف عديدة في اللغة العربية يتعامل معها الناس أحيانًا وكأنها شيء واحد، وتتعامل معها أنظمة قواعد البيانات على أنها حروف مختلفة مثل الألف "ا" والألف ذات الهمزة. عند إنشاء دالة بحث في موقع الويب فعليك تجاهل هذه الاختلافات، فلن يمكنك حل المشكلة عند استخدام الترميز غير الحساس لحالة الأحرف "utf8_unicode_ci"، ووفقًا لهذا الترميز لا يعد الحرفان "ا" و "أ" متساويين في حالة ربط المحارف character mapping، بل سيُعدّان مختلفان، وعند البحث عن أحدها لن يظهر الآخر. هناك ثلاثة حلول لهذه المشكلة: إنشاء ترميز محارف مخصص custom collation في قاعدة البيانات. إضافة حقل موحّد normalized في جدولك. استخدام التعابير النمطية regular expressions في الاستعلامات queries. سنوضح لك كيفية تطبيق هذه الحلول على MySQL. أما بالنسبة لأنظمة قواعد البيانات الأخرى، فيمكنك البحث في التوثيق عن حلول مشابهة. سيُطبّق كل حل على جدول المثال التالي: +----+-------------- + | id | name | +----+--------------+ | 1 | احمد | | 2 | أحمد | | 3 | أسامه | | 4 | أسامة | | 5 | اسامه | | 6 | اسَامه | +----+--------------+ 6 rows in set إنشاء ترميز محارف مخصص هذا هو الحل الموصى به في معظم الحالات، إذ لن تغيّر أي بيانات في قاعدة البيانات، لكن كل ما ستفعله هو إعداد قاعدة البيانات لتتعامل مع هذه الأحرف على أنها حرف واحد. سنعتمد في هذا على توثيق MySQL بإضافة ترميز UCA إلى مجموعة محارف يونيكود Unicode. أولًا، سنحتاج إلى تعديل ملف MySQL خاص يحتوي على مجموعات الأحرف وإضافة مجموعتنا الجديدة هناك. اسم الملف هو "Index.xml"، ويختلف موقع الملف من نظام إلى آخر. يمكننا معرفة موقع الملف من قاعدة بيانات "information_schema"؛ وهي هي قاعدة البيانات التي تُخزّن فيها البيانات الوصفية metadata والمعلومات الخاصة بقواعد بيانات MySQL. يمكنك الاطلاع على مقال خصائص قواعد البيانات والمزايا التي تقدمها على أكاديمية حسوب لمزيدٍ من المعلومات حول خصائص قواعد البيانات وبعض المصطلحات الأساسية. شغّل الاستعلام التالي في قاعدة بيانات "information_schema": SHOW VARIABLES LIKE 'character_sets_dir'; من المفترض أن تحصل النتيجة التالية أو ما يشبهها: +--------------------+----------------------------+ | Variable_name | Value | +--------------------+----------------------------+ | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------+----------------------------+ 1 row in set (0.00 sec) يكون مسار الملف على نظام دبيان لينكس Debian Linux، هو "usr/share/mysql/charsets/Index.xml/". خذ نسخة احتياطية من الملف، وافتحها، وانتقل إلى العنصر <charset name="utf8"‎>، إذ سنضيف ترميزنا المخصص تحتها. نحن بحاجة إلى رقم معرّف id واسم لترميزنا، إذ يجب أن يكون المعرّف ضمن النطاق المحجوز من الرقم 1024 إلى 2047 لأنه النطاق المحجوز للمستخدم، أما بالنسبة لاسم الترميز فليكن utf8_arabic_ci؛ إذ تدل ci على تجاهل حساسية الأحرف العربية، ويمكنك اختيار ما شئت من الأسماء. لنُضِفْ الترميز إلى ملف "Index.xml"، ثم نشرح ما تعنيه قواعد الترتيب. ضِف ما يلي: <collation name="utf8_arabic_ci" id="1029"> <rules> <reset>\u0627</reset> <!-- الألف دون همزة-ا --> <i>\u0623</i> <!-- الألف بالهمزة فوقها-أ --> <i>\u0625</i> <!-- الألف بالهمزة تحتها-إ --> <i>\u0622</i> <!-- الألف بالمدة فوقها -آ --> </rules> <rules> <reset>\u0629</reset> <!-- التاء المربوطة-ة --> <i>\u0647</i> <!-- الهاء-ه --> </rules> <rules> <reset>\u0000</reset> <!-- قيمة يونيكود المساوية لقيمة فارغة null --> <i>\u064E</i> <!-- الفتحة --> <i>\u064F</i> <!-- الضمّة --> <i>\u0650</i> <!-- الكسرة --> <i>\u0651</i> <!--الشدّة --> <i>\u064F</i> <!-- السكون --> <i>\u064B</i> <!-- الفتحتان --> <i>\u064C</i> <!-- الضمتان --> <i>\u064D</i> <!-- الكسرتان --> </rules> </collation> يُبلّغ هذا الجزء المضاف MySQL أن "utf8arabicci" -أو أيًا كانت تسميته- هو ابن لمجموعة محارف utf8، مضيفًا القواعد التالية: 'أ'، و 'إ'، و 'آ' هن نفس حرف 'ا' (جميع أشكال الألف هي حرف واحد). 'ه' هو نفس الحرف 'ة'، لذا فإن "نسمة" هي نفس "نسمه". تُتجاهل أحرف التشكيل تمامًا كما لو أنها غير موجودة. يمكنك إضافة المزيد من القواعد كما تريد. بعد حفظ الملف، أعد تشغيل خادم MySQL لاستخدام ترتيبنا. نكتب على نظام Debian ما يلي: sudo service mysql restart انتقل الآن إلى الجدول الذي يحتوي على النص العربي وغيّر ترميز الأعمدة إلى الترميز الجديد. سنفعل ذلك في جدول المثال بهذا الاستعلام: ALTER TABLE persons MODIFY name VARCHAR(50) CHARACTER SET 'utf8' COLLATE 'utf8_arabic_ci'; ملاحظة: إذا كنت تستخدم PHPMyAdmin أو واجهة رسومية مشابهة للتعامل مع MySQL، فلا تتوقع العثور على الترميز المخصص في القائمة المنسدلة للترميزات المتاحة. سيتعين عليك كتابة استعلام مثل ما ورد أعلاه لتغيير العمود إلى الترميز الجديد. إذا نجح الاستعلام، فيجب تعيين كل شيء إلى الترميز الجديد. لنجري استعلام بحث search query ونرn ما إذا كان يعمل كما ينبغي: SELECT * FROM persons WHERE name = "اسامة"; +----+--------------+ | id | name | +----+--------------+ | 3 | أسامه | | 4 | أسامة | | 5 | اسامه | | 6 | اسَامه | +----+--------------+ 4 rows in set (0.00 sec) عُرضت أشكال الألف المختلفة (بهمزة أو بغيرها)، وكذلك التاء المربوطة والهاء، لكن مع تجاهل التشكيل (لاحظ أن الاسم الأخير في النتائج اسَامه يحتوي على تشكيل). كان هذا هو الحل الأول، إذ لم نتطرق إلى البيانات نفسها هنا أو تعديلها، بل أُجريَت جميع التغييرات على نظام قواعد البيانات نفسه، ولكن ماذا لو لم يتح لك الوصول إلى ملفات مجموعات الأحرف، مثلًا عندما تستخدم استضافة مشتركة إذ تكون الصلاحيات مقيدة؟ أو عندما تستخدم قاعدة البيانات SQLite وليس لديك خيار لإضافة ترتيب جديد؟ هنا يأتي الحل الثاني ليفي بالغرض في هذه الحالات. إضافة حقل موحد normalized لا يتطلب هذا الحل تحرير ملفات الضبط، وهو مستقل عن نظام قاعدة البيانات؛ إذ يجب أن يعمل حتى لو غيرت نظام قواعد البيانات لأي سبب من الأسباب، ومع ذلك، سيتطلب الأمر إضافة عمود إضافي إلى جدولنا وبعض معالجة البيانات. الفكرة سهلة، أضِف عمودًا جديدًا واملأه بالنص العربي في حقل مُوَحَّد، ثم استخدم العمود المُوَحَّد في استعلاماتك. لنرى كيف نفعل ذلك. سنستخدم بعض أكواد PHP في هذا المثال لإضافة العمود الذي المُوَحَّد إلى جدولنا. يمكنك إجراء دوال مماثلة بأي لغة برمجة بمجرد أن تفهم الفكرة. استفد من دالة PHP هذه: function normalize_name($name) { $patterns = array( "/إ|أ|آ/" ,"/ة/", "/َ|ً|ُ|ِ|ٍ|ٌ|ّ/" ); $replacements = array( "ا" , "ه" , "" ); return preg_replace($patterns, $replacements, $name); } ما تفعله هذه الدالة سهل جدًا، فهي تستبدل كل تاء مربوطة ة بهاء ه، وجميع أشكال الألف أإآ بألف بدون همزة ا، وتزيل التشكيل. دعونا نرى ذلك في المثال: normalize_name("أحمد"); //‪ تعيد احمد ‪ normalize_name("آمنة"); //‪ تعيد امنه normalize_name("أسامه"); //‪ تعيد اسامه normalize_name("مٌحَمَّد"); //‪ تعيد محمد حسنًا، حصلنا الآن على دالة توحيد النصوص. ستكون الخطوة التالية هي إضافة عمود جديد إلى جدولنا وملؤه بالاسم المُوَحَّد. يجب أن تملأ برمجية صغيرة بيانات العمود فلا داعي لذكرها هنا. بعد ذلك، يجب أن يكون لدينا جدول يحتوي على البيانات التالية: 1 احمد احمد 2 أحمد احمد 3 أسامه اسامه 4 أسامة اسامه 5 اسامه اسامه 6 اسَامه اسامه العمود الثاني في التخطيط layout السابق هو حقل الاسم المُوَحَّد. حصلنا الآن على بياناتنا الموحّدة، فكيف نستخدمها لحل مشكلتنا؟ إذا بحث المستخدم عن اسم آسامة، فسنمرر هذا الاسم إلى دالة توحيد النص أولًا، والتي ستعيد الاسم المُوَحَّداسامه، ثم سنستعلم عن عمود normazlized_name الذي أنشأناه، ونعرض عمود الاسم الأصلي في نتائج البحث: SELECT id, name FROM persons WHERE normalized_name = "اسامه"; +----+--------------+ | id | name | +----+--------------+ | 3 | أسامه | | 4 | أسامة | | 5 | اسامه | | 6 | اسَامه | +----+--------------+ 4 rows in set (0.00 sec) هذا كل ما في الأمر، إذ أدى البحث عن آسامة إلى ظهور كافة الاختلافات في الاسم. باختصار، أضفنا الحقل الذي وحدنا نصّه إلى الجدول، ومرّرنا نص البحث إلى دالة توحيد النص، وبحثنا عن الاسم الذي المُوَحَّد، وعرضنا الاسم الأصلي. يعد هذا حلًا أكثر معيارية وقابلية للتنفيذ في أكثر من قاعدة بيانات، ولكنه يتطلب مزيدًا من العمل. استخدام التعابير النمطية في الاستعلامات في هذا الحل، لن نغيّر أي ملفات ضبط، ولن نضيف أي بيانات إضافية إلى قاعدة البيانات. ومع ذلك، فإن البحث المعتمد على التعابير النمطية Regexp أبطأ من البحث العادي، وستفقد ميزة استخدام الفهارس التي قد تؤثر على الأداء تأثيرًا سيئًا. ما تزال دالة التعابير النمطية Regex مفقودة في لغة SQL القياسية، ولكن معظم أنظمة قواعد البيانات توفر الدعم لها بصيغ مختلفة. لتطبيق هذا الحل، سنستبدل النمط القياسي "regexp" بنص البحث الأصلي. تُنفّذ التعبيرات العادية في MySQL باستخدام REGEXP أو مرادفها RLIKE. يمكنك الاطلاع على مقال دوال التعامل مع النصوص في SQL لمعرفة المزيد حول كيفية كتابتها. للبحث عن كافة تواجدات كلمة اسامة سنستخدم النمط التالي: "[ا|أ|إ|آ]سام[ه|ة]" يعني هذا النمط البحث عن أي شكل من أشكال الألف في بداية الكلمة، والبحث عن التاء المربوطة أو الهاء "ه" في نهايتها. لنجرب ذلك على جدول الأمثلة: SELECT id, name FROM persons WHERE name REGEXP "[ا|أ|إ|آ]سام[ه|ة]"; +----+------------+ | id | name | +----+------------+ | 3 | أسامه | | 4 | أسامة | | 5 | اسامه | +----+------------+ 3 rows in set (0.01 sec) عُرضت اسامة أينما وجدت، ما عدا الذي يحتوي على التشكيل كما ذكرنا من قبل. سيتعين علينا كتابة دالة لإنشاء هذا النمط إذا أردنا استخدام هذه الطريقة في حقول البحث. سأعطيك مثالا لذلك في PHP، ولكن هذا مجرد مثال وعلى الأرجح ستحتاج إلى طريقة مختلفة: function generate_pattern($search_string) { $patterns = array( "/(ا|إ|أ|آ)/", "/(ه|ة)/" ); $replacements = array( "[ا|إ|أ|آ]", "[ه|ة]" ); return preg_replace($patterns, $replacements, $search_string); } ستنشئ الدالة أنماطًا على النحو التالي: generate_pattern("أسامة"); // return '[ا|إ|أ|آ]س[ا|إ|أ|آ]م[ة|ه]' generate_pattern("أسامه"); // return '[ا|إ|أ|آ]س[ا|إ|أ|آ]م[ة|ه]' generate_pattern("احمد"); // return '[ا|إ|أ|آ]حمد' لاحظ في السطر الأول والثاني أن الدالة حلّت محل الألف في منتصف اسامة أيضًا. ستحتاج إلى حصرها لتستبدل الألف فقط في بداية الكلمة فقط، ولتستبدل التاء المربوطة والهاء في نهاية الكلمة فقط. سنترك الأمر لك لضبط الأنماط. الخاتمة تعرفنا في هذا المقال عن الطرق المتبعة لإنجاز البحث غير الحساس لحالة الأحرف العربية. اللغة العربية لغة عظيمة وغنية جدًا، وهذا يتطلب معالجة خاصة في التخطيطات والبرمجة وقواعد البيانات، مما يخلق تحديات يتعين علينا التعامل معها نحن المبرمجون العرب. مشاركة تجاربنا هي المفتاح لإنشاء مجتمع قوي ومفيد. ولإضافة مساهمتنا إلى مجتمع المطورين العالمي. نأمل أن تجد هذه المقالة مفيدة. ترجمة -وبتصرُّف- للمقال Arabic Case Insensitive In Database Systems: How To Solve Alef With and Without Hamza Problem لصاحبه أحمد عصام Ahmed Essam. اقرأ أيضًا التعابير النمطية في البرمجة فهم عملية التوحيد Normalization المستخدمة عند تصميم قاعدة البيانات
  2. يعرض هذا المقال مواصفات لجعل رسائل الإيداع commit messages مقروءة للبشر ولبرامج الأتمتة على حد سواء. مقدمة رسائل الإيداع الاصطلاحية هي مواصفات يسيرة تلتزم بها الرسائل كي تحقق شروطها، إذ توفر مجموعةً من القواعد لإنشاء سجل رسائل إيداع واضحة وصريحة، مما يجعلها أسهل لكي تستخدمها أدوات الأتمتة مباشرة. هذا الاصطلاح متوافق مع الإدارة الدلالية لنُسخ البرمجيات SemVer، عن طريق وصف المميزات features، والإصلاحات fixes، والتغييرات الجذرية breaking changes في رسائل الإيداع. يجب أن تكون هيكلية رسائل الإيداع كما يلي: <type>[optional scope]: <description> [optional body] [optional footer(s)] تحتوي رسالة الإيداع العناصر التالية في هيكليتها، وذلك لإيصال المعنى بدقة مع مستخدم المكتبة سواء كان بشريًا أو أداة برمجية: إصلاح :fix رسالة إيداع من نوع fix تصلح أو ترقع patch الخطأ في الشيفرة البرمجية، وهذا مرتبط بمصطلح الترقيع PATCH في إدارة النسخ الدلالية Semantic Versioning. ميزة :feat رسالة إيداع من نوع feat تضيف ميزة جديدة للشيفرة البرمجية، وهذا مرتبط بمصطلح الترقيم البسيط MINOR في إدارة النسخ الدلالية. تغيير جذري :BREAKING CHANGE رسالة إيداع بتذييل BREAKING CHANGE: أو بإضافة ! بعد كتابة النوع type أو النطاق scope، والتي تعرض تغييرًا جذريًا في الواجهة البرمجية. هذا مرتبط بمصطلح الترقيم الجذري MAJOR في إدارة النسخ الدلالية. يمكن أن تكون BREAKING CHANGE جزءًا من أي نوع في رسائل الإيداع. تعد الأنواع المختلفة عن :fix أو :feat مسموح بها، مثلًا، commitlint/config-conventional@ بناءً على رسائل الإيداع الاصطلاحية في Angular التي تقترح هذه الأنواع: للبناء :build والعمل الروتيني :choreوالتكامل المستمر:ciوالتوثيقات :docsومتعلقات التصميم :styleوإعادة الهيكلية:refactorوالأداء :perfوالاختبار:test وغيرها. قد تتبع التذييلات -بخلاف التغييرات الجذرية <BREAKING CHANGE: <description مواصفات شبيهة بتنسيقات git trailer format. لا تعد بقية الأنواع متوافقة مع "رسائل الإيداع الاصطلاحية"، وليس لها أي تأثير ضمني في "إدارة النسخ الدلالية" إلا إذا احتوت على عبارة BREAKING CHANGE. قد يُضاف النطاق scope، إلى نوع الإيداع لإضافة معلومات سياق contextual، وتُضّمن بين قوسين. مثلًا: feat(parser): add ability to parse arrays أمثلة رسالة إيداع مع الوصف description وتغيير جذري مكتوب في التذييل feat: allow provided config object to extend other configs BREAKING CHANGE: `extends` key in config file is now used for extending other config files رسالة إيداع مع ! للفت الانتباه بوجود تغيير جذري feat!: send an email to the customer when a product is shipped رسالة إيداع مع نطاق و ! للفت الانتباه بوجود تغيير جذري feat(api)!: send an email to the customer when a product is shipped رسالة إيداع مع ! ونص BREAKING CHANGE في التذييل chore!: drop support for Node 6 BREAKING CHANGE: use JavaScript features not available in Node 6. رسالة إيداع دون متن body docs: correct spelling of CHANGELOG رسالة إيداع مع نطاق feat(lang): add polish language رسالة إيداع مع متن مكون من عدة فقرات وعدة تذييلات fix: prevent racing of requests Introduce a request id and a reference to latest request. Dismiss incoming responses other than from latest request. Remove timeouts which were used to mitigate the racing issue but are obsolete now. Reviewed-by: Z Refs: #123 المواصفات Specification الكلمات الرئيسية مثل "يجب"، و"يجب ألا"، و"مطلوب"، و"يتوجب"، و"يتوجب ألا"، و"ينبغي"، و"لا ينبغي"، و"موصى به"، و"قد"، و"اختياري" في هذا المقال مفسّرة كما هو موضح في RFC 2119. يجب أن تُسبق رسائل الإيداع بالنوع، والذي يحتوي على اسم مثل: featأوfix، أو غيرها، متبوعة بالنطاق (اختياريًا)، أو علامة التعجب!اختياريًا. وبعدها النقطتين:` وبعدها مسافة. يجب استخدام النوع feat عندما تُضاف ميزة جديدة للتطبيق أو المكتبة. يجب استخدام النوع fix عندما تُحل مشكلة في مشروعك. قد يُضاف النطاق بعد النوع، ويجب أن يحتوي النطاق على اسم يصف جزءًا من الشيفرة البرمجية محاطة بقوسين، مثل :fix(parse)‎. يجب أن يكون الوصف description مسبوقًا بالنطاق أو النوع التي تتبعهما النقطتان :. الوصف هو خلاصة قصيرة للتغييرات في الشيفرة البرمجية، مثل: array parsing issue when multiple spaces were contained in string قد يُضاف متن طويل لرسالة الإيداع بعد الوصف القصير، مضيفًا المزيد من المعلومات لهذا السياق المتعلق بتغييرات الشيفرة البرمجية، ويجب أن يبدأ المتن بسطر فارغ بعد الوصف. ليس لمتن رسالة الإيداع شكل معيّن مفروض، وقد تحتوي على فراغات من أسطر متعددة قد يحتوي تذييل واحد أو أكثر سطرًا فارغًا بعد المتن، ويجب على كل تذييل أن يحتوي رمزًا token متبوعًا إما بفراغ أو فراغ وعلامة "#"، ثم بعدها قيمة. وهذا مستلهم من git trailer convention. يجب أن يستخدم رمز التذييل - بديلًا عن الفراغات بين الكلمات، مثل: Acked-by، وهذا يساعد في التفريق بين التذييل عن المتن ذي الأسطر المتعددة. الاستثناء الوحيد هو للتغييرات الجذرية BREAKING CHANGE، والتي قد تُستخدم رمزًا للتذييل. قد يحتوي محتوى التذييل (وهو ما يأتي بعد الرمز) على فراغات وأسطر فارغة، ويجب أن ينتهي عند وجود الزوج الثاني الصالح من الرمز/الفاصل. يجب أن تُوضّح التغييرات الجذرية في بادئة النوع والنطاق لرسالة الإيداع، أو أن تحل محل الرمز في التذييل. إذا ذكرت التغييرات الجذرية في التذييل، يجب على التغيير الجذري أن يحتوي النص بالأحرف الكبيرة BREAKING CHANGE متبوعًا بالنقطتين : فالفراغ، والوصف. مثًلا: BREAKING CHANGE: environment variables now take precedence over config files لو ضُمّنت التغييرات الجذرية في بداية النوع أو النطاق، فيجب توضيح وجود تغيرات جذرية عن طريق علامة التعجب ! مباشرةً بعد النقطتين :. لو استخدمت علامة التعجب، فيمكن مسح BREAKING CHANGE: من التذييل، ويتوجب أن يحتوي الوصف على وصف هذه التغييرات الجذرية. قد تُستخدم الأنواع -بخلاف feat أو fix- في رسائل الإيداع، مثل: docs: update ref docs يجب ألا يُتعامل مع وحدات المعلومات في رسائل الإيداع الاصطلاحية على أنها حساسة لحالة الأحرف case sensitive من قبل من يستخدم باستثناء التغيير الجذري الذي يجب أن يبقى بأحرفه الكبيرة. يجب أن يكون BREAKING-CHANGE مساويًا إلى BREAKING CHANGE، عند استخدامه رمزًا في التذييل. لماذا يُعتمد نظام رسائل الإيداع الاصطلاحية؟ إنشاء سجلات التغيير CHANGELOGs تلقائيًا. تحديد الإصدارات الدلالية لنُسخ البرمجيات semantic version bump تلقائيًا، استنادًا إلى أنواع رسائل الإيداع المكتوبة. إيصال طبيعة التغييرات إلى الزملاء في الفريق، والعامة، وكل من له علاقة بالمشروع. تفعيل عمليات البناء والنشر. تسهيل مشاركة الآخرين في مشاريعك، من خلال إعطائهم سجل تغييرات أكثر تنظيمًا. الأسئلة الأكثر شيوعا كيف يجب أن أتعامل مع رسائل الإيداع في مرحلة التطوير الأولية؟ نوصي بالمتابعة كما لو كنت قد أصدرت المنتج فعلًا، إذ يستخدم شخص ماعادةً برنامجك، ومن الممكن أن يكون أحد زملائك أثناء تطوير البرنامج، وسيرغبون في معرفة ما قد جرى إصلاحه وما الذي تعطل وما إلى ذلك. هل الأنواع الموجودة في عنوان رسالة الإيداع ذات أحرف كبيرة أم صغيرة؟ يمكن استخدام أي منها ولكن من الأفضل أن يكون متسقًا. ماذا أفعل إذا كانت رسالة الإيداعات تحتوي على تغييرات من أكثر من نوع؟ ارجع واكتب رسائل إيداع متعددة كلما أمكن ذلك؛ فجزءٌ من فائدة رسائل الإيداع الاصطلاحية هو قدرتها على دفعنا إلى كتابة رسائل إيداع وطلبات منظمة أكثر. هل تثبط النقطة السابقة التطوير والانتقال السريع؟ لا تشجع على التحرك بسرعة غير منظمة، ولكنها تساعدك على التحرك بسرعة على المدى الطويل في مشاريع متعددة مع مساهمين متنوعين. هل يمكن أن تؤدي رسائل الإيداع الاصطلاحية إلى دفع المطورين بتقييد نوع الإيداعات التي يعملونها لأنهم سيفكرون في الأنواع المقدمة؟ تشجعنا رسائل الإيداعات الاصطلاحية على المزيد من أنواع أخرى مثل الإصلاحات fixes. بخلاف ذلك، تسمح مرونة رسائل الإيداعات الاصطلاحية لفريقك بالتوصل إلى أنواع خاصة بهم وتغيير تلك الأنواع بمرور الوقت. كيف يرتبط هذا بالإدارة الدلالية لنسخ البرمجيات SemVer؟ يجب ترجمة عمليات الإيداع إلى التالي من النسخ الدلالية SemVer: يُترجم النوع fix إلى إصدارات PATCH. يُترجم النوع feat إلى إصدارات MINOR. يجب ترجمة BREAKING CHANGE إلى إصدارات MAJOR، بغض النظر عن نوع رسالة الإيداع. كيف يمكنني إصدار الامتدادات وفقا لمواصفات رسائل الإيداعات الاصطلاحية، مثلا jameswomack/conventional-commit-spec@؟ نوصي باستخدام الإدارة الدلالية لنُسخ البرمجيات SemVer لإصدار الامتدادات لهذه المواصفات ونشجعك على إنشاء هذه الامتدادات. ماذا أفعل إذا استخدمت نوع الإيداع الخاطئ دون قصد؟ عند استخدام نوع اصطلاحي ولكن ليس النوع الصحيح مثل fix بدلا من feat قبل دمج الخطأ أو تحريره، نوصي باستخدام git rebase -i لتحرير سجل الإيداعات. ستكون عملية التنظيف بعد الإصدار مختلفة وفقًا للأدوات والعمليات التي تستخدمها. عند استخدام نوع ليس من المواصفات مثل feet بدلا من feat في أسوأ الأحوال، لن تكون نهاية العالم إذا كانت منطقة الالتزام لا تفي بمواصفات الإيداع التقليدية، فهذا يعني ببساطة أن الإيداع سيفوّت missed بالأدوات المستندة إلى المواصفات. هل يحتاج جميع المساهمين إلى استخدام رسائل الإيداع الاصطلاحية؟ لا، إذا كنت تستخدم سير عمل قائم على squash على غيت Git، فيمكن للمشرفين الرئيسيين تنظيف رسائل الإيداع أثناء دمجها مما لا يضيف أي عبء عمل على مرسلي رسائل الإيداعات العاديين. يتمثل سير العمل الشائع common workflow في جعل نظام غيت git يسحق squash رسائل الإيداع تلقائيًا من طلب سحب pull request ويقدم نموذجًا للمشرف الرئيسي لإدخال رسالة إيداع git المناسبة للدمج. كيف تتعامل الإيداعات الاصطلاحية مع الإيداعات العكسية revert commits؟ يمكن أن يكون عكس الشيفرة البرمجية معقدًا. هل تعكس عن إيداعات متعددة؟ إذا عكست إحدى الميزات، فهل يجب أن يكون الإصدار التالي patch بدلًا من ذلك؟ لا تبذل رسائل الإيداع الاصطلاحية جهدًا واضحًا لتحديد سلوك عكس الإيداع revert behavior، بل تترك لأدوات المطورين لكي يستخدموا مرونة الأنواع والتذييلات لتطوير منطقهم في التعامل مع عمليات عكس الإيداعات. إحدى التوصيات هي استخدام النوع revert، والتذييل الذي يشير إلى إيداعات ترميز SHA المعكوسة: revert: let us never again speak of the noodle incident Refs: 676104e, a215868 ما شكل الكتابة الذي يجب أن أستخدمه؟ نوصي بكتابة وصف رسائل الإيداع: وصفها ومتنها بصيغة الأمر Imperative mood. يوجد عدد كبير من الأمثلة على أسلوب الكتابة هذا لرسائل الإيداع 1 و 2 و 3 و 4 و 5 حول رسائل الإيداع الاصطلاحية مواصفات رسائل الإيداع الاصطلاحية مستوحاة من إرشادات Angular لرسائل الإيداع وتعتمد عليها اعتمادًا كبيرًا. كتبت المسودة الأولى لهذه المواصفات بالتعاون مع بعض الأشخاص الذين ساهموا في: conventional-changelog: مجموعة من الأدوات لتحليل رسائل الإيداع الاصطلاحية من سجلات git. bumped: أداة لإصدار البرامج التي تسهل تنفيذ الإجراءات قبل وبعد إطلاق إصدار جديد من برنامجك. unleash: أداة لأتمتة إصدار البرنامج والنشر. lerna: أداة لإدارة المشاريع ذات المستودع الواحد، والتي انبثقت من مشروع Babel. أدوات لرسائل الإيداعات الاصطلاحات go-conventionalcommits: قوة لغة غو الكاملة لتحليل رسائل الإيداعات الاصطلاحية. go-conventional-commit: مكتبة لغة غو لتحليل رسائل الإيداعات الاصطلاحية وفقًا للمواصفات. chglog: أداة لتحليل رسائل الإيداعات الاصطلاحية من سجلات git وتحويلها إلى نماذج سجلات تغيير CHANGELOGS. fastlane-plugin: إضافة تتبع المواصفات لإدارة النسخ وتوليد سجل التغييرات تلقائيًا. php-commitizen: أداة مصممة لإنشاء رسائل إيداع وفقًا لمواصفات رسائل الإيداع الاصطلاحية، وهي قابلة للتكوين وللاستخدام لمشاريع PHP لأنها تابعة للمؤلف أو قابلة للاستخدام عالميًا لمشاريع غير PHP. php-conventional-changelog: أداة صممت لإنشاء سجل التغيير من رسائل محفوظات رسائل الإيداع الخاصة بالمشروع وبيانات التعريف وأتمتة الإصدار باستخدام Semver، باتباع مواصفات الالتزامات التقليدية، وهي قابلة للتكوين وقابلة للاستخدام لمشاريع PHP إذ أنها تابعة للمؤلف أو قابلة للاستخدام عالميًا لمشاريع غير PHP. conform: أداة يمكن استخدامها لفرض السياسات على مستودعات غيت، بما في ذلك رسائل الإيداع الاصطلاحية. standard-version: تصدير تلقائي للنسخ وإدارة سجل التغييرات، باستخدام زر GitHub لـ squash وسير عمل رسائل الإيداع الاصطلاحية الموصى به. Git Commit Template: يضيف دعم رسائل الإيداع الاصطلاحية لمحررات JetBrains (IntelliJ IDEA و PyCharm و PhpStorm…). commitsar: أداة لغة غو للتحقق ما إذا كانت رسائل الإيداع على الفرع متوافقة مع رسائل الإيداع الاصطلاحية، وتأتي بنسخة دوكر للتكامل المستمر. semantic-release: أداة تعمل على أتمتة سير عمل إصدار الحزمة بالكامل بما في ذلك: تحديد رقم الإصدار التالي وإنشاء ملاحظات الإصدار ونشر الحزمة. ngx-semantic-version: يؤتمت رسائل إيداع مشروع Angular وسير عمل الالتزام عن طريق تكامل commitizen, commitlint, husky and standard-version في مشروعك وتكوينها لاستخدام رسائل الإيداع الاصطلاحية. Pyhist: أداة مساعدة من لغة بايثون لتحديث إصدار الباقة من سجل git وإنشاء سجل التغيير CHANGELOG. commitizen-tools/commitizen: أداة للغة بايثون مصممة لإنشاء قواعد رسائل الإيداع الاصطلاحية للمشاريع، ورفع إصدارات المشروع، وإنشاء سجل التغيير. قابلة للتكوين وقابلة للاستخدام لكل من مشروع بايثون وغير بايثون، وقابلة للتوسيع توسعًا كبيرًا من خلال بايثون. git-mkver:أداة لتطبيق الإصدار الدلالي تلقائيًا على مستودعات git استنادًا إلى رسائل الإيداع الاصطلاحية. Conventional Commits Next Version: أداة مساعدة حيادية للأدوات واللغات لحساب الإصدار الدلالي التالي استنادًا إلى رسائل الإيداعات الاصطلاحية منذ الإصدار السابق في المشاريع ذات المستودع الواحد. change: أداة لتوليد وتحديث سجل التغيير باستخدام رسائل الإيداع الاصطلاحية. sv4git: أداة سطر الأوامر للتحقق من صحة رسائل الإيداع الاصطلاحية، ونسخ الإصدارات وإنشاء الوسوم وسجلات التغيير. semantic-gitlog أداة بسيطة لإدارة الإصدار الدلالي تعتمد على رسائل الإيداع الاصطلاحية. يشتق تلقائيًا أرقام الإصدارات وإدارتها وتوليد سجلات التغيير ذات نمط إطار عمل Angular. دعم Maven و Gradle. idea-conventional-commit الإكمال التلقائي للسياق والقوالب، لرسائل الإيداع الاصطلاحية ورسائل النسخ الدلالية. Versio: أداة متوافقة مع المشاريع ذات المستودع الواحد (monorepos) التي تحدّث أرقام الإصدارات بناءً على رسائل الإيداع الاصطلاحية، واعتماديات المشروع، ويمكنه توليد الوسوم وسجلات التغيير أيضًا. Git Changelog Lib: مكتبة جافا Java تدعم عرض سجل التغيير في سياق مشتق من Git. تدعم رسائل الإيداع الاصطلاحية مع Handlebars Helpers، ومُستخدمة في المشاريع التالية: Gradle Maven Jenkins Command Line Cocogitto: مجموعة من أدوات سطر الأوامر لرسائل الإيداعات الاصطلاحية ومواصفات الإدارة الدلالية لنُسخ البرمجيات semver. منقّح صياغة رسائل الإيداع الاصطلاحية: أداة تنقيح صياغة رسائل الإيداع الاصطلاحية، وهي أداة محايدة للغات والأدوات الأخرى. Uplift: الإصدار الدلالي بطريقة سهلة. مدعوم من رسائل الإيداع الاصطلاحية. مصمم لكي يستخدم مع التكامل المستمر. المشاريع التي تستخدم رسائل الإيداع الاصطلاحية NFPM: NFPM is Not FPM -أداة تجميع بسيطة لـ deb و rpm و apk مكتوبة بلغة غو yargs: محلل وسيطات سطر الأوامر المفضل لدى الجميع. istanbuljs: مجموعة أدوات مفتوحة المصدر ومكتبات برمجية لإضافة الاختبارات الآلية للغة جافا سكريبت. uPortal-home و uPortal-application-framework:محسن اختياري لواجهة الاستخدام Apereo uPortal. massive.js: مكتبة وصول للبيانات لـ Node و PostgreSQL. electron: بناء تطبيقات تعمل على أكثر من نظام تشغيل باستخدام جافا سكريبت و HTML و CSS. scroll-utility: أداة بسيطة لتسهيل التمرير للعناصر المتوسطة مع حركيات سلسلة. Blaze UI: أدوات واجهة استخدام غير مرتبط بإطار عمل معين. Monica: نظام إدارة العلاقات الشخصية مفتوح المصدر. mhy: بيئة عمل معدة بالأدوات ومتعددة الاستخدامات ولا تحتاج إلى إعداد مسبق. ‎@tandil/diffparse: محلل بسيط للتغييرات بين الملفات في نظام إدارة التحكم في الإصدارات. ‎@tandil/diffsplit: يسهل تقسيم ملفات التغييرات من نوع .diff و .patch إلى ملفات من نوعها. ‎@thi.ng/umbrella: مستودع لقرابة مئة مشروع TypeScript التي تتخذ منهجية التطوير المقادة بالبيانات Data Driven Development ذات المستودع الواحد. yii2-basic-firestarter: قالب تطبيق Yii2 محسّن. Nintex Forms: إنشاء نماذج إدخال ديناميكية سهلة لإرسال واستقبال بيانات دقيقة وآنية. Tina CMS: مجموعة أدوات لبناء إدارة محتوى واجهات الاستخدام في موقعك. Uno Platform: منصة بناء تطبيقات جوال وسطح مكتب وتقنية ويب أسمبلي عن طريق لغة برمجة #C و XAML، وتدعم البرمجيات مفتوحة المصدر والاحترافية. AutoSort.NetCore: استخدام سمات الكائن للترتيب الافتراضي. Undercut: خطوط إمداد وأدوات لمعالجة البيانات المؤجلة في لغة جافا سكريبت. Stats Builder: باني إحصائيات لـ Blox Fruits Jenkins X: يوفر Jenkins X خطوط إمداد الأتمتة، وتطوير عمليات Git، وعرض بيئة التشغيل لمساعدة التعاون بين فريق العمل وتسريع نشر البرمجيات مهما كان حجمها. GearLock: بديل مخصص لاستعادة Android-x86.. rsql-querydsl: تكامل لغة الاستعلامات RSQL وإطار عمل Querydsl. Changeloguru: توليد سجل التغييرات آليًا من رسائل الإيداع الاصطلاحية، مكتوبة بلغة غو. ترجمة -وبتصرف- للدليل Conventional Commits لصاحبه Damiano Petrungaro وكل المساهمين. اقرأ أيضًا بدء العمل مع نظام إدارة الإصدارات جيت Git استخدامات متقدمة لنظام التحكم بالإصدار Git لإدارة مشاريع بايثون أدوات رسومية للأداة سطر الأوامر جيت Git
  3. يجب أن تبدو الشيفرات البرمجية أينما وجدت كما لو أن مبرمجًا واحدًا كتبها، بغض النظر عن عدد من ساهم فيها. توضّح القائمة التالية بعض الإرشادات المُستخدمة في كل الشيفرات البرمجية. مقدمة توضّح الأقسام التالية دليل أسلوب معتدل reasonable لتطوير جافا سكريبت Javascript الحديثة وليس المقصود منها أن تكون مواصفات صارمة. أهم ما يمكن تعلمه هو قانون اتساق نمط الشيفرات البرمجية، فكل ما تختاره أسلوبًا لمشروعك يجب أن يعد قانونًا. اتّخذ هذا المقال مرجعًا لالتزام مشروعك بتناسق نمط الشيفرات، وسهولة قراءتها، وقابليتها للصيانة. بيان الأسلوب الاصطلاحي المسافة الفارغة هذه بعض النصائح الممكن الاستفادة منها بشأن المسافات الفارغة: لا تخلط بين المسافات spaces ومسافة tab إطلاقًا. عند بدء المشروع، وقبل أن تكتب أي شيفرة برمجية، اختر إما المسافات أو مسافات tab، وليس كليهما. اتّبع هذا على طول المشروع واجعله قانونًا. لزيادة جودة القراءة، يُوصى دائمًا بتعيين حجم المسافة البادئة indent لمحررك على حرفين، وهذا يعني مسافتين. إذا كان محررك يدعم إعداد "إظهار العناصر غير المرئية"، فيُنصح بتشغيله دائمًا؛ ففوائده هي: فرض الاتساق consistency. إزالة المسافة الفارغة في نهاية السطر. إزالة الأسطر الفارغة. تسهيل قراءة الإيداعات Commits والاختلافات diffs، والتي تأتي غالبًا أثناء معالجة إدارة النسخ version control. استخدم Editorconfig متى ما أمكن ذلك، فهو يدعم معظم محررات التطوير، ويتعامل مع معظم إعدادات المسافات الفارغة. الصيغ الجميلة Beautiful Syntax أولًا: الأقواس الهلالية () والمعقوصة {} والمعقوفة []، وفواصل الأسطر Linebreaks // مسافات فراغ، وأقواس وأسطر متعددة if و else و for و while و try سيكون لتعليمات // هذا سيحسّن جودة القراءة // 2.A.1.1 // أمثلة على بناء جملة محشورة جدًأ if(condition) doSomething(); while(condition) iterating++; for(var i=0;i<100;i++) someIterativeFn(); // 2.A.1.1 // استخدم المسافة الفارغة لتعزيز جودة القراءة if ( condition ) { // تعليمات برمجية } while ( condition ) { // تعليمات برمجية } for ( var i = 0; i < 100; i++ ) { // تعليمات برمجية } // الأفضل var i, length = 100; for ( i = 0; i < length; i++ ) { // تعليمات برمجية } // أو var i = 0, length = 100; for ( ; i < length; i++ ) { // تعليمات برمجية } var prop; for ( prop in object ) { // تعليمات برمجية } if ( true ) { // تعليمات برمجية } else { // تعليمات برمجية } ثانيًا: الإسنادات Assignments والتصريحات Declarations والدوال مثل الدالة المسمّاة Named Function، والتعبير Expression والباني Constructor // 2.B.1.1 // المتغيرات var foo = "bar", num = 1, undef; // القيم المجردة: var array = [], object = {}; // 2.B.1.2 // واحد لكل متغير `var` واحد فقط لكل نطاق (دالة) أو `var` استخدام // يعزز جودة القراءة ويحافظ على قائمة التصريحات خالية من الفوضى. // واحد التحكم أكثر في إصداراتك `var` يمكنك باستخدام // ويسهل إعادة ترتيب السطور // واحد لكل نطاق اكتشاف المتغيرات غير المصرّحة `var` يسهّل استخدام // والتي قد تصبح ضمنًا متغيرات عامة // اختر الأفضل لمشروعك ولا تخلط بينهما أبدًا. // سيء var foo = "", bar = ""; var qux; // جيد var foo = ""; var bar = ""; var qux; // أو var foo = "", bar = "", qux; // أو var // التعليق على هذه المتغيرات foo = "", bar = "", quux; // 2.B.1.3 // دائمًا في بداية النطاق (الدالة) التي تتعامل معها var يجب أن تكون تعليمات // سيء function foo() { // بعض التعليمات البرمجية هنا var bar = "", qux; } // جيد function foo() { var bar = "", qux; // كل التعليمات البرمجية بعد التصريح عن المتغيرات } // 2.B.1.4 //‏أيضًا في بداية النطاق ECMAScript 6 من const و let يجب أن يكون // سيء function foo() { let foo, bar; if ( condition ) { bar = ""; // تعليمات برمجية } } // جيد function foo() { let foo; if ( condition ) { let bar = ""; // تعليمات برمجية } } أما الدالة المُسماة: // 2.B.2.1 // تصريح الدالة المسماة function foo( arg1, argN ) { } // الاستخدام foo( arg1, argN ); // 2.B.2.2 // تصريح الدالة المسماة function square( number ) { return number * number; } // الاستخدام square( 10 ); // أسلوب التمرير المتتالي عن طريق تمرير دالة رد نداء ‪‫callback function square( number, callback ) { callback( number * number ); } square( 10, function( square ) { // تعليمات برمجية داخل دالة رد النداء }); // 2.B.2.3 // تعبير الدالة var square = function( number ) { // إرجاع شيء ذي قيمة وذي صلة return number * number; }; // تعبير الدالة مع المعرّف // ميزة هذه الطريقة هو أنها قادرة على استدعاء نفسها، وتقدر أن تتبع // المعرّف في تعقبات المكدس var factorial = function factorial( number ) { if ( number < 2 ) { return 1; } return number * factorial( number - 1 ); }; // 2.B.2.4 // تصريح الباني function FooBar( options ) { this.options = options; } // الاستخدام var fooBar = new FooBar({ a: "alpha" }); fooBar.options; // { a: "alpha" } ثالثًا: الاستثناءات Exceptions وبعض التفاصيل // 2.C.1.1 // الدوال مع رد النداء foo(function() { // لاحظ عدم وجود مسافة إضافية بين القوس الأول // "function" لاستدعاء دالة التنفيذ وكلمة‎‏‎ }); // الدالة تقبل تمرير مصفوفة دون فراغ foo([ "alpha", "beta" ]); // 2.C.1.2 // الدالة تقبل تمرير كائن دون فراغ foo({ a: "alpha", b: "beta" }); // تمرير سلسلة نصية دون فراغ foo("bar"); // أقواس التعبير، دون فراغ if ( !("foo" in obj) ) { obj = (obj.bar || defaults).baz; } رابعًا: يفوز الاتساق دائمًا أوصينا أعلاه بقواعد المسافات الفارغة لغرض أبسط وأسمى ألا وهو الاتساق. تجدر الملاحظة أن تفضيلات التنسيق، مثل "المسافة الفارغة الداخلية" ليست إلا اختيارية، ولكن يجب الالتزام بنمط واحد فقط في كل المشروع. // 2.D.1.1 if (condition) { // تعليمات برمجية } while (condition) { // تعليمات برمجية } for (var i = 0; i < 100; i++) { // تعليمات برمجية } if (true) { // تعليمات برمجية } else { // تعليمات برمجية } خامسًا: الاقتباسات لا يهم سواء كنت تفضل استخدام علامة اقتباس مفرد ' أو مزدوج "، فلا يوجد فرق في كيفية تحليل جافا سكريبت لها. الواجب تطبيقه فقط هو الاتساق. لا تخلط علامات الاقتباس في نفس المشروع أبدًا. اختر نمطًا واحدًا والتزم به. سادسًا: نهاية الأسطر والأسطر الفارغة يمكن للمسافة الفارغة أن تجعل مقارنة التغييرات diffs غير مقروءة في معالجة التحكم في الإصدارات، لذلك فكّر في إضافة أداة أو خطّاف قبل الإيداع pre-commit hook، ليزيل المسافات الفارغة في نهاية كل سطر، ويزيل الأسطر الفارغة تلقائيًا. التحقق من النوع أولَا: الأنواع الفعلية السلسلة النصية String: typeof variable === "string" الرقم Number: typeof variable === "number" القيمة البوليانية Boolean: typeof variable === "boolean" الكائن Object: typeof variable === "object" المصفوفة Array: Array.isArray( كائن_شبيه_بالمصفوفة ) (إذا أمكن ذلك) العنصر Node: elem.nodeType === 1 القيمة الفارغة Null: variable === null القيمة غير المعرفة undefined: variable === null المتغيرات العامة: typeof variable === "undefined" المتغيرات المحلية: variable === undefined الخاصيات Properities: object.prop === undefined object.hasOwnProperty( prop ) "prop" in object ثانيًا: الأنواع القسرية أو الإجبارية Coerced Types ضع بالحسبان ما يلي: ألقِ نظرةً على هذا الجزء من شيفرة HTML: <input type="text" id="foo-input" value="1"> وشيفرة جافا سكريبت التالية: // 3.B.1.1 // ‏‎‫‫عُرّفت `foo` بقيمة `0` ونوعها `number` var foo = 0; // typeof foo; // "number" ... // ‫في مكان ما في الكود، تحتاج إلى تحديث `foo` بقيمة جديدة مشتقة من عنصر إدخال foo = document.getElementById("foo-input").value; // ‫إذا كنت تختبر `typeof foo` الآن، ستكون النتيجة `string` // ‫هذا يعني أنه إذا كان لديك منطق يختبر `foo` مثل if ( foo === 1 ) { importantTask(); } // ‫لن تُقيّم `()importantTask` أبدًا، على الرغم من أن `foo` لديه قيمة "1" // 3.B.1.2 // ‫يمكنك حل هذه المشكلة من خلال استخدام التحويل الذكي باستخدام عوامل التشغيل ‫الأحادية: عوامل السالب `-` أو الموجب `+` foo = +document.getElementById("foo-input").value; // سيحوّل عامل الإيجاب الأحادي `^` العملية المُشير إليها على الجانب الأيمن إلى رقم // typeof foo; // "number" if ( foo === 1 ) { importantTask(); } // ‫ستُستدعى `()importantTask` فيما يلي بعض الحالات الشائعة مع عمليات التحويل: // 3.B.2.1 var number = 1, string = "1", bool = false; number; // 1 number + ""; // "1" string; // "1" +string; // 1 +string++; // 1 string; // 2 bool; // false +bool; // 0 bool + ""; // "false" وهذه الشيفرة: // 3.B.2.2 var number = 1, string = "1", bool = true; string === number; // false string === number + ""; // true +string === number; // true bool === number; // false +bool === number; // true bool === string; // false bool === !!string; // true وهذه: // 3.B.2.3 var array = [ "a", "b", "c" ]; !!~array.indexOf("a"); // true !!~array.indexOf("b"); // true !!~array.indexOf("c"); // true !!~array.indexOf("d"); // false // لاحظ أن ما ورد أعلاه كان ذكيًا بلا داع // ‫الرجاء استخدام الطريقة الواضحة لمقارنة القيمة التي تُرجع لـ IndexOf، مثل: if ( array.indexOf( "a" ) >= 0 ) { // ... } والشيفرة التالية: // 3.B.2.4 var num = 2.5; parseInt( num, 10 ); // ‫بالضبط مثل... ~~num; num >> 0; num >>> 0; // الكل نتيجته 2 // ‫مع ذلك، ضع في حسبانك أنه سيُتعامل مع الأرقام السالبة تعاملًا مختلفًا... var neg = -2.5; parseInt( neg, 10 ); // الكل نتيجته 2 ~~neg; neg >> 0; // ‫الكل نتيجته -2 // لكن... neg >>> 0; // النتيجة هي 4294967294 التقييم المشروط // 4.1.1 // ‫عند تقييم ما إذا كان للمصفوفة طول (أي لها عناصر وليست فارغة) // بدلًا من هذا if ( array.length > 0 ) ... // ‫... قيّم صوابية القيمة، مثل هذه: if ( array.length ) ... // 4.1.2 // ‫عند تقييم ما إذا كان المصفوفة فارغة فقط، // بدلًا من هذا if ( array.length === 0 ) ... // ‫... تقييم القيمة، مثل هذه: if ( !array.length ) ... // 4.1.3 // ‫عند تقييم ما إذا كان المصفوفة ذات قيمة وليست فارغة فقط // بدلًا من هذا if ( string !== "" ) ... // ‫... تقييم القيمة، مثل هذه: if ( string ) ... // 4.1.4 // عند تقييم ما إذا كانت السلسلة النصية فارغة فقط // بدلًا من هذا if ( string === "" ) ... // ‫... قيّم خطأ القيمة، مثل هذه: if ( !string ) ... // 4.1.5 // عند تقييم ما إذا كان المرجع صوابًا // بدلًا من هذا if ( foo === true ) ... // ‫... قيّم صواب القيمة أو خطأها كما تريد، واستفد من الإمكانيات المضمّنة if ( foo ) ... // 4.1.6 // ‫عند تقييم ما إذا كان قيمة المتغير خاطئة، // بدلًا من هذا if ( foo === false ) ... // ‫...استخدم النفي لفرض التقييم الحقيقي if ( !foo ) ... // ‫...كن حذرًا، سيتطابق هذا أيضًا مع هذه القيم: 0, ""، null,undefined , NaN // ‫إذا كان يجب عليك اختبار القيمة الخاطئة فاستخدم ما يلي: if ( foo === false ) ... // 4.1.7 // ‫عند تقييم ما إذا كان المرجع قيمته null أو undefined، ولكن ليس "" أو 0، // بدلًا من هذا if ( foo === null || foo === undefined ) ... // ‫... الاستفادة من المعاملين "==" الذيَن يفرضان تحويلًا لنوع البيانات مثل هذا: if ( foo == null ) ... // ‫تذكر أن استخدام المعاملين "==" سيطابق `null` مع كل من `null` و `undefined` // ‫ولكن لن يطابق `null` مع القيم `false` أو "" أو 0 null == undefined قيّم دائمًا للحصول على أفضل النتائج، وأدقها، ما ورد أعلاه هو أسلوب توجيهي وليس مبدأ متزمت. // 4.2.1 // ‫ملاحظات فرض النوع Type coercion والتقييم // ‫تُفضّل `===` على `==` ما لم تتطلب الحالة تقييمًا فضفاضًا للنوع loose type evaluation // المعاملات "===" لا يفرض النوع، مما يعني أن: "1" === 1; // خطأ // ‫أما المعاملَين `==` فهما يفرضان تحويل النوع مما يعني أن "1" == 1; // صواب // 4.2.2 /// القيم البوليانية وقيم الصواب والخطأ // القيم البوليانية true, false // القيم الصائبة "foo", 1 // القيم الخاطئة "", 0, null, undefined, NaN, void 0 الأسلوب العملي // 5.1.1 // وحدة عملية (function( global ) { var Module = (function() { var data = "secret"; return { // هذه خاصية بوليانية bool: true, // قيمة نصية ما string: "a string", // خاصية المصفوفة array: [ 1, 2, 3, 4 ], // خاصية الكائن object: { lang: "en-Us" }, getData: function() { // ‫احصل على القيمة الحالية لـ `data`. return data; }, setData: function( value ) { // ‫عيّن قيمة `data` وأرجعها return ( data = value ); } }; })(); // قد تحدث أشياء أخرى هنا // كشف وحدتنا للكائن العام global.Module = Module; })( this ); ألقِ نظرةً على الشيفرة التالية: // 5.2.1 // باني عملي (function( global ) { function Ctor( foo ) { this.foo = foo; return this; } Ctor.prototype.getFoo = function() { return this.foo; }; Ctor.prototype.setFoo = function( val ) { return ( this.foo = val ); }; // ‫لاستدعاء الباني دون الكلمة المفتاحية `new`، يمكنك فعل ذلك: var ctor = function( foo ) { return new Ctor( foo ); }; // كشف الباني للكائن العام global.ctor = ctor; })( this ); التسمية أولًا: أنت لست مصرّفًا compiler أو ضاغطًا compressor للشيفرة ضع في بالك أنك لستَ مصرّفًا compiler أو ضاغطًا compressor بشريًا للشيفرة البرمجية، لذا لا تحاول أن تفعل ما يفترض أن يفعله المُصرّف أو الضاغط. الشيفرة البرمجية التالية هي مثال على التسمية السيئة: // 6.A.1.1 // مثال على شيفرة برمجية ذي تسميات سيئة function q(s) { return document.querySelectorAll(s); } var i,a=[],els=q("#foo"); for(i=0;i<els.length;i++){a.push(els[i]);} دون شك، لقد كتبتَ شيفرة برمجية سيئة مثل هذه، ونأمل ألا يحدث ذلك مجددًا. إليك نفس المنطق البرمجي، ولكن مع تسمية ألطف وأكثر عناية وجودة قراءة: // 6.A.2.1 // مثال على شيفرة برمجية ذات تسميات أفضل function query( selector ) { return document.querySelectorAll( selector ); } var idx = 0, elements = [], matches = query("#foo"), length = matches.length; for ( ; idx < length; idx++ ) { elements.push( matches[ idx ] ); } إليك بعض المؤشرات الإضافية للتسمية: // 6.A.3.1 // تسمية السلاسل النصية `dog` is a string // 6.A.3.2 // تسمية المصفوفات `dogs` is an array of `dog` strings // 6.A.3.3 // تسمية الدوال، والكائنات، والنُسَخ camelCase; function and var declarations // 6.A.3.4 // ‫تسمية الدوال البانية، ودوال النماذج الأولية prototypes، إلخ. PascalCase; constructor function // 6.A.3.5 // تسمية التعابير النمطية rDesc = //; // 6.A.3.6 // ‫من دليل أسلوب مكتبة Google للـ Closure functionNamesLikeThis; variableNamesLikeThis; ConstructorNamesLikeThis; EnumNamesLikeThis; methodNamesLikeThis; SYMBOLIC_CONSTANTS_LIKE_THIS; ثانيًا: أوجه الكلمة المفتاحية this بعيدًا عن حالات الاستخدام المعروفة عمومًا للكلمات call و apply، يُفضّل دائمًا استخدام (bind(this أو ما يعادلها وظيفيًا لإنشاء تعريفات BoundFunction للاستدعاء لاحقًا. لا تلجأ إلى الاسم البديل aliasing إلا في حالة عدم توفر خيار أفضل. // 6.B.1 function Device( opts ) { this.value = null; // فتح مجرى غير متزامن، // سيُستدعى هذا استدعاء مستمرًا stream.read( opts.path, function( data ) { // حدّث القيمة الحالية لهذه النسخة // بأحدث قيمة من // مجرى المعلومات this.value = data; }.bind(this) ); // التحكم في عدد مرات تشغيل الأحداث من // نسخة الجهاز هذا setInterval(function() { // انبعاث حدث مُقيّد this.emit("event"); }.bind(this), opts.freq || 100 ); } // ‫تظاهر فقط بأننا ورثنا EventEmitter عندما لا ينجح ذلك، تتوفر وظيفة مكافئة لـ bind. في معظم مكتبات جافا سكريبت الحديثة. // 6.B.2 // مثال: lodash/underscore, _.bind() function Device( opts ) { this.value = null; stream.read( opts.path, _.bind(function( data ) { this.value = data; }, this) ); setInterval(_.bind(function() { this.emit("event"); }, this), opts.freq || 100 ); } // مثال: jQuery.proxy function Device( opts ) { this.value = null; stream.read( opts.path, jQuery.proxy(function( data ) { this.value = data; }, this) ); setInterval( jQuery.proxy(function() { this.emit("event"); }, this), opts.freq || 100 ); } // على سبيل المثال. dojo.hitch function Device( opts ) { this.value = null; stream.read( opts.path, dojo.hitch( this, function( data ) { this.value = data; }) ); setInterval( dojo.hitch( this, function() { this.emit("event"); }), opts.freq || 100 ); } عرّف اسمًا بديلًا للكلمة this باستخدام self معرفًا، هذا يعرّضك للأخطاء بشدة ويجب تجنّبه كلما أمكن ذلك. // 6.B.3 function Device( opts ) { var self = this; this.value = null; stream.read( opts.path, function( data ) { self.value = data; }); setInterval(function() { self.emit("event"); }, opts.freq || 100 ); } ثالثًا: استخدم thisArg تأتي العديد من توابع النماذج الأولية prototype methods لمكونات ES 5.1 المضمنة مع بصمة thisArg خاصة، والتي يجب استخدامها كلما أمكن ذلك. // 6.C.1 var obj; obj = { f: "foo", b: "bar", q: "qux" }; Object.keys( obj ).forEach(function( key ) { // ‫تشير |this| إلى `obj` console.log( this[ key ] ); }, obj ); // ← ‫آخر arg هو `thisArg` // النتيجة // "foo" // "bar" // "qux" يمكن أن تُستخدم thisArg مع Array.prototype.every، و Array.prototype.forEach، و Array.prototype.some، و Array.prototype.map، و Array.prototype.filter. متفرقات سيعمل هذا القسم على توضيح الأفكار والمفاهيم التي لا ينبغي التعصّب لها، وبدلًا من ذلك، فإننا نشجع الفضول حول الاتفاقيات الحالية ومحاولة إيجاد طرق أفضل لكتابة جافا سكريبت. أولًا: يجب تجنّب استخدام switch، إذ سيدرج التتبع بالتوابع الحديثة الدوال التي تحتوي على عبارات switch في القائمة السوداء. يبدو أن هناك تحسينات جذرية في تنفيذ عبارات switch في أحدث إصدارات Firefox و Chrome. يمكن ملاحظة التحسينات الملحوظة على الرابط. // 7.A.1.1 // ‫مثال على عبارة switch switch( foo ) { case "alpha": alpha(); break; case "beta": beta(); break; default: // القيمة الافتراضي break; } // 7.A.1.2 // ‫البديل القابل للتركيب وإعادة الاستخدام هو استخدام الكائنات لتخزين "الحالات" // ‫واستخدم دالة للتفويض: var cases, delegator; // المثال يرجع بعض النتائج للتوضيح فقط cases = { alpha: function() { // تعليمات برمجية // رجوع return [ "Alpha", arguments.length ]; }, beta: function() { // تعليمات برمجية // رجوع return [ "Beta", arguments.length ]; }, _default: function() { // تعليمات برمجية // رجوع return [ "Default", arguments.length ]; } }; delegator = function() { var args, key, delegate; // ‫تحويل قائمة الوسطاء إلى مصفوفة args = [].slice.call( arguments ); // إزاحة مفتاح الحالة من الوسطاء key = args.shift(); // تعيين معالج الحالة الافتراضي delegate = cases._default; // اشتقاق الدالة لتفويض العملية if ( cases.hasOwnProperty( key ) ) { delegate = cases[ key ]; } // يمكن ضبط وسيط النطاق على شيء محدد، // ‫في هذه الحالة، |null| ستكفي return delegate.apply( null, args ); }; // 7.A.1.3 // ضع الواجهة البرمجية في 7.A.1.2 لتعمل: delegator( "alpha", 1, 2, 3, 4, 5 ); // [ "Alpha", 5 ] // ‫يمكن بسهولة طبعًا تعيين قيمة مفتاح "الحالة" `case` بناءً على بعض المواقف المختلفة الأخرى. var caseKey, someUserInput; // ربما نوع من المدخلات؟ someUserInput = 9; if ( someUserInput > 10 ) { caseKey = "alpha"; } else { caseKey = "beta"; } // أو caseKey = someUserInput > 10 ? "alpha" : "beta"; // ثم delegator( caseKey, someUserInput ); // [ "Beta", 1 ] // وطبعًا delegator(); // [ "Default", 0 ] ثانيًا: يمكن أن يؤدي إرجاع القيم مقدمًا إلى تحسين إمكانية القراءة وليس له تأثير يذكر على الأداء. ألقِ نظرةً على الشيفرة التالية: // 7.B.1.1 // سيء: function returnLate( foo ) { var ret; if ( foo ) { ret = "foo"; } else { ret = "quux"; } return ret; } // جيد function returnEarly( foo ) { if ( foo ) { return "foo"; } return "quux"; } الكائنات الأصلية والمضيفة Native and Host Objects المبدأ الأساسي هو: "لا تفعل أشياء غبية وسيكون كل شيء على ما يرام". التعليقات تُفضّل التعليقات المكونة من سطر واحد أعلى الشيفرة. تعدد التعليقات شيء جيد كذلك. تجنب التعليقات في نهاية السطر. يعد أسلوب JSDoc جيد، ولكن يستغرق وقتًا أطول. شيفرة لغة واحدة يجب أن تكون البرامج مكتوبة بلغة واحدة، مهما كانت لغة البرمجة تلك، حسب ما يمليه المشرف أو الفريق. ترجمة -وبتصرف- لدليل Principles of Writing Consistent, Idiomatic JavaScript لصاحبه Rick Waldron وكل المساهمين. اقرأ أيضًا دليل Airbnb لنمط جافا سكريبت تعلم لغة جافا سكريبت من الصفر حتى الاحتراف الدوال في جافاسكريبت
    كتاب جميل ويغطي الكثير من الأمور المهمة لمن يريد بناء متجر إلكتروني.. عندي ملاحظة وهي اختيار Google Domains والتي توقفت.. أرجو الكتابة عن منصة أخرى لتقديم أسماء النطاقات.. https://www.prnewswire.com/news-releases/squarespace-enters-definitive-agreement-to-acquire-google-domains-assets-301852507.html?tc=eml_cleartime&ref=blog.pragmaticengineer.com
  4. جميل جدا ترجمة هذا الكتاب الذي سيسد فجوة كبيرة في المحتوى العربي لهذا الموضوع. في رأيي أن قسم "تصميم قواعد البيانات" ينبغي أن ينتقل إلى دروس ومقالات "البرمجة" لا ال DevOps فهو لا ينتمي لهذا المجال ولا للخوادم كما هو الآن. ما رأيكم؟
  5. سؤال لماذا ترجم عنوان الكتاب إلى إلكونت جافاسكريبت؟ . أليس من الممكن أن تكون: جافاسكريبت البليغة/الأنيقة؟ مثلا.
  6. شكرا لكم على ترجمة هذا الكتاب الرائع.. بالمناسبة، ينطق اسم العالم Donald Knuth: دونالد كنوث https://www-cs-faculty.stanford.edu/~knuth/faq.html
  7. قد تتساءل لماذ يجب عليّ أن أستخدم ووردبريس؟ لكي تكون الأكثر فاعلية في عملك، من المهم جدًا أن يتعلم مصممو الويب والمطورون المحترفون الأدوات المناسبة ويستخدمونها. أردنا اليوم توضيح فكرة لماذا استخدام ووردبريس هو الخيار الأفضل لمعظم المستقلين (freelancers) -مرّة واحدة وللأبد-. سنغطي أيضًا كفية جعل سير عملك فائق الإنتاجية باستخدام إطار عمل قالب (theme framework). هناك الكثير من الأشياء المهمة التي تحتاج القيام بها عند إنشاء موقع ويب، إذ تحتاج إلى التأكد من أن الموقع يبدو رائعًا، وسريعًا، ومتجاوبًا (responsive)، ويظهر ظهورًا مرتبًا في جميع الأجهزة مختلفة الأحجام. يعدّ ووردبريس حقًا أفضل حلٍّ يمكنك استخدامه عند إنشاء معظم مواقع العملاء. بعض الاستثناءات ستكون تطبيقات ويب (web application) لأنك تحتاج حينها إلى بناء كل شيء من الصفر. مثلًا، في بناء موقع البحث عن الوظائف المُسمّى "AwesomeWeb" استخدم مطورو الموقع إطار عمل Ruby on Rails. بدأوا باستخدام مزيج من ووردبريس وإطار عمل CodeIgniter، ولكن لم يكن ووردبريس مرنًا كفاية لمثل هذه الحلول البرمجية عالية التخصيص. ومع ذلك، لن يحتاج معظم العملاء إلى حلول مخصصة. في ‎%98‎ من الحالات، سيحتاج العملاء إلى شيء شائع، مثل متجر على الإنترنت، أو علامة تجارية أو معرض أعمال (portfolio)، أو عضوية (membership)، أو مدونة للحصول على موقع تجاري بسيط. يمكنك بناء كل ذلك بسهولة باستخدام ووردبريس ومعرفة برمجية أساسية. هناك سبب وجيه لاستخدام ووردبريس من قبل الشركات الكبرى. السرعة والبساطة لماذا ووردبريس؟ ووردبريس هو نظام إدارة المحتوى (CMS) الأشهر، لسبب وجيه. صُمّمت %22 من جميع المواقع على الإنترنت باستخدام ووردبريس، وهي تشكّل حوالي 80 مليون موقع. إليك بعض الأسباب الرئيسية وراء شعبية ووردبريس: يسير التعلّم، ووردبريس برنامجٌ مفتوح المصدر. سهل وموثَّق (documented) توقيقًا شاملًا كذلك، بالإضافة إلى توفّر العديد من مقاطع الفيديو التدريبية المجانية. يحتوي العديد من الإضافات (plugins) والقوالب (themes)، أي لست بحاجة إلى خبرةٍ كبيرةٍ حتى تبدأ إنشاء مواقع باستخدام ووردبريس. في بعض الحالات، لا تحتاج إلى كتابة أي شيفرة برمجية لتحقيق النتائج التي تريدها. إنه قوي، يمكنك بناء الكثير عبره، مثل: متجر إلكتروني، ومدونة، وعضوية (membership)، ونماذج اتصال (contact forms)، بسهولة وسرعة فائقة من خلال استخدام القوالب (theme)، والإضافات المميزة. هناك آلاف من القوالب المجانية والمدفوعة متاحة على الإنترنت. قد يكون من المغري استخدام قالب مجاني، ولكن قبل اتخاذ هذا القرار، واصل القراءة.. الاستثمار مقابل أن تكون مكرّسًا وباحثًا عن المجانيّات. أقول ذلك لا يستحق المغامرة، ليس هنا لماذا استخدام قالب مدفوع أفضل من استخدام قالب مجاني؟ فوائد استخدام قالب مدفوع (premium theme)، مقابل القالب المجاني (free theme) كثيرة. السبب الأكثر أهمية لعدم استخدام قالب ووردبريس مجاني هو افتقارها للدعم والتوثيق (documentation) والتحديثات. فكّر في الأمر، إذا أنشأ المطوّر قالبًا مجانيًا، فهو لا يكسب أمولًا منها. لكنه لا يزال بحاجة إلى كسب لقمة العيش بطريقة أو بأخرى. لا يمكن أن يكون قالب ووردبريس المجاني خيارًا طويل الأمد، لأن المطوّر ليس لديه الحافز لدعم القالب مجانًا وتقديم التوثيق (documentation) وتحديثه خلال السنوات. هل ستقوم بكل هذا العمل مجانًا لو كنت في مكانه؟ لا يمكن توقّع مصادر التدريب (training resources) والوثائق (documentation) والدعم المجاني والتحديثات، عندما لا يكسب المطوّر منه أي مال. حتى لو كان أكثر الناس طيبة على وجه البسيطة، فإن كسب رزقه سيكون له الأولويّة دائمًا، علاوة على ذلك، ستكون القوالب (themes) المجانية أقل جودةً من تلك المدفوعة (premium) دائمًا. أنت تحصل على ما تدفع ثمنه. تتميز القوالب المدفوعة (premium themes) بشيفرة برمجية أنظف ووظائف أفضل. يقدّم جميع مزودي القوالب المدفوعة (premium themes) تصميمًا عالي الجودة وتوثيقًا معمّقًا (in-depth documentation) ودعمًا على مستوى عالمي. الدعم مهمٌّ للغاية، لأن هناك خطأٌ ما دائمًا أو شيء ما لا يعمل كما هو متوقّع. إذا اخترت قالبًا مجانيًا، فأنت تعتمد على حسن نية الآخرين لمساعدتك في المنتديات. أما عندما تختار شراء قالب ووردبريس مدفوع، فأنت تدفع مقابل الدعم ويكون مقدمو القوالب مسئولين عن مساعدتك. أفضل ما في الأمر أنّ قوالب ووردبريس المدفوعة تأتي بأسعار ميسورة جدًا بسبب المنافسة الشديد في السوق. هذه أخبار جيّدة لك! يمكنك شراء قالب مدفوع واحد مقابل 50 دولارًا أو الوصول لجميع قوالب المتجر مع الدعم مقابل 100 – 300 دولار/سنويًا. يمكنك استعادة هذه الأموال بسهولة من عميل واحد! لقد بدأوا في موقع ‎1stWebDesigner‎‎‎‎‎ منذ 7 سنوات بقالب ووردبريس مجاني، لكن الآن، لا ينظرون حتى النظر في القوالب المجانية. لأنها لا تستحق العناء ببساطة. أقترح عليك دفع 50 دولارًا مقابل قالب ووردبريس جميل وقابل للتخصيص الذي تريده مع التأكد من تضمين التوثيق (documentation) والدعم، مما سيوفّر لك الكثير من الوقت. هذا يعني أنك ستقضي الكثير من وقتك في محاولة معرفة الأشياء بنفسك. قوالب ووردبريس المدفوعة أم أطر عمل القوالب (Theme Framework) أم تطوير ووردبريس مخصص؟ عندما تنوي إنشاء تصميم ووردبريس مخصص، فهناك فقط طرق قليلة تبدأ بها. يتبّع الكثير من مصممي الويب المحترفين هذه الخطوات: العصف الذهني (brainstorm)، والحصول على فكرة عما يجب بناؤه، وكيف ينبغي أن يبدو التصميم. تصميم إطارات تخطيطية (wireframe) وتصميم موقع الويب ببرنامج فوتوشوب (Photoshop). تحويل ملف بصيغة PSD الناتجة من برنامج الفوتوشوب إلى قالب HTML / CSS. إضافة HTML / CSS إلى ووردبريس المثّبت. إضافة الوظائف (functionality) وعناصر ديناميكية (dynamic elements) مثل المدونة، والمتجر الإلكتروني. يبدأ بعض مصممو الويب مباشرةً بـ HTML / CSS ثم ينتقلون إلى ووردبريس، بينما ينتقل آخرون مباشرةً من صيغة ملف الفوتوشوب PSD إلى ووردبريس، وهي طريقة فعّالة بالفعل للعمل! ومع ذلك، يبدأ مصممو الويب الأذكياء وذوي الخبرة بقالب (theme) أو إطار عمل (framework) منذ البداية، واختيار التصميم (layout) والوظائف (functionality)، وتصميم الموقع بناءً على ذلك. يمكن القول أنّ هذه هي الطريقة هي الأكثر إنتاجية وفعالية لإنشاء المواقع. يؤمنون وبشدّة في ‏1stWebDesigner بهذا النهج. مثلًا، استغرق تصميم 1stWebDesigner السابق منهم أكثر من عام حتى الاكتمال عندما فعلوا ذلك بطريقة "تقليدية" بدءًا من الرسومات الأوليّة (sketching)، وتصميم الرسوم التخطيطية (wire framing)، وكتابة الشيفرة البرمجية المخصصة إلى ووردبريس. ومع ذلك، فإعادة تصميم موقع 1stWebDesigner حديث العهد لم يستغرق منهم سوى أسبوعين حتى الجهوز. بدأوا باستخدام إطار عمل Genesis، المخصص لقوالب ووردبريس، واختاروا قالبًا فرعيًا (child theme) بالتخطيط (layout) الذي أرادوه، وخصّصوا التصميم وأضافوا الوظائف (functionality)، وانتهوا من إعادة التصميم. هذا ما تعنيه الفعالية. يعد إنشاء قالب ووردبريس المخصص خيارًا جيدًا إذا كنت تعمل مع عملاء ذوي رواتب عالية، ومستعدين لدفع تكاليف الحلول المخصصة. تعدّ الشيفرة البرمجية المخصصة (custom code) ضرورية لبناء التطبيقات، وبرامج الويب، ومواقع العلامات التجارية الكبيرة جدًا. في هذه الحالات، لن تستخدم ووردبريس نهائيًا، ومع ذلك، فمعظم العملاء لا يحتاجون إلى ذلك. ما يحتاجونه هو موقع أعمال بسيط يحقق أهدافهم. لن يقدّروا شيفرتك النظيفة جدا (clean code) بقدر ما يقدّرون تسليم المشاريع السريع، وموقع الويب الذي ساعدهم في كسب المزيد من المال. ماذا يوجد خلف الكواليس؟ ما اطار عمل قوالب ووردبريس (WordPress theme framework)؟ قبل البدء في اختيار إطار عمل (framework) أو استخدامه مباشرةً، من المهم أن تفهم بالضبط ما هو إطار العمل وما يمكن أن يفعله لك. إطار عمل ووردبريس هو عبارة عن قالب ووردبريس متقدم مع بعض الإمكانيات، بكل بساطة. كلما طوّرت موقع ويب، فغالبًا ما تستخدم نفس المكونات (components). ستبدأ بالأساسيات، ثم تختار التصميم والتخطيط (layout) لـ (الترويسة [header]، والتذييل [footer]، صفحة ذات عمود واحد [single column]، وصفحة ذات عمودين). بعد ذلك، تبدأ بالعمل على الوظائف الرئيسية، مثل: المتجر الإلكتروني، وصفحة المبيعات، وصفحة العضوية (membership)، والمدونة. أخيرًا، عليك التفكير في إنشاء وظائف إضافية، مثل نماذج الاتصال (contact form) والحماية (security) وتحسين موقعك لمحركات البحث (SEO) وتجاوب موقعك لجميع الأجهزة (responsiveness). أطر عمل ووردبريس هي قوالب مبدئية (starter themes) تستخدمها أساسًا لإنشاء تصميماتك المخصصة. تسرّع أطر العمل عملية تطوير الموقع تسريعًا ملحوظًا. باعتبارك مطور ويب يعمل باستمرار على إنشاء قوالب ووردبريس مخصصة، فربما تكون قد سئمت من كل هذه المهام المتكررة، مثل كتابة نفس الشيفرة البرمجية مرارًا وتكرارًا، والتحقق من منها تحققًا مستمرًا. توفّر أطر عمل القوالب الكثير من الوظائف الجاهزة (built-in) وخيارات التخصيص، لذلك لا تحتاج إلى كتابة الشيفرة البرمجية لكل شيء من الصفر. صُمّمت أطر العمل بقوالب من نوع "أب" (parent theme) تستخدم هذه القوالب نقطة انطلاق لإكمال التصميم. هذه القوالب (قوالب الأب) هي الأساس الذي لا يُمس. يمكنك استخدام قالب الابن لإنشاء تصميماتٍ فريدةٍ ووظائفٍ إضافية. لماذا يستخدم مصممو الويب والمطوّرون أطر عمل ووردبريس؟ السبب الأكبر لاستخدام المصممين لإطار العمل هو تسريع عملية التطوير. تقلِّل أطر عمل القوالب على وقت التطوير تقليلًا عظيمًا؛ لأنك لست بحاجة إلى البدء من الصفر. يمكنك استخدام إطار العمل نقطة انطلاقة لتصميم قالبك النهائي، ثم يمكنك إضافة وظائف باستخدام وحدات (modules) مختلفة، مثل وظيفة السحب والإفلات (drag and drop)، وشريط التمرير (sliders)، والمتاجر الإلكترونية. يمكنك غالبًا الوصول إلى الوظيفة عن طريق تفعيل شيفرات برمجية قصيرة جاهزة (built-in) في إطار عمل ووردبريس. بدلاً من إنشاء قالب وكتابة شيفرته البرمجية من الصفر، يمكن أن يكون إنشاء موقع ووردبريس بسيطًا كإنشاء ملف تنسيقات style.css جديد، وتخصيص بعض الوظائف، وإضافة عناصر مرئية (visuals) يحتاجها عميلك. ثم، هأنتَ ذا انتهيت من الموقع! سيكون عميلك راضيًا بسبب التسليم السريع! من ناحية أخرى، ستكون سعيدًا لأنك اخترقت طريقك للتوّ من خلال عملية التطوير، وأنشأت موقع الويب الذي يريده العميل بسرعة فائقة! يمكنك الآن استثمار وقت إضافي في العمل مع عميلك والتأكد من أنّ موقع الويب هذا يحقق أهداف عميلك ويأتي بالنتائج الصحيحة. فوائد وعيوب استخدام إطار عمل ووردبريس إنها حقيقة أنه سيكون هناك دائما إيجابيات وسلبيات لقرارك. إيجابيات استخدام إطار عمل ووردبريس: توفير الوقت، وفعالية التطوير، والسرعة، وسهولة التطوير. كما ذُكر سابقًا أنه باستخدام إطار عمل القالب يمكن أن يقلّل وقت التطوير تقليلًا عظيمًا، ويسمح لك بتسليم العمل بسرعة. دعم قوي، ومجتمع من مطوري ووردبريس ذوي الخبرة. تحتوي أطر عمل ووردبريس الأكثر شهرةً على مجتمع ضخم ورائها، مما يساعدك على إصلاح الأخطاء وإيجاد الحلول بسرعة. الوظائف الجاهزة (built-in functionality). إضافة وظيفة فعالّة سهل للغاية مع التكامل الذي توفرّه متاجر القوالب الكبيرة. جودة الشيفرة البرمجية. تًكتب الشيفرات البرمجية باستخدام أفضل ممارسات ومعايير ووردبريس. وتكون شيفرات HTML و CSS و PHP محسّنة، كما أنها مُحسنة بأكبر قدر لمحركات البحث. الترقيات. سهولة التحديثات للإصدارات المستقبلية من ووردبريس ولا داعي للقلق بشأن ذلك. سلبيات استخدام إطار عمل ووردبريس: منحنى التعلم، سيستغرق الأمر بعض الوقت لإتقان أيٍّ من هذه الأطر. التكلفة، إطار العمل أغلى قليلاً من القالب المدفوع، لكنه يستحق ذلك. القيّود، تحدّد أطر العمل ما تستطيع وما لا تستطيع فعله. لا يمكنك كسر هذه الحواجز. يمكن أن يكون هذا عيبًا بالنسبة للمصممين المبتكرين الفائقين، لكن في معظم الحالات، يكون إيجابيًا وليس سلبيًا. شيفرات برمجية لا داعي لها، تأتي أطر العمل مع الكثير من الوظائف الجاهزة (built-in) التي قد لا تحتاجها. قد يؤدي هذا إلى إبطاء موقعك إذا لم تكن حريصًا على التخلّص من الخصائص التي لا تحتاجها. هل يجب عليّ استخدام إطار عمل ووردبريس؟ على الرغم من وجود منحنى تعليمي إضافي وتكلفة إضافية مأخوذة في الحسبان، يجب عليك حتمًا استخدام إطار عمل القوالب إذا كنت جادًا في تطوير مواقع ووردبريس. ستزداد سرعتك وسيتحسّن أداؤك تحسنًا كبيرًا قد يصل إلى عشرة أضعاف! ستكون قادرًا على التعامل مع عملاء أكثر وأفضل. علاوة على ذلك، سوف تكون قادرة على تلبية احتياجات عملائك وقضاء المزيد من الوقت في فهم أهدافهم، ستستطيع تنمية عملك من خلال القيام بذلك (استخدام أطر عمل القوالب). بناء موقع من الصفر يشبه بناء منزل دون مُخطّط (blueprint). في المقابل فالبدء بإطار عمل يشبه استخدام مُخطّط. سأل كاتب المقال نيكولاس تارت، وهو مصمّم يتمتع بخبرة 5 سنوات، عن رأيه في "وجوب استخدام إطار عمل" فأجاب نيكولاس: إنها حقيقةٌ لا تحتاج إلى كثير من التفكير في وجوب استخدام ووردبريس ووجوب تعلّم إطار عمل أو قالب مبدئي (starter theme) لخدمة عملائك خدمة جيدة. يركّزون في موقع ‎1stWebDesigner‎‎‎‎‎ بشِدّة على التوصية بووردبريس لمساعدتك أن تكون مستقلًّا ناجحًا. بالنسبة لمعظم المصممين المستقلّين، فمشكلتهم ليست في ضعف معرفة البرمجة والتصميم، ولكنها في ضعف مهاراتهم التجارية. سيدفع لك العملاء مقابل النتائج التي ستريهم إياها على هيئة موقع ويب. للقيام بذلك، تحتاج إلى تقليل التركيز قليلًا على التقنية وعليك بتعلم بعض مهارات التسويق. ترجمة -وبتصرف- للمقال Why You Should Choose WordPress من كتابة فريق التحرير بالموقع
  8. لقد سعد أفراد موقع WPMU DEV للغاية لأنهم أحبوا أتمتة أداة Automate للكثير من الأشياء. وكما فعلتَ أنت، ضاعفوا جهودهم لإضافة بعض التحسينات الجميلة، بدءًا بما يسمّونه "الترقيات الآمنة". أتريد إلقاء نظرة؟ أظن ذلك قبل أن نبدأ، إذا لم تكن معتادًا على Automate، فهي في الأساس أداة توفّر عليك وقتًا محددًا لتحديث جميع مواقعك التي تعمل بووردبريس (وكذلك مواقع عملائك). إليك كيفية ذلك في حالة اكتشاف تحديث: تُنشئ Automate نسخة احتياطية (backup) من موقعك. إذا نجح ذلك، ستُرقِّي Automate الإضافات (plugins) والقوالب (themes) التي حددتها على أنها موثوقة (مع تحديث نواة ووردبريس (WordPress core)). ستُرسَل إليك رسالة بريد إلكتروني تحتوي على الأخبار السعيدة (بالإضافة إلى أنها كلها مخزّنة في سجل النشاط). ولكن الآن، هناك خطوة إضافية، وهي على الأرجح ستعجبك: تُنشئ Automate نسخة احتياطية (backup) من موقعك. تسيطر أداة "الترقية الآمنة" على الشاشة مانعة إياك من إجراء أي عملية حتى الانتهاء من الترقية. إذا نجح ذلك، ستُرقِّي Automate الإضافات (plugins) والقوالب (themes) التي حددتها على أنها موثوقة (مع تحديث نواة ووردبريس (WordPress core)). تقوم "الترقية الآمنة" بالتحقق من عمل موقعك ومن خلوّه من الأخطاء (باستخدام خدمة موقع WPMU DEV المسماة Uptime). تتخذ "الترقية الآمنية" مكانًا من صفحتك الرئيسية لتعرض لك أي اختلافات حدثت مقارنة بالنسخة السابقة. سيُرسل إليك رسالة بريد إلكتروني تحتوي على الأخبار السعيدة (بالإضافة إلى أنها كلها مخزّنة في سجل الأنشطة) بما في ذلك وقت التشغيل (uptime) وفحص الأخطاء بالإضافة إلى تمييز لون أي اختلاف في الشاشة الجديدة. لذلك، يُختَبر في موقع WPMU DEV تلقائيًا الطريقة التي سارت بها الترقية (upgrade) وسيرسلون لك بريدًا إلكترونيًا على الفور لإعلامك بكل شيء عن هذه الترقية. تحقّق من ذلك. كل شيء جرى على ما يرام. ومع ذلك، إن كان هناك تغييرات كبيرة، فلن نذكر لك النسبة المئوية لاختلاف هذه الترقية عن النسخة السابقة، بل سنسّلط الضوء عليها باللون الوردي الفاقع (jarring pink)، لذلك لن تفوتك هذه التغيّرات ما لم يكن موقعك مطليًا كلّه باللون الوردي الآن، كما يمكنك أن ترى، يعود الفارق المئوي إلى شريط التمرير الكبير الضخم (massive slider)، ونلاحظ أن شرائط التمرير (sliders) ومربعات المحتوى (dynamic content) قد تحدث فرقًا. ويمكنك أن تراها في البريد الإلكتروني لذا لا يوجد تلاعب هنا. إنها رائعة وسهلة الإعداد. في الحقيقة، يظن أفراد موقع WPMU DEV أنه من المهم للغاية أنهم عملوا ذلك بالفعل من أجلك بالطبع، يمكنك إعداد البريد الإلكتروني الذي تريد أن يرسل يكون الإرسال إليه ويمكنك إعداد مدى تكرار ذلك. يُفضّل الكاتب James Farmer اختيار وصول البريد الإلكتروني على الفور لأنه يُعرّفك ما إذا كانت هناك أية مشكلات، ولكن يمكنك الحصول على ملخّصات يومية أو أسبوعية أو شهرية بحسب رغبتك. وبالتأكيد، فهناك سجل كامل حيث يمكنك الآن مراجعة التحديثات والنُسَخ الاحتياطية، بل ويمكنك أيضًا استعراض الشاشة التي عملتها أداة "الترقية الآمنة". ولن تتوقف عند هذا الحد! في الشهر القادم أو نحوه (بحسب تاريخ المقال الأصلي)، توقّع أن ترى بعض الميزات الأخرى المفيدة التي أضيفت إلى ووردبريس، مفصلة تفصيلًا أكبر أدناه: الأتمتة الآلية المجدولة (Scheduled Automate)، ونتيجة لذلك يمكنك ضبط الأتمتة الآلية (والترقية الآمنة Safe Upgrade) بأن تعمل في أوقات محددة. مثلا، خلال الأسبوع الذي تقضيه في العمل، إن حدث شيء ما، يمكنك إصلاحه في أسرع وقت ممكن. تنبيهات عتبة التحمّل (Threshold Alerts)، إذا تعطّل موقعك، فأنت تريد معرفة ذلك على الفور (وقام مطورو WPMU DEV بتوفير ذلك على الفور في أداة Uptime) ولكنه سيُسمح بإرسالك بريدًا إلكترونيا فقط إذا اكتشفت أداة الترقية الأمنة (Sage Upgrade) فارقًا أكبر من %25 قبل وبعد إمساك جزء من الشاشة (يمكنك تعيين النسبة المئوية التي تريد). ولكن لماذا يتوقف موقع WPMU DEV عند هذا الحد؟ أخبر موقع WPMU DEV كيف ترغب أن تكون أداة في المستقبل وما الميزات التي تريدها لهذه الأداة. أخبرهم في التعليقات فهم ينتظرون انطباعك بفارغ الصبر. ترجمة -وبتصرف- للمقال Automate Just Got More Amazing – Introducing ‘Safe Upgrade’ لصاحبه James Farmer
  9. يمكن أن تكون البيانات جذّابة، وإذا اضطررت إلى التعامل مع الرسومات البيانية والإحصائيات في عملك في تصميم الويب، فأنت تعلم أن تمثيل البيانات مرئيًا هو أفضل بكثير من الاقتصار على الاستدلال ببعض الأرقام فقط. سواء أردت كتابة تدوينة، أو أردت إنشاء مخططّ لمشروع خاص بعميل، أو مجرد ترتيب بياناتك الشخصية، توفّر الأدوات المجانية لعرض البيانات رسوميًا ما تحتاجه لتشكيل المخططات، والرسوم البيانية، والمخططات المعلوماتية البيانية (infographics) والتي تكون جميلة المنظر وسهلة الفهم معًا. Chartist "مخططات متجاوبة بسيطة"، لا أكثر ولا أقل. نزّل هذا البُريمج وأنشئ مخططات دائرية متجهة (vector pie charts)، ورسوم بيانية خطية (line graphs)، وغيرها من المخطّطات التي ستتسع لحجم أي شاشة. يمكنك كذلك إضافة حركات(animations)! هذه المخطّطات متوافقة مع معظم متصفحات الويب، لذلك لا يوجد سبب يمنعك من استخدامها. ومع ذلك ستحتاج لتعلّم القليل من JavaScript و CSS. يمكنك تعلّم هذه اللغات من خلال موسوعة حسوب والتي تحتوي على توثيقٍ شاملٍ ل CSS و JavaScript وغيرها. أو يمكنك الالتحاق بدورات أكاديمية حسوب الاحترافية كدورة تطوير واجهات المستخدم ودورة تطوير التطبيقات باستخدام لغة JavaScript. RAWGraphs إذا كنت تبحث عن التنوّع، فلدى RAWGraphs كل ما تحتاج له من خيارات بين يديك. ما عليك سوى لصق بيانات جدول البيانات (spreadsheet) أو رفع ملف، وستكون قادرًا على تحويل الأرقام إلى أي نوع من المخططات، من نوع المخطّطات العمودية (bar graph) إلى نوع المخطّطات التي تقيس مدى التغيّرات خلال الوقت وهو ما يسمّى مخطّط النتوء (bump chart)! يمكنك أيضًا إضافة نوع المخطط الذي تريد إذا كنت تجيد JavaScript. عند الانتهاء من التخصيص، يمكنك تنزيل المخططات التي أنشأتها بصيغة SVG أو PNG أو JSON. أو قم بمجرد تضمين المتجّه (vector) في موقعك ببساطة. هذا البرنامج المتقدّم ليس أسهلها استخدامًا، ولكن لديه الكثير من الإمكانيات. Datawrapper إذا أردت تضمين جدول بيانات (spreadsheet) في مقال، فسوف تُسهّلُ Datawrapper تحويله إلى رسم بياني جميل. هذا ليس صعبًا على الإطلاق، وكما أن الرسوم البيانية قابلة للتخصيص بالكامل وصولًا إلى محاذاة النص (text alignment) وتخصيص اللون عند الانتهاء (يوجد كذلك مرشّحات للمصابين بعمى الألوان!)، تحتاج فقط إلى التسجيل وستحصل على شيفرة التضمين (embed code) للمخطّط. Tableau أتحتاج شيئًا احترافيًا؟ تعدُّ Tableau Public أداة قابلة للتّنزيل تتيح لك تمثيل البيانات مرئيا (visualize data) بعدة طرق. تُعدّ هذه الأداة مناسبة لأي نوع من الرسوم البيانية من المخطّطات الصغيرة (small charts) إلى المخططات المعلوماتية البيانية المخصّصة (dedicated infographic)، يُعدّ هذا التطبيق اختيارًا عظيمًا لمصممي الويب. ChartBlocks "أسهل باني مخطّطات في العالم" هو كما يقول عن نفسه تمامًا. أدرِج بعض البيانات لجدول البيانات (spreadsheet)، وعدِّل بعض الأشياء البسيطة، واختر قالبًا، وبهذا حصلتَ على مخطّط في أقلّ من دقيقة. يمكنك تعديل المظهر أكثر إن أردت ذلك، أو يمكنك تنزيله ببساطة، أو تضمينه، أو مشاركته على مواقع التواصل الاجتماعي! Beam أكلّ هذه البرامج معقّدة أكثر من اللازم؟ أتريد تحويل حفنةٍ من البيانات إلى رسم بياني بسيط دون استيراد مجموعة من الملفات؟ عدّل بعض الأسماء ونقاط البيانات فقط (data points)، واختر واحدًا من بين أربعة أنواع من المخطّطات البسيطة، واختر ملفات تخصيص اللون (color profile). بهذه السهولة سيكون مخطّطك جاهزًا! Visualize Free يعدّ برنامج السحب والإفلات هذا صاحب طريقة رائعة لإنشاء مخططات معلوماتية بيانية (infographics) جميلة تتضمن الكثير من البيانات. ستحتاج إلى التسجيل لاستخدام هذا التطبيق، ولكن هناك العديد من الأمثلة في الصفحة الرئيسية التي يمكنك تخصيصها بحريّة حتى تعتاد على لوحة التحكم. OpenHeatMap هذا التطبيق مذهل ببساطة لأنه سهل الاستخدام! ارفع جدول بيانات (spreadsheet) أو ملف إكسل (Excel) لتحصل على خريطة حرارية (heatmap) مع الشيفرة المضمنّة. العملية أنيقة وانسيابية تمامًا. Timeline إعداد هذا الموقع أصعب نوعًا ما، إذ أنّك تحتاج إلى اتّباع الخطوات حرفيًا وإنشاء جدول بيانات (spreadsheet) جديد. ولكن إذا كنت بحاجة إلى جدول زمنيّ تفاعليّ قابلٍ للتضمين لمشروعك فهذا هو التطبيق المنشود. بيانات جميلة يُعدّ التفريق بين النصوص بصورٍ جذابة طريقةً رائعةً لمنع ظهور صفحة الويب ظهورا جافًّا. ستتمكن من إنشاء رسوم بيانية ومخططات مثيرة للاهتمام باستخدام هذه الأدوات التي ستشدّ انتباه كلّ من يراها، وفي دقائق. لا مزيد من إهدار الساعات في محاولة إنشاء الرسوم البيانية بنفسك! ترجمة -وبتصرف- للمقال ‎9 Free Data Visualization Tools لصاحبته Brenda Stokes Barron
  10. يتحدثون دائمًا عن إضافات تحسين الأداء والحماية في مدونة WPMU DEV، لكن هل تعلم أن لديهم مجموعة رائعة من إضافات تحسين المواقع لمحركات البحث (SEO) أيضًا؟ لقد طوّروا في WPMU DEV إضافة SmartCrawl، وكانت هي إضافتهم الأساسية لتحسين المواقع في محركات البحث، لبضع سنوات (كان يُطلق على هذه الإضافة Infinite SEO)، وعملوا في WPMU DEV على تحديث ضخم لهذه الإضافة منذ فترة قريبة. ولكن هناك بعض الإضافات التي يودّون ضمّها مع SmartCrawl والتي يمكن أن تحسّن ظهور موقعك في محركات البحث تحسينًا كبيرًا. الواقع فيما بتعلق بتحسين المواقع لمحركات البحث أسهل بكثير مما يبدو عليه عندما تعرِفُ ما تفعله. نعم، إنه عملٌ شاق ولكنه ليس لغزًا ويمكن تسهيله بالأدوات المناسبة. لدى موقع WPMU DEV عدد من الأدوات التي يمكنك استخدامها على موقعك لزيادة عدد الزوّار، وعدد المتجولين في الموقع ,والذين قد يصبحون عملاء محتملين. سيُقدم في هذا المقال بعض الأدوات، وستُسدى إليك بعض النصائح للحصول على أقصى استفادة من هذه الأدوات. وها هي ذا. SmartCrawl تُعدُّ SmartCrawl الإضافة الرئيسية لتحسين موقعك لمحركات البحث، صُمِّمت لتعزيز تصنيفك في محركات البحث. تعمل هذه الإضافة مع حقيقة أن المحتوى هو الملك بالنسبة لتحسين المواقع لمحركات البحث، وتسهّل الإضافة العثور على محتواك الرائع. بدلًا من تخمين مدى ملاءمة محرك البحث لموقعك، ستمسح الإضافة موقعك مسحًا شاملًا وستعلمك بمواطن القوة والضعف في موقعك لتحسين ظهوره في محركات البحث. ما إن تكمل الإضافة مسحها الشامل، ستخبرك بالضبط ما تحتاج لعمله على موقعك لتعزيز تصنيفك. بالنسبة للكاتبة Rachel McCollin، هذه أقوى ميزات الإضافة؛ لأنها تساعدك على فهم مدّة فعالية تحسين موقعك لمحركات البحث قبل قضاء الساعات في تحسينه. كما أن الإضافة ستمنحك التحكم في كيفية رؤية محركات البحث لموقعك، مما يتيح لك إنشاء وتحرير العناوين (titles)، وأوصاف (descriptions) منشوراتك وصفحاتك، وتحديد أي أجزاء موقعك ضُمّنت في خريطة موقعك (sitemap) وتزحف إليها زواحف محركات البحث. Hummingbird قد تتفاجأ بسبب تضمين الكاتبة لإضافة تتعلّق بالأداء وليس المحتوى، ولكن هنالك سبب وجيه لإضافتها هنا. ستنظر Google ومحركات البحث الأخرى إلى أداء موقعك عند أرشفته، وإذا كان موقعك بطيئًا، فسيؤثر ذلك سلبًا على تصنيفك. تتيح لك إضافة Hummingbird مسح موقعك (بطريقة تشبه عمل إضافة SmartCrawl) مما يمنحك درجة أداء موقعك وتخبرك الإضافة بالضبط لما تحتاجه لجعل موقعك أسرع. سيؤدي ذلك إلى تعزيز تصنيفك في محركات البحث، بل وفوق ذلك سيُبقي المستخدمين سعداء أيضًا، وتذكّر أن أحد الأسباب الرئيسية لمغادرة الموقع دون تصفحه بالكامل هو بطء تحميل صفحات الموقع. لذلك إذا كان بإمكانك تحسين أداء موقعك، فسيؤدي ذلك إلى زيادة عدد الأشخاص الذين يعثرون عليه عبر محركات البحث وسيكون له تأثير على معدّل الارتداد (bounce rate)، ومعدل التحويل (conversion rate)، مما سيجعل موقعك أكثر نجاحًا. ملاحظة: معدل الارتداد: يعني معدّل خروج الزوّار من موقعك فورًا من أول صفحة. معدل التحويل: يعني معدّل تنفيذ الزائر لما يُطلب منه في الموقع، قد يكون ذلك شراء أحد المنتجات أو التسجيل في القائمة البريدية أو غيرها. WP Checkup WP Checkup ليست إضافة، ولكنها خدمة مجانية تتمكّن من تحديد جودة أداء موقعك بناء على طيف واسع من المقاييس وتحديد ما عليك القيام به لتحسين أداء موقعك. ببساطة، اكتب رابط موقعك في أداة الفحص الخاصة بموقع WPMU DEV، وستُشغّل إضافة Hummingbird لفحص أدائه، وإضافة SmartCrawl لفحص مدى جهوزية موقعك لمحركات البحث، وإضافة Defender لفحص مدى حماية موقعك، وستعطيك درجة لمستوى (السرعة، والتوافق مع محركات البحث، والحماية) من أجل أن تعرف تقييم أداء موقعك الكلّي. لست مضطرًا لتثبيت هذه الإضافات على موقعك (ومع ذلك، ستنصح أداة Checkup بتثبيتها إذا لم تكن ثبّتها بالفعل)، ستمسح الأداة موقعك مسحًا شاملًا وستعطيك الملاحظات (feedback) وكأنك ثبتّ هذه الإضافات في موقعك، ستخبرك الأداة بمكامن الخلل في موقعك، والأماكن التي تحتاج تعديلات طفيفة، ومكامن المشاكل الخطيرة، وستخبرك هذه الأداة بما يتوجّب عليك لتصحيح الأمور. إنها أداة سريعة وسهلة ومجانية، وتستحق استخدامها إذا لم تكن قادرًا على تثبيت إضافات الأداء من موقع WPMU DEV على موقعك. Hustle لقد صُمّمت إضافة Hustle لتكون أفضل مساعد تسويق إلكتروني يمكنك تعيينه على الإطلاق، ستساعدك هذه الإضافة على تحويل زوار موقعك إلى متابعين أوفياء أو عملاء من خلال مساعدتك على التواصل والتفاعل معهم. تصلك إضافة Hustle بجميع أفضل خدمات البريد الإلكتروني وتساعدك على نماء قائمتك البريدية وتوزيع محتواك بسهولة، مما يساعدك على إنشاء قوائم بريدية اختيارية (opt-ins) جميلة ستشدّ انتباه الزائر وتزيد من عدد الأشخاص الذين يختارون الاشتراك (opt in). يمكنك تخصيص المحتوى والتصميم بما يتناسب مع علامتك التجارية وبما يشد الانتباه. كما تتيح لك هذه الإضافة تكييف المحتوى مع أقسام مختلفة من جمهورك، مما يتيح لك عرض قائمة البريد الإلكتروني الاختيارية (opt-ins) وفقًا لنوع الزائر ومن أين أتى، لذلك إذا قام شخص ما بزيارتك عبر محرك البحث، فقد يرى شيئًا مختلفًا عن شخص آخر كتب رابط موقعك مباشرةً، ويمكن استهداف الزوّار الجدد بطريقة تختلف عن استهداف العملاء المعتادين. تساعدك إضافة Hustle على قياس أداء موقعك، مما يتيح لك تتبّع أداء موقعك، وإتاحة تتبّع عدد مرات عرض قائمة البريد الإلكتروني الاختيارية (opt-ins)، وتحدد ما هو المناسب وما هو غير المناسب. وتكتشف هذه الإضافة مانعات الإعلانات (ad blockers) ويمكنها التحايل عليها أيضًا. Social Marketing كما تخبرنا مقولة "الناس يشترون من الناس". فإنه ليس هناك من يحب الشراء أكثر من الأصدقاء. إذا كنت قادرًا على إنشاء تأثير في مواقع التواصل الاجتماعي حول موقعك وعلامتك التجارية، وأن تجعل الناس يشاركون محتواك مع أصدقائهم ومتابعيهم، فسيكون ذلك أقوى بعدة مرات من نشر محتواك على قنواتك في مواقع التواصل الاجتماعي. وهو المكان الذي تأتي فيه إضافة Social Marketing. استخدم هذه الإضافة لتحفيز الزوًار لمشاركة محتواك على حساباتهم الاجتماعية. يمكن أن تكون الحوافز أي شيء تريده: كتاب إلكتروني مجاني أو قسيمة (voucher) أو عرض خاص أو دعوة لحضور فعالية لكبار الشخصيات (VIP event). تسهّل هذه الإضافة إنشاء إعلانات مضمنّة داخل المنشورات تبرز الحوافز (highlighting the incentives)، بحيث يمكن للمستخدمين النقر عليها ومشاركة محتواك والحصول على المكافأة. شجّع زوارك على مشاركة محتواك وزيادة جمهورك، الأمر الذي بدوره سيؤثر بالإيجاب على موقعك بالنسبة لمحركات البحث، وسيزيد عدد زوّارك ومعدلات التحويل (conversion rates) والتي تعني كما ذكرنا سابقُا معدّل تنفيذ الزائر لما يُطلب منه في الموقع، قد يكون ذلك شراء أحد المنتجات أو التسجيل في القائمة البريدية أو غيرها. Google Analytics +‎ إذا كانت عملية تحسين موقعك لمحركات البحث مهمة بالنسبة لك، فستحتاج إلى تحليل حركة مرور الزوار في موقعك. لن تحتاج فقط إلى فهم التصنيفات الخاصة بتحسين المواقع لمحركات البحث، بل ستحتاج أيضًا إلى الحصول على بيانات أفضل صفحاتك أداءً، والمواقع التي يأتي منها المستخدمون، والأجهزة التي يستخدمونها، ومعدل الارتداد (bounce rate)، والمزيد. كل هذا متاح في إحصاءات Google (أي Google Analytics) وهو أمر رائع، ولكن ماذا لو لم ترد أن تترك شاشة تحكمك المريحة إلى شاشة موقعك في موقع إحصاءات Google؟ إضافة موقع WPMU DEV المسمّاة Google Analytics +"‎" تمنحك هذا تحديدًا. تضيف إحصاءات لوحة تحكمك في إحصاءات Google إلى لوحة تحكمك في ووردبريس، حتى تتمكّن من الحصول على كل شيء من مكان واحد. وأفضل من ذلك، أن هذه الإضافة تعمل بتوافق مع المواقع المتعددة في ووردبريس (WordPress Multisite)، مما يتيح لك استخدام شيفرة تتبع واحدة من Google لشبكة مواقعك بأكملها. لذلك إذا كنت تُعدّ شيفرة تتبع جديدة في كل مرة تنشئ فيها موقعًا جديدًا على شبكة مواقعك (ربما إذا كنت تستخدم ذلك لاستضافة مواقع العملاء)، فيمكنك التوقّف عن ذلك فورًا. وأفضل من ذلك، أنه يمكنك رؤية تحليلاتك ليس فقط لكل موقع على حدة، ولكن التحليل سيشمل شبكة مواقعك بالكامل، لذلك يمكنك أن ترى من مكان واحد فقط المواقع التي تحقق أفضل أداء وتلك التي لا تحصل على عددٍ كافٍ من الزيارات. تعمل إضافة Google Analytics +‎ جنبًا إلى جنب مع إضافة SmartCrawl لتعزيز تصنيفك في محركات البحث وتحسّن إضافة Hummingbird أداء موقعك، وستعطيك إضافة Google Analytics +‎ كل المعلومات التي تحتاجها لفهم ما الجهود المطلوبة لتحسين الموقع لمحركات البحث وتساعد على التركيز على صفحات الهبوط (landing pages) وصفحات التحويل (conversion pages) والأماكن الأخرى في موقعك حيث تحتاج جذبًا للزوار. The Hub تُعدُّ The Hub خدمة أخرى أكثر من مجرد كونها إضافة. هي خدمة متكاملة لإدارة وتحسين المواقع يقدهما موقع WPMU DEV. توفر لك The Hub أداءً منتظمًا وعمليات مسح لموقعك بالنسبة لمحركات البحث، والتي تعمل بالخلفية تلقائيًا. ستبّهك في حالة وجود أي مشاكل وتخبرك بما تحتاج فعله لإصلاحها. التحديثات التلقائية المضمّنة إلى نواة ووردبريس (WordPress core)، والإضافات الخارجية (third-party plugins) وإضافات موقع WPMU DEV يعني أن موقعك لا يعاني من مشاكل تتعلّق بتحسين ظهوره لمحركات البحث، أو الأداء، أو الحماية بسبب انتهاء صلاحية البرمجيات (out of date software). ترجمة -وبتصرف- للمقال ‎7 WordPress SEO Plugins to Get Your Site on Google’s Front Page لصاحبته Rachel McCollin
  11. بينما يوفّر ووردبريس (WordPress) الكثير من المميزات والمرونة، لا يزال هناك الكثير من الوظائف المفقودة من النواة الأساسية . أفضل طريقة لملء هذا الفراغ، بالطبع، هي الحصول على الإضافات المناسبة لك. تقدم إضافات ووردبريس جميع أنواع التخصيص لمديري المواقع، وعلى الرغم من ذلك، مع وجود أكثر من 55000 إضافة للاختيار من بينها في دليل إضافات ووردبريس، ناهيك عن جميع المنتجات المدفوعة (premium) المتاحة، يمكن أن يكون من الصعب فرز الجيّد من الأقل جودة. إذًا، إليك مجموعة من الإضافات المجانية والمدفوعة الضرورية لتحسين موقعك في شتى النواحي. لقد ضمّنت خيارات لكل شيء بدءًا من التخزين المؤقت (caching) لتحسين الصور إلى الحماية (security) والمزيد. Hummingbird لن ينتظر الزائرُ العادي لثمان ثوانٍ حتى يكتمل تحميل موقعك، وتوصي Google بأن يكون وقت تحميل موقعك في حدود ثانيتين تقريبًا. إذا استغرق موقعك وقتًا أطول من ذلك، فمن المحتمل أن يغادر زوّار موقعك حتى قبل أن تتاح لهم فرصة التحقق من عنصر واحد على الموقع. إضافة على ذلك، لن تحرص Google على تصنيفك مرتبة أعلى في نتائج البحث. التخزين المؤقت (cashing) هو أحد أفضل الطرق التي تمكّنك من تسريع موقعك لأنه يحفظ نسخة سريعة للتحميل تُقدّم في المتصفحات بأقصى سرعة. هذا مكان إضافة Hummingbird لتعتني لك بهذا الأمر، وبالإضافة على ذلك، فهي سهلة الاستخدام. تمسح هذه الإضافة موقعك، ثم تعطيك تحليلًا لموقعك. يمكنك رؤية النتيجة الإجمالية لسرعة موقعك، ثم إصلاحها في بضع نقرات. تتجاوز هذه الإضافة عملها الأصلي لأنها لا تخزّن الصفحة في ذاكرة التخزين المؤقت وحسب، بل تزيد عليها بتقليل حجم الشيفرة المصدرية (minifies)، وضغط الملفات (compresses) ودمجها (merge). تشبه هذه الإضافة الطائر المساعد الصغير الذي يخبر موقعك على الإنترنت كيف يطير بسرعة مثل الطائر الطنّان. هذه الإضافة مضمّنة في عضوية WPMDEV ويمكنك تجربتها مجانًا لمدة 30 يوما. HubSpot توفر هذه الإضافة نموذجا (form) وباني قوام منبثقة (pop-up builder) مع واجهة سحب وإفلات (drag-and-drop) سهلة الاستخدام حتى تتمكّن من التِقاط معلومات زوّارك، ولكنها تقدّم أكثر من ذلك بكثير. ستُجمّع إضافة HubSpot الإرسالات (submissions) من أي نموذج لديك على موقعك الذي يعمل بووردبريس (حتى لو بنيتها باستخدام الإضافة المجانية Forminator أو Hustle) وستضيف HubSpot هؤلاء العملاء المتوقّعين الجدد تلقائيًا إلى إدارتك الخاصة بعلاقات العملاء (CRM). يمكنك تقسيم قاعدة بيانات جهات اتصالك إلى قوائم وإضفاء طابع شخصي على رسائل بريدك الإلكتروني باستخدام أي خاصية من خواص إدارة العلاقات مع العملاء (CRM). وكل هذا مجانًا! يمكنك نشر تقارير عن النجاح الكلّي لبريدك الإلكتروني ومعرفة كيفية تفاعل كل جهة اتصال (contact) مع حملات بريدك الإلكتروني ويعود الفضل في هذا إلى التحليلات المدمجة في هذه الإضافة. تتضمن هذه الإضافة على محادثة مباشرة (live chat) وباني روبوت الدردشة (bot builder) حتى تتمكن من البدء في التفاعل مع الزوّار وجذب عملاء محتملين. يمكنك إعداد روبوتات الدردشة للإجابة على الأسئلة البسيطة من قِبَل زوّار موقعك لتتمكن من التفاعل مع زوّارك حتى عندما تكون غير متصلٍ بالإنترنت. محتملين. يمكنك إعداد روبوتات الدردشة للإجابة على الأسئلة البسيطة من قِبَل زوّار موقعك لتتمكن من جذب زوّار حتى عندما تكون غير متصلٍ بالإنترنت. بمجرد أن يرسل شخص ما معلوماته عبر نموذج (form)، أو نافذة منبثقة (popup)، أو الدردشة المباشرة (live chat)، يمكنك حينها أتمتة بريد إلكتروني راجع (kickback email) للاتصال مع هذا العميل ومشاركة المحتوى معه. W3 Total Cache صُممت هذه الإضافة لزيادة تحميل صفحة الويب لمواقع ووردبريس، مما سيحسّن تجربة الزوّار الإجمالية. تساعد هذه الإضافة على زيادة أداء الخادم عن طريق تقليل مرات التحميل. بتقليل أوقات تحميل الصفحة، سيتحسّن الأداء الكلّي للموقع مما يساعد على رفع تصنيف موقعك في محركات البحث. تُمكّن إضافة W3 Total على تحسين أداء خادم الويب خلال فترات الازدحام العالية، وهو أمر مصيري للمواقع الكبيرة. اختبر محررو موقع wpmudev أفضل إضافات التخزين المؤقت لمعرفة الأفضل منها في تحسين سرعة الصفحات. Defender يُعد ووردبريس خيارًا شائعًا لإنشاء مواقع الويب وهذا يجعله هدفًا مثاليًا للمخترقين لأنهم يستطيعون إنشاء برنامج خبيث يُفسد ملايين المواقع دون عناءٍ يُذكر. لا يهم إذا كان موقعك مستهدفًا أم لا، بل المهم متى سيُستهدف. هذا السبب في أنّ الحفاظ على أعلى معايير الأمان مهم للغاية. إذا تمكّنت من إعداد حماية جيّدة، فيمكنك حماية موقعك من المخترقين، وستساعدك إضافة Defender في حمايتك وستقدم لك المزيد من الخدمات. تبحث إضافة Defender عن أي ثغرات أمنية في موقعك وتتيح لك معرفتها إذا وجدت في موقعك حتى تتمكن من ترقيعها بنقرة واحدة. هذا يعني أن تثبيت هذه الإضافة سيساعدك حتى بعد اختراق الموقع وسيحمي موقعك من أي اختراق محتمل بنقرة واحدة، وهذا سيجعل موقعك منيعًا ضد الاختراقات. أفضل ما في هذه الإضافة أنك بمجرد ضبط إعداداتها وتفعيل الفحص المُجَدْوَل يمكنك حينها نسيانها لتقوم بالعمل دوريًا بدلًا عنك. إضافة لذلك، قد يكون أفضل ما في الأمر أن هذه الإضافة مضمّنة في عضوية WPMDEV ويمكنك تجربتها مجانًا لمدة 30 يومًا. Jetpack توفّر إضافة Jetpack العديد من المميزات. ترفع هذه الإضافة الأمان، وتزيد كفاءة الموقع، وتحتوي العديد من أدوات المحتوى ومميزات مشاركة الزوّار. تحتوي على ميزة إضافة تعليقات خالية من السُخام (spam)، والمشاركة على منصات التواصل الاجتماعي، والنشر عبر البريد الإلكتروني وغيرها الكثير. توفّر Jetpack قالبًا (theme) للجوال يتميّز بسرعته وخفته وهو ملائم للاستخدام على الجوالات والأجهزة اللوحية. Akismet تساعد إضافة Akismet على تصفية أي تعليقات غير مرغوب فيها أو تبدو كذلك. تتحقق هذه الإضافة تلقائيًا من التعليقات عبر خدمة Akismet على الويب. سيكون لكل التعليقات سِجل للمستخدمين يعرض التعليقات التي عُلّمت أو مُحِيَتْ من بواسطة Akismet. إضافة لذلك، ستُعلّم كل التعليقات التي مُيّزت أنها رسالة غير مرغوب فيها أو غير مُعلّمةٍ من قبل مشرف الموقع (moderator) في السِّجل. Google Analytics +‎ تتبُّع كيفية وتوقيت زيارة المستخدمين لموقعك مهم للغاية إذا كنت تريد زيادة شعبية موقعك؛ لأن هذا التتبع سيعطيك الفرصة لمعرفة المكامن التي تتطلب التحسينات على موقعك. تُعدّ تحليلات Google أداةً ممتازةً لهذا الغرض، وتحضر إضافة Google Analytics +‎ هذه المعلومات مباشرة إلى لوحة تحكم مدير الموقع. ستمكّنك هذه الإضافة من تتبّع الزيارات، وعدد مرّات مشاهدة الصفحة، ومعدّل الارتداد (Bounce Rate) ويعني معدّل خروج الزوار من موقعك فورًا من أول صفحة، وستمكّنك هذه الإضافة من معرفة متوسط مدة الزيارة، والمراجع التي أتى منها الزائر إلى موقعك، ليس هذا وحسب، بل وستستطيع تمكين الإعدادات المتقدمة لتتبّع محتوى موقعك بحسب علم السُّكان (demographic)، ومدى الاهتمام بالإعلانات (interest for advertising) بالإضافة إلى تحليل سلوكيّات التسوّق لتعزيز أداء منتجاتك. كما يمكنك تتبّع إحصائيات موقعك أو شبكة مواقعك بسهولة من خلال إعدادات سريعة ومفهومة عند العرض. Google XML Sitemaps تولّد هذه الإضافة - المتوجّب تثبيتها في موقعك - تلقائيًا خريطةً لموقعك (XML sitemap). يُعدّ هذا الأمر ضروريًا لمساعدة محركات البحث على فهرسة موقعك فهرسة أفضل. بوجود خريطة الموقع (sitemap)، ستتمكن زواحف محركات البحث (search engine crawlers) من رؤية بنية موقعك رؤيةً أفضل وبالتالي ستزداد كفاءة موقعك بالنسبة لمحركات البحث. ستُنبّه محركات البحث مثل Google و Bing و Yahoo في كل مرة تكتب منشورًا جديدًا على موقعك. iThemes Security (كانت تُسمّى Better WP Security) تساعد إضافة iThemes Security في إصلاح الثغرات الشائعة في مواقع ووردبريس لمواجهة الهجمات الآلية المحتملة. لا يعلم كثير من مديري مواقع ووردبريس عن هذه الثغرات الأمنية، لكن إضافة iThemes Security ستقوم بما يلزم لحماية مواقعهم. ونظرًا لوجود ثغرات أمنيّة غير معروفة ناتجة من الإضافات الأخرى المثبتّة على موقعك، يمكن أن يكون موقعك معرضًا للاختراقات. تعمل إضافة iThemes Security على تحديد هذه الثغرات وإصلاحها حمايةً موقعك. Contact Form 7 يمكن إنشاء نماذج اتصال (contact forms) متعددة وإدارتها من خلال هذه الإضافة. لا حاجة لكتابة شيفرة إضافية مع إضافة Contact Form 7، كما يمكنك تخصيص محتويات البريد الإلكتروني بسهولة عبر الإعدادات. تدعم هذه الإضافة عملية الإرسال المقدمة من Ajax، واختبار CAPTCHA، ومرشحات Akismet للمساعدة في تصفية البريد غير المرغوب فيه. Snapshot يمكن أن يوفّر النسخ الاحتياطي لموقعك الكثير من الندم مستقبلًا. سواءً توقّف موقعك عن العمل أو اُخترق فلا مشكلة، ما عليك إلا استعادة موقعك من نسخة احتياطية وسيرجع كما كان وكأنّ شيئًا لم يكن. ولكن ماذا لو فقدت نسختك الاحتياطية أو تلفِت أو حُذفت خطأً؟ هل لديك نسخة احتياطية لنسخك الاحتياطية؟ لا يملك معظم الناس هذا المستوى من النسخ الاحتياطي، ولكن لا داعي للقلق بشأن ذلك مع وجود إضافة Snapshot Pro. تستطيع هذه الإضافة إنشاء نسخ احتياطية لموقعك، ويمكنها أيضًا حفظ هذه النسخ الاحتياطية في مواقع متعددة مثل Dropbox و Amazon S3 و Google Drive وحاسوبك المحلي والمزيد. يمكن توقيت النسخ الاحتياطية بأزمنة مجدولة بحيث لا تضطر لعمل ذلك يدويًا من أجل استعادة موقعك عند حدوث الكوارث. جرّب هذه الإضافة مجانًا لمدة 30 يومًا. Branda (كانت تعرف باسم Ultimate Branding) عندما تدير موقع ووردبريس لعملك التجاري، فأنت تعلم أن المظهر الاحترافي لموقعك مهم بنفس أهمية محتوى موقعك ومنتجاتك. هذا هو السبب في أن تكون قادرًا على تخصيص موقعك بالكامل واستبدال أي شيء فيه. فكرة رائعة. يمكنك استبدال شعار ووردبريس بشعارك، وتخصيص شريط المدير، وإضافة اسم شركتك لتحقيق علامة تجارية متّسقة في موقعك. تمكّنك هذه الإضافة من عمل كل ما سبق وأكثر. يمكنك تخصيص شريط المدير تخصيصًا كاملًا، وصفحة تسجيل الدخول، وتذييل الصفحة (footer)، ولوحة التحكم، وفي كل مكان آخر تظهر فيه شعارات ووردبريس وعلامتها التجارية. يمكنك حتى إضافة علامتك التجارية في أماكن أكثر، وبالإضافة لذلك، لن تكتب أي شيفرة برمجية. هذه الإضافة سهلة الإعداد والاستخدام وتعمل عبر شبكات مواقع ووردبريس (Multisite WordPress network) بأكملها أو في موقع ووردبريس واحد. هذه الإضافة هي الإضافة الوحيدة التي تحتاجها للعلامة التجارية لتحويل موقع ووردبريس إلى موقع شركتك. SmartCrawl أنت تعمل بجدّ على إنشاء محتوىً هائل لجذب الزوار إلى موقعك ولكن هل استهدفت كل المستخدمين الذين من الممكن أن يهمهم محتوى موقعك؟ يمكن أن تساعد بعض ممارسات تحسين موقعك لمحركات البحث (SEO)، ولكنك ستمضي بعيدًا مع إضافة SmartCrawl. تجعل هذه الإضافة موقعك أكثر جهوزية لمحركات البحث عن طريق إعلام زواحف الويب (web crawlers) عندما يحتوي موقعك على محتوى مهم يحتاج إلى التسجيل بدلًا من انتظار زواحف الويب للعثور عليك. وعلاوة على ذلك، يمكن للإضافة SmartCrawl إنشاء خريطة موقعك (sitemap)، وتخصيص كيفية ظهور عناوينك (titles) وأوصاف صفحاتك (descriptions) في محركات البحث، وإضافة رابط تلقائي للكلمات المفتاحية (keywords)، ويمكنك أيضا عرض التقارير الرائدة في مجال تحسين المواقع لمحركات البحث من موقع Moz. وفوق ذلك، يُعدّ إعداد واستخدام SmartCrawl سريعًا من خلال مرشد الإعداد (setup wizard). إذا كنت ترغب في التحقق من ذلك بنفسك، يمكنك تجربة ذلك مجانا لمدة 30 يومًا أو بالاشتراك بعضوية WPMU DEV. Yet Another Related Posts Plugin هذه الإضافة "Yet Another Related Posts" والتي يطلق عليها اختصارًا YARPP، يمكنها عرض قائمة من المنشورات أو الصفحات المتعلقة المنشور الحالي. توفّر هذه الميزة فرصةً رائعة للقراء لمشاهدة المحتوى الآخر ذا الصلة من موقعك. لدى مديري المواقع خيار عرض المحتوى الموجود على موقعهم فقط أو يمكنهم جني أموال إضافية من خلال عرض المحتوى الدعائي. Smush Pro يعدّ رفع الصور على موقعك وفي منشوراتك طريقةً ممتازة لجذب انتباه الزوّار، لكنها تثقل كاهل موقعك. تشغل الصور مساحة كبيرة، ,والأسوأ أنها تبطّئ الموقع. لحسن الحظ، يمكنك ضغط صورك لحل هذه المشكلة. قُيّمت إضافة Smush Pro أنها أحسن إضافة لضغط وتحسين الصور. ليس هذا فقط، ولكنها تعمل بطريقة توفّر مساحة التخزين، وتساعد على تحميل موقعك أسرع دون تقليل جودة الصور. يمكنك ضغط الصور وتحسينها تلقائيًا أو يدويًا أو تحديد مجموعة من الصور وتحسينها مرة واحدة، وتحسين الصور بقوة ضغط أقوى بعشر مرّات دون فقد جودة الصورة. تتكامل هذه الإضافة مع إضافتي NextGEN و WP Retina 2x، لذلك لا داعي لقلق المصورين بشأن عرض صورِ واضحة ورائعة. لقد أضيف أيضًا إلى Smush Pro ميزة التحميل المُرجأ (lazy loading) وهي ميزة تأخير تحميل الصور في أسفل صفحات الويب حتى يصل إليها المستخدم، وهي بهذا ترفع سرعة وكفاءة المواقع لعدم تحميل أي صورة إلا بحسب الحاجة إليها. يمكنك تجربة الإصدار المجاني من WP Smush على wordpress.org أو تجربة الإصدار المميز مجانا لمدة 30 يومًا. إذا كنت بالفعل عضوًا في WPMU DEV فأنت تملك صلاحيّة الوصول إلى إضافة WP Smush Pro، لذا يمكنك تجربته ومعرفة سهولة استخدامه وربما رفع أداء موقعك للطاقة القصوى. Forminator تقدّم إضافة Forminator ميزات قيّمة لتوفير المال وربحه مقابل لا شيء. تكامل مع تطبيقات أخرى مثل Zapier، وجدول بيانات Google، ومجموعة من تطبيقات التسويق عبر البريد الإلكتروني. تكامل مع بوابات الدفع الإلكتروني الشائعة لحلول التجارة الإلكترونية البسيطة. في الواقع، إذا كنت تستخدم Stripe، فستحبّ حقًا إمكانية إجراء عملية دفع إلكتروني دون مغادرة الصفحة. تصميم بدون كتابة أي شيفرة برمجية حتى تتمكّن من تصميم الشكل الذي تريده دون الانشغال باستخدام CSS. منطق شرطي (Conditional Logic) حتى تتمكن من إنشاء نماذج ديناميكية (dynamic forms). إجراء الحسابات الرياضية حتى تتمكن نماذجك من إجراء العمليات الحسابية بدلًا عنك. ستتمكن من الوصول الكامل ل 24 حقلًا متقدمًا حتى تتمكن من التحقق من صحة بياناتك. باستخدام زر معاينة النموذج في Forminator، يمكن عرض النموذج أثناء بنائه وتصميمه دون الحاجة إلى تضمينه في الصفحة أولًا لمعرفة ما إذا كان يبدو صحيحًا. هذه الإضافة هي الوحيدة التي تسمح لك بإنشاء نماذج، واستطلاعات الرأي (polls)، والإرسالات (submissions)، والاختبارات (quizzes)، وإرسال منشورات المدونة من نموذج (form). ويحتوي على واجهة برمجية (API) يمكنك الوصول إليها مجانًا واستخدامها لإنشاء إضافات مخصصة لك. هناك شيء مهم جدًا للمستخدمين الأوروبيين وهو الميزات المتقدمة لمساعدتك على البقاء متوافقًا مع اللائحة العامة لحماية البيانات في الاتحاد الأوروبي (GDPR). يمكنك ضبط مدة الاحتفاظ بالبيانات، وتعيين المدة التي يجب الاحتفاظ بها ببروتوكول الإنترنت (IP)، قبل إخفاء هوية هذه البيانات، بل وهناك حقل (field) لخانة تأشير (checkbox) اللائحة العامة لحماية البيانات في الاتحاد الأوروبي. Duplicator هل احتجت يومًا للنسخ الاحتياطي أو نقل موقع ووردبريس بالكامل إلى موقع آخر؟ يمكن لإضافة Duplicator نسخ الموقع، وإنشاء نسخة احتياطية، ونقل الموقع أيضًا. يمكن لهذه الإضافة أن تكون بمثابة أداة سهلة لهؤلاء المديرين الذين يتطلّعون إلى النسخ الاحتياطي لمواقعهم. هل تحتاج إلى استنساخ موقعك الذي يعمل حاليًا لأغراض اختبارية؟ نعم، تعدّ هذه الإضافة Duplicator الحل المثالي لعمل نسخة احتياطية من موقع ووردبريس من أجل الاختبار والتحقق من صحته. Relevanssi يمكن لإضافة Relevanssi استبدال خيار البحث الافتراضي في موقعك بنتائج موقعك حسب أهميتها، بدلًا من عرضها بحسب التاريخ. هذه الإضافة قابلة للتخصيص بحيث يمكن إعدادها لإجراء مطابقة مبهمة (fuzzy matching) للكلمات الجزئية (partial words). يمكن العثور على المحتوى عن طريق المطابقة على مصطلح بحث واحد فقط أو يكون مطلوبًا العثور على جميع الكلمات التي تطابق مصطلح البحث. هناك نسخة مجانية من Relevanssi تدعم موقعًا واحدًا، بينما توفّرر النسخة المتميزة دعمًا لشبكة مواقع (multi-site) إلى جانب ميزات أخرى. Broken Link Checker تراقب إضافة Broken Link Checker الروابط في منشوراتك، وصفحاتك وتعليقاتك وقائمة المدونات (blogroll)، وغيرها. تحدّد الإضافة أي روابط معطّلة لم تعد تعمل أو تفتقد الصور (في حالة كانت الصورة رابطًا من موقع آخر) أو أي عمليات إعادة توجيه (redirect) معطّلة. ما إن يُحدّد رابط معطّل على موقعك، يمكنك حينها تحرير الروابط مباشرة من صفحة الإضافة لتجنب تحديث كل منشور يدويًا. Disable Comments إضافة Disable Comments والتي تعني إلغاء تفعيل التعليقات، تتيح لمديري المواقع التحكم العام في التعليقات على موقعهم. يمكن إلغاء تفعيل التعليقات بحسب نوع المنشور، أو الصفحات، أو المرفقات، …إلخ. تعمل هذه الإضافة جيدًا إذا كنت تريد إلغاء تفعيل التعليقات على أنواع منشورات محددة أو على موقعك بالكامل. وعلى الرغم من ذلك، إذا كنت ترغب في إلغاء تفعيل التعليقات على المشاركات الفردية انتقائيًا، فمن الأفضل استخدام هذه الوظيفة مباشرة في إعدادات ووردبريس الأساسية. Regenerate Thumbnails تمكّنك هذه الإضافة من إعادة توليد الصور المصغّرة من الصور المُرفقة. لديك الخيار لتوليد الصور المصغرة من كل الصور المرفوعة إلى الموقع، أو توليد هذه الصور المصغّرة لصور محددة أو لتحديد مجموعة معيّنة من الصور وتوليد الصور المصغّرة منها. تعدّ هذه الإضافة مفيدة للغاية إذا غيّرتَ أيًا من أبعاد صورك المصّغرة أو حوّلت إلى قالب آخر يستخدم أبعادًا مختلفة للصور. Easy Updates Manager تمكّنك إضافة Easy Updates Manager من إدارة جميع تحديثات ووردبريس سواءً كان ذلك لموقع واحد أو عدة مواقع. تتوفر الكثير من الإعدادات المضمّنة في الإضافة مما يتيح تخصيصًا عاليًا. تشمل الميزات خيارات لتحديث الإصدارات الرئيسية والثانوية تلقائيًا من ووردبريس. يمكن لمديري المواقع تحديث الإضافات والقوالب وغير ذلك الكثير. Redirection يمكن أن تساعد إضافة Redirection في إدارة عمليات إعادة التوجيه 301 وتتبع أخطاء 404 دون عناء البحث في ملفات ‎‎‎.htaccess. يمكن أن تكون هذه الإضافة مفيدة حقًا إذا كنت تقوم بترحيل الصفحات من موقع ويب آخر وتُغيّر هياكل الدليل الخاصة بتثبيت ووردبريس. يمكن إعداد هذه الإضافة لتمرير عنوان URL إلى صفحة أو ملف أو موقع ويب آخر. يمكن إعادة توجيه أي عنوان URL، وليس فقط تلك العناوين التي لم تعد موجودة. TablePress يمكنك باستخدام الإضافة TablePress بسهولة إنشاء جداول يمكن تضمينها في المنشورات أو الصفحات أو عناصر واجهة المستخدم (widgets) النصيّة باستخدام شيفرة قصيرة (Shortcode). لا حاجة إلى تشفير خاص إذْ يمكن إدخال بيانات الجدول مباشرة في واجهة جدول البيانات (spreadsheet). يمكن أن تحتوي الجداول على أي نوع من البيانات، بما في ذلك الصيغ الرياضية (formulas). تضيف ميزات الفرز، وترقيم الصفحات، والترشيح (filtering)، ميزات إضافية لإضافة TablePress. يمكن أيضًا استيراد الجداول أو تصديرها من وإلى هذه الصيغ Excel و CSV و HTML و JSON. Advanced Custom Fields تمنح هذه الإضافة لمستخدمي ووردبريس المرونة لإنشاء الحقول المخصصة بصريًا لموقعهم. تتضمن أنواع إدخال الحقول المخصصة ما يلي: النص العادي (text)، والنص الكبير (textarea)، ومحررات تُظهر النتيجة النهائية للتعديل الذي تقوم به آنيا (WYSIWYG)، والصورة، والملف، والرابط، وكائن المنشور (post object)، والعلاقات، وحقل الاختيار من متعدد (select)، وخانة التأشير المتعدد (checkbox)، وخانة التأشير الوحيد (radio button)، ومنتقي التاريخ (date picker)، وحقول الصواب والخطأ (true/false)، والمحتوى المرن، ومعرض الصور (gallery). WP Mail SMTP تعيد إضافة WP Mail SMTP تهيئة وظيفة استلام البريد الإلكتروني في ووردبريس لتأتي بخدمة بريد SMTP بدلًا منها. توفر الإضافة صفحة إعداد تتيح لك تكوين خيارات البريد الإلكتروني المختلفة. تتضمن هذه الخيارات تحديد استضافة SMTP ومنفذ SMTP، وتحديد الاسم وعنوان البريد الإلكتروني للبريد الصادر، وإعداد اسم مستخدم SMTP وكلمة المرور، وغير ذلك. لمزيد من المعلومات عن كيفية استخدام استضافة WP Mail SMTP لإرسال رسائل البريد الإلكتروني، راجع هذا الدليل عن كيفية استخدام خدمة Gmail لإرسال بريد ووردبريس الإلكتروني. Photo Gallery توفر إضافة Photo Gallery أدوات تساعد في إضافة وتحرير الصور لأساليب عرض مختلفة على موقعك متجاوبة على جميع الأجهزة بنسبة %100. يمكن إضافة معارض الصور والألبومات بسهولة إلى المنشورات والصفحات الموجودة في موقع ووردبريس ويمكن إضافتها أيضًا إلى عددٍ من عناصر واجهة الاستخدام (widgets). يمكن لهذه لإضافة أيضًا تسهيل إعادة تسمية الصور، وتحميلها، وحذفها، ونسخها في بضع خطوات فقط. يمكن إضافة أوصاف الصور ووسومها (tags) عن طريق هذه الأداة كذلك. All In One Schema.org Rich Snippets يمكن أن تساعد هذه الإضافة في إعطاء محركات البحث ملخصًا مفيدًا لمحتواك المعروض. يمكن أن تساعدك مقتطفات المعلومات الخاصّة بمحتواك على أن تتميّز على منافسيك. تدعم هذه الإضافة أنواع المحتوى التالية: مراجعة (review)، وحدث (event)، وأشخاص، ومنتج، ووصفة (recipe)، وتطبيق برمجي، وفيديو، ومقالات. Black Studio TinyMCE Widget تتيح لك هذه الإضافة إدراج نص أو وسائط مباشرة إلى شريط موقعك الجانبي (sidebar) دون كتابة أي شيفرة HTML وكل ذلك عبر محرّر مرئي. افتراضيًا، تفتقر عناصر واجهات الاستخدام (widget) في ووردبريس إلى إمكانيات التحرير التي تُقدّم في المنشورات والصفحات. تتغلب هذه الإضافة على القيود من خلال توفير واجهة نظيفة لإضافة الوسائط والنصوص. ولأولئك الذين يفضّلون التبديل من محرر مرئي إلى شيفرة HTML (مثل المنشورات والصفحات) لديهم أيضًا هذا الخيار. Optimize Database افتراضيًا، يحتفظ ووردبريس بجميع منشوراتك، وصفحاتك، وتعليقاتك، وكل مراجعات منشوراتك، وتعليقات البريد العشوائي (spam). كل ما سبق حتى لو حُذف فسيُحفظ افتراضيًا في ووردبريس، كذلك ستحفظ الوسوم غير المستخدمة وما شابه ذلك. وإلى أن يأتي الوقت الذي تتخلص فيه من كل هذه العناصر الزائدة يدويًا، فإنّ هذه العناصر ستتراكم وستبطّئ موقعك. تُنظّف إضافة Optimize Database قاعدة بيانات موقعك من جميع الجداول التي لم تعد تحتاج إليها بما في ذلك البيانات الضّالة الأخرى مثل عناصر postmeta اليتيمة (وتعني البيانات الوصفية لمنشور معيّن بعد حذف ذلك المنشور)، والعناصر منتهية الصلاحية. يمكنك اختيار ما تريد حذفه بالضبط حتى لا تحذف عن طريق الخطأ العناصر التي تريد الاحتفاظ بها. ما إن تُنَّظف قاعدة بياناتك، ستصبح أسرع وسيصبح موقعك أكثر سلاسة. هذه الإضافة متوافقة مع المواقع المتعددة (Multisite) لذا يمكنك تفعليها على شبكة مواقعك وستحسن الإضافة هذه الشبكة من المواقع بنقرة واحدة لكلٍّ منها. يمكنك أيضًا جدولة قاعدة بياناتك لتحسينها تلقائيًا تحسينًا منتظمًا حتى تتمكّن من الحفاظ على قاعدة بيانات محسنّة دائما لا حاجة إلى القلق بشأنها. ترجمة -وبتصرف- للمقال ‎30 Essential WordPress Plugins You Should Install If You Haven’t Already لصاحبه Tom Ewer
  12. كن محترفا! ويعني هذا أن تطور من مهاراتك لكي تكون في موضع الثقة للأعمال الملقاة عليك. اصنع بورتفوليو (معرض أعمال)، مهما كانت مهاراتك أو تخصصك، اعمل أعمالا وضعها في مكان ما على الإنترنت. شارك تطوعا أو ابدع أعمالا مجانية لتدل على جودة عملك. في هذا الرابط يشرح يونس بن عمارة طريقة فعالة للحصول على عملاء لخدماتك المستقلة بأسرع وقت http://bit.ly/2PFzEBg. بالتوفيق.
×
×
  • أضف...