Hello our valued visitor, We present you the best web solutions and high quality graphic designs with a lot of features. just login to your account and enjoy ...
Hello our valued visitor, We present you the best web solutions and high quality graphic designs with a lot of features. just login to your account and enjoy ...
رقم الخبر | عنوان الخبر | التفاصيل |
---|---|---|
53,272 | تقنيات ثورية لتعزيز قدرات رسومات الكومبيوترات المحمولة | تطورت الكومبيوترات المحمولة بشكل كبير منذ إطلاق أولها في العام 1981 باسم Osborne 1 الذي قدم شاشة تعرض الصورة بالأبيض والأسود بقطر 5 بوصات (أصغر من معظم الهواتف الجوالة اليوم) وبذاكرته التي بلغت 64 كيلوبايت، ومعالجه الذي عمل بسرعة 4 ميغاهرتز وبوزنه الذي بلغ أكثر من 11 كيلوغراما. |
53,212 | "واتساب ويب" تحضر مفاجأة رائعة لمستخدميها! |
تعتبر منصة واتساب المملوكة لشركة فيسبوك في الأساس تطبيقاً قائماً على الهاتف المحمول، إلا أن نسخة الويب وتطبيق الحاسب موجودان أيضاً لتسهيل الحياة لأي شخص يتطلع إلى متابعة الدردشة عند استخدام الحاسب المكتبي أو المحمول. وأتاحت المنصة لتطبيق الحاسب إمكانية مزامنة المحادثات من تطبيق الهاتف المحمول منذ عام 2015. وبالرغم من أن هذه الإصدارات غير المحمولة من واتساب سهلة الاستخدام بلا شك، غير أنها تعاني من قيود كبيرة. يشار إلى أنه من أجل استخدام منصة واتساب ويب أو تطبيقها عبر الحاسب في الوقت الحالي، فإنك ما تزال بحاجة إلى أن يكون هاتفك المحمول معك. ويبدو أن أيام استخدام كاميرا هاتفك من أجل مسح رمز الاستجابة السريعة لتسجيل الدخول إلى واتساب يمكن ترقيمها إذا كانت الاختبارات التجريبية مقياساً جيداً لما قد يحدث. "لا هاتف متصلا"إلى ذلك يعد مطلب وجود هاتفك المحمول معك قيداً رئيسياً بالنسبة لإصدار واتساب ويب أو تطبيق الحاسب، وهو أمر كان المستخدمون يتطلعون إلى تغييره منذ زمن. ويبدو الآن أن واتساب تستمع إلى المطالب، وتختبر تطبيقاً عبر شبكة الإنترنت لا يحتاج إلى هاتف متصل. كما تضمن الإصدار الأخير من منصة واتساب ويب التجريبية الملاحظة التالية لأولئك المشاركين: "لست بحاجة إلى إبقاء هاتفك متصلاً لاستخدام واتساب ويب وتطبيق الحاسب وPortal". ويشير أيضاً الإصدار التجريبي إلى أنه يمكن استخدام ما يصل إلى أربعة أجهزة في وقت واحد. تسهيل حياة الناسإلى ذلك هناك العديد من الأسباب التي قد تجعلك لا تحمل هاتفك المحمول أثناء جلوسك أمام الحاسب، مما كان يمنعك من استخدام الإصدار غير المحمول من الخدمة. وفي حال شقت ميزات الاختبارات التجريبية طريقها إلى الإصدار الرسمي من واتساب ويب وتطبيق الخدمة للحاسب، فإن ذلك يسهل حياة الكثير من الناس. ويعني هذا أنك إذا كنت بعيداً عن هاتفك وأردت استخدام واتساب ويب، أو إذا فقدت هاتفك المحمول، أو إذا كان هاتفك الذكي يتم إصلاحه، فمن المأمول أن تتمكن المنصة قريباً من تلبية رغباتك. يذكر أن منصة تيليغرام المنافسة تقدم مثل هذه الميزة منذ زمن، واختار العديد من مستخدمي الخدمة المملوكة لشركة فيسبوك في الأشهر القليلة الماضية الانتقال إلى تيليغرام تبعاً لمشاكل تحديث سياسة الخصوصية. |
53,211 | مكيف محمول يبرد الغرفة في 10 دقائق.. وهذا سعره |
يعد EvaChill EV-500 من شركة Evapolar مكيفًا شخصيًا صغيرًا وقويًا وصديقًا للبيئة ومحمولًا، وذلك مقابل 99 دولارا. وعادةً ما تكون مكيفات الهواء كبيرة الحجم ويصعب نقلها ولها بصمة كربونية كبيرة، مما يجعل درجة الحرارة الصالحة للسكن تؤثر سلبًا في البيئة، لكن تقنية التبريد تتحسن دائمًا. ويعمل هذا المكيف بسرعة، ويخفض درجة حرارة الهواء حتى 15 درجة في 10 دقائق من خلال تشبع وسادات التبريد بالماء ونفخ الهواء من خلالها. ويتبخر الماء وتنخفض درجة الحرارة من حولك بينما يتم أيضًا ترطيب الهواء بشكل خفيف. صديق للبيئةوتحد هذه العملية من استهلاك الطاقة، لذا لا يتطلب EvaChill EV-500 قدرًا من الكهرباء تقريبًا مثل مكيف الهواء التقليدي. وحتى أن الخراطيش البديلة مصنوعة من مركب معدني قابل للتحلل البيولوجي تمامًا ولا يضر بالبيئة. ويعتبر مكيف الهواء الشخصي المحمول هذا بديهيًا للغاية، وقد فاز حتى بجائزة Red Dot Design في عام 2019. ويتم إعداده بزر واحد ويصدر ضوءًا أزرق ناعمًا أثناء عمله، وإلى جانب تقليل درجة حرارة الغرفة، يقوم EvaChill EV-500 أيضًا بتصفية جزيئات الغبار لتحسين جودة الهواء. وزنه كيلو غرامولا داعي للقلق أيضًا بشأن انتشار البكتيريا أو العفن بفضل خراطيش التبريد غير العضوية القابلة للاستبدال بنسبة 100 في المئة. وبوزن أقل من كيلوجرام واحد وبأبعاد 6.5×6.5×6.5 إنشات، يمكنك حمل مكيف الهواء الشخصي EvaChill EV-500 مع الخراطيش القابلة للتبديل أينما ذهبت وتبريد أي غرفة تجد نفسك فيها. ويبرد الجهاز ويرطب وينظف جزيئات الغبار من الهواء لتنفس أكثر صحة، وهو مخصص للاستخدام الشخصي، إذ إنه يبرد المنطقة الواقعة أمام الجهاز (45 قدمًا مربعًا)، ويتضمن نظامًا مانعًا للتسرب ولوحة تحكم للمستخدم بديهية وسهلة الفهم. وتستخدم مبردات الهواء التبخيري مروحة لسحب الهواء الدافئ الذي يمر فوق منصات مبللة بالماء، مما يبرد الهواء على الفور بطريقة طبيعية وصديقة للبيئة باستخدام الماء ودون الحاجة إلى سوائل الفريون مع كفاءة في استخدام الطاقة وانخفاض التكلفة. |
53,210 | إدارة عملية الاختبار في الووردبريس |
يحتاج مديرو المواقع المصممة بنظام إدارة المحتوى ووردبريس، إلى اختبار التغييرات على الموقع دون ظهورها المباشر للزوار. حيث ينعكس إجراء التغييرات على الموقع بعد إطلاقه سلبًا على ثقة الزوار، ولذا يوفِّر نظام الووردبريس عدة آليات لاختبار التغييرات على الموقع دون التأثير على ظهور المحتوى الفعلي للزوار:
يُطلق مصطلح البيئة الاختبارية على الصندوق الرملي الذي يلعب الأطفال بداخله، ويشكّلون القلاع الرملية فيه. بحيث يكمن وجه الشبه بين هذا الصندوق والبيئة الاختبارية، في أنّ كلّ ما يحدث داخل الصندوق لا يؤثِّر أبدًا على الواقع. والبيئة الاختبارية في نظام الووردبريس هي نسخة طبق الأصل من صفحة موجودة فعليًّا، حيث تُحفَظ هذه النسخة على القرص الصلب hard drive، وتطبّق عليها التعديلات لتغيير شكلها الخارجي، دون ظهور هذه التعديلات على الموقع مباشرةً، وتُرفع هذه التغييرات على الموقع بعد التأكّد من ملاءمتها. يستخدِم نظام الووردبريس عدّة ملفّات قالب template files لإنشاء مجموعة عروض views على الموقع. ويوجد عمومًا، قالب لعرض الصفحة الرئيسية، وقالب لعرض منشور مُنفرِد، وقالب لعرض منشورات متعدِّدة. حيث تُستخدَم هذه القوالب الثلاثة في التصنيفات، و صفحات البحث، وصفحات الأرشفة. كما يوجد ملف CSS خاص بكل قالب من القوالب السابقة، وهو مختلِف عن الآخر، لذلك لابد من إضافة الملفات الثلاثة في صندوق الاختبار عند تغيير المظهر العام للموقع، وذلك يتحقق باتباع الخطوات التالية:
إلى: <link rel="stylesheet" type="text/css" media="screen" href="style.css" />بعد هذه الخطوة تُنسَخ العناصر المرتبطة بالصفحات، مثل: الأيقونات، وصور الخلفية، وعلامات التنقيط bullets، وغيرها من العناصر، إلى المجلد الخاص بالبيئة الاختبارية، ويمكن الوصول لتلك العناصر من خلال فتح ملف التنسيق CSS، واتباع روابط العناصر الموجودة بداخله، ومن ثم تنزيلها، وحفظها في مجلد فرعي داخل مجلد البيئة الاختبارية، مثل: header { margin:5px; padding:10px; background:url(images/background.jpg).... }لاختبار نجاح العملية تُفتح إحدى الصفحات الموجودة في هذا المجلد بنقرتين لتُُستعرض في المتصفح، فإذا عُرضت العناصر بتناسق كما في الأصل فهذا يعني نجاح العملية، أما إذا عُرضت العناصر بطريقة غير منسقة فهنا يجب التأكد من ربط صفحات التنسيق css. أصبحتَ الآن تمتلك نسخةً خاصّةً للتعديل عليها واختبار التغييرات الخاصة بالمظهر. وتحتاج للبدء باستخدام البيئة، إلى فتح برنامجين، وهما: محرر النصوص لفتح ملف style.css، والمتصفِّح لفتح الصفحة التي ستعمل عليها في العرض (الصفحات الثلاثة التي حُفِظت في البداية). حيث تُطبَّق التغييرات اللازمة على الملف style.css، ومن ثم يُحفَظ الملف، وأخيرًا تُحدّث الصفحة في المتصفح لمشاهدة التغييرات. وتُكرَّر الخطوات السابقة من أجل الصفحتين الباقيتين. نصائح لاستخدام البيئة الاختباريةتحتوي النقاط التالية على بعض النصائح للعمل في البيئة الاختبارية. انسخ الملفات نسخا احتياطيا دورياانسخ الملفات نسخًا احتياطيًّا إلى مجلد احتياطي قبل أيّ تعديلٍ مهم، أو اضغط المجلد الذي يحوي الملف قبل تعديله، باستخدام برنامج ضغط لملفات بصيغة zip مثلًا. يُعَدّ المجلد المضغوط بمثابة نسخة احتياطية لكامل المجلد الأصلي، وفي حال حصل خلل في الملفات، فمن السهل استرجاع النسخة السليمة. تعقب عناصر HTML في الملف الخاص بالقالبافتح ملف الصفحة المراد تعديلها، في محرر النصوص، وأضف تعليقًا عند بداية ونهاية كلّ عنصر من عناصر لغة HTML، وذلك لتصبح عملية التعديل والتنسيق أكثر دقةً وسهولة. دون الملاحظاتيُنصَح بتدوين ملاحظات حول التعديلات المحورية قبل تطبيقها، فإذا حدث خطأ ما بعد تطبيق التعديلات، فيصبح من السهل مراجعة الملفات المُعدَّلة، وفهم طبيعة التعديل. دون الملاحظات داخل الملفاتيُنصَح بكتابة ملاحظات وتعليقات أمام كل كود عند تعديله في الملف البرمجي، وذلك لتسهيل فهم التعديل وتتبعه لاحقًا. اجعل التعديلات على مراحل صغيرة نسبياتصبح عملية استكشاف مكان الخطأ أبطأ وأطول عند تطبيق عدد كبير من التعديلات دفعةً واحدةً، ولهذا يُنصح بتطبيق تعديلات قليلة، ومن ثمّ تفقُّد تأثيرها على الصفحة لضمان نجاحها، ونُكرر هذه العملية من أجل باقي التعديلات. تجنب التعديل على ملف القالبعدل في البداية على ملفات التنسيق فقط ولا تُجري أية تعديلات على ملف الـ HTML، أما إذا كنت تنوي انشاء قالب جديد لإطلاقه للعامة، فيجب عليك عند تعديل ملفات القالب تعديلها بكل دقة وعناية؛ أما إذا كان التعديل فقط لموقعك فعدِّل على الملف في البيئة الاختبارية ثم انقله لملف القالب في النظام. نقل الملفات من البيئة الاختبارية إلى القالب في النظامتُنقَل التغييرات بعد اختبار نجاحها، إلى قالب الووردبريس، وذلك باتباع الخطوات التالية:
في حال الانتقال من المدونة الجديدة إلى موقع آخر، سيكتشف هذا الموقع عنوان مدونتك بسبب المتصفح، ولتخطي هذه المشكلة، اخرج من موقعك، ثم ادخل لمدونتك الأساسية، ومن ثم انتقل منها إلى الموقع الذي تريده. حيث أن هذه الطريقة فعالة عند اختبار الموقع من متصفحات مختلفة وأشخاص آخرين، بعد الانتهاء من تعديله. إخفاء منطقة الاختبارتُستَخدَم ملفات htaccess. على خادم الويب أباتشي Apache، لإخفاء مجلد الاختبار عن العامة. حيث يخزِّن ملف htaccess. الأوامر، والتنقلات اللازمة عند حدث معيّن، ويمكن استخدام ملف إعدادات أباتشي httpd.conf في الأباتشي، أو أي أداة أخرى، كما يُطبَّق ملف htaccess. فقط على المجلد المراد إخفاءه، حيث سيختفي هو وكل المجلدات الفرعية الموجودة بداخله، مما يسمح لك بتقييد الوصول إلى مجلد مخصص. ويجب التنويه إلى أنّ هذه الطريقة صالحة فقط مع الخوادم التي تدعم ملفات htaccess.، أما في حال عدم تيقّنك من دعم موقعك لهذه الخاصية، تواصل مع شركة الاستضافة، فمن المحتمل أن تكون موجودة ولكنك لا تملك صلاحيات استخدامها، وبالتالي عليك التواصل مع شركة الاستضافة أيضًا. تحتاج عند استخدام ملف htaccess.، إلى إدخال التعليمات الإرشادية للخادم، وإعلامه بآلية التعامل مع الأحداث، ليستطيع من خلالها تقييد ومنع الوصول إلى موقع الاختبار، وذلك بتطبيق خطوات مرتّبة ضمن المجلد أو المكان الذي يحوي تثبيت الووردبريس، كما يأتي:
وبعدها غيّر كلًا من المسار الكامل للمجلد /full/path/of/directory/، والمنطقة المحمية Security Area، بما يقابلهما في موقعك وِفقًا للملعومتين المذكورتين.
احذف كلمة المرور وملف htaccess. عندما يصبح الموقع جاهزًا لإطلاقه للعامة، ويُنصَح بحذف رابط الوصول الافتراضي لخدمة Ping-o-Matic، حيث ستتسبب هذه الخدمة بنشر المنشورات الاختبارية للعامة ولكن دون الوصول للموقع. تثبيت نظام الووردبريس على حاسوبك التثبيت على الماكاتبع التعليمات الموجودة في مقال InstallingWordPressLocallyonYourMacWith_MAMP لإعداد بيئة الخادم المحلي، من أجل اختبار الووردبريس وتطويره على الماك. التثبيت على نظام الويندوزيجب التأكد من صلاحيات الوصول لكل من خادم أباتشي، وMySQL/MariaDB، وphpMyAdmin، وذلك عند البدء بتشغيل نظام الووردبريس. ولتثبيت هذه الأدوات نلجأ إلى برنامج XAMPP، والذي يُثبِّت هذه الأدوات دفعةً واحدة، أي أنّ كل ما نحتاج إليه لتشغيل الووردبريس على الحاسوب هو تثبيت برنامج XAMPP، ومن ثم تشغيله. يوجد إصداران من برنامج XAMPP، إحداهما أساسي Basic والآخر مُخفف Lite، حيث يفي الإصدار المخفف هنا بالغرض. ويتطلب تشغيل الووردبريس على الويندوز، إجراء الخطوات التالية:
ملاحظة: يبقى الحاسوب الشخصي هو الخادم المستضيف للموقع بعد إنشاءه عليه، وذلك بتوفُّر شرطين أساسيين، وهما: سرعة الإنترنت، وزيادة مستوى حماية الحاسوب. تثبيت موقع ووردبريس موجود حاليايقدِّم XAMPP تسهيلات تُمكنك من تثبيت الووردبريس على الحاسوب الشخصي، وبهذه الطريقة يصبح من السهل التعديل على الووردبريس الموجود حاليًّا، دون أن تظهر هذه التعديلات لزوار الموقع، حيث ستُطبق التعديلات على النظام المثبَّت على الحاسوب الشخصي، ومن ثم يُرفَع النظام بعد الانتهاء من التعديلات إلى الخادم، وبذلك تصبح التعديلات متاحةً لزوار الموقع. ويتطلب تثبيت ووردبريس الموقع على الحاسوب الشخصي، تحقيق المتطلبات التالية:
نبدأ بعملية النسخ الاحتياطي لنظام الووردبريس، والملفات، وقاعدة البيانات، وبذلك تتكون لدينا نسخة كاملة قد نحتاجها في حال حصول خلل ما. ومن ثم نأخذ نسخةً احتياطيةً من قاعدة البيانات الموجودة على الحاسوب الشخصي، ويجب هنا تطبيق إجراءات احترازية لعدم وصول أيّ شخص إليها. ستكون عملية النسخ الاحتياطي بطيئة، وذلك بسبب وجود قاعدة بيانات افتراضية مرفقة مع الووردبريس، والتي تحتوي على العديد من القراءات الإحصائية، مما يزيد حجم قاعدة البيانات. وأنت لست بحاجة إلى حذف هذه القراءات، ولكنها تُعَدّ فكرةً جيدة. يمكن أخذ نسخة احتياطية من قاعدة البيانات باتباع الخطوات التالية:
يُستخدم برنامج FTP client لتنزيل نظام الووردبريس على حاسوبك الشخصي. حيث يجب عليك التأكد من وجود جميع ملفات النظام الأساسية، بما فيها index.php، داخل مجلد الجذر أو داخل مجلد الووردبريس، ليُصبح في الحاسوب الشخصي بعد هذه العملية، عنصرين، وهما:
نحتاج قبل البدء بعملية استيراد ملف الـ SQL، إلى تعديله ليتلائم مع الخادم المحلي، وذلك باتباع الخطوات التالية:
تُستَورد قاعدة البيانات بعد تطبيق الخطوات السابقة، باستخدام لوحة myphpadmin الموجودة على الحاسوب، حيث نضغط على اسم قاعدة البيانات، ومن ثم نختار تبويب SQL، بعدها نضغط على Browse، ونختار مكان لتخزين ملفات قاعدة البيانات على الحاسوب، ثم نضغط على GO، وقد تستغرق هذه العملية بعض الوقت. تصبح قاعدة البيانات الخاصة بك عند انتهاء العملية السابقة، جاهزةً ومتصلةً بالنظام. وإذا ظهر أي خطأ، فهذا يعني وجود خلل في عملية النسخ الاحتياطي بأي شكل من الأشكال، أو وجود خللٍ في قاعدة البيانات نفسها، ويجب حفظ ملفات قاعدة البيانات في مكان آمن، وذلك لمنع وصول الآخرين إليها. وإذا سار كل شيء على ما يرام، فيمكنك الدخول إلى مدونتك من الحاسوب الشخصي، وذلك بكتابة http://127.0.0.1/wordpress/index.php في المتصفح، أو اسم المجلد الذي يحوي ملفات الووردبريس. وإذا ظهر الخطأ 404، فتأكد من إدخالك المسار الصحيح لملف index.php، حيث لا يجب وضع htdocs أو xampp بعد http://127.0.0.1/، وإنما فقط اسم المجلد الذي يحوي ذلك الملف. حيث سيظهر الووردبريس على الحاسوب كما لو أنه على الويب، ولست بحاجة هنا إلى استخدام محرر الووردبريس لتعديل الملفات، بل يكفي فقط استخدام محرر النصوص الخاص بك، ومن ثم التعديل كما لو كنت تُعدّل أي ملف آخر، وستظهر التغييرات بعد الانتهاء من التعديل عند تحديث صفحة الويب من المتصفح. ترجمة وبتصرف للمقال Test Driving WordPress من موقع wordpress |
53,185 | تغيير مهم يطال آيفون في 2023.. ماذا سيحدث؟ |
تتعلق معظم الأحاديث الحالية بشأن آيفون بجهاز iPhone 13 الذي من المتوقع رؤيته في شهر سبتمبر، ويقال: إنه يأتي بشاشة مطورة وكاميرا محسّنة، لكن يمكننا أيضًا الحديث في الوقت الحالي عن بعض الشائعات والتسريبات فيما يخص جهاز iPhone 15 أيضًا. وقال المحلل مينغ تشي كو Ming-Chi Kuo، أحد أكثر المحللين بشأن أخبار شركة آبل موثوقية في هذا المجال: إن أجهزة مودم 5G المخصصة لجهاز آيفون تبدأ بالظهور في عام 2023، في الوقت المناسب تمامًا لجهاز iPhone 15. ويعني هذا أن شركة آبل لن تضطر بعد الآن إلى الاعتماد على المكون الذي تأخذه حاليًا من كوالكوم، مما يضطر الشركة المصنعة للرقاقات إلى دخول أسواق جديدة من أجل التعويض عن فقدان الطلبات من آبل. وبالنظر إلى بطء مبيعات أندرويد في سوق هواتف 5G المتطورة، فقد تضطر كوالكوم إلى التنافس للحصول على المزيد من الطلبات في السوق المنخفضة التكلفة لتعويض خسارة طلبات آبل. وكانت سلسلة هواتف آيفون 12 هي الأولى من آبل التي تأتي بقدرات 5G، لذا فإن تحديث 2023 قد يكون أول من يحظى بخطوة كبيرة من حيث أداء 5G. ومن الصعب في هذه المرحلة تحديد ما قد يعنيه هذا التحول للمستخدمين وأداء 5G الذي يمكن توقعه، ولكن صنع أجهزة مودم 5G الخاصة بها يجب أن يمكن آبل من تحسين سرعات نقل البيانات وتقليل زمن الوصول وتحسين عمر البطارية، حيث يمكن أن يكون المكون قد تم تحسينه خصيصًا جنبًا إلى جنب مع بقية العتاد الداخلي. مثير للاهتمامولن تكون هذه الأخبار مفاجأة لمراقبي الصناعة، وذلك بالرغم من أن التوقيت المتوقع مثير للاهتمام. ومنذ أن اشترت شركة آبل أعمال شرائح المودم من شركة إنتل في عام 2019، كان من الواضح أن تطوير تقنية 5G يتم داخل الشركة. وكانت التوقعات السابقة قد أشارت إلى أن هاتف آيفون المتضمن جهاز مودم 5G من صنع آبل يمكن أن يظهر في عام 2022، لكن هذا يبدو متفائلاً الآن، حيث يقول كو: إن الرقاقات تظهر في عام 2023 على أقرب تقدير، لذلك يمكن أن يكون بعد ذلك. وتستخدم شركة آبل معالجاتها داخل آيفون منذ أكثر من عقد حتى الآن، وبدأت حديثًا بفعل الشيء نفسه على جانب الحواسيب، مما يقلل من اعتمادها على الموردين الخارجيين، ويسمح لكل جزء من العتاد والبرمجيات بالتكامل بإحكام وتحسين الأداء والكفاءة بشكل كامل. وتستمر كوالكوم في الوقت الحالي في توفير أجهزة مودم 5G لجهاز آيفون، حيث إن جميع النماذج المتوقعة من iPhone 13 تأتي مع هذه التكنولوجيا. |
53,144 | العالم يتنفس الصعداء ـ سقوط بقايا الصاروخ الصيني في المحيط الهندي | ذكرت السلطات الفضائية الصينية أن بقايا حطام صاروخ أطلق كجزء من جهود الصين لبناء محطتها الفضائية الخاصة، عادت اليوم الأحد إلى الغلاف الجوي للأرض. وذكر المصدر أن معظم أجزاء الصاروخ سقطت في المحيط الهندي. |
53,126 | مستخدمو آيفون يرفضون تتبع الإعلانات بعد iOS 14.5 |
يبدو أن عقبة جديدة تواجه المعلنين عبر آيفون قد تكون الأسوأ منذ إصدار الشركة نظام iOS 14.5 أواخر الشهر الماضي، حيث تشير تحليلات إلى أن 96% من مستخدمي آيفون اختاروا إلغاء الاشتراك في تتبع الإعلانات في أعقاب إصدار النظام الجديد، ما يضع الشركة من جهة والمعلنين من جهة أخرى أمام معركة شرسة، عنوانها الأرباح. كذلك بدأت آبل ومنذ إصدار النظام الجديد، بفرض سياسة تسمى شفافية تتبع التطبيق App Tracking Transparency، وتبعاً لهذه السياسة، أصبحت تطبيقات آيفون وآيباد مطالبة بأخذ إذن المستخدمين من أجل استخدام تقنيات معينة مثل معرف IDFA ، وفق موقع Flurry Analytics المختص بتحليل البيانات. 4 % فقط قبلوا بالتتبعواستناداً إلى البيانات التي نشرها الموقع فإن المستخدمين الأميركيين يوافقون على أن يتم تتبعهم بنسبة 4 % فقط من الوقت، في حين أن الرقم العالمي أعلى بكثير بنسبة 12%. كذلك تظهر البيانات أن مستخدمي آيفون يرفضون التتبع بمعدلات أعلى بكثير مما توقعته الاستطلاعات التي أجريت قبل وصول iOS 14.5، ووجد أحد هذه الاستطلاعات أن 40 % فقط، وليس 4 %، يختارون التتبع عند المطالبة بذلك. فيسبوك يرفض التغييروواجه التغيير مقاومة شرسة من شركات، مثل فيسبوك، التي بنيت مزاياها السوقية وتحقق إيراداتها من خلال الاستفادة من بيانات المستخدمين لاستهداف الإعلانات الأكثر فاعلية لهؤلاء المستخدمين. فقد قامت الشركة رداً على ذلك، بنشر إعلانات صحفية عبر صفحات كاملة توضح أن التغيير لن يضر فيسبوك فقط، بل يدمر الشركات الصغيرة في جميع أنحاء العالم. ميزات عدة للنظام الجديديذكر أن آبل أوضحت في وقت سابق أن نظام iOS 14.5 يقدم مزايا عدة منها، حماية خصوصية المستخدمين، وتوفير خاصية في النظام تُظهر للمستخدم كل المعلومات التي سيتم تجميعها عنه. |
53,125 | الاجتزاءات في GraphQL وموضوع الاشتراكات في جافاسكريبت |
سنصل قريبًا إلى نهاية هذا المنهاج، لنختم أفكاره باستعراض بعض التفاصيل الأخرى في GraphQL. الاجتزاءاتإنّ إعادة عدة استعلامات GraphQL النتيجة نفسها أمر شائع جدًا. فعلى سبيل المثال، فعند تنفيذ الاستعلام الذي يحضر تفاصيل شخص ما كما يلي: query { findPerson(name: "Pekka Mikkola") { name phone address{ street city } } }والاستعلام الذي يعيد جميع الأشخاص كالتالي: query { allPersons { name phone address{ street city } } }ستكون النتيجة نفس الأشخاص في كليهما. وعند اختيار الحقول التي ستُعاد، سيحدد كلا الاستعلامين الحقول نفسها. في مثل هذه الحالات يمكن تسهيل الأمور باستخدام الاجتزاءات fragments. لنعرّف إذا اجتزاءً لاختيار كل حقول الشخص: fragment PersonDetails on Person { name phone address { street city } }يمكننا باستخدام الاجتزاء تنفيذ الاستعلامات بشيفرة مختصرة: query { allPersons { ...PersonDetails } } query { findPerson(name: "Pekka Mikkola") { ...PersonDetails } }لا تُعرّف الاجتزاءات ضمن تخطيط GrapQL، بل ضمن شيفرة العميل. إذ ينبغي التصريح عن الاجتزاء عندما يريد العميل تنفيذ الاستعلام. وكمبدأ، يمكننا التصريح عن الاجتزاء داخل كل استعلام كالتالي: const ALL_PERSONS = gql` { allPersons { ...PersonDetails } } fragment PersonDetails on Person { name phone address { street city } } `لكن من الأفضل أن تُصرح عن الاجتزاء مرة واحدة ثم تخزنه ضمن متغيّر. const PERSON_DETAILS = gql` fragment PersonDetails on Person { id name phone address { street city } } `وإن صُرِّح عن الاجتزاء كما سبق، أمكن وضعه ضمن أي استعلام أو طفرة باستخدام إشارة الدولار $ والأقواس المعقوصة: const ALL_PERSONS = gql` { allPersons { ...PersonDetails } } ${PERSON_DETAILS} ` الاشتراكاتتقدم GraphQL بالإضافة إلى الاستعلامات والطفرات، آلية ثالثة هي الاشتراكات subscriptions. حيث تُمكّن الاشتراكات العملاء من تتبع التحديثات التي قد تطرأ على الخادم. تختلف الاشتراكات جذريًا عن أية أفكار طرحناها في المنهاج. فحتى الآن، يقتصر التفاعل بين الخادم والمتصفح على تطبيق React يعمل على المتصفح ويرسل طلبات HTTP إلى الخادم. كما تُنفَّذ استعلامات وطفرات GraphQL بالطريقة ذاتها. لكن الوضع سينقلب مع الاشتراكات. فبعد أن يسجل التطبيق اشتراكًا، سيبدأ بالتنصت على التغيرات في الخادم. حيث سيرسل الخادم تنبيهًا إلى كل التطبيقات التي سجلت اشتراكًا في حال حدث أي تغيير. ولو أردنا التحدث بلغة تقنية سنقول أن البروتوكول HTTP لا يلائم تمامًا الاتصال من الخادم إلى المتصفح، لذا فقد استخدمت Apollo تحت الغطاء مايسمى بمقابس الويب WebSockets للاتصال بين المشتركين والخادم. الاشتراكات من جانب الخادملننجز آلية اشتراك لتلقي تنبيهات عندما يُضاف شخص جديد. لا تغييرات كثيرة على شيفرة الخادم، لكن سيتغير التخطيط قليلًا على النحو التالي: type Subscription { personAdded: Person! }فعندما يُضاف شخص جديد، سترسل جميع تفاصيله إلى جميع المشتركين. يحتاج الاشتراك personAdded إلى محلل. كما يجب تعديل المحلل addPerson لكي يرسل تنبيهًا إلى المشتركين. ستتغير الشيفرة على النحو التالي: const { PubSub } = require('apollo-server')const pubsub = new PubSub() Mutation: { addPerson: async (root, args, context) => { const person = new Person({ ...args }) const currentUser = context.currentUser if (!currentUser) { throw new AuthenticationError("not authenticated") } try { await person.save() currentUser.friends = currentUser.friends.concat(person) await currentUser.save() } catch (error) { throw new UserInputError(error.message, { invalidArgs: args, }) } pubsub.publish('PERSON_ADDED', { personAdded: person }) return person }, }, Subscription: { personAdded: { subscribe: () => pubsub.asyncIterator(['PERSON_ADDED']) }, },يحدث الاتصال في الاشتراكات باستخدام مبدأ نشر- اشتراك publish-subscribe عن طريق كائن يستخدم الواجهة PubSub. حيث ينشر إضافة شخص جديد تنبيهًا عن العملية تصل إلى جميع المشتركين وذلك بالاستفادة من التابع publish العائد للواجهة PubSub. يسجل محلل الاشتراك personAdded جميع المشتركين وذلك بإعادته كائن مكرّر iterator object مناسب. لنجري التعديلات التالية على الشيفرة التي تُشغِّل الخادم: // ... server.listen().then(({ url, subscriptionsUrl }) => { console.log(`Server ready at ${url}`) console.log(`Subscriptions ready at ${subscriptionsUrl} `)})سنجد أن الخادم يتنصت على الاشتراكات على العنوان ws://localhost:4000/graphql Server ready at http://localhost:4000/ Subscriptions ready at ws://localhost:4000/graphqlلا نحتاج لأية تعديلات أخرى على الخادم. يمكن اختبار الاشتراكات باستخدام أرضية عمل GraphQL كالتالي: عندما تضغط على زر التشغيل play فوق الاشتراك، ستنتظر أرضية العمل التنبيهات التي قد تصل إلى الاشتراك. يمكن إيجاد شيفرة الواجهة الخلفية ضمن الفرع part8-6 في المستودع الخاص بالتطبيق على Github. الاشتراكات من جانب العميللكي نصبح قادرين على استخدام الاشتراكات في تطبيق React، لا بدّ من إجراء بعض التغييرات وخاصة على أوامر التهيئة. ينبغي تعديل أوامر التهيئة الموجودة في الملف "index.js" كالتالي: import { ApolloClient, ApolloProvider, HttpLink, InMemoryCache, split} from '@apollo/client' import { setContext } from 'apollo-link-context' import { getMainDefinition } from '@apollo/client/utilities'import { WebSocketLink } from '@apollo/client/link/ws' const authLink = setContext((_, { headers }) => { const token = localStorage.getItem('phonenumbers-user-token') return { headers: { ...headers, authorization: token ? `bearer ${token}` : null, } } }) const httpLink = new HttpLink({ uri: 'http://localhost:4000', }) const wsLink = new WebSocketLink({ uri: `ws://localhost:4000/graphql`, options: { reconnect: true }})const splitLink = split( ({ query }) => { const definition = getMainDefinition(query) return ( definition.kind === 'OperationDefinition' && definition.operation === 'subscription' ); }, wsLink, authLink.concat(httpLink),) const client = new ApolloClient({ cache: new InMemoryCache(), link: splitLink}) ReactDOM.render( <ApolloProvider client={client}> <App /> </ApolloProvider>, document.getElementById('root') )ولكي تعمل الشيفرة لابدّ من تثبيت بعض الاعتماديات: npm install @apollo/client subscriptions-transport-wsإنّ السبب الكامن خلف إجراء التعديلات على أوامر التهيئة، هو ضرورة امتلاك التطبيق اتصال HTTP بالإضافة إلى مقبس ويب إلى خادم GraphQL. const wsLink = new WebSocketLink({ uri: `ws://localhost:4000/graphql`, options: { reconnect: true } }) const httpLink = createHttpLink({ uri: 'http://localhost:4000', })تُنفَّذ الاشتراكات باستخدام دالة الخطاف useSubscription. لنعدل الشيفرة كالتالي: export const PERSON_ADDED = gql` subscription { personAdded { ...PersonDetails } } ${PERSON_DETAILS}` import { useQuery, useMutation, useSubscription, useApolloClient} from '@apollo/client' const App = () => { // ... useSubscription(PERSON_ADDED, { onSubscriptionData: ({ subscriptionData }) => { console.log(subscriptionData) } }) // ... }عندما يضاف الآن شخص جديد إلى دليل الهاتف، فستطبع تفاصيل الشخص الجديد على طرفية التطوير بغض النظر أين حدث ذلك: سيرسل الشخص تنبيهًا إلى العميل عندما يُضاف شخص جديد، ثم تستدعى الدالة المعرّفة في الصفة onSubscriptionData وتُزوّد بتفاصيل الشخص الجديد كمعاملات. لنوسِّع حلنا بحيث يضاف الشخص الجديد إلى الذاكرة المؤقتة لمكتبة Apollo عندما تُستقبل تفاصيله. لكن لابدّ من الانتباه إلى عدم إضافة الشخص الجديد إلى الذاكرة المؤقته مرتين عندما يُنشئه المستخدم: const App = () => { // ... const updateCacheWith = (addedPerson) => { const includedIn = (set, object) => set.map(p => p.id).includes(object.id) const dataInStore = client.readQuery({ query: ALL_PERSONS }) if (!includedIn(dataInStore.allPersons, addedPerson)) { client.writeQuery({ query: ALL_PERSONS, data: { allPersons : dataInStore.allPersons.concat(addedPerson) } }) } } useSubscription(PERSON_ADDED, { onSubscriptionData: ({ subscriptionData }) => { const addedPerson = subscriptionData.data.personAdded notify(`${addedPerson.name} added`) updateCacheWith(addedPerson) } }) // ... }يمكن استخدام الدالة updateCacheWith ضمن الكائن PersonForm لتحديث الذاكرة المؤقتة: const PersonForm = ({ setError, updateCacheWith }) => { // ... const [ createPerson ] = useMutation(CREATE_PERSON, { onError: (error) => { setError(error.graphQLErrors[0].message) }, update: (store, response) => { updateCacheWith(response.data.addPerson) } }) // .. }يمكن إيجاد شيفرة العميل بشكلها الكامل ضمن الفرع part8-9 في المستودع المخصص للتطبيق على Github. مسألة n+1لنضف شيئًا ما إلى الواجهة الخلفية. سنعدل التخطيط بحيث يمتلك النوع Person الحقل friendOf الذي يدل على أي قائمة أصدقاء يتواجد الشخص: type Person { name: String! phone: String address: Address! friendOf: [User!]! id: ID! }يجب أن يدعم التطبيق الاستعلام التالي: query { findPerson(name: "Leevi Hellas") { friendOf{ username } } }وبما أنّ الحقل friendOf ليس حقلًا من حقول الكائن Person ضمن قاعدة البيانات، لابدّ من إنشاء محلل للعملية يحل هذا الموضوع. لننشئ أولًا محللًا يعيد قائمة فارغة: Person: { address: (root) => { return { street: root.street, city: root.city } }, friendOf: (root) => { // يعيد قائمة فارغة return [ ] }},يمثّل المعامل root الكائن الخاص بالشخص الذي تُنشأ من أجله قائمة أصدقاء، وبالتالي سنبحث ضمن كل الكائنات من النوع User على تلك التي تمتلك فيها root معرّفًا فريدًا id كالتالي root._id في قائمة الأصدقاء الخاصة به: Person: { // ... friendOf: async (root) => { const friends = await User.find({ friends: { $in: [root._id] } }) return friends } },سيعمل الآن التطبيق. كما يمكن أن ننفذ مباشرة استعلامات أكثر تعقيدًا. فمن الممكن على سبيل المثال إيجاد أصدقاء جميع المستخدمين: query { allPersons { name friendOf { username } } }لكن هناك مشكلة واحدة في حلّنا، فهي تُرسل عددًا غير منطقي من الاستعلامات إلى قاعدة البيانات. فلو سجّلنا كل استعلام، وكان لدينا 5 أشخاص، سنرى التالي: Person.find User.find User.find User.find User.find User.findفعلى الرغم من أننا نفّذنا استعلامًا واحدًا رئيسيًا، فسيُنفِّذ كل شخص ضمن قاعدة البيانات استعلامًا آخر من خلال المحلل الخاص به، وهذا ما يعرف بمشكلة n+1 الشهيرة والتي تظهر بين الفينة والأخرى بشكل مختلف، وقد تتسلل إلى شيفرة المطورين دون الانتباه إليها. يعتمد حل هذه المشكلة على الحالة التي أدت لظهورها. وعادة ما تتطلب استخدام استعلامات مشتركة بدلًا من عدة استعلامات منفصلة. إنّ الحل الأسهل لحالتنا هي تخزين الأشخاص الذين تتواجد قائمة أصدقائهم ضمن كل كائن من النوع Person: const schema = new mongoose.Schema({ name: { type: String, required: true, unique: true, minlength: 5 }, phone: { type: String, minlength: 5 }, street: { type: String, required: true, minlength: 5 }, city: { type: String, required: true, minlength: 5 }, friendOf: [ { type: mongoose.Schema.Types.ObjectId, ref: 'User' } ], })وبعدها يمكننا أن ننفذ استعلامًا مشتركًا أو أن نملأ الحقول friendOf للأشخاص عندما نحضر الكائنات Person: Query: { allPersons: (root, args) => { console.log('Person.find') if (!args.phone) { return Person.find({}).populate('friendOf') } return Person.find({ phone: { $exists: args.phone === 'YES' } }) .populate('friendOf') }, // ... }لن نحتاج بعد التغييرات التي أجريناها إلى محلل مستقل للحقل friendOf. لن يسبب الاستعلام allPersons مشكلة n+1 إن أحضرنا اسم الشخص ورقم هاتفه فقط: query { allPersons { name phone } }لو عدّلنا الاستعلام لتنفيذ استعلام مشترك لأنه يسبب أحيانا مشكلة n+1، فسيتطلب تنفيذه جهدًا أكبر، وخاصةً عندما لا نحتاج المعلومات عن الأشخاص المعنيين. يمكن استمثال الاستعلام باستخدام المعامل الرابع لدوال المحللات. إذ يستخدم هذا المعامل للتحقق من الاستعلام بحد ذاته، وبالتالي يمكن تنفيذ الاستعلام المشترك في بعض الحالات فقط عندما نتنبأ بحدوث مشكلة n+1. لكن لا تستعجل بالقفز إلى هذه المرحلة قبل أن تتأكد بأنك تحتاج ذلك فعلًا. اقتباسيهدر المطورون أوقاتًا طويلة وهم مشغولون بالتفكير أو القلق على سرعة تنفيذ الأجزاء غير الحساسة من برامجهم. وفي الواقع ستؤثر محاولات تحسين فعالية هذه الأجزاء سلبًا وبشكل كبير عندما نأخذ عمليات التنقيح والصيانة بعين الاعتبار. علينا أن ننسى موضوع التحسينات الصغيرة على الفعالية في 97% من الأوقات إن جاز التعبير، فاستمثال الأمور في غير أوانها هي مفتاح كل المشاكل. تقدم المكتبة DataLoader التي طورتها Facebook حلًا جيدًا لمشكلة n+1 بالإضافة إلى مسائل أخرى. يمكن إيجاد معلومات أكثر عن استخدامها مع Apollo من خلال الانترنت وننصح بالمقالة graphql server data loader caching batching والمقالة batching graphq queries with dataloader. خاتمةلم تخطط هيكلية التطبيق الذي طورناه في هذا القسم بالشكل الأمثل. فيجب على الأقل نقل التخطيط والاستعلامات والطفرات خارج شيفرة التطبيق. يمكنك إيجاد هيكيليات أفضل لتطبيقات GraphQL من خلال الانترنت لشيفرة الخادم أو لشيفرة العميل. لقد أصبحت GraphQL تقنية قديمة نوعًا ما، إذ بدأت Facebbok باستخدامها منذ عام 2012، وقد خضعت بالفعل لاختبارات صعبة. تزايد الاهتمام بهذه المكتبة شيئًا فشيئًا منذ أن نشرتها FaceBook عام 2015، وقد تهدد سيطرة REST في المستقبل القريب. إنه تلاشي متوقع، لكنه لن يحصل قريبًا. وبالتالي تعلم GrapQL أمر يستحق المحاولة بكل تأكيد. تمارين 1 الاشتراكات من جهة الخادمأضف الاشتراك bookAdded إلى الواجهة الخلفية بحيث يعيد تفاصيل كل الكتب الجديدة للمشترك. 2 الاشتراكات من جهة العميل: القسم الأولابدأ باستخدام الاشتراكات من جهة العميل. أضف الاشتراك bookAdded، وأبلغ المستخدم عندما تُضاف كتب جديدة. يمكنك أن تنبه المستخدم بطرق عدة، مثل استعمال الدالة window.alert على سبيل المثال. 3 الاشتراكات من ناحية العميل: القسم الثانيابق على واجهة العرض محدَّثةً بعد تنبيه المستخدم عن الكتب الجديدة. يمكنك التحقق من صحة عملك بفتح التطبيق في نافذتين مختلفتين من المتصفح وإضافة كتابة جديد في إحداهما. يجب أن تُحدِّث واجهة العرض في كلتا النافذتين الأخرى عند إضافة الكتاب الجديد. مشكلة n+1جد حلًا لمشكلة n+1 في الاستعلام التالي بأي طريقة تريد: query { allAuthors { name bookCount } }وهكذا نكون وصلنا إلى آخر تمرين في هذا القسم وحان الوقت لرفع إجاباتك إلى GitHub. لا تنس تحديد التمارين التي أنجزت حلها ضمن منظومة تسليم التمارين. ترجمة -وبتصرف- للفصل Fragments and Subscriptions من سلسلة Deep Dive Into Modern Web Development |
53,124 | النص وأسلوب الطباعة (Typography) في تصميم الرسوميات |
إن مصمم الرسوميات فنان مبدع، يحوّل أفكاره وأفكار عملائه إلى تحفة فنية تهدف إلى إيصال الفكرة الرئيسية إلى الجمهور بأسلوب فني وطريقة سلسة ليتردد صداها بين الناس. ويستثمر المصمم الألوان والخطوط وجميع العناصر الرسومية في سبيل ولادة تحفته الفنية وبلورتها. ويعد عنصر النص واحدًا من أهم العناصر الرسومية وأكثرها تأثيرًا، وهو فن جميل مميز يخلّد الأفكار في عقول الناس أكثر من أي عنصر آخر. لذلك يجب فهم ومعرفة القواعد الأساسية في العمل على هذا العنصر لتحقيق الاستفادة القصوى من قوته وتأثيره. ما هو عنصر النص أو أسلوب الطباعة (التيبوغرافي)؟التيبوغرافي (Typography) هو فن حقيقي يتضمن ترتيب الكلمات والحروف بطرق وأساليب معينة بغية إحداث التأثير وإيصال الرسالة للناس. ويضيف المصمم النص إلى أي تصميم عند الحاجة لإضافة محتوى خاص مع المحافظة على جمالية وأسلوب التصميم العام، ويعد العنصر الحسم في إنشاء وتصميم أي علامة تجارية، لأنه يمثّل الهوية الأبرز للعلامة التجارية والتي ستساهم في نجاحها واستمراريتها ورسوخها في أذهان الناس. كما يعد العنصر الأهم في تصميم صفحات الويب والكتيبات والمنشورات الإعلانية، حيث يساهم الاستخدام الصحيح والمميز لهذا العنصر في تحقيق نقلة نوعية للعلامة التجارية وتمكين تأثيرها على الجمهور، بينما على الجانب الآخر سيسبب الاستخدام الخاطئ والتصميم السيئ إلى نفور الجمهور منها وعدم قبوله لأفكارها ورسائلها. المبادئ الأساسية لفن تصميم النصوصكما لتصميم الرسوميات مبادئ أساسية يجب مراعاتها واستخدامها استخدامًا صحيحًا لتحقيق الفائدة الأكبر من التصميم وإيصال الرسالة للجمهور، فإن فن تصميم النصوص له مبادئ يجب الانتباه لها ومراعاتها واستخدامها لتحقيق الاستفادة القصوى من تأثير النص والمحتوى على المشاهدين، ويتشارك فن النصوص عدة مبادئ مع تصميم الرسوميات.
يوجد العديد من أنواع الخطوط المستخدمة في كتابة المحتوى وتصميم الرسوميات، وتتميز الحضارات المختلفة بفنون الكتابة اليدوية بحيث تتباهى بخطوطها الأصيلة المخطوطة يدويًّا وتعتبرها فنًا أصيلًا يمثّل ثقافة وماضي ومستقبل تلك الحضارة. إلا أنه فن يحتاج موهبة وتدريبًا وعملًا دؤوبًا حتى يصل الدارس فيه إلى مستوى الخطاط المتمكن، ويعد الخط العربي من أبرز فنون الكتابة اليدوية في التاريخ، حيث تزينت به المخطوطات والتصاميم المعمارية المختلفة، وإضافته إلى التصاميم الرسومية العربية يضيف جمالًا وطابعًا خاصًا لأي تصميم وخصوصًا في الشعارات والمنشورات الإعلانية. لكن فن الخط العربي اليدوي موهبة لا يتمتع بها الكثيرون، لذلك سنعتمد أكثر على الخطوط المصممة الجاهزة التي نستخدمها في الكتابة ضمن أجهزة الحاسوب وهي ما يطلق عليه مصطلح (الخطوط المحوسبة Computerized fonts)، ويوجد من هذه الخطوط أنواع وتختلف باختلاف اللغة المستخدمة أيضًا. الخطوط العربيةتتألف الخطوط العربية من أنواع أساسية تتفرع عنها بقية الخطوط المعروفة وهي كثيرة ومن أهمها الكوفي، الثلث، النسخ، الفارسي، الديواني، الرقعة، المغربي والحر وغيرها الكثير، وسنتعرّف تاليًا على أهمها.
وهنا بعض الخطوط الحاسوبية المشتقة من الخط الكوفي.
وهذه بعض الخطوط الحاسوبية المشتقة من خط الثلث.
وهذه بعض الخطوط الحاسوبية المشتقة من خط النسخ.
وهذه بعض الخطوط الحاسوبية المشتقة من الخط الديواني.
وهذا خط حاسوبي مشتق من الخط الفارسي.
وهذه بعض الخطوط الحاسوبية المشتقة من خط الرقعة.
وهذه بعض الخطوط الحاسوبية المشتقة من الخط المغربي.
وهذه بعض الخطوط الحاسوبية المشتقة من الخط الحر. الخطوط اللاتينيةوهي الخطوط المستخدمة في اللغات الغربية مثل الإنجليزية والفرنسية وغيرها، ولهذه الخطوط أنواع أساسية يطلق عليها اسم عائلات الخطوط ويُشتق منها العديد من الخطوط، ومن أهم هذه الخطوط Serif وSans Serif وSlab Serif وScript وDecorative.
بعض من خطوط Serif.
بعض من خطوط Sans Serif.
بعض من خطوط Slab Serif.
بعض من خطوط Script.
بعض من خطوط Decorative. قواعد تصميم النصوتتضمن التطبيق العملي لمبادئ تصميم النص مع الإشارة إلى أهم ما يجب اتباعه في عملية التصميم. التقنين Kerningويقصد بهذا المصطلح ضبط المسافة بين الحروف، قد يبدو لك أن هذا الأمر مستبعد للنصوص العربية ومنتشر في النصوص اللاتينية، هذا صحيح نسبيًا، ولكن أحيانًا قد يضيف المصمم إطالات غير ضرورية على النص ظنًّا منه أنه يملأ مساحة التصميم بطريقة جميلة إلا أنه فعليًّا يدمّر التصميم، فكلمة (دليل) المكتوبة بهذه الطريقة أجمل بكثير من الطريقة التالية (د لـــيــــــــــل) وخصوصًا ضمن التصاميم الفنية، كما أن بعض المصممين لا ينتبهون لتفاصيل دقيقة وهم في عجالة من أمرهم مثل مسألة المسافة الفاصلة بين الحروف والتي يتم ضبطها من أدوات النصوص في برامج التصميم المختلفة، وهذه أمثلة عن ما نتحدث عنه. انعدام التقنين عبر زيادة التباعد في الحروف يؤدي إلى تصميم سيء وطبعًا تبقى مسألة مراعاة التقنين في النصوص العربية نادرة الحدوث إذا ما قارنّاه بالنصوص اللاتينية، حيث تستخدم الحروف المنفصلة في الكتابة وهو ما يسبب مشاكل كثيرة في ضبط التقنين، فيجب مراعاة المسافة بين الحروف بدقة وتوازن. خبراء التصميم يصرّون أنه لا يجب أن نعتمد على التقنين الآلي لبرامج التصميم المختلفة وأنه يجب علينا تقنين النصوص بأنفسنا وخصوصًا لنصوص العناوين والنصوص كبيرة الحجم، لأن مشاكل التقنين تبرز واضحة بها أكثر من النصوص صغيرة الحجم. يمكنك أن تدرّب نفسك على التقنين الصحيح من خلال موقع KERNTYPE والذي يمنح درجات تقديرية لقاء صحة عملية التقنين التي تنفذها. صورة توضح النص بدون ومع تقنين – الصورة من مدونة خطوط أدوبي التواصل بين الخطوط Font Communicationإن أسوأ ما يقوم به المصمم لاختيار الخطوط المناسبة للتصميم هو البحث العشوائي أو استعراض كافة الخطوط في مكتبة الخطوط المتوفرة على حاسوبه، لأن ذلك سيبعثر أفكاره ويشتت تركيزه على الاختيار الصحيح للخطوط خصوصًا إن كان يعمل على تصميم يتضمن أكثر من نص منفصل وعليه اختيار نوعية خط لكل نص. في هذه الحالة يجب التركيز على أن تكون الخطوط من نمط متماثل، مثل أن تكون من نفس عائلة الخطوط كالخطوط المغربية أو الكوفية، أو أن تكون من نفس أسلوب الخط كخطوط قديمة تاريخية أو خطوط عصرية، وهو ما يحقق التواصل بين الخطوط ويبقي التصميم متناسقًا ومتجانسًا. في الصورتين التاليتين مثالين عن الاختيار السيء والاختيار الصحيح لنمط الخطوط. لاحظ الخط المستخدم في العنوان غير ملائم لمعنى النص وغير متناسق مع الخط المستخدم في العنوان الثاني الخطوط هنا ملائمة للمحتوى ومتناسقة مع بعضها بالنسبة لكلا العنوانين تطبيق المحاذاة Alignmentالمحاذاة من المبادئ المهمة في تصميم الرسوميات وفي قواعد استخدام النص وأسلوب الطباعة في التصميم. تطبيقه بطريقة صحيحة ينتج جمالية ومثالية في التصميم، وعدم تطبيقه يؤدي إلى تصميم غير مريح. يجب تطبيق المحاذاة على محور محدد من قبل المصمم مهما كان اتجاه هذا المحور أو زاوية ميلانه. في المثالين التاليين تظهر لنا أهمية تطبيق المحاذاة على النصوص في التصميم. تطبيق المحاذاة بطريقة صحيحة منح تصميم النص أناقة وجمالية وراحة للنظر عدم تطبيق المحاذاة أساءت للتصميم ككل وأصبح غير مريح للنظر تطبيق مبدأ الهرمية Hierarchyسبق وأن تحدثنا عن هذا المبدأ مرارًا وهو الذي يؤدي إلى توجيه المشاهد ضمن مساحة التصميم من الأهم إلى الأقل أهمية، ولعل أكثر ما ينطبق عليه هذا المبدأ هو عنصر النص، حيث يجب أن يكون العنوان الرئيسي هو الأكثر بروزًا وظهورًا وجذبًا للانتباه لأنه الأهم بين باقي النصوص، ثم تتالى بقية النصوص في الحجم والموضع من حيث الأهمية. لاحظ التدرج من حيث الأهمية من العنوان الرئيسي بالتتالي. أهمية الحجم Sizeمن العوامل المهمة لنجاح تصميم ما لغرض ترويجي وإعلاني جذب انتباه المشاهد على الفور، ففي أفضل الأحوال لديك ثانية أو ثانيتين لجذب انتباه شخص ما في عالم الطباعة، إذا فاتتك هذه الفرصة، فقد فقدت عميلك المحتمل. في المثال التالي صممت إعلانًا ترويجيًا بنمطين، الأول في الأعلى بدون مراعاة مسألة الحجم، حيث كان النص بالكامل بنفس الحجم، ولمعرفة مضمون رسالة التصميم يجب عليك قراءة كامل المحتوى، فلو كان المحتوى أطول فإن هناك احتمالًا كبيرًا أن يصاب العميل بالملل ويغادر دون المتابعة وبذلك لن تصله الرسالة. ركّزت في التصميم الثاني في الأسفل على زيادة حجم النص الأهم وهو (الربح) والذي يجذب اهتمام المشاهد على الفور ويفهم الرسالة بدون قراءة كامل المحتوى، إلا أن جذب الاهتمام هذا، سيجبر المشاهد على قراءة كامل المحتوى رغبة منه في معرفة التفاصيل وعندها تصله الرسالة كاملة. لاحظ المثال في الأعلى غير مثير للاهتمام بينما في المثال الثاني في الأسفل الأمر مختلف مع أن المحتوى متطابق تمامًا. التركيز في الفقرات النصية Emphasisعندما تصمم موقعًا على الويب أو نشرة إعلانية تتضمن نصوصًا طويلة أو فقرات نصية كبيرة نسبيًا، يجب أن نتجنب حالة الملل التي قد يشعر بها القارئ نتيجة طول الفقرة ومن ثم حالة هروب القارئ بسبب الملل وعدم إكماله القراءة وبالتالي عدم وصول الرسالة كاملة وصحيحة إليه. لذلك يجب إحداث بعض التعزيزات على النص من خلال التركيز على النقاط المهمة ضمن النص، ويمكن إحداث ذلك عبر زيادة وزن الخط (ثخين) أو إمالته أو حتى تغيير لونه، وبذلك نحقق التركيز وجذب الاهتمام ونبعد الملل عن القارئ. في المثال التالي استخدمت النص ذاته مرتين، في الأولى لم أطبق التركيز ضمن النص، بينما استخدمت التركيز في الثانية والذي يبدو أكثر إثارة للاهتمام، ويشد القارئ إلى متابعة قراءته عكس الأولى.
لاحظ أن النص العلوي ممل وغير مثير للاهتمام بعكس السفلي – النص مقتبس من ويكيبيديا تجنب المسافات الزائدة Distancesقد يلجأ بعض المصممين أثناء كتابة نص فقرة إعلانية أو منشور إعلاني إلى فكرة توسيع المسافات بين الكلمات لملء مساحة التصميم، خصوصًا إذا كان النص قليلًا ولا يكفي لملء مساحة التصميم. يعد هذا الأمر خطأً كبيرًا، إياك والوقوع فيه، إذ ينم ذلك عن قلة معرفة وخبرة في التصميم ويجعل المنشور أو الإعلان رديء المنظر. إن كان لديك نقص في المحتوى وتوجد مساحة فارغة ضمن التصميم فاستغل تلك المساحة بخلفية ملونة أو صورة أو عنصر رسومي، فذلك أفضل ويُشعر المشاهد للنص بالراحة أكثر.
لاحظ النص العلوي غير مريح للنظر وللقراءة معًا ويشعرك بالغرابة – النص مقتبس من ويكيبيديا تجنب (الأرامل النصية) و (الأيتام النصية)هذان المصطلحان مستخدمان بكثرة في الأوساط الغربية وتحديدًا بين المصممين وكتّاب المحتوى. ما المقصود بهذين المصطلحين؟ عندما تكتب فقرة ما في التصميم ثم تنتهي المساحة المحددة طوليًّا لكتابة الفقرة مثل مربع نصي أو ما شابه وتضطر للمتابعة بالكتابة عبر الانتقال لعمود نصي أو مربع نصي جديد، ويكون هناك سطر أو سطرين فقط في المساحة النصية الجديدة، فهذه تسمى بالأرامل النصية. وعندما تكون هذه الفقرة الزائدة مجرد كلمة أو كلمتان، فهذه تسمى بالأيتام النصية. وتجنب هذه الحالتين بسيط، إما عبر التلاعب بالنص نفسه أو بالمسافة النصية كزيادة العرض قليلًا أو زيادة الطول إن أمكن، أو التلاعب بحجم النص بمقدار قليل، إلى أن تختفي هذه الظاهرة وتحل المشكلة. لاحظ الأيتام النصية (1) في الصفحة اليسرى والأرامل النصية في اليمنى (2) وهو ما يجب تجنبه. تجنب الأخطاء الإملائية واللغويةأهم ما يجب أن ننتبه له نحن معشر المصممين في التصاميم ذات المحتوى الكثيف نسبيًا حتى وإن كان سطرًا واحدًا، هو الانتباه إلى الأخطاء الإملائية واللغوية، لأن ذلك قد ينسف تصميمك كله في حال الوقوع في خطأ من هذا النوع وخصوصًا في اللغة العربية. لذلك يجب أن نهتم بثقافتنا اللغوية وأن نتابع دومًا كل المعلومات المتعلقة باللغة العربية وقواعدها مثل أنواع الجمل والأزمنة والهمزات والجمع والتثنية وقواعد التشكيل المختلفة وغيرها.
لاحظ الفرق الشاسع بين الإعلانين من حيث التدقيق اللغوي، أنت بالتأكيد لن تتقبل الإعلان الأول بسلاسة. خاتمةلاحظنا كيف أن النص وأسلوب الطباعة له تأثير هائل على جودة التصميم وإيصال الرسالة بأفضل طريقة ممكنة إلى الجمهور، ولكن حتى نتمكن من استخدام عنصر النص وأسلوب الطباعة بالطريقة الأمثل لتحقيق الهدف علينا مراعاة مبادئ وقواعد استخدامها، وتجنب المحاذير والأخطاء التي قد تؤدي إلى عكس النتيجة المرجوة من الإعلان، بحيث تؤدي إلى نفور الجمهور بدلًا من جذبهم وإثارة اهتمامهم بالتصميم وإيصال الرسالة. مع ذلك فإن مراعاة القواعد وتطبيق المبادئ وتجنب الأخطاء ليس صعبًا ومن اليسير القيام بذلك بمجرد التركيز قليلًا على هذه القواعد والمبادئ. |
53,082 | إدارة الإضافات في ووردبريس |
ما هي الإضافات؟
إن إضافات ووردبريس هي عبارة عن شيفرة بي اتش بي تعمل على إمداد ووردبريس بوظائف جديدة أو تحسين الوظائف الحالية فهي تزيد من سوية الخصائص الرئيسية لووردبريس وتُضيف خصائص جديدة للموقع. تُطور الإضافات عادة من خلال متطوعين، لذلك فهي تُعرض مُعظم الأحيان بشكل مجاني لمُستخدمي ووردبريس. تستطيع الاطلاع على الإضافات من خلال مستودع إضافات ووردبريس والتي تم اختبارها بشكل جيد وتُعتبر آمنة للاستخدام ولكن تختلف الجودة من ناحية الكتابة والالتزام بنصائح توثيق مجتمع مطوري ووردبريس من مُطور لآخر، وغالبة هذه الإضافات يتم تحديثها دوريًا لإصلاح المشاكل التي تظهر فيها وسد الثغرات الأمنية المُكتشفة. كيف تساهم هذه الإضافات في بنية ووردبريس؟إن نظام إدارة محتوى ووردبريس أو بنية ووردبريس يهدف بشكل رئيسي لنشر المحتوى وإدارة المستخدمين، وكل إضافة هي جزء إضافي برمجي سهل التثبيت يُساهم في تعزير الخدمات الأساسية لووردبريس أو إضافة وظيفة وميزة جديدة له. يُقدم ووردبريس أساس لبناء الموقع والإضافات هي أحد المُكملات للبناء والتي من خلالها تدعم موقعك بالوظائف التي تريدها أو تحتاجها دون الحاجة لامتلاكك خبرة برمجية أو حتى الاستعانة بمُطور لأن الكم الكبير من الإضافات المجانية المتوفرة تُغطي قسمًا لا بأس به مما يحتاجه المستخدمون ويبقى بعض الأمور التي تحتاج فيها مُبرمجًا. بعض الأمثلة على الإضافاتتندرج بعض من أكثر الإضافات شعبية -المتواجدة ضمن مستودع ووردبريس- ضمن التصنيفات التالية:
ما سبق هو عينة صغيرة فهناك الآلاف من الإضافات المتوفرة ضمن المستودع وهذا يزيد من فرصة إيجادك لما تريده من خواص أو ميزات. إيجاد وتثبيت الإضافات إيجاد إضافاتتستطيع تصفح الإضافات والبحث عما تريده ضمن مستودع ووردبريس حيث جميع الإضافات مجانية ومتوفرة للتنزيل كملف مضغوط zip ليبقى عليك رفعها وتثبيتها على موقع ووردبريس. يوجد طريقة أخرى للبحث عن الإضافات وتثبيتها وذلك من لوحة تحكم ووردبريس لموقعك مباشرًة. توجه للقائمة الرئيسية ومنها لتبويب "إضافات" ثم "أضف جديد"، هنا يمكنك تصفح الإضافات والبحث عنها بالاسم وتثبيتها من خلال خيار "التنصيب الآن". الأمر بسيط ولا يحتاج خبرة، فقط عليك البحث بشكل جيد عن إضافة تُناسبك طلبك. تحديث الإضافاتيعمل مطورو الإضافات على تحديث إضافاتهم دوريًا حيث تظهر هذه التحديثات ضمن صفحة الإضافات على موقع ووردبريس. لمعرفة الإضافات الموجودة ضمن موقعك والتي تحتاج إلى تحديث:
في حال لم يصدر تحديث للإضافة منذ آخر تحديث لووردبريس فقد تصبح غير متوافقة أو نسبة توافقها مع الإصدار الجديد من ووردبريس قد تكون غير معروفة. تستطيع رؤية معلومات التوافق مع نسختك من ووردبريس ضمن معلومات الإضافة من صفحة "أضف جديد" ضمن تبويب الإضافات أو من قائمة الإضافات التي تم تثبيتها. توافقية الإضافات الجديدةلتعرف إن كانت الإضافة متوافقة مع نسخة ووردبريس التي تعمل عليها قبل تثبيتها، توجه إلى تبويب "أضف جديد" ضمن قائمة الإضافات من لوحة تحكم ووردبريس حيث يتضمن وصف كل إضافة ضمن هذه الصفحة ملاحظة عن محتواها "متوافقة مع نسختك الحالية من الووردبريس" أو "غير مجربة مع نسختك من الووردبريس". تستطيع الضغط على "تفاصيل أكثر" لمشاهدة معلومات عن توافقية الإضافة. توافقية الإضافات المثبتةلمعرفة معلومات توافقية الإضافات المثبتة سابقا على ووردبريس، اضغط على "إضافات" ضمن القائمة الموجودة على اليمين في لوحة تحكم ووردبريس. يجب أن يتضمن كل عنصر ضمن هذه القائمة على رابط "تفاصيل أكثر". اضغط عليه لمزيد من المعلومات عن توافقية الإضافة مع النسخ المختلفة لووردبريس. تثبيت الإضافاتيوجد ثلاث طرق لتثبيت إضافة ووردبريس.
هذه الطريقة هي الأسهل لتثبيت الإضافة، وتتضمن الخطوات التالية:
إن كنت تمتلك نسخة مضغوطة من ملف الإضافة، تستطيع رفعها بشكل يدوي لتثبيتها من خلال لوحة تحكم المدير لووردبريس.
قد تضطر في حالات نادرة لتثبيت الإضافة يدويًا وذلك بنقل الملفات للمخدم. يُنصح بهذه الطريقة فقط عند الحالات الضرورية فمثلا قد لا يكون المخدم الخاص بك مُعدًا ليسمح بعملية التثبيت التلقائية. تتطلب منك هذه الطريقة الإلمام بكيفية نقل الملفات باستخدام بروتوكول SFTP.
تحذير: قد تضع هذه العملية موقعك في موضع خطر في حال كانت الإضافة التي تحاول تثبيتها غير متوافقة مع نسخة ووردبريس لموقعك الالكتروني أو في حال كانت من مصدر غير موثوق. احرص على أخذ نسخة احتياطية عن موقعك قبل البدء بهذه العملية. الإضافات المفضلةتستطيع إضافة أي إضافة إلى قائمة المفضلة لديك وتستطيع بسهولة عرض وتثبيت الإضافات المفضلة لمستخدم ووردبريس آخر. تفضيل إضافة
لمشاهدة الإضافات المفضلة لدى مستخدم ووردبريس، بما في ذلك الإضافات التي تفضلها أنت:
تتضمن كل الإضافات الظاهرة هنا خيار "التنصيب الآن" لتتمكن من إضافتها لموقعك بسهولة. حذف إضافةتمتلك الإضافات آلية إلغاء تثبيت آمنة وسهلة الاستخدام وفي حال لم يكن هذا متوفر لديك لسبب ما، تستطيع حذف الإضافة بشكل يدوي. الحذف التلقائي للإضافةالطريقة الآمنة والسهلة لحذف إضافة هي عبر لوحة تحكم مدير ووردبريس.
قد تضطر في حالات نادرة حذف الإضافة يدويًا بدون استخدام لوحة تحكم مدير ووردبريس ويُنصح باستخدام هذه الطريقة فقط عند الضرورة.
ملاحظة: انتبه أنه ليس بالضرورة أن يتماثل اسم الإضافة مع اسم المجلد الخاص بها لذلك عليك الانتباه. تحذير: تتضمن العملية التالية حذف ملفات يدويًا من المخدم الذي يتواجد عليه موقعك لذلك قد يكون هذا خطيرًا ويُنصح بأخذ نسخة احتياطية عن الموقع قبل البدء بهذه العملية. حل المشاكلقد لا تعمل إضافة ووردبريس كما هو متوقع منها، وللأسف لا يوجد طريقة محددة أو وصفة جاهزة لحل مثل هذه المشاكل لذلك يُوفر هذا القسم معلومات مفيدة لك قدر الإمكان. المصادر
قد تكون المعلومات الموجودة في هذا القسم غير مألوفة أو مخيفة لأي مُستخدم جديد لووردبريس ولكن إن كنت تمتلك خبرة جيدة بمنصة ووردبريس ولا تخاف من الغوص عميقًا فإن هذا القسم مفيد لك. تساعدك هذه الخطوات على حل المشكلة تواجهك مع إضافة جديدة أو إضافة سابقة توقفت عن العمل بعد تحديث:
ما يلي هي نصائح وتقنيات للمستخدمين المتقدمين والمطورين. إدارة الإضافةيتم إدارة الإضافات من لوحة تحكم ووردبريس للمدير من صفحة "إضافات منصبة" حيث تظهر الإضافات ضمن هذه الصفحة على شكل قائمة وتكون إما فعالة أو معطلة. تستطيع من هنا تفعيل الإضافات أو تعطيلها وحذفها كما تتضمن كل إضافة روابط تعطيك معلومات أوسع عن الإضافة حيث أن الإضافات المكتوبة بخط عريض تكون فعالة. يجب أن يتضمن الملف الرئيسي في كل إضافة ترويسة تُظهر المعلومات الأساسية عن الإضافة حيث يتعرف ووردبريس على هذه الترويسة والتي يستخدمها لاستخلاص المعلومات التي تظهر في قائمة الإضافات ضمن صفحة المدير. <?php /** * Plugin Name: Magic Plugin * Description: Magic Plugin performs magic. * Plugin URI: http://example.com/magic-plugin * Version: 2.3 * Author: Mr. Magic * Author URI: http://example.com/ * Text Domain: magic-plugin * * @package Magic Plugin */ ?>في حال لم تجد الإضافة التي قمت بتثبيتها في قائمة الإضافات ضمن صفحة المدير فهذا يعني أن هناك مشكلة في الترويسة. يجب أن تتضمن كل إضافة ملف readme.txt والذي يتضمن معلومات عن المطور والنسخة والترخيص وخطوات التثبيت وغيرها. لإلقاء نظرة على هذا الملف، اضغط على محرر الإضافات وتوجه للإضافة المطلوبة واقرأ ملف readme.txt. إضافات مفعلة على الشبكةيمكنك ضمن شبكة مواقع متعددة في ووردبريس تثبيت إضافة وتفعيلها على الشبكة وهذا يعني أنها سوف تكون فعالة على جميع المواقع ضمن الشبكة وبهذه الطريقة يمكنك تحديد الوظائف الأساسية التي يجب على كل موقع ضمن الشبكة امتلاكها (هذه الوظائف مرتبطة بالإضافات المُفعلة على الشبكة). لا يمكن تعطيل هذه الإضافات باستخدام صفحة "إضافات منصبة" ضمن أي موقع ضمن الشبكة، فقط مدير الشبكة يستطيع تعطيل هذه الإضافات. يعمل ووردبريس على تحميل هذه الإضافات قبل الإضافات العادية وهذا يعني أن الشيفرة والخطافات Hooks ضمن الإضافات الواجب استخدامها سوف تكون متوفرة لباقي الإضافات. المعلومات ضمن هذا القسم تنطبق فقط على شبكة مواقع ووردبريس لأنك تستطيع إضافة وحذف الإضافات كما تريد ضمن موقع ووردبريس وحيد. ألق نظرة على تفعيل الإضافات على الشبكة وإنشاء شبكة لمزيد من التفاصيل. إخفاء الإضافات عند تعطيلهاتضيف بعض الإضافات عند تفعيلها شيفرة إلى ملفات قالب ووردبريس ويمكن أن يبقى هذا الكود الإضافي في مكانه حتى بعد تعطيل الإضافة وهذا قد يؤثر على شكل القالب أو وظائفه لينتج بعض الأخطاء. لذلك من المهم منع إضافة معطلة من أن يتم اكتشافها أو استخدامها ولفعل ذلك يجب أن تضيف شيفرة بي اتش بي إلى القالب لتنفيذ عملية تحقق بسيطة من وجود الإضافة ()function_exists. (انظر إلى المثال في الأسفل) ثم ارفع القالب المعدل إلى مجلد wp-content. تقوم الدالة البرمجية if(function_exists()) بالتحقق من الإضافة لتقوم باستدعاء بقية الدوال المرتبطة بهذه الإضافة إن كانت مثبتة ونشطة أما في حال أعادت الدالة FALSE فهذا يعني أن الإضافة غير مثبتة أو غير مُفعلة ويجب تجاهل الدوال المرتبطة بالإضافة ومتابعة تحميل الصفحة. <?php if ( function_exists( 'FUNCTION NAME' ) ) { FUNCTION_NAME(); } ?>تستخدم الإضافة في المثال دالة تدعى ()alexgetshoutbox لطباعة محتواها. <?php if ( function_exists( 'alex_get_shoutbox' ) ) { alex_get_shoutbox(); } ?> تطوير الإضافاتتُشكل الإضافات جزء أساسي من ووردبريس ومسيرة تطوره وشعبيته لذلك يعتمد مجمتع ووردبريس على المطورين الراغبين في إغناء مستودع الإضافات الذي يمتلك الآن مجموعة كبيرة من الإضافات المجانية التي تقدم العديد من الميزات الإضافية للبنية الأساسية لووردبريس. يُمكنك الانضمام لهذا المجتمع من خلال إنشاء إضافة خاصة بك ونشرها ضمن مستودع ووردبريس. إن كنت جديدًا في مضمار تطوير الإضافات عليك الإطلاع على هذه المصادر التي يمكن أن تكون مفيدة لك كنقطة انطلاق. ترجمة -وبتصرف- للمقال Managing Plugins من موقع ووردبريس |