مقدمة حول الـ HTTP/2

لا يرغب أحد منا بتصفح موقع بطيء! سرعة تحميل صفحات الويب عامل مهم جدًا في تحسين تجربة المستخدم User Experience وتقييم محركات البحث. كما تعرف فلا أحد يحب الانتظار ولن يتردد المستخدمون عادةً في الانتفال إلى موقع أسرع في حال كان موقعك يستغرق الكثير من الوقت في تحميل صفحاته. نحن نتحدث عن أرقام دقيقة، كل ملي ثانية تًحسب وتؤثر سلبًا او إيجاباً في رضى المستخدمين عن أداء موقعك، ونتيجة لهذا فلطالما حاول مطوري صفحات الويب تحسين سرعة تحميل الصفحات عبر التخزين المؤقت، ضغط المحتويات وتقليل عدد العناصر…الخ

ولكن الأمر ليس بهذه البساطة، فتقنيات الويب التي تم تصميمها في العقد الماضي لم تكن مثالية للويب 2.0 واستيعاب التضخم الهائل في عدد المستخدمين وازدياد نهمهم في معرفة المزيد من المعلومات! ولهذا ابتكر مطوري الويب حلولاً بديلة لمواجهة المشاكل الموجودة في البنية الأساسية للويب، مثل الـ Spriting، Inlining، Concatenation، Sharding وغيرها.

ولكن ألن يكون من الأفضل تطوير البنية الأساسية للويب بدلاً من تطبيق كل تلك الحلول البديلة التي تعقد عملية تصميم وتطوير صفحات الويب؟!

HTTP/2

نعم، فلا يخفى علي أحد التطويرات الجديدة في معايير لغات الويب، مثل الـ HTML5 وECMAScript 6 وCSS3. ولكن الأمر لا يتوقف عند هذا الحد فنحن اليوم أمام نقطة تحول التي تتمثل في التطوير الجديد لمعيار بروتوكول الـ HTTP.

لقد قضى الباحثون سنوات في تطوير النسخة الجديدة من البروتوكول، فمنذ وقت إنشاء مجموعة العمل HTTPbis بواسطة منظمة الـ IETF في صيف عام 2007 حتى بدأت النقاشات هنا وهناك تتساءل وتطرح الاقتراحات حول ما يجب أن يكون عليه التحديث الجديد للبروتوكول الأكثر أهمية في الويب.

بروتوكول SPDY من شركة Google تم إنشاؤه كبروتوكول متطور ومنفصل عن الـ HTTP في بادئ الأمر. تم الإعلان عنه في منتصف عام 2009 وكما كان متوقعًا فقد حاز على إعجاب الكثير وبدأت نسبة لا بأس بها من الشركات والمطورين في دعمه واستخدامه في تطبيقاتهم ومشاريعهم.

مضت الأيام وعند بدأ مجموعة العمل HTTPbis باستقبال المقترحات في عام 2012 تمت الكثير من النقاشات حينها وفي نهاية الأمر تم الاتفاق على الاعتماد على بروتوكول SPDY كنقطة بداية في العمل على بروتوكول HTTP/2.

مفاهيم وخطوط عريضة قامت مجموعة العمل HTTPbis بالالتزام بها أثناء تصميم بروتوكول الـ HTTP/2:

  1. يجب عليه الحفاظ على نفس نموذج عمل الـ HTTP، بحيث يبقى بروتوكولاً مبنيًا على فكرة التخاطب بين Client وServer.
  2. يجب ألا يحتوي على أي تغيير في نظام تسمية الروابط التشعبية URLs، ويحتفظ بنفس اسم البروتوكول http:// وhttps://.
  3. يجب أن يكون هناك توافق بين الـ HTTP/2 وHTTP/1 بحيث تكون الأجهزة التي تعمل وفق بروتوكول HTTP/1 قادرة على التواصل مع الأجهزة التي تعمل على بروتوكول HTTP/2 والعكس صحيح.
  4. يجب أن يتم تقليل أو حذف الأجزاء الاختيارية، بحيث يصبح دعم كل أجزاء البروتوكول إلزاميًا على من يريدون تطبيقه.
  5. لا مزيد من الإصدارات الثانوية، إن كان هناك حاجة لتعديل أو توسيع شيء ما في الـ HTTP/2 فسيتم إصدار الـ HTTP/3، لن توجد إصدارات ثانوية مثل: HTTP/2.1 وغيرها.

هذا يكفي حول الخلفية، التاريخ والمفاهيم العامة، دعونا نستعرض بعض اللمحات حول التغييرات الجديدة.

بروتوكول ثنائي

HTTP2 Binary Framing

لم يعد بروتوكول الـ HTTP في نسخته الجديدة HTTP/2 بروتوكولاً نصيًا text-based بل أصبح بروتوكولاً ثنائيًا binary-based لجعل عملية التأطير framing أكثر سهولة مما مضى. مما يجعله غير قابل للقراءة من قبل البشر non-human-readable وبالتالي تعقيد عملية تنقيح محتويات البيانات المتبادلة ولكن الأمر مازال ممكنًا عبر بعض الأدوات مثل Wireshark وcURL.

التيارات المتعددة

