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

Mustafa Suleiman

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

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

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

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

    445

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

  1. في البداية أرجو توضيح السؤال وكتابته بالعربية، وإذا كان سؤالك بخصوص ما هو التشغيل غير المنسق، فإليك شرح للأمر. التشغيل غير المنسق (أو Uncoordinated Execution) هو نمط من أنماط التشغيل في الحوسبة الموزعة يشير إلى عدم وجود تنسيق أو توافق بين العمليات المنفذة في النظام. يعني هذا أن العمليات المختلفة قد تقوم بتنفيذ الأعمال المختلفة في نفس الوقت ودون التنسيق مع بعضها البعض. وفي التشغيل غير المنسق، يقوم كل عملية باتخاذ القرارات بشكل مستقل بدلاً من التنسيق مع العمليات الأخرى في النظام. ونتيجة لذلك، يمكن أن يحدث تعارض (Conflict) في النظام عندما تقوم عدة عمليات بمحاولة الوصول إلى نفس المورد في نفس الوقت، وهذا قد يؤدي إلى حدوث مشاكل في النظام مثل فشل العمليات، أو حدوث تعطل في النظام بشكل عام. وعلى الرغم من أن التشغيل غير المنسق يعتبر أحد النماذج الأساسية في الحوسبة الموزعة، إلا أنه قد يكون غير مثالي في بعض الحالات، وعادةً ما يتم استخدام أنماط التشغيل المنسق أو المتزامن (Coordinated/Synchronized Execution) عند الحاجة إلى التحكم في التنفيذ وضمان التنسيق بين العمليات المختلفة في النظام.
  2. بالطبع يناسب لابتوب MacBook Air البرمجة، ويتميز هذا الجهاز بأنه خفيف الوزن ونحيف، مما يجعله سهل الحمل والتنقل به. كما أنه يأتي بمعالج قوي وذاكرة عشوائية كافية، مما يسمح له بتشغيل بيئات التطوير الكبرى بكفاءة عالية. كما أنه يحتوي على نظام تشغيل macOS الذي يدعم العديد من لغات البرمجة والأدوات اللازمة لتطوير البرمجيات، وتعتبر البيئة الأمثل لمحترفي البرمجة. ونظام macOS قد يكون مناسبًا للعديد من المطورين. يتضمن نظام macOS بيئة تطوير متكاملة (IDE) مثل Xcode والتي تدعم العديد من لغات البرمجة مثل Swift و Objective-C و C++ وغيرها، كما يتضمن العديد من الأدوات المساعدة لتطوير البرمجيات مثل محررات النصوص والمترجمات ومكتبات البرمجة. بالإضافة إلى ذلك، فإن نظام macOS يوفر بيئة عمل مستقرة وأمنية، مع وجود مجتمع تطوير قوي ونشط في المجتمع البرمجي. ومن الجوانب الأخرى، يمكن أن يكون نظام تشغيل Linux أيضًا مناسبًا للبرمجة، خاصةً في بيئات التطوير والبرمجة المفتوحة المصدر. وقد تم التطرق بالتفصيل لمواصفات الحاسوب المناسبة للبرمجة بالتفصيل في النقاشات التالية:
  3. السؤال كان غير واضح بعض الشيء، بخصوص تشغيل المشروع على شبكة محلية حاول تجربة التالي: تأكد من أن جهاز الكمبيوتر الذي تريد تشغيل السيرفر عليه متصل بالشبكة المحلية. قم بفتح موجه الأوامر (command prompt) واستخدم الأمر "ipconfig" للحصول على عنوان IP الخاص بجهاز الكمبيوتر الخاص بك في الشبكة المحلية. استخدم الأمر "python manage.py runserver 0.0.0.0:8000" لتشغيل السيرفر المحلي وجعله يستجيب لأي طلبات HTTP على جميع عناوين IP الموجودة في الشبكة المحلية. اطلب من الآخرين في الشبكة المحلية استخدام عنوان IP الخاص بجهاز الكمبيوتر الخاص بك ورقم المنفذ 8000 للوصول إلى الموقع الخاص بك عن طريق متصفح الويب. مثلاً، إذا كان عنوان IP الخاص بجهاز الكمبيوتر الخاص بك هو "192.168.1.100"، يمكن للآخرين في الشبكة المحلية الوصول إلى الموقع الخاص بك عن طريق زيارة العنوان "http://192.168.1.100:8000/".
  4. إذا كنت لم تحدد المجال الذي تريد تعلمه في البرمجة سواء ويب أو تطوير تطبيقات الهاتف باستخدام Flutter أو React Native ولديك الوقت فأنصحك بتعلم أساسيات البرمجة أولاً. حيث أنها ستمكنك من إختيار المجال الذي تريده عن إقتناع ودراية وليس تخبط وتشتت كما يفعل الغالبية، حيث أنه يتبع مسار تعليمي ولا يعلم هل يريده أم لا وهل سيفيده أم لا. وإن كنت تريد الوظيفة بشكل سريع وبحاجة إلى المال وليس لديك وقت لتعلم الأساسيات، فأنصحك برؤية ما هي المهارات المطلوبة في سوق العمل لديك بالنسبة لمستوى Entry Level أو Junior على مواقع التوظيف مثل LinkedIn وإذا كان المطلوب بكثرة مطور وورد بريس أو مطور PHP ولارافيل مع Vue.js أو مطور React.js أو مطور Angular.js أو مطور .net أو مطور React Native وهكذا. فعليك بتعلم ماهو متاح في سوق العمل ثم تعلم ما تريده بعد الحصول على الوظيفة، ولكن إذا كان لديك الوقت ومازلت صغير السن فقم بتعلم مجال الويب لأنه سيفتح أفاقك على كافة مجالات البرمجة وهو سهل في البداية وبه مجالات مختلفة مثل مطور الواجهة الأمامية والواجهة الخلفية وبإمكانك استخدام React.js الخاصة بالواجهة الأمامية في تعلم React Native. أي أنك ستستطيع التوجه إلى أكثر من مجال عند تعلم الويب على عكس لو قمت بتعلم تطوير التطبيقات فقط. وبخصوص الأساسيات، عليك البدء أولاً بلغة C++ إذا أردت التأسيس بشكل سليم، وإذا أردت تخطي ذلك الأمر فعليك بتعلم لغة جافاسكريبت في البداية لتسريع عملية التعلم. وقد تم التطرق بالنقاش حول سؤالك بالتفصيل في النقاشات التالية:
  5. الطريقة التي تستخدمها لربط عدة collections في Firebase صحيحة وليست بها خطأ، ولكن، قد يصعب إدارة العديد من عمليات الربط لأكثر من 25 مجموعة. ولتحسين الأداء، تستطيع استخدام دالة الاستعلامات المتعددة (Batched Writes) في Firebase التي تتيح لك إنشاء وتحديث وحذف العديد من المستندات في مجموعة واحدة في نفس الوقت. وبإمكانك الاطلاع على التفاصيل الكاملة عن Batched Writes في Firebase من هنا: https://firebase.google.com/docs/firestore/manage-data/transactions#batched-writes أيضًا عليك بالنظر في إمكانية استخدام الرسائل الفورية (Firebase Cloud Messaging) في Firebase لتحسين الأداء وتقليل العمليات اللازمة للحصول على بيانات جديدة وإرسالها إلى التطبيق الخاص بك. بالإضافة إلى النظر في تحسين هيكل البيانات الخاص بك في Firebase لتقليل عدد المستندات التي تحتاج إلى الوصول إليها في كل مرة. مثلاً، دمج بعض المعلومات في مستند واحد بدلاً من إنشاء مستندات منفصلة لكل بيانات. وإليك بعض الأفكار التي يمكن استخدامها لتحسين الكود الخاص بك: استخدام الدوال المتعددة للحصول على بيانات متعددة بدلاً من استخدام await Future.wait، وذلك قد يحسن من الأداء ويجعل الكود أكثر وضوحًا وقابلية للصيانة، مثال: استخدام الدالة getBooksSnapshot بدلاً من await booksSnapshotFuture. تستطيع استخدام Stream للحصول على بيانات متعددة من Firebase بطريقة فعالة من حيث الأداء، من خلال إنشاء Stream واحد للحصول على جميع البيانات المطلوبة من Firebase. يمكن هيكلة قاعدة البيانات الخاصة بك بشكل أفضل لتجنب الحاجة إلى الوصول إلى عدة مجموعات للحصول على بيانات متعددة، عن طريق إنشاء مجموعات فرعية أو إضافة بيانات إضافية إلى المستندات الحالية لتجنب الحاجة إلى الوصول إلى مجموعات متعددة للحصول على بيانات متعددة.
  6. بالطبع أنت قمت بتثبيت إطار Django وبايثون على حاسوبك، إذن عليك القيام بالتالي: قم بفتح موجه الأوامر (command prompt) واستخدم "cd" للانتقال إلى مجلد العمل الخاص بك. بعد ذلك، استخدم الأمر "django-admin startproject" لإنشاء مشروع Django جديد. بمجرد إنشاء المشروع ، انتقل إلى دليل المشروع باستخدام الأمر "cd". استخدم الأمر "python manage.py runserver" لتشغيل السيرفر المحلي، ويمكنك الآن فتح متصفح والوصول إلى الموقع الخاص بك عن طريق الذهاب إلى العنوان "http://localhost:8000/". إذا كنت تريد تغيير رقم المنفذ الافتراضي للسيرفر المحلي ، فتستطيع استخدام الأمر "python manage.py runserver 0.0.0.0:8080" لتشغيل السيرفر على المنفذ 8080. وبعد ذلك يمكنك تنفيذ تطبيق الإدارة الخاص بك في السيرفر المحلي وتحميله في المتصفح الخاص بك عن طريق زيارة العنوان "http://localhost:8000/admin". وأيضًا بإمكانك إنشاء بيئة افتراضية (Virtual Environment) لمشروع Django الخاص بك لتفادي تعارض الإصدارات مع الحزم الأخرى المثبتة في جهاز الكمبيوتر الخاص بك، وذلك من خلال التالي: 1-إنشاء مجلد جديد: mkdir {directory_name} نضيف مكان {directory_name} اسم المجلد الجديد، مثلاً mkdir app وسينشيء مجلد باسم app في نظام ويندوز. 2- تثبيت جانغو Django: pipenv install django 3- تفعيل البيئة الإفتراضية: pipenv shell 4- إنشاء مشروع جانغو جديد: django-admin startproject {project_name} . عليك بتغيير مكان {project_name} باسم مشروع جانغو. 5- تشغيل مشروع جانغو: python .\manage.py runserver 6- إنشاء تطبيق جانغو: python .\manage.py startapp {app_name} واستبدل {app_name} باسم تطبيق جانغو الذي تريده.
  7. الخطأ يظهر أن هناك تعارض في متطلبات الحزم المستخدمة في مشروعك. وتحتاج إلى التحقق من ملف composer.json الخاص بمشروع Laravel الخاص بك والتأكد من أن متطلبات الحزم محدثة وتتوافق مع متطلبات حزمة Chatify. في هذه الحالة، تحتاج إلى تحديث متطلبات الحزم في ملف composer.json لتتوافق مع متطلبات حزمة Chatify، و يمكنك القيام بذلك عن طريق تنفيذ الأمر التالي في مجلد مشروع Laravel الخاص بك: composer require pusher/pusher-php-server:^7.0 ومن ثم، يمكنك تنفيذ أمر تثبيت Chatify مرة أخرى باستخدام الأمر التالي: composer require munafio/chatify وإذا واجهت أي مشاكل أخرى، فيمكنك استخدام الخيار --with-all-dependencies للسماح بالتحديثات والإزالات للحزم التي تم تأمينها على إصدارات محددة. composer require munafio/chatify --with-all-dependencies أيضً تستطيع ا تحديد الإصدار المحدد لحزمة Chatify بإضافة القيود الخاصة بالإصدار في الأمر composer require: composer require munafio/chatify:^1.6.1 بعد تحديث متطلبات الحزم وتثبيت Chatify بنجاح، تأكد من تنفيذ الأمر التالي لتحديث ملف الارتباطات composer.lock: composer update وفي النهاية، تأكد من إضافة مزود Pusher إلى ملف تكوين Laravel الخاص بك config/app.php كما هو موضح في توثيق Chatify.
  8. هناك إضافة godot-python التي تمكنك من استخدام لغة البرمجة بايثون في محرك الألعاب Godot. حيث أن إضافة godot-python هي إضافة مفتوحة المصدر توفر واجهة برمجية تسمح بكتابة البرامج النصية بلغة بايثون داخل Godot، وتوفر دعمًا للإصدارات الأقدم من Godot بالإضافة إلى Godot 4. وستحتاج إلى محرر Visual Studio وتثبيت اللإضافات اللازمة الخاصة بلغة C++ أثناء تثبيت البرنامج، حيث ستجد إضافة باسم Desktop development with C++. وبعد ذلك عليك بإنشاء بيئة إفتراضية للغة بايثون ثم تثبيت إضافة godot-python من المستودع، وإتباع الخطوات التي تم شرحها في مستودع الإضافة حيث هناك خطوات تفصيلية. وأيضًا تستطيع البحث عن Integrating Python into Godot وستجد شروحات عن هذا الأمر. وهناك أمر آخر ألا وهو إمكانية استخدام لغة البرمجة بايثون Python لتعزيز قدرات محرك الألعاب Godot، عن طريق تشغيل السكريبت بالخلفية أثناء تشغيل اللعبة في الجهة الأمامية. وذلك من خلال إنشاء بيئة افتراضية virtual environment للبرامج بلغة بايثون، وتنفيذ الأوامر في وقت التشغيل، والتعامل مع الأرقام والمصفوفات. ولرؤية شرح عن ذلك عليك بالبحث عن Use Python to Enhance The Godot Game Engine وستجد أمثلة وشرح حول الأمر. حل آخر باستخدام لغة GDScript GDScript هي لغة برمجة عالية المستوى ومكتوبة بشكل ديناميكي تستخدم لإنشاء محتوى في محرك ألعاب Godot. تستخدم اللغة نحوية الفراغات للتنسيق indentation-based syntax، وهي تشبه لغات البرمجة مثل Python. وهدف GDScript هو أن يكون محسّنًا ومتكاملاً بشكل وثيق مع محرك Godot، مما يسمح بمرونة كبيرة لإنشاء المحتوى والتكامل. وتمامًا كما يوحي اسمها، فإن GDScript مستقلة بالكامل عن لغة Python وليست مبنية عليها. لذلك يمكن القول أن GDScript تعتمد بشكل أساسي على تنسيقها الخاص والمحسّن لمحرك Godot وليست تعتمد على أي لغة برمجة أخرى.
  9. بالنسبة لسؤالك الأول، فإذا أردت إزالة الرسومات التي تم إنشاؤها باستخدام Plotly.js ، تستطيع استخدام الأمر التالي: Plotly.purge() وهذا الأمر يمكنه إزالة جميع الرسومات من المنطقة النشطة. أما بالنسبة لسؤالك الثاني، فهناك العديد من الأسباب التي قد تؤدي إلى عدم ظهور الرسمة وهذا يتطلب التحقق من عدة عوامل، مثلاً، إذا كانت قيم x و y تم تمريرها بشكل صحيح وإذا كان لديك أيضًا عناصر HTML و CSS اللازمة لعرض الرسمة في صفحتك. حاول استخدام Console log للتحقق من الأخطاء في الكود الذي تم إنشاؤه ويمكنك أيضًا استخدام محرر النصوص المدمج في المستعرض للتحقق من أي أخطاء في HTML أو CSS. وتأكد من أن كل من phi و h هي مصفوفات من الأعداد التي تحتوي على 16 عنصرًا، حيث يبدو أن عدد العناصر في كلا المصفوفتين يجب أن يكون متساويًا لأنهما تم تمريرهما كقيم x و y في مصفوفة البيانات. كما يجب التأكد من أن لديك أيضًا الرمز اللازم لعرض الرسمة في صفحتك HTML/CSS، وعلى سبيل المثال، يمكنك إضافة عنصر div إلى صفحتك HTML وتحديد الارتفاع والعرض الخاص بالرسمة، ثم تحديد معرف العنصر الخاص بـ div كـ id للمصفوفة layout ، مثل هذا الشكل: <!DOCTYPE html> <html> <head> </head> <body> <div id="plotly-div" style="width: 600px; height: 400px;"></div> <script> var data = [{x:[phi], y:[h], type: 'curve'}]; var layout = { fileopt : "overwrite", filename : "simple-node-example", // إعدادات أخرى مثل عنوان المخطط وأي إعدادات أخرى يمكن إضافتها هنا }; Plotly.newPlot('plotly-div', data, layout); </script> </body> </html> و سيتم إنشاء عنصر div بمعرف plotly-div حيث يتم تعيين العرض والارتفاع. بعد ذلك، يتم إنشاء مصفوفة data ومصفوفة layout ويتم استخدام Plotly.newPlot() لرسم الرسمة داخل العنصر div المحدد بمعرف plotly-div. وإذا كنت تستخدم الكود في محرر الأكواد VScode فلا تنسى استيرد أو تثبيت المكتبة، ويمكنك استخدام CDN كالتالي: <head> <script src="https://cdn.plot.ly/plotly-latest.min.js"></script> </head>
  10. أرجو أن تتفهم سبب عدم وجود إمكانية لذلك، حيث أنه في حالة السماح بتحميل الفيديو سيتم إتاحة الدورات للجميع، وقد تم بذل مجهود كبير من قبل فريق من المدربين في إعداد وتوفير تلك الدورات لك، وأيضًا يتم تحديث الدورات كل 3 شهور بالإضافة إلى الدعم من قبل أكثر من مدرب للإجابة على أسئلتك ومساعدتك في أي وقت. وأيضًا الشهادة والإختبارات والدورات الأخرى التي يتم توفيرها لك لاستكمال مسارك البرمجي الذي إخترته. والسبب الرئيسي لعدم السماح بتحميل الكورسات لمشاهدتها offline هو أن معظم منصات التعليم الإلكتروني تعتمد على نموذج البث المباشر لتوفير المحتوى التعليمي، ويتم تخزين محتوى الفيديو والمواد التعليمية على خوادم الشركة المزودة للخدمة التعليمية والتي يتم الوصول إليها من خلال الإنترنت فقط. وأيضًا هناك سبب آخر، إتاحة المواد التعليمية بشكل مجاني يضر أكثر مما يفيد، فمن طلب الإجتهاد وعلو الشأن عليه ببذل بعض الجهد ودفع جزء من ماله ليثبت صدق عزيمته ويحصل على مواد تعليمية قيمة تؤهله لمراده، بينما من ليس لديه عزيمة وصدق في طلبه فلن يقوم بذلك على عكسك أنت.
  11. بالإضافة إلى الطريقة التي ذكرها لك عدنان، هناك عدة طرق لتجميع الأرقام الزوجية الأقل من 20 تلقائيًا وتشمل: 1- استخدام حلقة (loop) لتكرار الفحص والإضافة. يمكن استخدام حلقة لتكرار عملية الفحص والإضافة حتى الوصول إلى جميع الأرقام المدخلة. من خلال الحلقة مع جملة if للتحقق مما إذا كان العدد زوجيًا وأقل من 20، وإذا كانت الشروط متوفرة يمكن إضافة العدد إلى المتغير result. 2- استخدام مصفوفة (array) لتخزين الأرقام وإجراء الفحص. يمكن تخزين الأرقام المدخلة في مصفوفة واستخدام حلقة لتحقيق الفحص والإضافة إلى المتغير result. عن طريق الجملة if داخل الحلقة للتحقق مما إذا كان العدد زوجيًا وأقل من 20، وإذا كانت الشروط متوفرة يمكن إضافة العدد إلى المتغير result. 3- الإعتماد على الدالة (function) لتنفيذ الفحص والإضافة. يمكن إنشاء دالة تتلقى مجموعة من الأرقام كمدخلات وتقوم بتنفيذ الفحص والإضافة تلقائيًا. يمكن استخدام الجملة if داخل الدالة للتحقق مما إذا كان العدد زوجيًا وأقل من 20، وإذا كانت الشروط متوفرة يمكن إضافة العدد إلى المتغير result. يمكن استخدام الدالة في أي مكان في الشيفرة التي تريدها لتجميع الأرقام الزوجية. مثال للطريقة الثانية: #include <iostream> using namespace std; int main() { int result = 0; int num; cout << "Please enter a number: "; while (cin >> num && num < 20) { if (num % 2 == 0) { result += num; } cout << "Please enter another number: "; } cout << "The sum of even numbers smaller than 20 is: " << result << endl; return 0; } والكود يطلب من المستخدم إدخال عدد واحد فقط في البداية، ثم استخدام حلقة while لطلب المزيد من الأرقام الزوجية الأقل من 20 مع الاستمرار في إضافة الأرقام إلى المتغير result. ويتوقف البرنامج عندما يتم إدخال رقم غير زوجي أو رقم أكبر من 20. في النهاية، يتم طباعة مجموع الأرقام الزوجية الأقل من 20.
  12. Firebase هي منصة شاملة تحتوي على خدمات عديدة، بما في ذلك قاعدة بيانات Realtime و Cloud Firestore، وتستطيع استخدام أي منهما بناءً على احتياجاتك. إذا كنت تستخدم Cloud Firestore، فإنه يستخدم نموذج قاعدة بيانات NoSQL مختلف عن نموذج MySQL الذي اعتدت عليه. حيث يتم تخزين البيانات في مستندات (documents) في مجموعات (collections) بدلاً من الجداول (tables). لكن يمكن الوصول إلى البيانات باستخدام العلاقات والاستعلامات التي تتطلبها تطبيقك. مثلاً، يمكنك إنشاء مجموعتين، واحدة لـ"الكتب" وأخرى لـ"السنوات"، ثم ربطهما معًا باستخدام مفتاح خارجي، وهذا يمكن القيام به باستخدام المراجع (references) في Firestore. بخصوص السؤال الثاني من المناسب تخزين البيانات التي تريد عرضها في القوائم المنسدلة (dropdown lists) في قاعدة البيانات، حتى يمكنك تحديث هذه البيانات وإضافة عناصر جديدة دون الحاجة إلى تحديث تطبيقك. وتستطيع تخزين هذه البيانات في مجموعة خاصة بها في قاعدة البيانات، أو يمكن استخدام Firebase Realtime Database لتخزينها كما أنه يسمح بتخزين بيانات في شكل JSON. أي يمكنك تخزين البيانات المختلفة سواء في قاعدة البيانات أو كملفات JSON داخل تطبيقك. ولكن إذا كانت هذه البيانات تحتوي على معلومات متغيرة بشكل مستمر أو تحتاج إلى تحديثات من الخادم، فقاعدة البيانات هي الخيار الأفضل.
  13. مما أراه في الصورة أن هناك تحذير يظهر في قاعدة البيانات phpMyAdmin وهو عبارة عن رسالة خطأ تشير إلى أن هناك خطأ في الجدول الذي يسمى "global_priv" في قاعدة البيانات MySQL. ويقوم نظام phpMyAdmin بمحاولة إصلاح هذا الجدول ، لكنه يعتبر أن الفهرس الخاص به تالف ولا يمكن إصلاحه. لذلك، يمكنك محاولة تشغيل أمر REPAIR TABLE على الجدول المتضرر باستخدام أداة MySQL مثل MySQL Command Line Client أو phpMyAdmin نفسه. REPAIR TABLE global_priv; وإذا لم يعمل الأمر السابق ، يمكنك حذف الجدول المتضرر وإعادة إنشائه، ويرجى ملاحظة أنه قد يتم فقدان البيانات في حالة حذف الجدول ، لذلك يرجى إجراء نسخ احتياطي قبل القيام بأي إجراءات. وأيضًا تأكدي من أن جدول باسم user حيث أن رسالة الخطأ تشير إلى أنه تم إجراء استعلام SELECT على جدول يسمى "mysql.user" في قاعدة البيانات MySQL والذي يطلب فقط تحديد صف واحد من الجدول باستخدام عبارة "LIMIT 1" وعندما يتم تنفيذ الاستعلام، فإنه يواجه خطأ. قد يكون السبب هو أن الجدول "mysql.user" غير موجود في قاعدة البيانات MySQL أو أن الحساب الذي يستخدمه phpMyAdmin للوصول إلى قاعدة البيانات لا يمتلك الأذونات اللازمة لعرض محتويات الجدول.
  14. إذا كنت متفرغ فأنصحك بتخصيص 6 إلى 10 ساعات يوميًا للمذاكرة، أما إذا كنت غير متفرغ فيمكنك تخصيص 3 ساعات يوميًا للمذاكرة أو ساعتان حيث أن أقل من ذلك لا يعتبر وقت كافي. وكلما زدت في الوقت والإجتهاد كان أفضل لك، ولكن ذلك لا يعني أن تخصص 10 ساعات لمشاهدة الفيديوهات بل خليط ما بين المشاهدة ثم الكتابة وراء المدرب أو بمفردك ومحاولة التغيير في الكود الذي كتبه المدرب وخلق تحدي بسيط لك وأيضًا البحث عن حل للمشاكل التي تواجهك من خلال القراءة أو مشاهدة فيديو على اليوتيوب مثلاً ولكن حاول البحث والقراءة أولاً. فلا تعود نفسك على رؤية الحل مباشرًة فعند البحث ستجد معلومات كثيرة أنت بحاجة إليها في البداية، وأيضًا ستكتشف المصادر الخاصة بالمعلومات والأدوات. أي أن الوقت اللازم يتوقف عليك أنت، فالبعض قد ينهي الدورة بشكل سريع لكن هل حقق الاستفادة المرجوة فعلاً؟ وهناك نصيحة، في البداية عليك أن تسير ببطيء من أجل الإسراع لاحقًا لا العكس، حيث أن الأساسيات هي ما ستوفر لك التعلم بشكل أسرع مستقبلاً وتجنب التخبط والتشتت. كل شخص له طريقة مفضلة في المذاكرة واسترجاع المعلومات، مثلاً إذا كان الكتابة بالورقة والقلم مريح لك ويفيدك فقم بتسجيل المعلومات الهامة التي تريد استرجاعها فيما بعد. والبعض يفضل مشاهدة 4 فيديوهات مثلاً ثم التطبيق بمفرده بدون الكتابة وراء المدرب، ومحاولة البحث، ثم الرجوع للفيديو لتذكر أمرًا ما أو رؤية كيفية تنفيذ كود معين. ودائمًا وأبدًا أفضل طريقة هي من خلال كتابة الكود، فمهما قمت بالمشاهدة حتى لو ألف ساعة، ذلك لا يغني عن كتابة الكود بيديك وتمرين عقلك على حل المشكلات البرمجية والتفكير قبل كتابة الكود. إذا كان الفيديو بحجم صغير فقم بمشاهدة فيديو حتى 4 فيديوهات تبعًا لما يناسبك، ثم قم بالتطبيق بمفردك لمحاكاة ما قام به المدرب، ثم حاول إضافة ميزة أو خاصية جديدة أو القيام بشيء معقد قليلاً أي اخلق تحدي بسيط يجعلك تبحث أو تفكر قليلاً إذا أردت. ولا مشكلة في الرجوع للفيديو لتذكر أمرًا ما، لكن ذلك ملاذك الأخير بعد التفكير والبحث. عند الرجوع للدورة بعد فترة إنقطاع، أفضل طريقة للاسترجاع هي بإعادة القيام بتنفيذ مشروع قمت بتنفيذه من قبل في الدورة. حيث أن ذلك سيحفزك إلى مذاكرة الأمور التي نسيتها من خلال إعادة المشاهدة أو البحث. وتستطيع أيضًا إعادة المشاهدة ولكن بسرعة 2X ثم إعادة التطبيق على مشروع لتثبيت ما تم استرجاعه.
  15. 1- لكي تظهر رسم بياني من Plotly.js في output في VSCode، تستطيع استخدام مكتبة "plotly-nodejs" والتي تسمح بإنشاء رسوم بيانية من Plotly.js دون الحاجة إلى فتح المتصفح. ولتثبيت هذه المكتبة باستخدام npm، اكتب الأمر التالي: npm install plotly-nodejs ثم يمكنك استخدام الكود التالي كمثال لإنشاء رسم بياني من Plotly.js وطباعته في output في VSCode: const plotly = require('plotly-nodejs'); const data = [ { x: [1, 2, 3], y: [4, 5, 6], type: 'scatter' } ]; const layout = { title: 'My Plotly Chart' }; plotly.plot(data, layout).then((figure) => { console.log(figure); }).catch((err) => { console.error(err); }); 2- لا يمكن التحكم في جدول Console باستخدام أوامر Console مثل console.table لأنها تتحكم فقط في كيفية طباعة البيانات في Console. ومع ذلك، تستطيع استخدام مكتبات Node.js مثل "cli-table" لإنشاء جداول مع تحكم كامل في التنسيق والعرض. ولتثبيت هذه المكتبة باستخدام npm، اكتب الأمر التالي: npm install cli-table وتستطيع استخدام الكود التالي كمثال لإنشاء جدول وطباعته في output في VSCode: const Table = require('cli-table'); const table = new Table({ head: ['Name', 'Age', 'Gender'], style: { head: ['green'], border: ['white'] } }); table.push( ['John', 30, 'Male'], ['Jane', 25, 'Female'], ['Bob', 45, 'Male'] ); console.log(table.toString());
  16. السبب في أن تغيير الاتجاه إلى اليمين وتحديد النص إلى اليمين يعمل في هذه الحالة هو استخدام القاعدة العامة "*". حيث أن علامة"*" تطبق تنسيقًا على جميع عناصر الصفحة، بما في ذلك النصوص والصور وغيرها، مما يجعلها قاعدة CSS عامة وقوية. بإضافة !important في النهاية، تمنع تطبيق أي قيمة CSS أخرى للعناصر المحددة، مما يجعل هذا التنسيق الأكثر أولوية ويتم تطبيقه بشكل قاطع على جميع العناصر. على الرغم من أن استخدام القاعدة العامة "*" و !important يمكن أن يكون حلًا سريعًا لتغيير محاذاة الموقع، إلا أنه يجب الانتباه إلى الأثر الجانبي الذي قد يكون لهذه الطريقة على التصميم العام للموقع، حيث يتم تطبيق التنسيق على جميع العناصر الموجودة في الموقع، بما في ذلك العناصر التي لا تتطلب تغييرًا في الاتجاه أو تحديد النص. لذلك، من الأفضل استخدام المحددات المحددة بدقة لتطبيق التنسيق الذي تريده بشكل أفضل. وأيضًا من الأفضل أن تنتيه جيدًا للـ CSS Specificity أثناء كتابة التسيقات، وسأشرح لك الأمر: تعتبر CSS Specificity (التحديدية) هي طريقة لتحديد أيّ تعليمات CSS ستطبّق على عناصر الصفحة، عندما يتواجد أكثر من قاعدة تعريف CSS تستهدف نفس العنصر. بمعنى آخر، الـ Specificity تحدد الأولوية بين القواعد المختلفة عند تطبيقها على نفس العنصر. يتم تحديد Specificity بناءً على عدد المحددات والفئات والعناصر المستخدمة في تحديد العنصر المستهدف في القاعدة CSS. تبدأ Specificity من أصفر إلى أعلى، حيث تتمثل في العدد الذي يتم تحديده بناءً على الأنواع الثلاثة التالية: 1- الـ Inline Styles تعتبر الأولوية العالية جدًا، حيث يتم كتابة الأوامر CSS مباشرة في العنصر، وتطبق هذه الأوامر دون أي تأخير. 2- الـ ID Selectors يأتي بعدها محدد الـ ID، والذي يتم تحديده بواسطة "#" متبوعاً بإسم الـ ID. على سبيل المثال، "#header". 3- الـ Classes والـ Attributes والـ Elements Selectors تأتي هذه التحديدات في المرتبة الأخيرة من ناحية التحديدية. ويشمل ذلك تحديد الـ class والـ attribute والـ element. على سبيل المثال، ".main-header"، "[type="text"]"، "p"، وهكذا. يتم ترتيب الأولويات كما يلي: الأولوية العالية للـ Inline styles. إذا كان هناك ID، فإنها تأخذ الأولوية على التحديدات الأخرى. إذا كانت التحديدات متساوية في ID، يتم التحقق من التحديدات الموجودة في الـ classes/attributes/elements. في حالة وجود تحديدات متساوية في جميع المستويات، يتم تطبيق الأخير الذي تم تعريفه في الكود.
  17. عليك بالتأكد من كتابة عنوان رابط الموقع بشكل صحيح، فمثلاً لو قمت بكتابة التنسيق التالي لرابط أكاديمية حسوب ستجد أن الإتجاه تغير: https://academy.hsoub.com body { direction: ltr; }
  18. الخطأ يعني أن GD Library غير متاحة في مكان تثبيت PHP الخاص بك، وتحتاج إلى تثبيتها وتمكينها على الخادم الخاص بك لتتمكن من تحويل الصور وتغيير حجمها باستخدام مكتبة الوسائط Spatie. وتستطيع القيام بذلك عن طريق التحقق من تثبيت GD Library على الخادم الخاص بك وتمكينها في ملف php.ini الخاص بـ PHP. بعد تمكين GD Library يجب أن تعمل Spatie media library بشكل صحيح ويمكنك رفع الصور بنجاح. وعلى نظام ويندوز تستطيع تحميل وتثبيت ملف DLL الخاص بـ GD Library من على الموقع الرسمي لـ PHP. وعليك بالعثور على الإصدار الصحيح من GD Library الذي يتوافق مع إصدار PHP الذي تستخدمه، ثم تحميل الملف DLL ونسخه إلى مجلد ext في مكان تثبيت PHP الخاص بك. ثم تفعيلها في ملف php.ini عن طريق إضافة السطر التالي: extension=gd وهناك حزمة أخرى لتعامل مع الصور تستخدم على نطاق واسع في لغة PHP وتدعى "ImageMagick"، وتلك الحزمة تتيح لك التلاعب بالصور بطريقة متقدمة أكثر من GD Library وتدعم تنسيقات الصور الشائعة. وتستطيع تثبيت ImageMagick على الخادم الخاص بك بنفس الطريقة التي تم تثبيت GD Library بها. بمجرد تثبيت ImageMagick وتمكينه في ملف php.ini الخاص بـ PHP، يمكنك استخدامها مع Spatie media library أو أي حزمة أخرى لتعامل مع الصور في PHP. والجدير بالذكر أنه يمكن استخدام GD Library و ImageMagick معًا في نفس الوقت في بعض الحالات للحصول على أفضل نتائج التلاعب بالصور في PHP.
  19. يتم إضافة shadow تلقائيًا على الشرائح في swiper أو للدقة يتم إضافة linear-gradient من خلال خاصية background-image فكما ترى في الصورة هناك كلاس باسم: swiper-slide-shadow-left swiper-slide-shadow-right وهو المسؤول عن إضافة الظل الذي تراه، ولحل تلك المشكلة، يمكنك استخدام التنسيق التالي في ملف App.css لديك: .swiper-slide-shadow-left, .swiper-slide-shadow-right { background-image: none !important; }
  20. يجب أن تحدد ما الذي تريد فعله بالضبط من خلال تعلمك PHP و وورد بريس. هل تريد إنشاء مشروع خاص بك فقط، أو العمل بواسطة وورد بريس فقط؟ أي أنك ستتخصص في وورد بريس؟ ذلك ممكن بالتأكيد، لكن إذا أردت العمل بشكل إحترافي والحصول على وظيفة، فيجب تعلم إطار لارافيل فهو ما يعطي للغة PHP قيمتها في سوق العمل، فبدونه لكانت اللغة قل استخدامها بشكل كبير منذ سنوات. ويجب عليك استكشاف المهارات المطلوبة لوظيفة مطور PHP وتعلم تلك المهارات، ألقي نظرة على مواقع التوظيف وإنظر على أكثر من وظيفة وتعلم المهارات التي تم طلبها بكثرة، والتي بالطبع ستجد من ضمنها إطار لارافيل وأحيانًا تجد مطلوب إطار Vue.js للواجهة الأمامية. وبالطبع بعض الوظائف تطلب خبرة في وورد بريس، لذلك كما قلت لك الأمر يتوقف على ما تريده، ونصيحتي هي قم بالتعلم بالتدريج ولا تستعجل وطبق على أكثر من مشروع أو قم بإعادة بناء المشروع بمفرد بعد الإنتهاء منه، ولا تتسرع في الإنتقال للقسم التالي. وبالطبع هناك فرص عمل لمطور وورد بريس فقط سواء في سوق العمل أو على مواقع العمل الحر، لكن أنت تحصر نفسك في جزء صغير فقط والأفضل زيادة المهارات الخاصة بك وبالتالي ستحصل على فرص عمل أفضل
  21. هناك 3 طرق لحساب الدقة: 1- حساب نسبة الدقة باستخدام وظيفة ABS في إكسل يمكنك استخدام وظيفة ABS في إكسل لحساب نسبة الخطأ أولاً، ثم طرح الخطأ من 1 سيعطيك نسبة الدقة. أدخل الصيغة التالية في الخلية E5 كما هو موضح في الصورة التالية: =1-ABS(C5/D5-1) ثم، انقر على أيقونة % لتطبيق تنسيق الرقم النسبي. بعد ذلك، انقر نقرًا مزدوجًا على أيقونة Fill Handle أو اسحبها لتطبيق الصيغة على الخلايا أدناه. 2- حساب نسبة الدقة باستخدام وظيفة IF في إكسل يمكنك استبدال وظيفة ABS بوظيفة IF في إكسل للحصول على نفس النتيجة. أولاً، ضع الصيغة التالية في الخلية E5 كما هو موضح أدناه. =1-IF(C5>D5,(C5-D5)/D5,(D5-C5)/D5) ثم، ضع تنسيق الرقم النسبي في تلك الخلية عن طريق النقر على أيقونة % من علامة التبويب الرئيسية. بعد ذلك، ضع الصيغة على جميع الخلايا أدناه باستخدام أيقونة Fill Handle. 3- استخدام وظيفة MIN-MAX لحساب نسبة الدقة في إكسل بديلًا، يمكنك استخدام وظائف MAX و MIN في إكسل لذلك، تعيد وظيفة MAX القيمة القصوى داخل نطاق معين بينما تعيد وظيفة MIN القيمة الدنيا. أولاً، أدخل الصيغة التالية في الخلية =1-(MAX(C5:D5)-MIN(C5:D5))/D5 ثانيًا، حدد تنسيق الرقم النسبي باستخدام أيقونة % كما هو موضح في الصورة أدناه. أخيرًا، ضع الصيغة على جميع الخلايا أدناه باستخدام أيقونة Fill.
  22. سأشرح لك الأمر من خلال الخطوات التي عليك إتباعها لإنشاء قاعدة بيانات تحتوي على بيانات باللغة العربية والإنجليزية: 1- يتم تحديد الحقول التي سيحتويها الجدول بما في ذلك الحقول المشتركة بين اللغتين والحقول الخاصة بكل لغة. | اسم الكتاب | اسم الكاتب | السعر باللغة العربية | السعر باللغة الإنجليزية | 2- تحديد تنسيق الحقول لتتناسب مع النصوص المكتوبة باللغتين، مثلاً، تحديد تنسيق الحقل للنصوص بحيث يمكن دعم النصوص الطويلة في اللغة العربية. | اسم الكتاب | varchar(100) | | اسم الكاتب | varchar(50) | | السعر باللغة العربية | decimal(10,2) | | السعر باللغة الإنجليزية | decimal(10,2) | 3- تحديد ترميز البيانات الذي يسمح بتخزين النصوص باللغتين العربية والإنجليزية بدون أخطاء. يمكن استخدام UTF-8 كترميز يدعم النصوص باللغتين. 4- تخزين البيانات في الجدول بطريقة تمكن من الوصول إلى النصوص باللغتين على حد سواء، حيث تستطيع استخدام حقل مشترك للنصوص العامة وحقول مخصصة لكل لغة للنصوص الخاصة باللغة. وتستطيع تخزين نفس البيانات باللغة العربية والإنجليزية أو أي لغات أخرى أخرى في قواعد البيانات بحيث يكون لكل لغة حقل مخصص لها، ويتم ذلك عن طريق تحديد نوع الحقل ليتناسب مع نوع البيانات المخزنة فيه. مثلاً، جدول يحتوي على حقلين لكل بيان (اسم المستخدم والجنسية)، أحدهما مخصص للغة العربية والآخر مخصص للغة الإنجليزي، وتخزين الاسماء والجنسيات باللغة المناسبة في كل حقل من هذين الحقلين.
  23. أنا أكره النصائح المكتلجة أي العامة والتي لا تصلح للجميع بدون معرفة تفاصيلهم الشخصية، حيث أن بعض النصائح قد تضر والمقصود هو الإفادة! وسأحاول نصيحتك بدون أن أضرك، في البداية أن تسير مع القطيع أفضل لك من تسير عكس التيار، فالأمر بحاجة إلى مجهود عظيم أنت في غنى عنه ولا أعرفك شخصيًا هل ستتحمل ذلك أم لا. نصيحة غريبة صحيح؟ أتفهم ذلك، لكن من تجربة واقعية أن تقوم بفعل ما يفعله الجميع بشكل روتيني أفضل لك من أن تقوم بمحاولة تشكيل الواقع تبعًا لما تريده أنت. أي لا تقم بالتركيز على أي شيء آخر غير الدراسة في الوقت الحالي، وفي فترة الأجازة قم بتعلم البرمجة إن كنت صادقًا فعلاً في تعلمها. وبعد الإنتهاء من الثانوية العامة سيتحدد مصيرك الأكاديمي فإما بكلية جيدة ولها مستقبل أو كلية شهادة فقط، والشهادة هامة جدًا في عالمنا العربي لا تستهن بها. وأنصحك بالإجتهاد للحصول على مجموع يؤهلك لدخول كلية حاسبات ومعلومات، حيث ستقطع أشواطًا وتسهل على نفسك الأمر في تعلم البرمجة وستجد حافز كبير وأصدقاء لهم نفس الهدف أيضًا، وهو أمر عظيم. ودائمًا في حياتك ضع أولويات، فمثلاً الدراسة لها وقت محدد وتنتهي، أي أنك لو لم تجتهد لفشلت دراسيًا وفوت على نفسك فرص جيدة لمستقبلك. وتأني ولا تستعجل وقارن نفسك بنفسك فقط وليس بالآخرين، وأنت أدرى بظروفك، ولكن لا تتكاسل، ولا تشغل بالك بأمور كثيرة خاصة بالمستقبل فتفشل في حاضرك ومستقبلك، بل ركز على ما ستفعله خلال فترة سنة إلى سنتين. ولا تشغل بالك كثيرًا بالرزق، فقط إجتهد في المذاكرة وتطوير نفسك في فترات فراغك من الدراسة، وأيضًا اختر أصدقائك جيدًا، فصدقني أنت هو متوسط أقرب 5 أشخاص لك وشخصيتك ستتشكل بناءًا على ذلك وأفعالك وتفكيرك أيضًا، فاخترهم جيدًا.
  24. تستطيع استخدام حلقتي for بدلاً من ذلك، حيث تقوم الحلقة الداخلية بتخزين قيم h، v، a، والحلقة الخارجية بتخزين قيم phi. بعد ذلك، يمكن رسم الرسم البياني باستخدام المكتبة المناسبة، مثل Plotly طالما أنك تستخدم JavaScript. وقد تبدو بعض القيم مكررة لأنك تستخدم خطوة 0.5 في الحلقة الداخلية وبعض القيم تحتوي على مجموعة من الأرقام العشوائية الصغيرة التي يمكن أن تؤدي إلى تقريب القيمة بشكل غير دقيق. وبالنسبة لعرض القيم كجدول ورسم بياني، تستطيع استخدام المكتبة المذكورة أعلاه أو أي مكتبة أخرى، أو ببساطة إنشاء جدول HTML يعرض القيم بطريقة منظمة وسهلة القراءة، وإنشاء رسم بياني باستخدام المكتبة التي تفضلها.
×
×
  • أضف...