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

Mustafa Suleiman

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

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

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

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

    365

كل منشورات العضو Mustafa Suleiman

  1. غير صحيح، تختلف لغات البرمجة في أسلوبها في التعبير عن الخوارزميات، لكن جميعها تستند إلى مجموعة أساسية من المفاهيم والعمليات. حيث تعتمد بعض لغات البرمجة، مثل Python و JavaScript، على أسلوب البرمجة الإجرائي، والذي يركز على وصف الخطوات التي يجب على الكمبيوتر اتخاذها لحل مشكلة، بينما تعتمد لغات أخرى، مثل Java و C++, على أسلوب البرمجة الموجه للكائنات، والذي يركز على إنشاء كائنات تحتوي على بيانات وسلوك. على الرغم من الاختلافات في أسلوب البرمجة، فإن جميع لغات البرمجة تستند إلى مجموعة أساسية من المفاهيم والعمليات، وتتضمن تلك المفاهيم العمليات الحسابية البسيطة، مثل الإضافة والطرح والضرب والقسمة، بالإضافة إلى العمليات الأكثر تعقيدًا، مثل التحكم في التدفق والتكرار. تعتمد الخوارزميات أيضًا على مجموعة أساسية من المفاهيم، تتضمن المفاهيم الرياضية، مثل المصفوفات والمجموعات، بالإضافة إلى المفاهيم المنطقية، مثل الشروط والعمليات المنطقية. على الرغم من الاختلافات في أسلوب البرمجة، فإن جميع لغات البرمجة تستند إلى مجموعة أساسية من المفاهيم والعمليات، وهو ما يسمح للبرمجة بإنشاء تطبيقات وبرامج مختلفة وأيضًا للمبرمجين من استيعاب مفهوم البرمجة بشكل عام عند تعلم لغة برمجة واحدة والتعمق بها، ويسهل عليهم الإنتقال للغة برمجة أخرى. وسأوضح لك الأمر بشكل مفصل أكثر ولفعل ذلك يجب التفرقة بين لغات البرمجة عالية المستوى (High-Level) ولغات البرمجة منخفضة المستوى (Low-Level) وكيفية تأثير هذه الاختلافات على تصميم وتنفيذ البرامج: هل اللغة C أو C++ هما لغتي برمجة منخفضة المستوى؟ تندرج لغتا البرمجة C وC++ تحت فئة اللغات ذات المستوى المتوسط، وتقدم لغات البرمجة منخفضة المستوى قليلًا أو لا تقدم أي تجريد abstraction لمفاهيم البرمجة، بينما توفر لغتا البرمجة C وC++ أقل درجات التجريد بما يتعلق بالأداء والكفاءة. وتلك التجريدات مثل الماكروهات ودوال lambda في بايثون والكلاسات أيضًا تساعد المبرمجين على استخدام وظائف معقدة في البرمجة دون الحاجة لكتابة كود أكثر تعقيدًا. لهذا السبب، تُعتبر لغات C وC++ لغات منخفضة المستوى حيث يكون الأداء هو الأهم؛ ومع ذلك، تظل التجريدات ضرورية للحفاظ على قابلية الصيانة وقراءة الشيفرة بشكل عالٍ. برمجة منخفضة المستوى في لغات ذات مستوى عالٍ في أواخر الستينات من القرن الماضي، قدمت لغات ذات مستوى عالٍ مثل (extended ALGOL) و"بي إل/إس" (PL/S) و"بي سي بي إل" (BCPL) و"بليس" (BLISS) وC بعض الوصول إلى وظائف البرمجة منخفضة المستوى. النهج الذي يتمثل في تضمين كود التجميع (Assembly) داخل لغة ذات مستوى عالٍ يعرف بـ "تجميع داخلي" (inline assembly). وبالإضافة إلى ذلك، تحتوي العديد من هذه اللغات على توجيهات محسنات متعلقة بالبنية التوجيهية للمعالج، والتي تسمح للمترجم بتخصيص استخدامه لهندسته المستهدفة للمعالج. وفي حقيقة الأمر لا يوجد لغات برمجة فعلياً منخفضة المستوى. حتى لغة التجميع (Assembly) البحتة هي في الواقع لغة ذات مستوى نسبياً مرتفع، حيث يتم تفسيرها إلى رمز الآلة الفعلي من قبل وحدة المعالجة المركزية (CPU)، وما يعتبر مستوى عالي قد تغير مع تطوير لغات برمجة ذات مستوى عالٍ للغاية مثل Haskell وPython." الفرق بين لغات عالية المستوى ولغات منخفضة المستوى الفارق الرئيسي بين لغات البرمجة عالية المستوى ومنخفضة المستوى هو أن الشيفرة عالية المستوى أسهل قراءةً وتفسيرًا وبناءًا من شيفرة الآلة، من ناحية أخرى، يمكن للآلات تفسير لغة منخفضة المستوى بسهولة أكبر مقارنة بالبشر. واللغات عالية المستوى توفر المزايا التالية: يتاح للمبرمجين التركيز على تصميم البرنامج والتفكير في الخوارزميات بدلاً من التفكير في التفاصيل المنخفضة مثل إدارة الذاكرة. تلك اللغات تقدم هياكل بيانات جاهزة ومكتبات تسهل العمل مع البيانات مثل قوائم مرتبطة ومصفوفات. يمكن كتابة كود مفهوم بسيط وقراءته بشكل سهل، مما يجعل التعاون وصيانة البرامج أكثر يسرًا. بينما اللغات ذات المستوى المتوسط والمنخفض توفر التالي: التحكم المباشر بمكونات العتاد واستخدام الموارد بكفاءة عالية. تحسين الأداء بسبب قربها من لغة الآلة، يمكن تحقيق أداء محسّن للبرامج المكتوبة بهذه اللغات. تحتاج لمستوى عمق في المعرفة التقنية للبرمجة باستخدام هذه اللغات، وقد تكون عملية تطوير البرمجيات أكثر تعقيدًا.
  2. أولاً، هناك أخطاء في كتابة الكود، مثل استخدام "Cout" بدلاً من "cout" واستخدام "Cin" بدلاً من "cin". الحروف الكبيرة والصغيرة تهم في لغة البرمجة C++. العمليات التي تقوم بقراءة من الإدخال القيمة يجب أن تكون باستخدام ">>" للـ "cin" واستخدام "<<" للـ "cout". وفي الشرط، يجب استخدام "&&" بدلاً من "& &" لفصل شروط الـ "if". أيضًا عند قراءة القيمة البولية (true أو false)، يجب استخدام ">>" بدلاً من "<<". بعد التعديل يصبح الكود كالتالي: #include <iostream> using namespace std; int main() { int Age; cout << "Please enter the age: "; cin >> Age; bool driveLicense; cout << "Please enter if you have a driving license (1 for true, 0 for false): "; cin >> driveLicense; if (Age >= 23 && driveLicense == true) { cout << "Hire"; } else { cout << "Reject"; } return 0; } وعند التشغيل أدخل العمر وقيمة الرخصة كما هو موضح في الكود، وسيقوم البرنامج بطباعة "Hire" إذا تحققت الشروط المطلوبة، وإلا سيقوم بطباعة "Reject".
  3. المصادر كثيرة لكن المصادر الجيدة قليلة، وهناك طريقان إما من خلال دورات مدفوعة أو دورة مجانية على يوتيوب وبإمكانك البحث على يوتيوب عن "كورس بايثون أو دورة بايثون" وستجد دورات عليك بالإختيار من بينها تبعًا لشرح المدرب المناسب لك، لكن لا تنجرف وراء الفيديوهات التي تجد عنوانها تعلم بايثون في 60 دقيقة! وبعد تعلم الأساسيات والبحث عن مشاريع للتطبيق عليها مناسبة للمبتدئين عليك بتعلم إطار Flask وDjango ثم تعلم SQL وهي لغة قواعد البيانات ثم عليك بتعلم أحد أنظمة إدارة قواعد البيانات مثل Postgres وMySQL. الفكرة هو أنه سيتعين عليك البحث عن المصادر وإتباع Roadmap. ويوجد مقالات ودروس في أكاديمية حسوب وموسوعة حسوب كمراجع لبايثون: https://wiki.hsoub.com/Python بالإضافة إلى كتابة لتعلم بايثون من أكاديمية حسوب: ويوجد أيضًا دورة بايثون في أكاديمية حسوب: والتي ستتعلم بها التالي: الأسس البرمجية السليمة عبر لغة Python التعامل مع مختلف صيغ الملفات مثل إكسل Excel وورد Word وخدمات المستندات السحابية استخراج البيانات من صفحات الويب Web Scraping وتحليلها أساسيات التعامل مع قواعد البيانات عبر بايثون، والتعامل مع البريد الإلكتروني لإرسال الرسائل أساسيات إطار العمل جانغو Django بناء تطبيق إدارة المهام باستخدام إطار العمل جانغو Django تطوير متجر إلكتروني متكامل باستخدام إطار العمل جانغو Django وربطه مع وسائل الدفع باي بال PayPal وسترايب Stripe أساسيات إطار العمل فلاسك Flask، وبناء مدونة بسيطة تطوير واجهة برمجية API اعتمادًا على نمط RESTful لمعالجة الصور
  4. الكلمة str في بايثون هي إختصار لـ "string" وهي تستخدم لتحويل قيمة إلى نص (سلسلة من الأحرف)، ونستخدم str لتحويل قيمة رقمية إلى نص قبل طباعتها. أي نستخدم str(number) لتحويل الرقم الذي تم إدخاله باستخدام دالة input إلى نص، بحيث يمكن دمجه مع نصوص أخرى دون أي مشاكل. الهدف هو طباعة جداول ضرب للعدد الذي تم إدخاله، وضرب هذا العدد في الأعداد من 0 إلى 3 وطباعة النتائج. فإذا أدخلت الرقم 5، سيكون الإخراج مشابهًا للتالي: Enter a number: 5 5 * 0 = 0 5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 وبالتالي، str هنا يساعد في تحويل الأرقام إلى نصوص لكي تكون جزءًا من الجمل المطبوعة. وهناك طرق أخرى لتحقيق نفس الغرض دون استخدام الدالة str، فبإمكانك استخدام تنسيق النصوص باستخدام عبارات التنسيق (f-strings) أو استخدام دالة format لتحقيق ذلك. وإليك مثالان باستخدام الـ f-strings ودالة format: استخدام f-strings: number = int(input('Enter a number: ')) print(f'{number} * 0 = {number * 0}') print(f'{number} * 1 = {number * 1}') print(f'{number} * 2 = {number * 2}') print(f'{number} * 3 = {number * 3}') استخدام دالة format: number = int(input('Enter a number: ')) print('{} * 0 = {}'.format(number, number * 0)) print('{} * 1 = {}'.format(number, number * 1)) print('{} * 2 = {}'.format(number, number * 2)) print('{} * 3 = {}'.format(number, number * 3)) كلا الأسلوبين يقومان بنفس العمل الذي قمت به في الكود لديك باستخدام الـ str، ولكن باستخدام تنسيق النصوص لتضمين الأرقام المحسوبة في النص المطبوع مباشرةً دون الحاجة لاستخدام str بشكل منفصل.
  5. قسم الأمن السيبراني ليس قسم خاص، لكن يتبع نظام الساعات المعتمدة لمدة 35.5 ساعة تقريبًا. حيث كانت تكلفة الساعة في العام الماضي 1170 جنيه، مما يؤدي إلى تكلفة تقريبية تصل إلى 41,600 ألف جنيه في السنة. وبخصوص المصاريف عليك بالتوجه إلى مقر الجامعة والسؤال حيث أنها قد تتغير من سنة إلى أخرى، ونظام الساعات المعتمدة بحاجة إلى فيديو ليتضح الأمر لك، لذلك أنصحك بالبحث عن شرح نظام الساعات المعتمدة على اليوتيوب.
  6. عليك باستخدام المكتبات اللازمة لإنشاء ذلك الجزء من المشروع، كالتالي: React Router المكتبة تساعدك على إنشاء نظام توجيه داخل تطبيقك، وبالتالي يمكنك استخدامها لإنشاء صفحات مختلفة للأقسام والدروس والفيديوهات في الكورسات. React Dropzon إن كنت ترغب في السماح للمعلمين بتحميل ملفات مثل ملفات PDF أو ملفات فيديو، تستطيع استخدام المكتبة لإنشاء واجهة لتحميل الملفات. React Video Player في حال تريد تضمين مشغل فيديو في تطبيقك لعرض محتوى الدورات، يمكنك استخدام مكتبات مثل "react-player" لتحقيق ذلك. React Rich Text Editor مفيدة للسماح للمعلمين بإضافة محتوى نصي غني (مثل النصوص المنسقة والصور)، ويمكنك استخدام مكتبات مثل "react-quill" أو "draft-js". React State Management (Redux or MobX) لإدارة الحالة العامة للتطبيق والتحكم في البيانات المرتبطة بالكورسات والأقسام والفيديوهات، ووبإمكانك استخدام مكتبات إدارة الحالة مثل Redux أو MobX. React UI Libraries (Ant Design, Material-UI) تلك المكتبات توفر مجموعة واسعة من المكونات والتصاميم الجاهزة التي يمكنك استخدامها لبناء واجهة المستخدم لتطبيقك.
  7. من الأفضل طرح الأسئلة الخاصة بالدورة أسفل الفيديو الخاص بها لمساعدتك بشكل أفضل، وطرح الأسئلة العامة هنا في قسم أسئلة البرمجة. وبخصوص سؤالك، ربما لم يتم ربط ملف التنسيقات في صفحة page.html تأكد من ذلك وعليك بالحفظ بالضغط على CTRL + S لحفظ التعديلات، ثم إعادة تحديث الصفحة لرؤية ما تم تغييره. والأفضل هو تثبيت إضافة Live server من أجل إنشاء سيرفر ورؤية التحديثات بشكل مباشر دون الحاجة إلى إعادة تحديث الصفحة: https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer وبعد التثبيت ستجد زر باسم Go Live بالأسفل اضغط عليه وسيتم فتح المشروع وإن ظهر لك ملفات المشروع اختر صفحة HTML التي تريد تشغيلها.
  8. الكود هو التالي: videoView.setVideoPath(R.raw.video); videoView.start(); حيث videoView هو عنصر VideoView الذي تريدين تشغيل الفيديو فيه، و R.raw.video هو اسم الملف الذي يحتوي على الفيديو. وإذا كنت تريدين تشغيل الفيديو عند تحميل النشاط ، استخدمي الكود التالي: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Get the video view VideoView videoView = findViewById(R.id.videoView); // Set the video path videoView.setVideoPath(R.raw.video); // Start the video videoView.start(); } باستطاعتك أيضًا استخدام setOnPreparedListener() لتشغيل الفيديو عند استعداده للتشغيل، كالتالي: videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { // Start the video mp.start(); } });
  9. أنت تتحامل على نفسك أكثر من اللازم، من الجيد أن تريد تعلم مجال تطوير الواجهات الأمامية ودخول مجال البرمجة، لكن عليك بتفهم المرحلة التي أنت بها حاليًا، وهي مرحلة التعلم هل يعقل أن يتم وصف شخص يتعلم قيادة السيارات في الحصة السادسة على أنه فاشل؟ بالطبع لا، لا تنزعج طالما أنك تحاول تتعلم أشياء جديدة وضع أكثر من خط أسفل جديدة، فالبعض ينتابه القلق والإحباط عندما يرى أشياء لم يتعرض لها من قبل في شرح على اليوتيوب، ما الفائدة إذن إن لم تتعلم أشياء جديدة والتطبيق على ما تعلمته بالفعل في نفس الوقت؟ لكن ذلك لا يعني أن تبحث عن مشاريع متقدمة أو تحتاج إلى مستوى متوسط، بل عليك بالتدرج في مستوى المشاريع لكي لا تصاب بالإحباط بدون داعي. وإذا شاهدت شرح متقدم فشاهده بغرض التعلم ثم محاولة التطبيق بمفردك، لا لغرض التطبيق على ما تعلمته، أي اعتبره درس جديد في الدورة. وهناك نقطة هامة ستريحك، لا تقارن نفسك بمن لهم خبرة سنوات في مجال البرمجة فذلك عناء شهور وسنوات قد حصدوه، وعليك بذل نفس المجهود للوصول إلى نفس النقطة وتلك هي سنة الحياة عليك البذل والتضحية لتحصل على شيء ذو قيمة. عندما تواجه مشكلة عليك بالتفكير أولاً ومحاولة استخدام ما تعلمته لحل المشكلة، ثم عليك البحث عن كيفية حل المشكلة من خلال HTML, CSS سواء على جوجل أو يوتيوب، ثم تستطيع السؤال لمساعدتك.
  10. ستحتاج إلى الإعتماد على عناصر HTML ثم كتابة كود برمجي من خلال جافاسكريبت لتوفير المكافأة التي تريدها مثل كود خصم أو ما شابه أو حسب ما تريد أو نقاط تضاف للمستخدم في حسابه مثلاً ولكن ذلك يشترط كتابة كود في الواجهة الخلفية. والمثال التالي خاص بالواجهة الأمامية فقط: <!DOCTYPE html> <html lang="ar"> <head> <meta charset="UTF-8"> <title>Reward Box</title> </head> <body> <div class="banner-ad"> <img src="banner.png" alt="Banner Ad"> </div> <script> // هذه الدالة تُنشئ مربع مكافأة جديدًا عند النقر على إعلان البانر. function showRewardBox() { // ننشئ كائن مربع مكافأة جديدًا. const rewardBox = document.createElement('div'); // نُعين اسم فئة مربع المكافأة. rewardBox.className = 'reward-box'; // نضيف بعض النص إلى مربع المكافأة. rewardBox.innerHTML = 'تهانينا! لقد ربحت مكافأة.'; // نضيف مربع المكافأة إلى الصفحة. document.body.appendChild(rewardBox); } // نضيف مستمعًا للحدث إلى إعلان البانر. document.querySelector('.banner-ad').addEventListener('click', showRewardBox); </script> </body> </html>
  11. عليك باستيعاب أمرًا هام، وهو أنّ React.js هي مكتبة خاصة بتطوير الواجهات الأمامية الديناميكية لمواقع الويب، بينما node.js هي بيئة عمل server environment أو runtime تعتمد على جافاسكريبت من أجل كتابة الكود الخاص بالخادم أو السيرفر في الواجهة الخلفية. وبذلك ستصبح قادر على تطوير مشروع كامل من الألف للياء يشمل الواجهة الأمامية والخلفية، مما يعني أنك ستصبح مطور Full-stack، وأنصحك بمشاهدة التالي لتفهم ما أقصده: ثم شاهد التالي: ثم التالي: ومن خلال تعلمك لمكتبة React ستتمكن بسهولة من تعلم React-Native والتي يتم شرحها في الدورة: حيث أن من خلال تعلمك لمكتبة React، ستكون قد اكتسبت فهماً أساسياً لكيفية بناء وإدارة واجهات المستخدم وإدارة حالة التطبيق. عندما يتعلق الأمر بـ React Native، فإنها هي تقنية تسمح لك ببناء تطبيقات محمولة (لأنظمة iOS و Android) باستخدام مفاهيم وتقنيات مشابهة لتلك المستخدمة في React ولكن مع التركيز على البناء للمنصات المحمولة، وبما أن React Native مبني على أساس مكتبة React، فإن فهمك لمكتبة React سيكون مفيداً جداً عندما تبدأ في تعلم React Native. وعلى الرغم من التشابه بين الاثنين، فإنهما ليستا تماماً متطابقين، حيث توجد بعض الاختلافات في المفاهيم والتقنيات التي يمكن أن تكون مختلفة بين React و React Native. لذا، عند التحول من تطوير تطبيقات الويب باستخدام React إلى تطوير تطبيقات محمولة باستخدام React Native، ستحتاج إلى تعلم بعض المفاهيم والتقنيات الخاصة بـ React Native بصورة إضافية.
  12. الكود الصحيح من المفترض أن يكون كالتالي: x = int(input("Enter a value for x: ")) z = int(input("Enter a value for z: ")) a = x + z e = int(input("Enter a value for e: ")) w = int(input("Enter a value for w: ")) b = e + w if a < b: print("Player1 is better than player2") وما قمت بتصحيحه هو: تحتاج إلى استخدام دالة input() لاستقبال القيم من المستخدم. تحتاج إلى تعريف المتغيرات x و z قبل استخدامها في العبارات الحسابية. نقوم بحساب قيم a و b باستخدام المتغيرات x، z و e، w على التوالي. العبارة الشرطية if تحتاج إلى تعديل الهامش (المسافات في البداية) لتكون متساوية مع بداية السطر السابق لها.
  13. أولاً، يُرجى محاولة إعادة تعيين كلمة المرور عبر الرابط التالي: https://www.linkedin.com/uas/request-password-reset وإذا لم تتمكني من استعادة حسابك بهذه الطريقة، يُنصح بمتابعة الخطوات التالية: انتقلي إلى الرابط التالي للإبلاغ عن حسابك المخترق: https://www.linkedin.com/help/linkedin/ask/TS-RHA في الاستمارة المقدمة، قومي بإدخال اسمك الأول (First name) واسمك الثاني (Last name) كما هما في حسابك على LinkedIn. ثم، بإدخال عنوان البريد الإلكتروني المرتبط بحسابك. حددي رابط حسابك على LinkedIn، وتستطيعي الوصول إليه عن طريق البحث عن اسمك في حقل البحث على LinkedIn. في خانة التفاصيل، عليك بكتابة تفصيل دقيق عن المشكلة والوصف لماذا تعتقد أن حسابك تم اختراقه، وتستطيعي كتابة الوصف باللغة العربية ومن ثم ترجمته إلى الإنجليزية باستخدام مثلاً خدمة ترجمة جوجل. بعد إرسال الاستمارة، سيتم مراجعة طلبك من قبل فريق دعم LinkedIn، ويجب عليك الانتظار حتى يتم الرد عليك من قبلهم. ومن الأفضل أن تكون تفاصيلك واضحة وصحيحة ومفصلة قدر الإمكان لضمان تسهيل عملية معالجة الطلب من قبل فريق الدعم. ويمكنك قراءة النقاش التالي:
  14. عليك أن تسأل نفسك، هل لديك الخبرة البرمجية الكافية؟ في حال كانت الإجابة لا، فعليك بدراسة مسار Full-stack أي تصبح قادر على تطوير الواجهة الأمامية والخلفية معًا، من أجل إنشاء منصة مثل manychat والتي تعتمد على اللغات والتقنيات التالية: React Next.js Node.js Python Django وإذا كنت مستعدًا لاكتساب المعرفة البرمجية والتعلم، يمكنك البدء في دراسة البرمجة واللغات المستخدمة في تطوير تطبيقات الويب والشات بوتات، لغات مثل Python وJavaScript شائعة لتطوير هذا النوع من التطبيقات، ويمكنك البدء بتعلم إطارات العمل مثل Flask أو Django في حال استخدام Python، وNode.js مع Express إذا كنت تفضل JavaScript كما أشرت. وبالطبع تستطيع الإعتماد على مبرمج لديه خبرة لتطوير منصة مشابهة لأن الأمر بحاجة إلى وقت ومجهود فهو ليس مشروع صغير، أو بإمكانك الإعتماد على أكثر من مبرمج، مثلاً شخص لتطوير الموقع، وشخص آخر لتطوير البوت. ويمكنك البحث عن مبرمج جيد على موقع مستقل ومنصة بعيد.
  15. دورة تطوير واجهات المستخدم ليست بحاجة إلى التأسيس في البرمجة، فهى مخصصة للمبتدئين ويتم بها شرح اللغات الأساسية للويب HTML, CSS, JS والتدرج في صعوبة المشاريع. ولا يتم بها كتابة أكواد برمجية معقدة، لذلك الأمر بسيط بحاجة فقط إلى الدراسة بشكل صحيح والتطبيق بمفردك والبحث ومحاولة الاستيعاب والتكرار وسيصبح الأمر أسهل. وإذا أردت التأسيس في البرمجة، فتستطيع البحث على اليوتيوب عن: أساسيات البرمجة. أساسيات علوم الحاسب. كيف يعمل الويب. وبالطبع دراسة دورة مثل دورة علوم الحاسوب في أكاديمية حسوب ستجعل منك مبرمجًا أفضل وستؤهلك للبدء بشكل قوي وعلى وعي ودراية، لكن تستطيع استدراك ذلك أثناء دراسة دورة تطوير واجهات المستخدم ولا تكتفي بالدورة وحدها عليك بالبحث والقراءة والمشاهدة من مصادر أخرى.
  16. في حال كنت في بدايات تعلم البرمجة أو حتى بدايات حل المسائل البرمجية، فأنصحك بموقع Codewars لسهولة استخدام المواقع وسهولة الأسئلة بالنسبة للمبتدئين، ,وأيضًا يوقع موقع CodeChef بالإضافة إلى CodinGame. ولكن عندما تقرر أنك تريد التقدم لوظيفة، عليك بالإنتقال إلى موقع LeetCode حيث يتم إختبارك من الأسئلة المتواجدة عليه.
  17. const http = require('http'); const express = require('express'); const socketIO = require('socket.io'); const app = express(); const server = http.createServer(app); const io = socketIO(server); const questions = [ { question: 'ما هو عاصمة فرنسا؟', answer: 'باريس' }, { question: 'ما هو أكبر كوكب في النظام الشمسي؟', answer: 'المشتري' }, // قائمة الأسئلة والإجابات الأخرى ]; let currentPlayer = 0; // تحديد اللاعب الحالي io.on('connection', (socket) => { // عند اتصال لاعب جديد socket.emit('question', questions[currentPlayer].question); socket.on('answer', (playerAnswer) => { if (playerAnswer === questions[currentPlayer].answer) { // إذا كانت الإجابة صحيحة io.emit('correctAnswer', currentPlayer); currentPlayer = 1 - currentPlayer; // تبديل تناوب اللاعبين } }); }); server.listen(3000, () => { console.log('Server is running on port 3000'); });
  18. في الجزء الخاص بالخادم (Node.js): عليك أولاً بإنشاء مصفوفة أو قاعدة بيانات لتخزين الأسئلة والإجابات المرتبطة بها باستخدام قاعدة بيانات مثل MongoDB أو MySQL لهذا الغرض. وعندما يأتي لاعب جديد للعب اللعبة، قم بارسال سؤال عشوائي من القاعدة إليه باستخدام socket.io. ثم بعد أن يقوم اللاعب بالإجابة على السؤال، قم بفحص الإجابة مع الإجابة الصحيحة في الخادم، وإن كانت الإجابة صحيحة، قم بإرسال إشارة إلى اللاعب للسماح له باللعب. وحتى تمكن اللاعب من اللعب بعد الإجابة الصحيحة، تحتاج إلى تنظيم تناوب اللعب بين اللاعبين، وذلك ممكن من خلال إرسال إشارة من الخادم باستخدام socket.io لتغيير دور اللعب بين اللاعبين. في الجزء الخاص بالعميل (React.js): عندما يأتي سؤال جديد من الخادم، قم بعرضه للاعب وانتظار الإجابة. بمجرد أن يقوم اللاعب بالإجابة، استخدم socket.io لإرسال الإجابة إلى الخادم. بعد إرسال الإجابة، انتظر إشارة من الخادم تفيد بما إذا كانت الإجابة صحيحة أم لا. عندما تصل الإشارة من الخادم بأنه يمكن لللاعب اللعب الآن، غير حالة اللعب بحيث يمكن للمستخدم القيام بخطوته في اللعبة.
  19. في بايثون، يوفر التغليف طريقة لتقسيم كود البرنامج إلى وحدات منفصلة تسمى "الفصول"، تسمح الفصول للمبرمجين بتنظيم كود البرنامج وجعله أكثر قابلية للاختبار وقابلية للتوسيع. ويمكن أن يكون التغليف مفيدًا لفهم المبرمجين القائمين على المشروع لأنّه يسمح لهم بفهم بنية البرنامج وكيفية ارتباط مختلف الأجزاء ببعضها البعض، وبالتالي يساعد ذلك المبرمجين في العثور على الأخطاء بسرعة وسهولة، وإجراء التغييرات على البرنامج دون التأثير على الأجزاء الأخرى منه. هناك نوعان من التغليف في بايثون: التغليف العام: يسمح هذا النوع من التغليف لأي كائن بالوصول إلى خاصية أو طريقة. التغليف الخاص: يسمح هذا النوع من التغليف فقط للكائنات من نفس الفئة بالوصول إلى خاصية أو طريقة. نستخدم التغليف الخاص لمنع الوصول غير المصرح به إلى الكائنات أو الخصائص للحفاظ على سلامة البيانات ومنع الكائنات من التلاعب بها من قبل الكائنات الأخرى. و بعض الفوائد جراء استخدام التغليف في بايثون هي: يساعد التغليف في جعل البرامج أكثر قابلية للاختبار عن طريق تقسيمها إلى وحدات منفصلة يمكن اختبارها بشكل فردي. جعل البرامج أكثر قابلية للتوسيع عن طريق تقسيمها إلى وحدات منفصلة يمكن إضافتها أو إزالتها بسهولة من البرنامج. كود أكثر قابلية للقراءة عن طريق تقسيمه إلى وحدات منفصلة ذات وظائف محددة، أيضًا أكثر قابلية للصيانة عن طريق تقسيمها إلى وحدات منفصلة يمكن تتبعها بسهولة. وإليك بعض الأمثلة على كيفية استخدام التغليف في بايثون: مثال على تغليف عام: class Person: def __init__(self, name, age): self.name = name self.age = age def say_hello(self): print("Hello, my name is {} and I am {} years old.".format(self.name, self.age)) person = Person("John Doe", 30) person.say_hello() في المثال أعلاه، تُعرَّف فئة Person مع اثنين من السمات: name و age، تُعرَّف أيضًا طريقة say_hello()، والتي تطبع اسم وعمر الشخص، ويمكن استدعاء طريقة say_hello() من أي كائن من فئة Person. مثال على تغليف خاص: class Person: def __init__(self, name, age): self._name = name self._age = age def say_hello(self): print("Hello, my name is {} and I am {} years old.".format(self._name, self._age)) def get_name(self): return self._name def set_name(self, name): self._name = name person = Person("John Doe", 30) person.say_hello() # محاولة الوصول إلى الخاصية _age مباشرة سيؤدي إلى خطأ # person._age # يمكن الوصول إلى الخاصية _age من خلال الطرق get_name() و set_name() name = person.get_name() print(name) person.set_name("Jane Doe") person.say_hello() تُعرَّف فئة Person مع اثنين من السمات: name و age، أيضًا طريقة say_hello()، والتي تطبع اسم وعمر الشخص. ولكن السمة _name هي خاصية، مما يعني أنه لا يمكن الوصول إليها مباشرة من خارج الفئة، ويمكن الوصول إلى الخاصية _name فقط من خلال الطرق get_name() و set_name(). وإن كانت الخاصية _name غير خاصة، فيمكن لأي كائن من فئة Person تغيير قيمة الخاصية _name، ولكن نظرًا لأن الخاصية _name خاصة، يمكن فقط تغييرها من خلال الطرق get_name() و set_name()، مما يمنع أي كائن من فئة Person من تغيير قيمة الخاصية _name بطريقة غير صحيحة.
  20. السؤال غير واضح، وعلي أي حال باستطاعتك استخدام وسم <div> ووضع الصور فيه ثم استخدام خاصية display: block لجعل الوسم <div> يظهر ككتلة، مما سيضع الصور تحت كل الأكواد. مثال: <html> <head> <title>My HTML Page</title> </head> <body> <h1>This is my heading</h1> <p>This is my paragraph.</p> <div style="display: block;"> <img src="image1.png" alt="This is an image."> <img src="image2.png" alt="This is another image."> </div> </body> </html>
  21. باستطاعتك استخدام نفس الكود الذي قدمته في الاستجابة السابقة لتحريك الشاشة لتتبع شخصية اللعبة، ولكن بإضافة بعض الخطوات الإضافية لمنع اللاعب من الخروج من الشاشة. أولاً، عليك إنشاء مصفوفة من القيم التي تمثل الحدود اليسرى واليمنى العلوية والسفلية للشاشة، ثم استخدام هذه المصفوفة لتحديد ما إذا كان اللاعب يتحرك خارج الشاشة أم لا. ثانيًا، إضافة شرط إلى الحلقة الرئيسية للتحقق مما إذا كان اللاعب يتحرك خارج الشاشة، وإن كان اللاعب يتحرك خارج الشاشة، بإمكانك تحريك الشاشة بحيث يكون اللاعب دائمًا في المنتصف. وإليك مثالاً: import pygame # Initialize Pygame pygame.init() # Create a window screen = pygame.display.set_mode((640, 480)) # Create the player player = pygame.Rect(320, 240, 64, 64) # Load the background image background = pygame.image.load("background.png") # Create a list of the screen borders borders = [0, 0, 640, 480] # Draw the background image screen.blit(background, (0, 0)) # Draw the player screen.blit(player, player.center) # Update the display pygame.display.update() # Main loop while True: # Check for events for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() # Move the player if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: player.x -= 10 if event.key == pygame.K_RIGHT: player.x += 10 if event.key == pygame.K_UP: player.y -= 10 if event.key == pygame.K_DOWN: player.y += 10 # Check if the player is outside the screen if player.x < borders[0]: player.x = borders[0] if player.x > borders[2]: player.x = borders[2] if player.y < borders[1]: player.y = borders[1] if player.y > borders[3]: player.y = borders[3] # Draw the player screen.blit(player, player.center) # Update the display pygame.display.update() # Keep the game running pygame.time.delay(100)
  22. خطأ "TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'" يعني أنك تحاول ضرب كائن من نوع NoneType برقم صحيح، يحدث هذا إذا كانت وظيفة get_video_stream() تُرجع كائنًا من نوع NoneType. تُستخدم وظيفة get_video_stream() بواسطة وظيفة playVideo() للحصول على قائمة بجميع تيارات الفيديو المتاحة لفيديو YouTube. وتستخدم وظيفة get_video_stream() مكتبة pafy للحصول على معلومات حول فيديو YouTube. تم تحديث مكتبة pafy مؤخرًا، ومن الممكن أن تكون وظيفة get_video_stream() غير متوافقة مع الإصدار الجديد من المكتبة. ولإصلاح الخطأ، يمكنك محاولة تحديث مكتبة pafy، وأيضًا محاولة استخدام مكتبة مختلفة للحصول على معلومات حول مقاطع فيديو YouTube. أولاً قم بتحديث مكتبة pafy عن طريق تشغيل الأمر التالي في موجه الأوامر: pip install --upgrade pafy ثانيًا جرب استخدام مكتبة مختلفة للحصول على معلومات حول مقاطع فيديو YouTube، وهناك العديد من المكتبات المتاحة، مثل youtube-dl و pytube.
  23. هناك طريقتان لتحريك جميع عناصر الشاشة في Pygame. الطريقة الأولى هي استخدام وظيفة pygame.transform.scale()، وتستقل تلك الوظيفة صورتك وحجمها الجديد وتعيد صورة جديدة بحجم معين، وبإمكانك استخدام الوظيفة لتحريك جميع عناصر شاشتك بنفس الكمية. الطريقة الثانية هي استخدام وظيفة pygame.draw.rect()، وتستلم الوظيفة موقع المستطيل وحجمه ولونه وترسم مستطيلًا على الشاشة، وتستطيع الإعتماد على الوظيفة لرسم مستطيل يتحرك مع شخصية اللعبة. وإن كنت تريد تتبع شخصية اللعبة بحيث تكون في المنتصف، فعليك باستخدام وظيفة pygame.Rect.center()، حيث تستقبل الوظيفة مستطيلًا وتعيد موقع مركزه، وبالتالي تحريك الشاشة بحيث تكون شخصية اللعبة دائمًا في المنتصف. وسأوضح لك بمثال على كيفية تحريك جميع عناصر الشاشة في Pygame: import pygame # Initialize Pygame pygame.init() # Create a window screen = pygame.display.set_mode((640, 480)) # Create some images image1 = pygame.image.load("image1.png") image2 = pygame.image.load("image2.png") # Scale the images image1 = pygame.transform.scale(image1, (320, 240)) image2 = pygame.transform.scale(image2, (160, 120)) # Draw the images screen.blit(image1, (0, 0)) screen.blit(image2, (320, 0)) # Update the display pygame.display.update() # Main loop while True: # Check for events for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() # Keep the game running pygame.time.delay(100) وإليك مثال على كيفية تتبع شخصية اللعبة بحيث تكون في المنتصف: import pygame # Initialize Pygame pygame.init() # Create a window screen = pygame.display.set_mode((640, 480)) # Create the player player = pygame.Rect(320, 240, 64, 64) # Load the background image background = pygame.image.load("background.png") # Draw the background image screen.blit(background, (0, 0)) # Draw the player screen.blit(player, player.center) # Update the display pygame.display.update() # Main loop while True: # Check for events for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() # Move the player if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: player.x -= 10 if event.key == pygame.K_RIGHT: player.x += 10 if event.key == pygame.K_UP: player.y -= 10 if event.key == pygame.K_DOWN: player.y += 10 # Keep the player in the middle of the screen if player.x < 0: player.x = 0 if player.x > 640 - player.width: player.x = 640 - player.width if player.y < 0: player.y = 0 if player.y > 480 - player.height: player.y = 480 - player.height # Draw the player screen.blit(player, player.center) # Update the display pygame.display.update() # Keep the game running pygame.time.delay(100)
  24. صحيح بإمكانك استخدام خدمة التحقق عن طريق البريد الإلكتروني في Laravel لإنشاء عملية تسجيل دخول أكثر أمانًا. وللقيام بذلك، ستحتاج إلى تثبيت حزمة Laravel's Illuminate\Auth\Passwords باستخدام الأمر التالي: composer require laravel/ui بمجرد تثبيت الحزمة، ستحتاج إلى إنشاء نموذج للمستخدمين. يمكنك القيام بذلك باستخدام الأمر التالي: php artisan make:model User بعد ذلك، ستحتاج إلى إضافة حقل البريد الإلكتروني إلى نموذج المستخدم عن طريق تعديل ملف User.php وإضافة السطر التالي: protected $fillable = ['name', 'email', 'password']; أخيرًا، ستحتاج إلى إنشاء ملف لمعالجة طلبات التحقق بواسطة إنشاء ملف جديد يسمى VerifyEmailController.php في الدليل app/Http/Controllers. في ملف VerifyEmailController.php، ستحتاج إلى إنشاء طريقة تسمى store، وتلك الطريقة ستكون مسؤولة عن إرسال بريد إلكتروني إلى المستخدم مع رابط التحقق. وتبدو طريقة store على النحو التالي: public function store(Request $request) { // Validate the request. $this->validate($request, [ 'email' => ['required', 'email'], ]); // Generate a verification code. $code = str_random(6); // Save the verification code to the database. \DB::table('verification_codes')->insert([ 'user_id' => auth()->user()->id, 'code' => $code, ]); // Send an email to the user with the verification link. Mail::to($request->email)->send(new VerifyEmail($code)); // Redirect the user to the verification page. return redirect()->route('verification.notice'); } بعد إنشاء ملف VerifyEmailController.php، عليك تسجيله في ملف routes.php من خلال إضافة السطر التالي: Route::post('/verify-email', 'App\Http\Controllers\VerifyEmailController@store'); الآن، يمكنك البدء في استخدام خدمة التحقق عن طريق البريد الإلكتروني، وإليك كيفية القيام بذلك: انتقل إلى صفحة تسجيل الدخول. أدخل عنوان بريدك الإلكتروني وكلمة المرور الخاصة بك. انقر فوق الزر "تسجيل الدخول". ستتلقى رسالة بريد إلكتروني تحتوي على رابط التحقق. افتح الرسالة الإلكترونية وانقر فوق الرابط. سيتم نقلك إلى صفحة التحقق. أدخل رمز التحقق الذي تلقيته في الرسالة الإلكترونية. انقر فوق الزر "تحقق". سيتم تسجيل دخولك الآن إلى حسابك.
  25. المشكلة في المتصفح نفسه، عليك بتعطيل أي مانع إعلانات لتفقد هل المشكلة من تلك الإضافة أم لا، وإن كانت منها حاول السماح للموقع بوضعه في القائمة البيضاء في الإضافة. وأيضًا من خلال إعدادات المتصفح ابحث عن track مثلاً في google chrome قمت بالبحث عن ذلك، وظهرت لي إعدادات Cookies and other site data فقمت بالضغط عليها: بعد ذلك ستجد خيار باسم Allow all cookies تأكد من تفعيله، وأيضًا ستجد خيار باسم Send a "Do Not Track" request with your browsing traffic تأكد من عدم تفعيله كالتالي: وفي حال استمرار المشكلة حاول تعطيل باقي الإضافات في المتصفح لتفقد سبب المشكلة أي تعطيل كل إضافة على حدى ثم التجربة.
×
×
  • أضف...