http2_multiplexed_streams

اتصال HTTP/2 واحد من الممكن أن يحتوي على أكثر من تيار ثنائي الاتجاه bi-directional stream مفتوح في نفس الوقت، وكل frame يرفق مع stream معين. مما يسمح لعدة طلبات وردود بتشارك نفس عرض النطاق (Bandwidth) بدون الحاجة إلى إنشاء أو تأسيس اتصال منفصل لكل طلب و رد على حدة.

الأولويات والتبعيات

كل تيار stream يحمل بارامتر لتحديد أولويته priority بحيث يستخدم في الإخبار عن أي من التيارات هو أكثر أهمية من غيره. بالإضافة إلى وجود بارامتر لتحديد التبعية dependency والذي يستخدم في منع عملية معالجة تيار ما حتي يتم الانتهاء من معالجة التيار المعتمد عليه.

ضغط الترويسة

بروتوكول الـ HTTP عديم الحالة state-less يعامل كل طلب معاملة مستقلة بحيث لا يكون للطلب علاقة بالطلبات السابقة. لا يتطلب هذا النوع من البروتوكولات أن يحتفظ الخادم بمعلومات كثيرة حول الطلبات السابقة، مما يعني أن كل طلب يجب أن يتضمن كل المعلومات التفصيلية التي يحتاجها الخادم لتفسير الطلب.

عندما يقوم العميل بطلب العديد من الموارد من نفس الخادم، ستكون هناك سلسلة كبيرة من الطلبات التي تبدو متشابهة. وهذا ما يستدعي وجود فكرة ضغط الترويسة Header Compression.

تقنية الضغط المستخدمة في الـ HTTP/2 المسماة HPACK تم نشرها كمسودة منفصلة ولن يكفي هذا المقال لشرحها بشكل كافي، لذا سنؤجل حديثنا عنها إلى وقت لاحق.

مبادرة الخادم

http2_server_push

ميزة الـ Server Push هي إحدى الخصائص الجديدة المضافة إلى البروتوكول، فكرتها هي في حال طلب العميل المورد X والخادم يعرف بأن العميل من المرجح أن يحتاج أيضًا إلى المورد Z، فسيقوم الخادم بالمبادرة وإرسال المورد Z بدون أن يطلب منه العميل ذلك. العميل يجب أن يسمح للخادم بشكل صريح باستخدام هذه الميزة، وفي حالة أن الخادم أرسل مورداً لا يرغب العميل باستقباله بإمكانه إيقاف الخادم عبر إرسال أمر التحكم RST_STREAM.

بالتأكيد، هذا ليس كل شيء! إن أردت معرفة المزيد بإمكانك الاطلاع على المعلومات التفصيلية في مسودة الـ HTTP/2 الرسمية، يجب أن ننوه إلى أن دعم وتطبيق النسخة الجديدة من البروتوكول بشكل كامل سيستغرق الكثير من الوقت على الرغم من أن عدد من المتصفحات الشعبية مثل: الجوجل كروم وفايرفوكس وبعض تطبيقات إدارة خوادم الويب مثل: Nginx بدأت فعلاً بدعمه. ونحن نأمل بأن يصبح الويب أسرع وأكثر موثوقية بوجود الـ HTTP/2 في المستقبل القريب لينعم المستخدمين والمطورين بالسعادة والهناء!

وجهة نظر.. البرمجة فن!

programming-art

هل لنا أن نتوقف عن الكذب على أنفسنا لبرهة قصيرة؟! لكل من يظن أن “برمجة الحاسوب” علم هندسي نظري .أعد النظر في الأمر! برمجة الحاسوب فن حي!. مهارة تُكتسب ولا تُلقن! . ماذا أعني؟! دعنا نعود لبداية السطر لأوضح لك الأمر بشكل أكبر..

تاريخياً كان مجال برمجة الحاسوب مقصوراً على علماء الرياضيات والقيزياء، ولكن مع التطور الكبير والمتسارع ، وعندما تم إنشاء لغة الـ FORTRAN التي تعد أول لغة عالية المستوى في عام 1954م ثم العديد من اللغات الأخرى في السنوات المتعاقبة، أصبح مجال برمجة الحاسوب في متناول الجميع تقريباً ! .. لم تعد برمجة الحاسوب شيئاً معقداً كما كان في السابق! .. بل أن التطور المستمر للغات البرمجية والتقنيات الحديثة تجعله أبسط وابسط كل يوم! لتصبح مبرمجاً، لم يعد عليك سوى تعلم بعض المنطق وقواعد الرياضيات البسيطة..

اليوم هناك المئات من اللغات البرمجية، وأكثر من 20 مليون شخص مجنون لايعرفون سوى البرمجة وكيفية تنظيف نظارتهم! (أتحدث عن المبرمجين :D)! .. كل مبرمج قام ببرمجة 3 تطبيقات في المتوسط.. نعم لربما أصبح عدد التطبيقات أكثر من عدد المباني ومازال العدد في تضاعف مستمر !

