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

Mustafa Suleiman

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

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

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

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

    305

أجوبة بواسطة Mustafa Suleiman

  1. أولاً تأكد من أن سيرفر MySQL يعمل بشكل سليم من خلال الأمر التالي في منفذ الأوامر CMD وليس Powershell:

    netstat -an | findstr ":3306

    ومن المفترض أن تجد نتيجة  وإذا لم يكن هناك أي إدخالات لبروتوكول TCP على المنفذ 3306، فهذا يعني أن خادم MySQL غير قيد التشغيل.

    بعد ذلك عليك بالتحقق من عدم وجود الأسباب التالية:

    • عنوان خادم MySQL غير صحيح.
    • اسم مستخدم MySQL غير صحيح.
    • كلمة مرور MySQL غير صحيحة.
    • قاعدة البيانات غير موجودة.
    • منفذ MySQL غير صحيح والإفتراضي الصحيح هو 3306.

    تأكد من تشغيل قاعدة البيانات وسيرفر PHP مثل Apachi في Xampp ومن الأسهل لك استخدام بيئة تطوير Laragon فهى أسهل في الاستخدام:

  2. المشكلة أن الكود الخاص بك يستغرق وقتًا طويلاً جدًا للتنفيذ، ويمكنك محاولة زيادة حد وقت التنفيذ في الملف php.ini.

    إليك كيفية القيام بذلك:

    1. افتح الملف php.ini في محرر النصوص.
    2. ابحث عن العبارة max_execution_time.
    3. قم بزيادة القيمة إلى رقم أعلى. على سبيل المثال ، يمكنك تغييرها إلى 36000إذا كنت تريد السماح للكود بالتنفيذ لمدة 36000 ثانية.
    4. احفظ الملف واخرج من المحرر.
    5. أعد تشغيل خادم PHP مثل apache .

    ومن المفترض أن تجد ملف PHP.ini في المسار التالي C:\xampp\php\php.ini

    وفي حال استمرار المشكلة حاول تفقد أين تقع المشكلة وهي في ملف db-connect.php لذلك حاول كتابة بيانات الإتصال بقاعدة البيانات بشكل صحيح.

  3. أنت تحاول طرح الأسئلة في قسم أسئلة البرمجة وليس التعليق أسفل فيديو الدورة في التعليقات، ستجد أسفل الفيديو مكان للتعليق، بينما هنا في قسم أسئلة البرمجة نطرح الأسئلة العامة.

    وتسهيلاً عليك، بخصوص سؤالك، الخورازمية والشيفرة الزائفة بحاجة إلى المزيد من التوضيح، أي تصبح الخوارزمية كالتالي:

    • بدء البرنامج
    • تحميل الواجهات والشخصية والجوائزة والخرائط
    • جعل المتغيرات 
    • :الجوائز = 0 واخذ المفتاح =0  وعداد الوقت =0
    • وضع اللعب في الاحداثيات (مكان البداية )
    • كرر باستمرار
    • اذا زر اليمن مضغوط تحرك نحو اليمين
    • اذا زر اليسار مضغوط تحرك نحو اليسار
    • اذا زر الاعلى مضغوط حرك نحو الاعلى
    • اذا الاعب ملامس الإرض لاتتحرك الى الاسفل
    • وإلأ تحرك نحو الاسفل
    • اذا لامس الاعاب السقف تحرك نحو الاسفل
    • اذا اللاعب لمس الجائزة الكنز زد متغير الجوائز 100
    • والا اذا لمس الجائزة الكتاب زد متغير الجوائز 1000
    • والا زد زد متغير الجوائز 10
    • اذا لمس اللاعب المفتاح اخفى المفتاح وزد متغير المفتاح1
    • اذا لامس العب الباب وكان كتغير المفتاح 1 انتقل الى الخريط التالي
    • اذا لامس اللعب الحفرة او الفخة اطبع لقد خسرت اخرج من الحلقة و انهي البرنامج
    • اذا دخل اللاعب الباب الثاني الموجود في الخريط الثانية وكان متغير المفتاح=2  اطبع لقد فزت وعدد الجوائز وعداد الوقت اخرج من الحلقة و انهي البرنامج

    وبالنسبة للشيفرة الزائفة نحاول كتابتها لتصبح قريبة من اللغة البرمجية ولكن بشكل بسيط كأننا نتحدث لشخص، كالتالي:

    Mario.png.84c6179c3f276a42e84c7d59479f2f48.thumb.png.723eb5439adf1b3be46ac72efb7c2be1.png

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

  4. ربما المشكلة لديك هي أنك تستورد المكتبة بشكل غير صحيح، حيث أن الاستيراد الصحيح هو كالتالي:

    import PyPDF2
    

    لاحظ أنك كتبت حرف p صغير بينما الاستيراد الصحيح هو حرف P كبير.

    ولا تنسى تحميل المكتبة من خلال الأمر التالي في حال استمرت المشكلة:

    pip install PyPDF2

    وتأكد من إختيار مترجم بايثون الصحيح من الأسفل في vscode في حال قمت بإنشاء بيئة إفتراضية:

    Snag_dc00212.thumb.png.44feec56b526784c45ebe96f2902c23d.png

    حيث ستجد كلمة venv، أو في حالة لم تقم بإنشاء بيئة إفتراضية عليك بإختيار المترجم الصحيح مثل Python311 أو Python310

  5. بخصوص التعامل مع ملفات PDF باستخدام JavaScript

    فيما يتعلق بقراءة وعرض المحتوى، تستطيع الإعتماد على مكتبات مثل pdf.js لقراءة وعرض محتوى ملفات PDF داخل متصفح الويب، ويمكن للمستخدمين عرض محتوى الملف، ولكنهم لا يمكنهم تنزيل الملف أو تعديله.

    فيما يتعلق بتعديل وإنشاء ملفات PDF، بإمكانك استخدام مكتبات مثل pdf-lib لإنشاء وتعديل ملفات PDF باستخدام JavaScript، وإضافة نصوص، صور، روابط، وغيرها من العناصر إلى ملفات PDF.

    التعامل مع ملفات PDF باستخدام Laravel

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

    ولتحويل ملفات إلى نص أو صور، استخدم مكتبات مثل spatie/pdf-to-image لتحويل صفحات ملفات PDF إلى صور أو استخراج النصوص منها لتخزينها أو عرضها.

    وللتحكم في الوصول والقراءة، من الممكن تنفيذ سياسات وصول تحدد من يمكنه تنزيل الملفات ومن يمكنه رؤيتها فقط، أيضًا تنفيذ تحقق الهوية وتسجيل الدخول للتحكم في الوصول إلى الملفات.

    اختيار الخيار الأفضل بين JavaScript وLaravel يعتمد على ما إن  كنت ترغب في تعامل سريع وديناميكي مع ملفات PDF داخل متصفح الويب، فإن JavaScript خيارًا جيدًا، أما إن كنت تبني تطبيق ويب متكامل مع العديد من الوظائف بجانب التعامل مع ملفات PDF، فإطارLaravel مفيد لتوفير تجربة مستخدم متكاملة.

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

     

    • أعجبني 1
  6. يوجد طرق مختلفة مثل طلبات متعددة باستخدام Ajax وإتصال مفتوح لجلب التحديثات SSE ومقبس(WebSockets ) بين الخادوم والمتصفح.

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

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

    وبالطبع بإمكانك استخدام عدّة مكتبات للتعامل مع WebSockets ومن بينها:

    • Ratchet: وهي مكتبة قوية ومتعددة الاستخدامات لإنشاء تطبيقات WebSockets.
    • Ratchet PHP: مكتبة WebSockets تعتمد على Ratchet.
    • Pusher: خدمة خارجية تقدم واجهة برمجة تطبيقات WebSockets.
    • Socket.io: مكتبة WebSockets مفتوحة المصدر تدعم العديد من اللغات ، بما في ذلك PHP.
    • Swoole: إطار عمل PHP مع دعم WebSockets مدمج.

    بإمكانك أيضًا الإعتماد على مكتبة Pusher ولارافيل وقد تم شرح الأمر بشكل مفصل هنا:

    أيضًا في لارافيل يوجد نظام إشعارات:

     

    • أعجبني 1
    • شكرًا 1
  7. بتاريخ 10 دقائق مضت قال حيدر رزاق عبد الواحد:

    شكرا لك على الاجابة
    المشروع يعمل الان بشكل طبيعي و انا اعمل عليه منذ 3 اشهر
    الفكره الان اريد ان انشئ لكل زبون يريد استخدام النضام  بضغطة واحده و بنفس الرابط لا اريد ان اكرر المشروع لكل مستخدم

    1- أولاً عليك تخصيص قاعدة البيانات:

    •  إضافة جدول إضافي يسمح بتخزين معلومات الزبون مثل اسم الزبون وبيانات الاتصال ومعلومات أخرى.
    • عند تسجيل الدخول، قم بتحديد قاعدة البيانات المناسبة باستناد إلى معرف الزبون المسجل.

    • يمكنك أن تجعل اسم قاعدة البيانات جزءًا من عملية تسجيل الدخول.

    • استخدم قاعدة البيانات المحددة للزبون لتحميل المعلومات الخاصة به.

    2- بعد ذلك إعداد واجهة المستخدم:

    • أضف واجهة تسجيل الدخول وإنشاء حساب جديد للزبون.
    • بعد تسجيل الدخول، يمكن للزبون إنشاء حسابه الخاص داخل التطبيق.

    3- كتابة المنطق البرمجي:

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

    4- التخزين:

    • عند تسجيل الدخول، قم بتحميل معلومات الزبون من قاعدة البيانات الخاصة به.
    • قم بتحميل المعلومات المخزنة بناءً على قاعدة البيانات التي تم تخصيصها لكل زبون.
    • شكرًا 1
  8. بالنسبة للسؤال الأول، لمنع فتح المرحلة الثانية حتى يتم الانتهاء من المرحلة الأولى، استخدمي الكود التالي:

    // Check if the first level is completed
    if (firstLevelCompleted) {
      // Open the second level
      openLevelTwo();
    }

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

    // Check the current level
    if (currentLevel == 2) {
      // Open the second level
      openLevelTwo();
    }

    بالنسبة للسؤال الثاني، لفتح المرحلة الثانية عند النقر على الزر الموجود في نهاية الصفحة الأولى، نستخدم التالي:

    // Click on the button to open the second level
    Button button = findViewById(R.id.button);
    button.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        openLevelTwo();
      }
    });

    بالنسبة للسؤال الثالث، لفتح المرحلة الثانية بعد جمع 20 نقطة، تستطيعي استخدام الكود التالي:

    // Check the score
    int score = getScore();
    if (score >= 20) {
      // Open the second level
      openLevelTwo();
    }

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

    // Check the score
    int score = getScore();
    if (score >= 20) {
      // Open the second level
      openLevelTwo();
    }

     

  9. غير صحيح، تختلف لغات البرمجة في أسلوبها في التعبير عن الخوارزميات، لكن جميعها تستند إلى مجموعة أساسية من المفاهيم والعمليات.

    حيث تعتمد بعض لغات البرمجة، مثل 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."

    الفرق بين لغات عالية المستوى ولغات منخفضة المستوى

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

    واللغات عالية المستوى توفر المزايا التالية:

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

    بينما اللغات ذات المستوى المتوسط والمنخفض توفر التالي:

    1.  التحكم المباشر بمكونات العتاد واستخدام الموارد بكفاءة عالية.
    2. تحسين الأداء بسبب قربها من لغة الآلة، يمكن تحقيق أداء محسّن للبرامج المكتوبة بهذه اللغات.
    3. تحتاج لمستوى عمق في المعرفة التقنية للبرمجة باستخدام هذه اللغات، وقد تكون عملية تطوير البرمجيات أكثر تعقيدًا.
    • أعجبني 1
  10. أولاً، هناك أخطاء في كتابة الكود، مثل استخدام "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".

     

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

    وبعد تعلم الأساسيات والبحث عن مشاريع للتطبيق عليها مناسبة للمبتدئين عليك بتعلم إطار Flask وDjango ثم تعلم SQL وهي لغة قواعد البيانات ثم عليك بتعلم أحد أنظمة إدارة قواعد البيانات مثل Postgres وMySQL.

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

    ويوجد مقالات ودروس  في أكاديمية حسوب وموسوعة حسوب كمراجع لبايثون:

    بالإضافة إلى كتابة لتعلم بايثون من أكاديمية حسوب:

    ويوجد أيضًا دورة بايثون في أكاديمية حسوب:

     

    والتي ستتعلم بها التالي:

    • الأسس البرمجية السليمة عبر لغة Python
    • التعامل مع مختلف صيغ الملفات مثل إكسل Excel وورد Word وخدمات المستندات السحابية
    • استخراج البيانات من صفحات الويب Web Scraping وتحليلها
    • أساسيات التعامل مع قواعد البيانات عبر بايثون، والتعامل مع البريد الإلكتروني لإرسال الرسائل
    • أساسيات إطار العمل جانغو Django
    • بناء تطبيق إدارة المهام باستخدام إطار العمل جانغو Django
    • تطوير متجر إلكتروني متكامل باستخدام إطار العمل جانغو Django وربطه مع وسائل الدفع باي بال PayPal وسترايب Stripe
    • أساسيات إطار العمل فلاسك Flask، وبناء مدونة بسيطة
    • تطوير واجهة برمجية API اعتمادًا على نمط RESTful لمعالجة الصور
  12. الكلمة 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 بشكل منفصل.

  13. قسم الأمن السيبراني ليس قسم خاص، لكن يتبع نظام الساعات المعتمدة لمدة 35.5 ساعة تقريبًا.

    حيث كانت تكلفة الساعة في العام الماضي 1170 جنيه، مما يؤدي إلى تكلفة تقريبية تصل إلى 41,600 ألف جنيه في السنة.

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

    ونظام الساعات المعتمدة بحاجة إلى فيديو ليتضح الأمر لك، لذلك أنصحك بالبحث عن شرح نظام الساعات المعتمدة على اليوتيوب.

  14. عليك باستخدام المكتبات اللازمة لإنشاء ذلك الجزء من المشروع، كالتالي:

    • 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)

    تلك المكتبات توفر مجموعة واسعة من المكونات والتصاميم الجاهزة التي يمكنك استخدامها لبناء واجهة المستخدم لتطبيقك.

    • أعجبني 1
  15. من الأفضل طرح الأسئلة الخاصة بالدورة أسفل الفيديو الخاص بها لمساعدتك بشكل أفضل، وطرح الأسئلة العامة هنا في قسم أسئلة البرمجة.

    وبخصوص سؤالك، ربما لم يتم ربط ملف التنسيقات في صفحة page.html تأكد من ذلك وعليك بالحفظ بالضغط على CTRL + S لحفظ التعديلات، ثم إعادة تحديث الصفحة لرؤية ما تم تغييره.

    والأفضل هو تثبيت إضافة Live server من أجل إنشاء سيرفر ورؤية التحديثات بشكل مباشر دون الحاجة إلى إعادة تحديث الصفحة:

    وبعد التثبيت ستجد زر باسم Go Live بالأسفل اضغط عليه وسيتم فتح المشروع وإن ظهر لك ملفات المشروع اختر صفحة HTML التي تريد تشغيلها.

    live-server.thumb.png.36bba14f8591c771fb8691c4f51888ad.png

     

  16. الكود هو التالي:

    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();
        }
    });

     

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

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

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

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

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

    عندما تواجه مشكلة عليك بالتفكير أولاً ومحاولة استخدام ما تعلمته لحل المشكلة، ثم عليك البحث عن كيفية حل المشكلة من خلال HTML, CSS سواء على جوجل أو يوتيوب، ثم تستطيع السؤال لمساعدتك.

  18. ستحتاج إلى الإعتماد على عناصر 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>

     

    • أعجبني 1
  19. عليك باستيعاب أمرًا هام، وهو أنّ 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 بصورة إضافية.

     

  20. الكود الصحيح من المفترض أن يكون كالتالي:

    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")

    وما قمت بتصحيحه هو:

    1. تحتاج إلى استخدام دالة input() لاستقبال القيم من المستخدم.
    2. تحتاج إلى تعريف المتغيرات x و z قبل استخدامها في العبارات الحسابية.
    3. نقوم بحساب قيم a و b باستخدام المتغيرات x، z و e، w على التوالي.
    4. العبارة الشرطية if تحتاج إلى تعديل الهامش (المسافات في البداية) لتكون متساوية مع بداية السطر السابق لها.
  21. وإذا لم تتمكني من استعادة حسابك بهذه الطريقة، يُنصح بمتابعة الخطوات التالية:

    انتقلي إلى الرابط التالي للإبلاغ عن حسابك المخترق:

    1. في الاستمارة المقدمة، قومي بإدخال اسمك الأول (First name) واسمك الثاني (Last name) كما هما في حسابك على LinkedIn.
    2. ثم، بإدخال عنوان البريد الإلكتروني المرتبط بحسابك.
    3. حددي رابط حسابك على LinkedIn، وتستطيعي الوصول إليه عن طريق البحث عن اسمك في حقل البحث على LinkedIn.

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

      بعد إرسال الاستمارة، سيتم مراجعة طلبك من قبل فريق دعم LinkedIn، ويجب عليك الانتظار حتى يتم الرد عليك من قبلهم.

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

    ويمكنك قراءة النقاش التالي:

     

  22. عليك أن تسأل نفسك، هل لديك الخبرة البرمجية الكافية؟ في حال كانت الإجابة لا، فعليك بدراسة مسار Full-stack أي تصبح قادر على تطوير الواجهة الأمامية والخلفية معًا، من أجل إنشاء منصة مثل manychat والتي تعتمد على اللغات والتقنيات التالية:

    • React
    • Next.js
    • Node.js
    • Python
    • Django

    وإذا كنت مستعدًا لاكتساب المعرفة البرمجية والتعلم، يمكنك البدء في دراسة البرمجة واللغات المستخدمة في تطوير تطبيقات الويب والشات بوتات، لغات مثل Python وJavaScript شائعة لتطوير هذا النوع من التطبيقات، ويمكنك البدء بتعلم إطارات العمل مثل Flask أو Django في حال استخدام Python، وNode.js مع Express إذا كنت تفضل JavaScript كما أشرت.

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

    ويمكنك البحث عن مبرمج جيد على موقع مستقل ومنصة بعيد.

  23. دورة تطوير واجهات المستخدم ليست بحاجة إلى التأسيس في البرمجة، فهى مخصصة للمبتدئين ويتم بها شرح اللغات الأساسية للويب HTML, CSS, JS والتدرج في صعوبة المشاريع.

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

    وإذا أردت التأسيس في البرمجة، فتستطيع البحث على اليوتيوب عن:

    • أساسيات البرمجة.
    • أساسيات علوم الحاسب.
    • كيف يعمل الويب.

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

×
×
  • أضف...