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

Hassan Hedr

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

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

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

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

    38

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

  1. إجابة Hassan Hedr سؤال في ما أهمية التابع الباني constructor في جافاسكريبت، وبماذا يختلف عن التوابع الأخرى؟ كانت الإجابة المقبولة   
    الصنف أو Class يمكن اعتباره المخطط الذي يستخدم لتوليد الكائنات Objects، يحوي الصنف تعريفًا بالتوابع والخصائص التي ستتوفر ضمن كائنات هذا الصنف، يوجد تابع خاص افتراضي يسمى التابع الباني Contractor، مهمته الأساسية تحديد كيفية بناء الكائنات من الصنف، مثال الصنف التالي:
    class Person { } باستخدام الكلمة new يمكن استدعاء التابع الباني عبر ذكر اسم الصنف ثم قوسي استدعاء التابع الباني :
    const emad = new Person(); يمكن تخصيص التابع الباني ضمن الصنف وتحديد المعاملات اللازمة لإنشاء كائن جديد وتعيين تلك المعاملات إلى خصائص ضمن الصنف: 
    class Person { constructor(name, age) { this.name = name; this.age = age; } } الآن يجب تمرير تلك المعاملات عند إنشاء كائن جديد:
    const emad = new Person("Emad", 27); console.log(emad.name); // "Emad" console.log(emad.age); // 27 يمكنك الاستفادة من قراءة المقالات التالية:
     
  2. إجابة Hassan Hedr سؤال في هل يمكن الحصول على دورة تطوير واجهة المستخدم بمبلغ الحسم السابق كانت الإجابة المقبولة   
    إذا كنت تقصد الحسم على الدورات الذي كان منذ مدّة فقد انتهى حاليًا، حاول التواصل مع مركز المساعدة واشرح لهم مشكلتك سيحاولون المساعدة في حال إمكانية ذلك،
    بالتوفيق لك
  3. إجابة Hassan Hedr سؤال في ما الفرق بين document.img وبين document.imges في جافاسكريبت كانت الإجابة المقبولة   
    الشيفرة التالية خاطئة حيث لا يوجد خاصية بالاسم img ضمن المتغير document الذي يمثل مستند الصفحة الحالية:
    document.img; // غير صحيح أما الخاصية images فهي موجودة ضمن document وتمثل مجموعة الوسوم img الموجودة ضمن الصفحة الحالية، أي يمكنك باستخدامها الوصول إلى كافة الصور المعرّفة ضمن الصفحة :
    document.imges; // [img, img, ...] جميع وسوم الصور ضمن الصفحة  
  4. إجابة Hassan Hedr سؤال في ما الفرق بين Object.create و Object.assign في جافاسكريبت؟ كانت الإجابة المقبولة   
    كلاهما يستخدم لنسخ البيانات، وكما تدل أسماء تلك التوابع:
    التابع create سيُنشئ كائنًا جديدًا يمتلك نفس prototype الكائن الممرر له. التابع assign سيُعيِّن الخصائص الممررة له كمعامل ثاني إلى الكائن الممرر كمعامل أول.  الاختلاف بين إنشاء كائن جديد، وبين نسخ خصائص إلى كائن موجود فعلًا، يتوضح عند اختبار تساوي مرجعية الكائنات باستخدام معامل المساواة ===،
    مثال باستخدام create:
    var person = { name: 'بلال' }; var person2 = Object.create(person, {age: {value: 27}}); console.log(person === person2) //false مثال باستخدام assign:
    var person = { name: 'بلال' }; var person2 = Object.assign(person, {age: {value: 27}}); console.log(person === person2) //true يمكنك الاستفادة من قراءة المقالات التالية:
     
  5. إجابة Hassan Hedr سؤال في كيف اتحقق من إذا كانت الشاشة تعمل باللمس أم لا بواسطة الجافا سكريبت كانت الإجابة المقبولة   
    يمكنك الاستعلام عن الوسط الحالي الذي يعرض الصفحة (الشاشة الحالية) من خلال التابع matchMedia والتحقق فيما إذا كانت الشاشة تدعم أي مؤشر بما فيها ميزة اللمس كالتالي:
    const supportsTouch = window.matchMedia("(pointer: coarse)").matches; if(supportsTouch){ // الشاشة تدعم اللمس //.. }  
  6. إجابة Hassan Hedr سؤال في أين أجد علامة or في جافاسكريبت ضمن لوحة المفاتيح كانت الإجابة المقبولة   
    بحسب شكل وتوزيع لوحة المفاتيح ستجد المحرف "|" في مكان ما بجانب زر Enter، يجب ضغط زر Shift حتى تتمكن من كتابة المحرف،
    في حال كنت تستخدم حاسب شخصي عادي سيكون مكان المفتاح مشابه للتالي:

    في حال كنت تستخدم حاسوب ماك سيكون مشابه للتالي:

  7. إجابة Hassan Hedr سؤال في كيفية تنزيل مكتبة tkinter؟ كانت الإجابة المقبولة   
    أولًا تأكد أن pip مثبت ضمن جهازك بشكل صحيح، بتنفيذ الأمر التالي يجب أن تظهر لك رقم الإصدار المثبت
    pip -V بعدها يمكنك تنفيذ أمر التثبيت التالي 
    pip install tk سيتم تحميل وتثبيت المكتبة لديك، يمكنك الاستفادة من قراءة المقالات التالية لفهم طريقة عمل الوحدات Modules الخارجية والمضمنة وكيفية استيرادها
     
  8. إجابة Hassan Hedr سؤال في التغيير على قيمة pivot كانت الإجابة المقبولة   
    لاحظ أن العلاقة servicesProccess محصورة فقط بالسجلات ذات الحقل state بالقيم 1 أو 2 أو 3، فعملية التحديث التالية تتم بشكل صحيح لكن لا يوجد سجلات مطابقة لشرط تلك العلاقة لديك لذا أنت لا تلاحظ التحديث
    $user->servicesProccess()->updateExistingPivot($service->id , ['state' => 1]); ^^^^^^^^^^^^^^^^ بحسب متطلبات مشروعك إما أن تضيف الحالة 0 إلى قائمة الحالات للعلاقة السابقة كالتالي:
    public function servicesProccess(){ return $this->belongsToMany(Service::class)->withPivot('state', 'id')->wherePivotIn('state' , [0,1,2,3]); } ^ أو تقوم بتحديث state ضمن قاعدة البيانات يدويًا في حال كانت الحالة 0 خاطئة إلى أحد الحالات المسموحة (1 أو 2 أو 3)، أو تعدل عملية إدخال تلك السجلات حتى لا يتكرر الخطأ مستقبلًا
  9. إجابة Hassan Hedr سؤال في معالجة مشكلة الارتفاع height في css3 كانت الإجابة المقبولة   
    السبب لديك هو وجود قيمة كبيرة للحاشية العلوية margin-top للصنف section-1-img، حيث أن الحاوية الخلفية التي تملئ الشاشة يمكن أن تصبح أصغر من الحاشية المحددة مما يسبب مشكلة ظهور الخلفية البيضاء، يمكنك حل المشكلة إما بتحديد قيمة أصغر للحاشية مثلًا كالتالي:
    .section-1-img { ... margin-top: 40px; } أو بإخفاء العناصر التي تخرج عن مساحة الحاوية section-1 وذلك بإضافة الخاصية overflow كالتالي
    .section-1 { ... overflow: hidden; }  
  10. إجابة Hassan Hedr سؤال في احتاج برنامج لالتقاط صور للشيفرات بتنسيق معين كانت الإجابة المقبولة   
    ضمن محرر الشيفرات VSCode يمكنك البحث عن إضافة CodeSnap  وتثبيتها،
    ستمكنك من إخراج صور بنفس التنسيق لأجزاء من الشيفرة ضمن المحرر لديك كالتالي:
    فتح لوحة الأوامر عبر الضغط على Ctrl + Shift + P البحث عن CodeSnap تحديد الجزء من الشيفرة المراد تصويره والضغط على زر غالق الكاميرا ضمن نافذة المعاينة
  11. إجابة Hassan Hedr سؤال في ما اللغة التي أبدأ فيها وتعلم التفكير المنطقي وحل المشكلات الى حد ما؟ كانت الإجابة المقبولة   
    في حال كان هدفك تعلم التفكير المنطقي يفضل البدء بلغة برمجة عالية المستوى أعلى من C و ++C، مثل لغة Python أو JavaScript فلا تركز فيها على المفاهيم منخفضة المستوى كإدارة الذاكرة بل التركيز على تطبيق المفاهيم البرمجية
    يوجد العديد منها يمكنك البحث عنها، دورات الأكاديمية هنا تركز على هذا الجانب بالذات وهو التطبيق العملي وفهم الأفكار الأساسية
    لا يهم العدد، ستشعر بعد تنفيذك لعدة مشاريع بازدياد مهارتك وفهمك وتطور مستواك مع الوقت بحسب تنوع تلك المشاريع والمشاكل المطروحة ضمنها
    نعم لن تحتاج لمهارة التصميم في عدة مجالات برمجية منها مثلًا تطوير النظم الخلفية Back-end فهنا لا علاقة لك أبدًا سوا ببرمجة تطبيقات ستعمل على الخادم فقط، ويمكنك أحيانًا توكيل جزئية التصميم لمصمم مختص سيرسل لك التصميم جاهزًا وأنت كمبرمج يمكنك تضمينه ضمن الشيفرة دون الحاجة للاهتمام بتفاصيل التصميم نفسه
     
    يمكنك الاستفادة بشكل كبير من المقال التالي:
     
  12. إجابة Hassan Hedr سؤال في لماذا عند اشتراكي بدورة بايثون أجد باقي المسارات متاحة؟ كانت الإجابة المقبولة   
    عند اشتراكك بأي من الدورات المتوفرة ضمن الأكاديمية فإنك تحصل على دروس كل المسارات لتلك الدورة مدى الحياة، إضافة لحصولك على أول مسار فقط من كل الدورات الباقية، وذلك في حال أحببت الاطلاع عليها والتسجيل بإحداها
    للتخرج من الدورة لست مطالبًا سوى بمسارات الدورة الخاصة بك، المسارات المفتوحة الإضافية هي للاطلاع فقط، في حال كان لديك مشكلة أو استفسار يمكنك البحث والقراءة ضمن قاعدة المعرفة للحصول على معلومات عامة عن الدورات
  13. إجابة Hassan Hedr سؤال في متى أتعلم Unit Testing في مجال تطوير تطبيقات الويب باستخدام جافاسكريبت كانت الإجابة المقبولة   
    في حال كنت مبتدئًا في تطوير تطبيقات الويب يفضل التركيز على تطوير التطبيقات أولًا، بعد تمكنك من ذلك يمكنك أن تتعلم عن الاختبارات وكيفية بناءها وتنفيذها وحتى البدء بها لبناء التطبيقات، الاختبارات مفيدة في حال كان المشروع كبير نسبيًا أو مخطط أن يستمر لفترة طويلة أو في حال كنت تعمل ضمن فريق
    يمكنك الاستفادة من قراءة المقالات التالية لتتعرف على كيفية اختبار تطبيقاتك باستخدام Jest ومعلومات عامة عن اختبارات الوحدة Unit Tests
     
  14. إجابة Hassan Hedr سؤال في أواجه مشكلة في الاتصال مع قاعدة بيانات MYSQL في PHP كانت الإجابة المقبولة   
    يجب التحقق من إنشاء الاتصال بنجاح مع قاعدة البيانات بعد استدعاء التابع mysqli_connect، قد يحدث عدة مشاكل تسبب فشل الاتصال كأن تكون قاعدة البيانات لا تعمل بالأساس تأكد من ذلك أولًا، ثم أضف الشيفرة التالية والاستفادة من التابع mysqli_connect_errno بعد استدعاء التابع mysqli_connect لمعرفة ما إذا تم الاتصال بنجاح وطباعة رسالة توضح السبب والخروج من البرنامج في حال ذلك:
    // انشاء الاتصال @$conn = mysqli_connect($host,$username,$pass,$dbname); // التحقق من صحة الاتصال if (mysqli_connect_errno()) { echo "فشل الاتصال بقاعدة بيانات MySQL: " . mysqli_connect_error(); exit(); // الخروج من البرنامج مباشرةً }  
  15. إجابة Hassan Hedr سؤال في كيفية البحث في مصفوفة متعددة الأبعاد في PHP؟ كانت الإجابة المقبولة   
    في حال كانت المصفوفة ببعدين كالمصفوفة السابقة، يمكنك الاستفادة من التابع array_column لتحديد العمود الذي تريد البحث ضمنه وبالتكامل مع التابع in_array تستطيع البحث ضمن المصفوفة، لنفرض أنك تريد البحث عن اسم المستخدم تكون عملية البحث كالتالي:
    $username_exists = in_array('Saif Al Deen', array_column($userdb, 'username')); وفي حاال كانت عملية البحث أعقد وتعتمد على عدة أعمدة معًا يمكنك المرور على عناصر المصفوفة واختبار قيمها كالتالي: 
    foreach($userdb as $user){ if($user['username'] === 'emad saif' && $user['email'] === 'emad@gmail.com'){ // المستخدم موجود } } يمكن تضمين العملية السابقة ضمن تابع لسهولة الاستخدام وجعل الشيفرة مقروءة بشكل أكبر كالتالي:
    function user_exists($users, $username, $email){ foreach($users as $user){ if($user['username'] === $username && $user['email'] === $email){ return true; } } return false; } // .. $exists = user_exists($userdb, 'emad saif', 'emad@gmail.com');  
  16. إجابة Hassan Hedr سؤال في كيفية تحديد عدد الروابط التي تظهر في ترقيم الصفحات pagination في لارافيل Laravel؟ كانت الإجابة المقبولة   
    يمكن ذلك بالاستفادة من التابع onEachside الذي يحدد عدد روابط الصفحات التي ستظهر على كل طرف من زر الصفحة الحالية، يمكن تمرير 5 كمعامل له وسيتم إظهار 5 روابط على كل طرف من رابط الصفحة الحالية:
    $query->paginate(15)->onEachSide(5); يمكنك الاستفادة أيضًا من قراءة المقال التالي:
     
  17. إجابة Hassan Hedr سؤال في كيفية التحقق من أكثر من خطأ بإستخدام try - catch في PHP؟ كانت الإجابة المقبولة   
    عمومًا يمكن تحديد نوع الخطأ المراد التقاطه باستخدام Type Hinting، يمكنك الاستفادة من ميزة Type Hinting بتحديد عدة أنواع محتملة للمتغير لتحديد أنواع الأخطاء التي تريد التقاطها، يتم ذلك بفصل تلك الأنواع بالمحرف "|"، يمكنك التقاط كلا الخطأين AError و BError كالتالي:
    try { // ... } catch( AError | BError $e ) { // ... }  
  18. إجابة Hassan Hedr سؤال في كيفية إستخدام رمز CSRF في طلبات ajax في لارافيل Laravel؟ كانت الإجابة المقبولة   
    يمكن ضمن ملفات Blade إدراج وسم يحوي رمز csrf ضمن head كالتالي:
    <meta name="csrf-token" content="{{ csrf_token() }}"> وضمن ملفات جافاسكريبت يمكن الاستعلام عن قيمته لإرفاقه ضمن طلب AJAX باستخدام JQuery كالتالي:
    const csrfToken = $('meta[name="csrf-token"]').attr('content');  
  19. إجابة Hassan Hedr سؤال في كيفية إستخدام jQuery في لارافيل Laravel بدون CDN؟ كانت الإجابة المقبولة   
    بما أنك تريد استخدام mix لتحزيم مكتبة JQuery إلى الملف app.js يجب أولا تثبيت المكتبة ضمن مشروعك عبر تنفيذ الأمر التالي:
    npm install -D jquery وضمن ملف webpack.mix.js يمكنك إضافة التالي وهو ما سيجعل jquery متاحًا ضمن ملفات جافاسكريبت للمشروع:
    mix.autoload({ jquery: ['$', 'window.jQuery'] });  
  20. إجابة Hassan Hedr سؤال في ما هي فائدة namespace بالضبط في PHP؟ كانت الإجابة المقبولة   
    قد تتشابه استخدامات use (أو Namespaces) و require ظاهريًا حيث تستخدم لجلب واستخدام شيفرات من وحدات برمجية أو ملفات php أخرى لكنها تختلف فعليًا كليًا عن بعضها
    requrie يفيد استخدامها في جلب محتويات ملف php كافة من متغيرات وأصناف إلى الملف الحالي، يصبح كأننا قمنا بنسخ ولصق محتويات ذلك الملف مكان استخدام require، ويجب ذكر المسار المطلق لملف الوحدة في كل مرة:   // module.php $number = 5; class Foo {} // index.php require('path/to/module.php'); new Foo() echo $number + 2; // 7 // يساوي $number = 5; class Foo {} new Foo() echo $number + 2;  
    use تستخدم لتعريف الأصناف فقط المستخدمة من الوحدات الأخرى في الملف الحالي، وهي تساوي إعادة تعريف الصنف في الملف الحالي، وميزة ذلك أننا لا نضطر لذكر المسار المطلق للوحدة في كل مرة نريد استخدامها بل نكتفي بذكر اسم النطاق مرة واحدة ضمن الملف في الأعلى وسيتولى composer بتوليد الربط الصحيح بين تلك الملفات: // module.php namespace Module; class Foo { } // index.php use Module\Foo; $foo1 = new Foo(); $foo2 = new Foo(); // يساوي class Foo { } $foo1 = new Foo(); $foo2 = new Foo();  
    يمكنك الاستفادة من قراءة المقالات التالية:
     
  21. إجابة Hassan Hedr سؤال في كيفية التأكد من أن نص ما عبارة عن عنوان بريد إلكتروني صحيح في PHP؟ كانت الإجابة المقبولة   
    أحيانا يكون التحقق من عناوين البريد الالكتروني (أو عناوين URL عمومًا) معقدة بعض الشيء باستخدام Regex لأنها تحوي على كثير من الصياغات الاختيارية، بدلًا من إعادة تصميم عبارة Regex يوجد تابع التصفية filter_var يمكن استخدامه للتحقق من صحة عنوان البريد الإلكتروني بتمرير العنوان كمعامل أول والثابت FILTER_VALIDATE_EMAIL كمعامل ثان كالتالي:
    $email = filter_var('example@email.com', FILTER_VALIDATE_EMAIL)) if(!$email) // عنوان بريد غير صحيح }   
  22. إجابة Hassan Hedr سؤال في هل من المهم تعلم مفاهيم مثل OOP و هياكل البيانات في مجال تطوير الواجهات الأمامية؟ كانت الإجابة المقبولة   
    قليلًا ما ستستخدم تلك المفاهيم ضمن تطوير الواجهات الأمامية لكن من المفيد تعلمها كمبرمج بشكل عام حتى دون التعمق بها، أما هياكل البيانات Data Structures من المهم تعلمها لأن تطوير الواجهات الأمامية يعتمد أحيانًا على تحويل بيانات سواء ضمن الصفحة أو قادمة من خادم بعيد من شكل لآخر خدمة للواجهة الأمامية وبحسب ما تتطلبه
    يجب التركيز في تعلم هياكل البيانات Data Structures، وباقي المفاهيم ليست ضرورة بل يفضل تعلمها، يمكنك الاستفادة من قراءة المقال التالي:
     
  23. إجابة Hassan Hedr سؤال في كيفية منع ثغرات XSS في PHP؟ كانت الإجابة المقبولة   
    في هذه الحالة يجب قبل عرض القيم تلك للمستخدمين التأكد من خلوها من أي نصوص برمجية قد تؤثر على متصفحات الزوار، يمكن الاستفادة من التابع htmlspecialchars لتطهير كافة المدخلات المخزنة التي مصدرها خارجي (المستخدمين) وتطهيرها كالتالي:
    <textarea> <?php echo htmlspecialchars($bio, ENT_QUOTES, 'UTF-8') ?> </textarea>  يمكنك الاستفادة من قراءة المقالات التالية:
     
  24. إجابة Hassan Hedr سؤال في كيفية إضافة مستخدم جديد في قاعدة البيانات عند رفع مشروع لارافيل Laravel على خادم Server؟ كانت الإجابة المقبولة   
    يمكن الاستفادة من Seeders لملئ قاعدة البيانات بالبيانات الأولية اللازمة لتشغيل المشروع كالمستخدم المسؤول الأول، يمكنك التعديل على ملف Seeder الافتراضي database/seeders/DatabaseSeeder.php وإضافة عملية إنشاء المستخدم المسؤول لقاعدة البيانات ضمن التابع run مع ملئ البيانات الضرورية مثل كلمة السر:
    class DatabaseSeeder extends Seeder { public function run() { DB::table('users')->insert([ 'name' => 'اسم المستخدم', 'email' => 'admin@company.com', 'password' => Hash::make('كلمة السر'), ]); } } لاحظ أننا استخدمنا Hash::make لكتابة كلمة السر الأولية للمستخدم يدويًا بحيث نتمكن من الدخول لحساب المستخدم باستخدام كلمة السر تلك
    بعد ذلك يمكنك ضمن الخادم تنفيذ الأمر التالي لتنفيذ عملية Seeding لقاعدة البيانات وملؤها بالبيانات الأولية:
    php artisan db:seed يمكنك الاستفادة من قراءة قسم "بذر قاعدة البيانات" ضمن المقال التالي:
     
     
  25. إجابة Hassan Hedr سؤال في تشغيل كود PHP في الخلفية؟ كانت الإجابة المقبولة   
    يمكنك إنشاء سكريبت مخصص لنقل ذلك المجلد وتنفيذه كإجرائية منفصلة ضمن الإجرائية الرئيسية لديك ليعمل ضمن الخلفية، التابع التالي يفيد في تنفيذ أوامر الصدفة بحسب نظام التشغيل (لينكس أو ويندوز)
    function backgroundProcess($cmd) { // ويندوز if (substr(php_uname(), 0, 7) == "Windows"){ pclose(popen("start /B ". $cmd, "r")); // لينكس } else { exec($cmd . " > /dev/null &"); } } ويمكن استخدامه لتنفيذ ملف PHP مع تمرير معاملات للملف كما لو أننا ننفذ الملف من سطر الأوامر بشكل اعتيادي كالتالي:
    backgroundProcess("php /path/to/copy_folder.php folder /path/to/destination")   
×
×
  • أضف...