ما الذي أريد قوله؟! .. لنقارن مثلاً بين “الهندسة المعمارية” و “برمجة الحاسوب” .. المهندس المعماري يقوم أولاً برسم المبنى الذي يريد بناءه بإستخدام المعلومات المتوفرة لديه، برسم المخططات التفصيلية لكل شئ تقريباً ! .. ثم يجمع العمال والمواد المطلوبة لتبدأ عملية البناء! ولاخلاف على أن “الهندسة المعمارية” علم حقيقي مبني على العديد من القواعد والنظريات ويتطلب دراسة تفصيلية مسبقة، فالمهندس المعماري من الصعب عليه مسح الاخطاء وإعادة بناء المبنى كما يشاء !!

طريقة المهندسين المعمارين تشبه مبدأ الـ “Waterfall Model” في تطوير البرمجيات والتي تعتمد بشكل كلي على التخطيط والتحليل والتصميم الدقيق المسبق قبل كتابة أي كود برمجي.. ولكن بحكم تجربة عملي للآن، يجهل العملاء في العادة مايريدونه بشكل دقيق!، ولديهم دائماً الكثير من طلبات التعديل والتطوير مما يجعلني أفضل إتباع مبادئ الـ “Agile software development” التي تتيح لي المزيد من الحرية والراحة في العمل. الأمر لم يختلف كثيراً عندما جربت العمل مع بعض الشركات الكبيرة التي تمتلك المخططات والتصاميم للمشاريع البرمجية التي تريد تطبيقها، الناتج النهائي عادة ماكان يختلف عن التصور المسبق للمشروع!

نعم، كثير من التطبيقات المشهورة اليوم، تم برمجتها بشكل حر وبدون الإعتماد على قواعد التخطيط والتصميم والتحليل المسبق! .. بل أصبح كثير من المبرمجين يتجهون لتطبيق مبادئ الـ “Adaptive Software Development” و “Agile software development” بدلاً عن الـ “Waterfall Model”.. و بإمكانك ملاحظة كيف أن بعض التطبيقات تختلف بشكل كلي بين إصدارتها فالنسخة V1 من بعض البرامج تختلف بشكل كبير عن النسخة V2 ! .. فهذه هي طبيعة الأعمال الإبداعية متغيرة وتتطور بإستمرار! البرمجة عمل إبداعي حر! .. لكل مبرمج فلسفته وذوقه الخاص! .. نحن نقوم بتطبيق النظريات وإنتاج البرمجيات بالوسائل المتاحة لنا! .

نعم، هذا هو المعنى لكلمة “فن” ! ..المبرمج فنان!

لست وحدي من يؤمن بهذه المبدأ.. إطلع أيضاً على:

تحديث: 1/5/2014م .. تم إعادة صياغة بعض الفقرات لكي تصل الفكرة بشكل أوضح.

لحظة تأمل.. العدو نحو الهاوية!

Internet Defamation Moving Fast

“عصر السرعة” .. هذا هو العنوان الذي يطلقه الناس على الفترة الزمنية لتي نعيشها اليوم، لاخلاف على ذلك فالتطور التكنولوجي الذي شهدته البشرية في العقود القليلة الماضية يجعل الناس يقفون منبهرين ولاينفكون على نعته بعبارات المدح والأسماء الرنانة. انا مثل الكثيرين معجب ومتابع لهذا التطور المتسارع الرائع وأتمنى أن أساهم يوما ما في دفعه إلى الأمام . مع ذلك فأنا أكره نمط الحياة السريعة، أسلوب الناس المتعجل في الحياة، التعجل في الأكل، التعجل في التعليم، التعجل في العمل، التعجل في إتخاذ القرارات!!

يفترض أن الهدف من التطور التكنولوجي الذي نشهده اليوم هو تقليل الفترة الزمنية التي نقضيها في تأدية الأعمال الروتينية ونركز على تفاصيل حياتنا بشكل أدق. أستغرب حقاً من الأشخاص الذين يتمنون الغد قبل أن ينتهي اليوم! .. أشخاص يريدون تأدية أعمالهم بأقصى سرعة ممكنة متجاهلين بذلك معايير الدقة والإتقان. أنا لا أعني بأن ننجز الأعمال التي تتطلب يوماً واحداً بأسبوع..

بل أن نعطي لكل شئ وقته وإحترامه الخاص!..

فلسفة الحياة البطئية لاتعني بأن نقوم بكل شئ ببطء! .. بل هي حول فعل الأشياء بالسرعة والأسلوب الصحيح، عش وإستغل الساعات والدقائق، إسعى لفعل الأشياء بإتقان بدلاً من أن تسعى للإنجاز بأسرع وقت ممكن!!

عودتي للتدوين…

لقد مضى عامان تقريبا منذ آخر تدوينة لي، على الرغم من أني لم أتوقف عن الكتابة بشكل فعلي، فلطالما كنت أكتب على شبكات التواصل الإجتماعي و بعض المواقع الأخرى، ولكن لايوجد مكان أفضل من مدونتي المتواضعة لأكتب فيها كل ما أرغب بحرية وإرتياح.

إذن، ماذا فعلت خلال هذا الوقت الطويل؟ … للأسف، انا لست هنا لأتحدث عن ملخص حياتي، ولكن يمكنكم الثقة بأني لم أضيع وقتي سدى! .. لقد فعلت حقاً الكثير من الأشياء، خضت العديد من التجارب الجديدة و تعرفت على اشخاص جدد، نظرتي للحياة، أصبحت مختلفة عما كانت عليه، في نفس الوقت مازلت ذلك الشخص المتحمس، المتقلب، الصريح، المستقل، المنعزل و الهادئ أحياناً وكثير الكلام احياناً أخرى!

ووردبريس : حذف خانة الموقع من نموذج الرد

حيلة يطلبها الكثير من مستخدمي الووردبريس رغم انها في غاية السهولة و البساطة ، في الغالي يعرض نموذج الرد في الووردبريس خانة “الموقع الإلكتروني” ليسمح للزوار المعلقين بإدراج روابط مواقعهم بدون ضرر خاصة وأن الروابط في محتوى التعليقات تتم إضافة خاصية nofollow إليها ، عموماً يجب أن أنوه بأن الطريقة أدناه تعمل فقط في القوالب التي تستخدم دالة comment_form() في عرض نموذج الرد .

فقط ألصق الكود التالي في ملف الـ functions.php الخاص بالقالب .


 add_filter ( 'comment_form_default_fields', 'nash_remove_website_field' );
 
 function nash_remove_website_field ( $fields ) {

    // Remove Website Field .
    unset ( $fields['url'] );

    // Return $fields .
    return $fields;

 } // end nash_remove_website_field()

قوالب الووردبريس و آمان المدونات

سؤال يسئله الكثير من الأشخاص فيما إذا كانت قوالب الووردبريس المعروضة في الإنترنت قد تمثل خطر حقيقي على أمان الموقع ، الجواب و بكل بساطة “نعم” هناك العديد من القوالب و التي نستخدمها الآن تمكن المخترقين من إختراق مواقعنا بسهولة كبيرة .

نظام قوالب الووردبريس ليس كأي نظام آخر ، فهو يعطي المطور الحرية في عمل الكثير من الأشياء ولكن هذه قد تكون نقطة إيجابية وسلبية في نفس الوقت ، العديد من الثغرات الموجودة في قوالب الووردبريس اليوم هي نتيجة عدم التعمق في الـ WordPress API أو عدم الفهم للطريقة التي يعمل بها سكربت الووردبريس بالأساس !

في موضوعي اليوم سأتطرق إلى أهم الثغرات الموجودة في قوالب الووردبريس اليوم ، و سأعرض أمثلة عليها من قوالب عربية شهيرة نستخدمها الآن ، تتدرج أهمية الثغرات من خطيرة جداً إلى غير مهمة ، ولكني سأحرص على ذكر أغلبية الثغرات بجميع مستوياتها .

عندما قلت بأني سأذكر أمثلة من قوالب عربية ، فأنا لا أقصد أن القوالب الأجنبية آمنة 100/100 ولكني أحب أن أعمل بالمثل القائل “الأقربون أولى بالمعروف” ، هذا بالإضافة إلى أني أحب تشجيع المبدعين العرب و زيادة جودة قوالبهم مستقبلياً .

أسماء القوالب العربية المستخدمة في الموضوع :
1 – قالب myPage للأخ Ahmed Alkatheeri .
2 – قالب EQALAM للأخوة Yazeed Al Swailem & Talal AlAsmari .
3 – قالب dMagazine 2 للأخ Raheem Karar .
4 – قالب WebColors 2.0 للأخ Salah Elimam .

أولاً : الأمر كله يتعلق بالصلاحيات !

عندما نتحدث عن الحماية في قوالب الووردبريس فإننا في الأغلب نتحدث عن صلاحيات الأعضاء و كيفية إستخدام الدوال المقدمة لنا من الووردبريس في جعل الموقع أكثر أماناً ، في أغلب القوالب المذكورة أعلاه تم تجاهل هذه النقطة بشكل شبه كلي ! و تكمن الخطورة في مسألة الصلاحيات إن كان الموقع يسمح بتسجيل العضويات .

بإختصار مسألة عدم الإنتباه للصلاحيات تمكن الأعضاء بأي رتبة كانوا ( مشترك ، مساهم ، كاتب ، محرر ) من تغيير إعدادات القالب ، ولكم أن تتخليوا مقدار خطورة هذه النقطة و ماذا يمكن أن تسببه من اضرار جسيمة !

مشكلة الصلاحيات ليست فقط في حفظ الإعدادات قد تكون في رفع الملفات أو أي شئ يتطلب صلاحيات خاصة .

إقتباس من قالب myPage ملف functions.php


if ( $_GET['page'] == basename(__FILE__) ) { 
      if ( 'save' == $_REQUEST['action'] ) { 
           foreach ($options as $value) { update_option($value['id'], $_REQUEST[$value['id']] ); } 
           header("Location: admin.php?page=functions.php&saved=true"); die;   
     } else if ('reset' == $_REQUEST['action']){ 
           foreach($options as $value) { delete_option($value['id']); } 
           header("Location: admin.php?page=functions.php&reset=true"); die; 
  } 
} 

الأسوء في قالب myPage أنه جعل عملية الإستجابة من متغير $_REQUEST و هذا يعطي إمكانية إرسال المتغيرات عبر الرابط مباشرة GET لتتأكد من ذلك جرب الدخول بعضوية مشترك أو أياً كانت الرتبة وإجعل الرابط مشابه للتالي

localhost/wordpress/wp-admin/admin.php?page=functions.php&action=save&mp_site_desc=value

ستظهر لك رسالة بأنك لا تملك الصلاحيات الكافية للدخول ، ولكن بغير المتوقع تم حفظ الإعدادات بنجاح !

هذه الثغرة موجودة في العديد من قوالب الووردبريس وهي موجودة أيضاً في قوالب عربية مثل : dMagazine 2 و WebColors 2.0 و حل هذه المشكلة ببساطة هو التحقق من أن المستخدم يملك الصلاحية للتحكم بالإعدادات قبل عملية الحفظ .

ثانياً : الصلاحية الكاملة لإستخدام وسوم الـ HTML

تعد هذه الثغرة أيضاً منسية لدى الكثرين رغم خطورتها الفائقة ، صلاحية السماح بإستخدام وسوم الـ HTML بجميع وسومها موجودة إفتراضياً فقط لدى الرتب التالية : ( المدير و المحرر ) و إن كنت أحد الكتاب في إحدى المدونات فلا شك أنك لاحظت أنه أثناء نشر تدوينة جديدة لا يسمح لكم بإستخدام وسوم HTML مثل style و script لأنها من الممكن أن تسبب خطر كبير على الموقع .

العديد من القوالب الآن و التي تملك لوحة تحكم وفيها بعض الخيارات مثل : محتوى الفوتر و محتوى الهيدر أو أياً كان ، تسمح لك بإستخدام وسوم الـ HTML بدون أدنى مراقبة للوسوم المستخدمة و ما إن كان العضو يملك الصلاحية لإستخدام الـ HTML بحرية ، وكما يعلم جميع المطورين مع التطور الكبير الحاصل للغة الجافاسكربت أصبح من الخطير جداً تجاهل هذه النقطة .

وهذا مثال مبسط للمطورين لكيفية تفادي هذه الثغرة :

 if ( isset( $settings['about_text'] ) && !current_user_can( 'unfiltered_html' ) ) $settings['about_text'] = stripslashes ( wp_filter_post_kses( addslashes ( $settings['about_text'] ) ) ); 

كما ترون أعلاه تم التحقق من الصلاحيات بإستخدام دالة current_user_can و تم حذف الوسوم الغير مسموحة بإستخدام دالة wp_filter_post_kses ، و بالطبع هذا فقط مثال بسيط يبين الفكرة التي أريد إيصالها .

ثالثاً : إستعمال إصدار قديم من سكربت TimThumb

ماهو سكربت TimThumb ؟
سكربت TimThumb و بكل بساطة سكربت مجاني يستخدم لقص الصور و غالباً ما يستخدم في التعامل مع المصغرات .

الإصدارات القديمة تحمل العديد من الثغرات التي تهدد أمان الموقع ، وإن كان موقعك مستضاف لدى شركة محترمة مثل BlueHost بالتأكيد أنهم ارسلو لك رسالة تنبيه خصوصاً إن كان قالبك يستخدم إصدار قديم من هذا السكربت .

رأي الشخصي إستعمال سكربت مثل TimThumb في قوالب الووردبريس هو الخطأ بعينه ! ، فلماذا الحاجة إلى السكربت خاصة أن الووردبريس وفرت لنا ميزة post-thumbnails ولماذا نرهق السيرفر بإرسال المزيد من إستعلامات HTTP و الحل موجود أمام أعيننا .

الحل : تحديث سكربت TimThumb إلى احدث إصدار متوفر .

رابعاً : عدم إخفاء إصدار الووردبريس

عادة ما نطالب مستخدمي السكربت بإزالة ميتا generator الموجودة غالباً ضمن وسم الـ Head في ملف header.php ولكن الأغرب لماذا نطالب المستخدمين بإزالة هذا الوسم ثم نقوم بإضافتها إلى قوالبنا ؟!

عموماً مسألة إضافة هذا الوسم أو إزالته لا تغير من الأمر شيئاً لأن الووردبريس و ببساطة تقوم بإضافته تلقائياً وقد أشرت بموضوع سابق لكيفية إزالة هذا الوسم بطريقة صحيحة .

خامساً : عدم تضمين دوال wp_head() و wp_footer()

كما يعلم جميع المطورين هذه الدوال مهمة جداً لعمل الإضافات و أغلب ميزات الووردبريس و مسألة نسيانها تعد من الأخطاء الفادحة ، قد لا يعتبر الجميع هذه النقطة “ثغرة” ولكنها قد تمثل “مشكلة” وخاصة عند التعامل مع بعض الإضافات و التي تتطلب إستدعاء هذه الدوال لتعمل بشكل صحيح .

مثال على ذلك بإمكانكم فتح ملف footer.php في قالب EQALAM و البحث عن دالة wp_footer .

سادساً : تجاهل تحذيرات الـ PHP

تحذيرات الـ PHP هي عبارة عن أخطاء صغيرة ناتجة عن عدم الإستخدام الصحيح للدوال أو النمط النحوي للغة نفسها ، لا بأس بتجاهل بعض التحذيرات ولكن الفاجعة الأكبر عند وجود المئات من هذه التحذيرات ويتم تجاهلها ، و التجاهل المستمر لهذه التحذيرات ربما يجعل القالب يعمل على غير المتوقع !

لإظهار هذه التحذيرات بإمكانك تفعيل وضع التطوير في ملف wp-config.php :

define ( 'WP_DEBUG' , true );

سابعاً : إستخدام دوال عتيقة !

مع التطويرات الحاصلة لسكربت الووردبريس فإنه من الطبيعي أن يتم تغيير سلوك بعض الدوال او تغيير أسمائها ، هناك العديد من القوالب و الإضافات التي تتجاهل هذه الملاحظات ، وهذا قد يؤدي إلى عد عمل الإضافة و القالب بالشكل غير المتوقع أو ما يعرف بحالة “غير متوافق مع الإصدار الجديد” ، لذا ارجوا الحرص على مراجعة قالبك أو إضافتك مع كل إصدار جديد للوردبريس .

ثامناً : تعديل صلاحيات الملفات

نصيحة أخرى بخصوص القوالب لا تجبر المستخدمين على وضع تصريح 777 لأي مجلد كان أو ملف ، و إن كان قالبك يتطلب مثل هذه الخطوات فإعرف أنك تمضي في الطيق الخاطئ :)

 


عموماً لدي إرتياح كبير من القوالب أعلاه ، لأن الثغرات فيها ليست خطيرة جداً وأحب أن أنوه أن الثغرات الموجودة أعلاه ليست نتيجة فحص دقيق للقالب و إن كان بالإمكان فأرجوا من الأخوة المطورين مراجعة قوالبهم بشكل أكثر دقة ، و للأخوة المبتدئين نرجوا إستخدام بعض الإضافات لفحص الأخطاء الموجودة في قوالبهم مثل إضافة Theme Check و غيرها ,

حاولت أن ابين أعلاه بعض الأخطاء المتعلقة بالآمان و إن شاء الله ستكون هناك موضوعات قادمة للتعرف عن أنواع أخرى من الأخطاء أو السلوكيات الغير صحيحة و المتبعة في العديد من القوالب العربية و الأجنبية .

في الآخير شكراً جزيلاً لكل الأشخاص الذين يعملون بكل جد و إخلاص لتقديم أعمال مجانية و مفتوحة المصدر للجميع ، و أشجع الجميع على الإستمرار في هذا المجال و أدعوا الله أن يوفق الجميع .

و أي إستفسار أو سؤال أنا مستعد بإذن الله .

ووردبريس : منع مجموعة من الأعضاء من النشر في قسم محدد

في كل مرة أرغب فيها بالعودة إلى التدوين ، أخبر نفسي بأن علي تجهيز موضوع ضخم عشان يكون عذر مناسب لفترة الغياب الطويلة ولكن يوم بعد يوم وكل مرة أقنع نفسي بهذا العذر ، ولكن هذه المرة لن أسمح لنفسي الكسولة بالتقاعس أكثر سأكتب أي موضوع يخطر في بالي فقط لفض الكسل عني و إفادة الجميع .

لن أطيل عليكم ، موضوع اليوم عبارة عن حيلة بسيطة جداً للووردبريس ولكنها مفيدة جداً خاصة لمواقع إدارة المحتوى التي تحتوي على العديد من الكتُاب ، وظيفة الكود أدناه منع غير المدراء من النشر في قسم معين والذي هو رقم 5 ( بإمكانك تغيير الرقم حسب حاجتك ) و طبعاً بإمكانك تعديل الكود لمنع عضو أو عدة أعضاء أو عدة رتب من النشر في عدة تصنيفات أو تصنيف محدد .

كل ماعليك فعله هو لصق الكود في ملف functions.php الخاص بالقالب :


add_action ( 'add_term_relationship' , 'ND_disallow_category_relationship', 1 , 2 );

function ND_disallow_category_relationship ( $post_ID, $term_taxonomy_id ) {

	if ( !in_array ( 'administrator' , wp_get_current_user()->roles ) && $term_taxonomy_id == 5 )
		wp_die ( __ ( 'لا يسمح لغير المدراء بنشر أي موضوع في هذا القسم .' ) );
		
} // end-function

ووردبريس 3.2 ، ما الجديد فيها ؟

إصدار آخر قادم من سكربت الووردبريس الشهير للتدوين و إدارة المحتوى ، سأشرح في هذا الموضوع عن النسخة 3.2 من ميزات و تغييرات وكل ماينبغي أن تعرف عنها ، فمنذ الإصدار الثالث للووردبريس وهي تخطو خطوات متسارعة في سباق سكربتات إدارة المحتوى ، فما يمييز هذه النسخة أنها ستكون أسرع و أخف و أفضل في الأداء عن النسخ السابقة .

مظهر جديد للوحة التحكم

لعل أهم ما يشد إنتباهك في هذه النسخة هو تغيير واجهة لوحة تحكم الووردبريس التي طالما إعتدنا عليها منذ فترة طويلة ، الهدف من هذا التجديد هو جعل لوحة التحكم أكثر بساطة وأناقة و صفاءاً .

ملاحظة : تعذر إلتقاط الصور للنسخة العربية بسبب عدم إكتمال الترجمة في وقت كتابة هذا الموضوع .

التدوين بـ حرية و سهولة أكبر

هذه الخطوة تم بالفعل البدء بها منذ الإصدار 3.1 حيث عملت النسخة السابقة على إخفاء الصناديق غير الضرورية عند عملية التدوين مثل “الإسم اللطيف” و “إرسال التعقيبات” … الخ ، ولكن ما أضافات إليه النسخة 3.2 هو تطوير وضع ملئ الشاشة ، حيث أصبح بالإمكان تنسيق المواضيع عبر وضع الشاشة الكاملة و التركيز فقط على التدوين من دون الحاجة إلى الإنشغال بكل الأدوات الأخرى الموجودة في صفحة التدوين .

قالب إفتراضي جديد “Twenty Eleven”

هذا القالب أتى تطويراً لقالب “Twenty Ten” الذي أصدر و أعتمد كقالب إفتراضي للووردبريس منذ النسخة 3.0 ، الهدف من قالب Twenty Eleven هو تجديد المظهر الإفتراضي للوردبريس المبني أساساً على قالب Kubrick الذي إعتمدت عليه الووردبريس لفترة طويلة طويلة الأمد ، أكثر ما لفت نظري في هذا القالب هو أضافة صفحة خاصة للتحكم بإعدادت القالب مثل تغييز نوع التخطيط و نظام الألوان ، وأيضاً إضافة المزيد من “نماذج الصفحات” و إستخدام وسوم الـ HTML5 الجديدة ، ولعل الميزة الأكثر روعة في هذا القالب هو إمكانية تغيير صورة الترويسة لكل صفحة بطريقة عشوائية ، كما يمكنك الإطلاع على مثال مباشر للقالب من هنا .

متطلبات الـ PHP و MySQL الجديدة

الووردبريس 3.2 تتطلب دعم الـ PHP 5.2 و MySQL 5 كحد أدنى ، لذا عليك التأكد من توافق سيرفر موقعك مع هذه المتطلبات قبل البدء في التحديث تستطيع إستخدام إضافة WordPress Requirements Check حيث ستخبرك هذه الإضافة إذا كنت مستعداً حقاً للتحديث إلى النسخة 3.2 .

تطوير نظام “التحديث”

ما أعنيه بأن التحديث التلقائي سيقوم فقط بتحديث الملفات التي طرأ التعديل عليها فقط ، حيث ستصبح التطويرات و التحديثات بدءاً من هذه النسخة أكثر سرعة و أقل حجماً .

تحسين السرعة و الأداء

حالياً الووردبريس تتضمن العديد من التقنيات القديمة في ملفاتها مما يجعل من عملية تحميل الموقع بطيئة بعض الشئ ، ولكن ستتم إزالة هذه التقنيات و تحسين السرعة بشكل ملحوظ في النسخة 3.2 .

توقف دعم إنترنت إكسبلور 6

جاء في بيان الوردبريس أن متصفح IE6 – البالغ من العمر عشر سنوات الأن – أصبح يحتاج اكواد خاصة و معقدة ليعرض تحديثات لوحة التحكم الرئيسية للمدونة ، مما دفع مطوري الوردبريس الى التوقف عن دعمه ، للأبد .

فمع توقف هذا الدعم ، و لو تصفحت لوحة تحكم مدونتك ستجد تحذير بخلفية حمراء يفيد أنك تستخدم متصفح قديم توقف دعمه بالفعل ، يمكنك مشاهدة المثال في الصورة أعلاه .

وتقول إحصائيات مايكرو سوفت أن حصة IE6 من سوق متصفحها ، تبلغ 11.4 % في ابريل الماضي ، بنسبة هبوط 7.3% عن العدد في ابريل 2010 .

الطريف أن فريق تطوير مدونة مايكروسوفت قد وجه التحية لموقع وردبريس على هذه الخطوة من التوقف عن دعم IE6 ، وتمنّى أن تحذو باقي المواقع حذو الوردبريس في مساعدة مايكروسوفت في محاصرة IE6 وإنحساره للأبد .

إستخدام jQuery 1.6.1

الإصدار الجديد من مكتبة الجي كويري يتسم بسرعة أكبر و أداء أفضل ، ولكن أيضاً طرأ تعديلات مهمة في طريقة إستخدام المكتبة ، أهم هذه التغييرات هي :

– المحددات التي تستعمل[property=value] تتطلب الآن علامات إقتباس ، مثال :

$('input[name="submit"]')

– كل خصائص ‘checked‘ و ‘disabled‘ يجب أن تستعمل الدالة الجديدة prop() بدلاً من attr() . ولكن في أغلب الحالات دالة attr() ستعمل جيداً كما في المثال أدناه :

.attr('checked', '')

للإطلاع على مزيد من التفاصيل حول مكتبة الجي كويري 1.6.1 بإمكانك الإطلاع على هذا الموضوع .

و بإستطاعتكم أيضاً الإطلاع على أهم المميزات من خلال مقطع الفيديو أدناه :

كانت هذه أهم التغييرات التي أجريب على النسخة الجديدة من الووردبريس تستطيع الإطلاع على كل التفاصيل من هنا ، و في الخاتمة أرجوا أن يكون الموضوع لا قى إستحسانكم و لاتنسوا مشاركتنا بآرائكم عبر التعليق على الموضوع .

jQuery : إضافة تأثير التلاشي عند تمرير المؤشر

إضافة نوع من التفاعل و الحركات الجمالية يضفي مزيداً من التألف و الإبداع إلى موقعك ، من أشهر هذه التأثيرات هي تأثير التلاشي Fade ، في هذا الدرس سنستخدم صورة سوداء وصورة ملونة فكرة الدرس هي تحويل الصورة السوداء إلى صورة ملونة عند تمرير الماوس فوقها بحركة جميلة . الدرس يهدف إلى التعريف بدالة animate في مكتبة jQuery وبالطبع هناك إستخدامات كثيرة لهذه الدالة ولكن في هذا الدرس سأتطرق إلى مثال بسيط أتمنى أن يعجبكم .

قبل أن أبدء عليكم تحميل الصور التي سنقوم بتطبيق الدرس عليها إنها صورة ملتقطة أثناء ثورة مصر .

 

الخطوة الأولى : إستدعاء مكتبة الـ jQuery

تستطيع تحميل هذه المكتبة من خلال الموقع الرسمي لها jquery.com إذا لم تكن موجودة معك ، بعد تحميل الملف سنقوم بتضمينه بين وسمي الـ head في الملف .

<script src="js/jquery.js" type="text/javascript"/>

ز الآن إلى إستخدام دالة animate

<script type='text/javascript'>
 jQuery("document").ready(function(){
 jQuery("img.a").hover(
 function() {
 jQuery(this).stop().animate({"opacity": "0"}, "slow");
 },
 function() {
 jQuery(this).stop().animate({"opacity": "1"}, "slow");
 });
 });
 </script>

وكما تلاحظ إستخدمنا الدالة مع خاصية opacity في الـ CSS ويجدر القول بأن هذه الخاصية فقط تعمل على المتصفحات الحديثة ، بإستطاعتك إستخدام الدالة بشكل مختلف و بخواص أخرى ولكن دعنا نكمل درسنا .

الخطوة الثانية : إضافة خواص الـ CSS

كل ما سنقوم بعمله في هذه الخطوة هي التأكد من أن الصورتان في موضع واحد أي أن الصورة a فوق الصورة b تماماً .

<style type="text/css">
 div.fade-hover { position: relative; margin: 50px 140px 0px 140px; }
 img.a {    position: absolute;    right: 0; top: 0; z-index: 10; }
 img.b {    position: absolute;    right: 0; top: 0; }
</style>

الخطوة الثالثة : إضافة كود جسم الصفحة

الآن إلى الخطوة الاخيرة إضافة محتوى وسم الـ Body

<div class='fade-hover'>
 <img src="img/quran-gray.jpg" alt="" class='a' />
 <img src="img/quran.jpg" alt="" class='b' />
 </div>

النتيجة النهائية

أتمنى أن تكون النتيجة قد لاقت إعجابكم ، و لاتنسوا مشاركتنا بآرائكم و إستفسارتكم حول الدرس .

ووردبريس : إستخدام مجلد (mu-plugins) في تضمين الإضافات

القليل من المستخدمين للووردبريس فقط يعلمون عن مجلد mu-plugins، ربما لأن الووردبريس لا تأتي مرفقة مع هذا المجلد في العادة ، لذا هو أشبه بالمجلد الخفي ، قد يضن البعض أن هذا المجلد خاص لمستخدمي الووردبريس متعددة المستخدمين ولكن هذا المجلد يعمل على الووردبريس العادية ايضاً .

/wp-content
	/mu-plugins
		/my-custom-plugin.php

حرفي mu تعني “Must Use” ، وهذا ما يعني ان الإضافات التي في هذا المجلد تقوم بتشغيل نفسها تلقائياً على كل المواقع ، إن كان مجلد mu-plugins غير متوفر عندك فما عليك إلا إنشاءه فقط ادخل على مجلد wp-content في داخل مسار الووردبريس ثم أنشئ مجلد جديد بإسم mu-plugins وقم بإضافة أي إضافة للمجلد .

كما تشاهد في الصورة أعلاه ، لا توجد هناك روابط لتفعيل أو تعطيل أو حذف الإضافة ، فالطريقة الوحيدة لتعطيل هذه الإضافات هي عبر حذفها عبر الـ FTP أو أي طريقة تستخدمها في حذف وإضافة الملفات إلى موقعك .

ما فائدة هذا المجلد ، وبماذا يمكن إستخدامه ؟
الإجابة عن هذا السؤال قد تختلف على حسب الإحتياجات فمثلاً يمكنك إستخدامه عندما تريد تضمين بعض الاكواد الهامة ( أكواد مختصرة ، دوال أساسية … الخ ) و لا تريد أن يتأثر وجودها بتغيير القالب أو تفعيل الإضافات من قبلك أو من العميل .

في النهاية اتمنى يكون الموضوع أعجبكم ، تقبلوا تحياتي .