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

Mustafa Suleiman

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

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

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

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

    365

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

  1. أولاً استعوض الله في بياناتك، وقم بعمل Format للهارد بالكامل، ولكن احذر حيث أن بعض فيروسات الفدية قد تظل موجودة بعد الفورمات لذلك قم بتجربة إضافة بعض الملفات بعد تثبيت نسخة ويندوز جديدة بعد الفورمات وقم بعمل إعادة تشغيل للجهاز فإن لم يتم التشفير، فتلك إشارة جيدة، ولكن حاول تثبيت برنامج Bitdefender قبل استخدام الجهاز لضمان وجود حماية من قبل برنامج حماية قوي. وفي حال كان هناك فلاشة Flash USB متصلة بالجهاز، فقم بعمل فورمات لها أولاً ثم قم بنزعها. وعليك بتجنب استخدام أي كراكات أو تصفح مواقع مشبوهة، فقلة الوعي الأمني يعرضك للكثير من المخاطر، ولا تقم بتحميل أي شيء من على الإنترنت بدون دراية ووعي، والتحميل فقط من المواقع الرسمية الموثوقة. وللعلم هناك إمكانية لفك التشفير في حال كان إمتداد الملفات لديك متعارف على التشفير الخاص بها، وتستطيع تفقد ذلك من خلال المواقع التالية: https://noransom.kaspersky.com https://www.nomoreransom.org/en/decryption-tools.html قم بالبحث عن إمتداد الملف أو اسم الفيروس الذي يظهر لديك، وسيظهر لك في حال كان هناك فك تشفير له، لكن ذكرت لك الحل الأسهل في البداية وهو الفورمات.
  2. الأمر يعتمد على مدى الثقة لديك بالمستقل الذي تريد العمل معه، والأمر يظهر بمدى سنوات الخبرة لديه وأيضًا بتقييمات العملاء السابقة، فحاول إختيار شخص لديه أسبقية عمل وتقييمات جيدة. وهناك عدة خيارات متاحة أمامك ولكن ذلك يعتمد على ما الذي تريد تطويره أو تغييره في متجرك، فالخيار الأول هو أن تعطيه كلمة المرور واسم المستخدم للوحة cPanel وليس كلمة المرور الخاصة بحسابك كعميل في الاستضافة انتبه إلى ذلك فهما أمران مختلفان فأنت المتحكم بحسابك طالما تمتلك كلمة المرور الخاصة بحسابك على الاستضافة أما لوحة التحكم cPanel فلها كلمة مرور مختلفة. والخيار الثاني، هو أن تقوم بإنشاء حساب له للدخول على لوحة التحكم cPanel من خلال user manager كما بالصورة: ومنها تستطيع تحديد الصلاحيات الخاصة بالحساب وتستطيع إعطائه صلاحية FTP فقط، والمسار الذي تريده لكي يعمل عليه فقط مثل مسار puplic_html/site كمثال. وهناك خيار webdisk للوصول لملفات الموقع عن طريق لوحة التحكم cPanel، وتستطيع تحديد المسار أيضًا. وتستطيع حذف الحساب، أو تغيير الباسورد الخاص بك للوحة التحكم cPanel في أي وقت لو شعرت بالقلق. وهناك خيار آخر وهو السماح له بالدخول على جهازك عن طريق برنامج مثل TeamViewer وتستطيع رؤية ما يفعله، لكن إذا كان الأمر يتطلب تطوير وتعديل وإصلاحات فذلك الخيار لن يكون جيد حيث يجب توفير مساحة حرية ليعمل بها وفي الوقت المناسب له، أما إذا كان سيتم نشر ما قام بتطويره مباشرًة بعد أن يقوم بتنفيذ التطوير على جهازه فلا مشكلة. وتستطيع أيضًا أن تقوم بإنشاء حساب له على منصة OpenCart عن طريق الإعدادات ثم users أو المستخدمين ثم قم بالضغط على علامة الزائد + لإضافة حساب واعطه صلاحية Admin لكي يتمكن من التطوير.
  3. بالتأكيد فإطار Bootstrap يعمل مع أي إطار أو مكتبة خاصة بالواجهة الأمامية، مثل React أو Angular أو أي إطار عمل آخر لجافا سكربت. حيث أن Bootstrap هو إطار عمل موجه لتصميم وتطوير واجهة المستخدم، وهو مستقل عن الإطار العمل الذي تستخدمه. ولتنفيذ ذلك، تستطيع تضمين مكتبة Bootstrap في مشروعك الخاص بـ React أو Angular، باستخدام أدوات مثل npm أو yarn لتثبيت Bootstrap ومكتبته الأساسية (CSS)، ثم استيراد الملفات اللازمة في مشروعك. ولمعلوماتك عند استخدام Bootstrap مع React، بإمكانك استخدام مكتبات إضافية مثل "react-bootstrap" التي توفر عناصر ومكونات React متوافقة مع Bootstrap، وبذلك ستتمكن من الاستفادة من قوة Bootstrap وفي الوقت نفسه توافقها مع تصميم وتفاعلية React. بالنسبة لـ Angular، تستطيع استخدام Bootstrap مباشرة من خلال تثبيته وتضمينه في مشروع Angular، واستيراد ملفات CSS الخاصة بـ Bootstrap في ملفات الأنماط (stylesheets) الخاصة بمشروعك، وأيضًا استخدام المكونات الموجودة في Bootstrap في تطبيق Angular. واعتمادًا على الإطار العمل الذي تستخدمه، ستجد أن هناك بعض الاختلافات في كيفية تضمين Bootstrap واستخدامه بشكل صحيح. لذا، يجب تفقد المستندات الرسمية للإطار الذي تنوي استخدامه عن كيفية تضمين مكتبة Bootstrap بداخله.
  4. أولاً وقبل أي شيء، عليك بتعلم لغة برمجة، وطالما أنك تريد مجال تعلم الآلة فعليك بتعلم لغة بايثون، وستجد في أكاديمية حسوب دورة تطوير التطبيقات باستخدام لغة Python. وفي تلك الدورة سيتم التدرج في تعلم لغة بايثون والتطبيقات الخاصة بها، بدايًة من الأساسيات والتطبيق عليها ثم تعلم Flask وDjango وOdoo ثم وصولاً إلى تعلم أساسيات تحليل البيانات و تعلم الآلة Machine Learning. بعد ذلك تستطيع التعمق في مجال تعلم الآلة والدورات الخاصة بها، سواء عن طريق البحث على يوتيوب على دورة عربية من خلال البحث عن "كورس تعلم الآلة" وستجد بعض الكورسات. أو البحث باللغة الإنجليزية عن "machine learning course" وستجد العديد من الكورسات. وقم بنفس الأمر على جوجل أيضًا وستجد نتائج عديدة، وتستطيع التوجه إلى موقع مثل Udemy أو Coursera ثم تفقد الكورسات المتاحة هناك سواء عربية أو أجنبية.
  5. قد يبدوا لك الأمر غير مهم الآن، لكنه في غاية الأهمية، حيث أن GitHub هي منصة لاستضافة الكو البرمجي وتتيح لك تخزين المشاريع والكود والتعاون مع الآخرين وتتبع التغييرات على مدار الوقت. ويستخدم GitHub نظام Git، وهو نظام للتحكم في الإصدارات يتيح لك تتبع التغييرات في الكود على مر الزمن، وتلك مهارة قيمة لأي مبرمج ويجب إمتلاكها، حيث يجنبك مشكلة فقد ملفات المشروع مع إمكانية العودة إلى الإصدارات السابقة من الكود إن احتجت إلى ذلك في حال وجود مشكلة في الكود الحالي لديك. أيضًا يجعل GitHub عملية التعاون مع الآخرين في المشاريع البرمجية سهلة للغاية، حيث تستطيع إنشاء مستودعات يتم مشاركتها مع مستخدمين آخرين، وتتبع تغييرات بعضكم البعض، وأيضًا عند العمل في شركة سيتعين عليك رفع ما قمت به إلى مستودع المشروع في GitHub وسيتم مراجعته والموافقة عليه أو رفضه والإشارة إلى السبب لتعديل الكود. بالإضافة إلى أن حسابك على GitHub هو بمثابة معرض أعمال المبرمج، وعند التقدم على وظيفة يتم النظر عليه والسؤال عنه، ومن خلال مشاركة مشاريعك ومساهماتك في مشاريع أخرى، يمكنك عرض قدراتك وجعل نفسك أكثر جاذبية لأصحاب العمل المحتملين. وستفهم ما أعنيه عند استخدامه بشكل عملي، ولا تقلق ستعتاد عليه مع الوقت وربما ستواجه صعوبة في فهمه في البداية، وأنصحك بمشاهدة الفيديو التالي:
  6. أرجو منك وضع السؤال الخاص بك أسفل فيديو الدورة الخاص بالسؤال، ليتم مساعدتك بشكل أفضل، وأيضًا رفع ملف المشروع لتفقده.
  7. بعد تنفيذ ما أخبرك به عدنان، الأفضل لك هو استخدام إضافة Live Server حيث سيتم إنشاء سيرفر وعرض التغييرات التي تجريها بشكل فوري في المتصفح، بعد تثبيت الإضافة ستجد أنه ظهر خيار باسم Go live كما بالصورة فاضغط عليه وسيتم عرض المشروع الخاص بك: وتستطيع إيقاف السيرفر بالضغط على نفس الزر، ولكن سيكون باسم المنفذ أي كالتالي Port: 5500 فاضغط عليه وسيتم إيقافه.
  8. ستجد تطبيق عملي على كل قسم في الدورة، فبالنسبة للأساسيات، هناك مشروع تطبيق إدارة مهام. وبعد الإنتهاء من المشروع، يتم زيادة درجة تعقيد المشاريع في القسم التالي وهو تطبيقات عملية باستخدام بايثون Python والذي به تطبيقات مختلفة كالتعامل مع جداول بيانات إكسل Excel وword وPDF وأيضًا تعلم Web Scraping وغيرها. ثم تنتقل للقسم الذي يليه، وهو أساسيات إطار العمل جانغو Django والذي به مشروع تطبيق لإدارة المشاريع وإنشاء لوحة تحكم له ثم نشره على الويب، بعد ذلك تنتقل إلى مشروع آخر وهو تطوير متجر إلكتروني باستخدام جانغو Django. وبعد الإنتهاء من ذلك تنتقل إلى تطوير واجهة برمجية لتعديل الصور باستخدام فلاسك Flask، وأيضًا هناك مشروع آخر وهو بناء مدونة باستخدام فلاسك Flask. ثم تنتقل إلى تعلم تطوير تطبيقات أودو Odoo والذي به تعمل على بناء تطبيق وجباتي. وبعد ذلك تنتقل إلى تعلم تحليل البيانات ثم أساسيات تعلم الآلة Machine Learning. وبخلاف ذلك تستطيع البحث على يوتيوب عن مشاريع خاصة ببايثون مثلاً مشاريع للمبتدئين أو ابحث عن مشاريع Django وهكذا وستجد الكثير من المشاريع التي تناسب مستواك واختر منها وتعلم بجانب الدورة، فذلك ما يجب عليك فعله في أي دورة لثقل مهاراتك وزيادة خبراتك وعدم الإنتقال من قسم إلى قسم إلا بعد أن تصبح قادر على تنفيذ مشاريع بمفردك.
  9. صحيح، فأنت نسيت تعريف المتغير face_details_list في الكود، ويستخدم هذا المتغير في دالة draw_face التي تستقبل قائمة تفاصيل الوجه. وتستطيع تعريف face_details_list بشكل منفصل قبل استدعاء الدالة draw_face وتمريره كوسيط للدالة عند استدعائها، كالتالي: import turtle face_one = [ [(-40, 120), (-70, 260), (-130, 230), (-170, 200), (-170, 100), (-160, 40), (-170, 10), (-150, -10), (-140, 10),(-40, -20), (0, -20)], [(0, -20), (40, -20), (140, 10), (150, -10), (170, 10), (160, 40), (170, 100), (170, 200), (130, 230), (70, 260),(40, 120), (0, 120)] ] face_two = [ [(-40, -30), (-50, -40), (-100, -46), (-130, -40), (-176, 0), (-186, -30), (-186, -40), (-120, -170), (-110, -210),(-80, -230), (-64, -210), (0, -210)], [(0, -210), (64, -210), (80, -230), (110, -210), (120, -170), (186, -40), (186, -30), (176, 0), (130, -40),(100, -46), (50, -40), (40, -30), (0, -30)] ] face_three = [ [(-60, -220), (-80, -240), (-110, -220), (-120, -250), (-90, -280), (-60, -260), (-30, -260), (-20, -250),(0, -250)], [(0, -250), (20, -250), (30, -260), (60, -260), (90, -280), (120, -250), (110, -220), (80, -240), (60, -220),(0,-220)] ] turtle.hideturtle() turtle.bgcolor("#ba161e") turtle.setup(500, 600) turtle.speed(3) def draw_face(face_details_list, start_point): my_turtle = turtle.Turtle() my_turtle.penup() my_turtle.goto(start_point) my_turtle.pendown() my_turtle.color("#fab104") my_turtle.begin_fill() for i in range(len(face_details_list[0])): x, y = face_details_list[0][i] my_turtle.goto(x, y) for i in range(len(face_details_list[1])): x, y = face_details_list[1][i] my_turtle.goto(x, y) my_turtle.end_fill() face_one_start = (0, 120) face_two_start = (0, -30) face_three_start = (0, -220) draw_face(face_one, face_one_start) draw_face(face_two, face_two_start) draw_face(face_three, face_three_start) turtle.done() ما تم تعديله هو تعريف face_details_list بشكل منفصل قبل استدعاء الدالة draw_face وتمريرها كوسيط للدالة عند استدعائها، وأيضًا نقل تعريف my_turtle داخل دالة draw_face لضمان إنشاء كائن Turtle جديد لكل وجه.
  10. جميع الدورات مدفوعة وذلك من أجل تقديم محتوى يستحق الدراسة وقد تم إنشاء الدورات من قبل مختصين وعلى أساس منهجي مناسب للمبتدئين والتطبيق على مشاريع حقيقية وليست مجرد نماذج. ويتم تحديث الدورات بشكل دوري كل 3 إلى 6 أشهر، ويتم إضافة مسارات جديدة، وتستطيع الوصول إلى ذلك مدى الحياة ومزايا أخرى تستطيع معرفتها من التفاصيل المتاحة في صفحة الدورة. وأيضًا لديك وصول للقسم الأول من جميع الدورات الأخرى من أجل زيادة معلوماتك واستكمال ما ينقصك إذا أردت أو الإطلاع على الدورة. وتستطيع الوصول لصفحة الدورات والإطلاع على التفصيل الخاصة به من هنا. وأيضًا تستطيع إلقاء نظرة على صفحة آخر التحديثات لرؤية ما تم تحديثه في الدورات. وبخصوص الكوبونات والعروض فقد تم توضيح ذلك هنا:
  11. هل يمكنك توضيح ما الخطأ الذي يظهر لك، انسخه وألصقه هنا بشكل نصي أو صورة للمشكلة. فربما هناك خطأ آخر في الكود، مثل أن يكون face_details_list لا يحتوي على قيم صحيحة للإحداثيات x و y. حاول التحقق من أن face_details_list يحتوي على القيم الصحيحة للإحداثيات، ومن تنسيق البيانات داخل face_details_list للتأكد من أن القيم المخزنة فيه صحيحة ومطابقة للتوقعات. وقم بمشاركة الكود بشكل كامل والخطأ الذي يظهر لك ليتم مساعدتك بشكل أفضل.
  12. الخطأ هو أنه لم يتم تعريف المتغير turtle قبل استخدامه، والصحيح هو استيراد واستخدام مكتبة turtle، وتعريف كائن من الفئة Turtle لتنفيذ الأوامر كالتالي: import turtle # تعريف الكائن الخاص بالرسم my_turtle = turtle.Turtle() # الحلقة الأولى for i in range(len(face_details_list[0])): x, y = face_details_list[0][i] my_turtle.goto(x, y) # الحلقة الثانية for i in range(len(face_details_list[1])): x, y = face_details_list[1][i] my_turtle.goto(x, y) # إيقاف البرنامج من أجل عرض النتيجة turtle.done() أولاً استيراد مكتبة turtle في البداية وتعريف كائن جديد من الفئة Turtle بواسطة السطر my_turtle = turtle.Turtle(). ثم استخدام الكائن my_turtle لتنفيذ أوامر الرسم مثل goto وتحريكه إلى الإحداثيات المحددة، عند الانتهاء من الحلقات، تستدعى turtle.done() لإيقاف البرنامج وعرض النتيجة المرسومة.
  13. معنى الخطأ هو أن الدالة write_to_excel() تتطلب وسيط إضافي يسمى "file_path" ولم تقدمه عند استدعاء الدالة. أي يجب عليك تمرير مسار الملف الذي ترغب في الكتابة إليه كواحدة من المعاملات عند استدعاء الدالة write_to_excel()، وتأكد من تقديم المسار الصحيح للملف في الدالة. وإليك مثال يوضح كيفية استخدام win32com لكتابة بيانات إلى ملف Excel: import win32com.client as win32 def write_to_excel(file_path): excel = win32.gencache.EnsureDispatch('Excel.Application') wb = excel.Workbooks.Add() ws = wb.Worksheets('Sheet1') # كود الكتابة إلى الخلايا في الملف ws.Range('A1').Value = 'Hello' ws.Range('B1').Value = 'World' wb.SaveAs(file_path) excel.Application.Quit() file_path = 'C:/yourfolder/file.xlsx' write_to_excel(file_path) وعليك تغيير 'C:/yourfolder/file.xlsx' بالمسار الصحيح لملف Excel الذي ترغب في الكتابة إليه. وإذا استمرت المشكلة لديك، أرفق الكود سواء برفع مجلد المشروع أو من خلال إضافته من علامة <> لمساعدتك بشكل أفضل
  14. صحيح، فكل الأشياء (المتغيرات، الدوال، القوائم، الصفوف، وغيرها) عبارة عن كائنات. وفي بايثون، يتم التعامل مع البيانات والعمليات على شكل كائنات. الكائنات تحتوي على خصائص (بيانات) وأساليب (وظائف)، ويمكن للكائنات التفاعل مع بعضها البعض وتبادل البيانات والمعلومات. ومن الممكن أن تكون الكائنات من الأنواع المدمجة في بايثون مثل الأعداد والسلاسل والقوائم والقواميس. ومن الممكن أيضًا أن تكون الكائنات من الأنواع المخصصة التي يتم إنشاؤها بواسطتك، وكل شيء في بايثون يعتبر كائنًا، بما في ذلك المفاهيم الأساسية مثل الدوال والمتغيرات، كالتالي: class Person: def __init__(self, name, age): self.name = name self.age = age def introduce(self): print("My name is", self.name, "and I'm", self.age, "years old.") # إنشاء كائن من النوع "Person" person = Person("أحمد", 25) person.introduce() # الطباعة: My name is أحمد and I'm 25 years old. تم تعريف الكائن Person المخصص باستخدام الكلمة المفتاحية class، وتحديد خصائص وأساليب الكائن في الداخل. مثل تحديد خاصيتين له (الاسم والعمر) بالإضافة إلى أسلوب (introduce) يقوم بطباعة معلومات الشخص، ثم إنشاء كائن من النوع "Person" واستدعاء الأسلوب (introduce) لطباعة المعلومات. وكمثال آخر للتوضيح، لنفترض أن لدينا كائنًا من النوع "قائمة" (List) يحتوي على أرقام: numbers = [1, 2, 3, 4, 5] فتستطيع الوصول إلى خصائص الكائن واستخدام الأساليب المتاحة له، كاستخدام الأسلوب append() لإضافة عنصر جديد إلى القائمة: numbers.append(6) print(numbers) والنتيجة هي طباعة القائمة بعد إضافة العنصر الجديد: [1, 2, 3, 4, 5, 6] و باستخدام الأسلوب append() المتاح لكائن القائمة (الكائن numbers) أضفنا العنصر 6 إلى نهاية القائمة.
  15. ضع أمر طباعة بعد storedData لتفقد ما القيمة التي يتم إرجاعها؟ const storedData = localStorage.getItem('data'); console.log(storedData) فإذا كانت قيمة falsy مثل null أو undefined فلم يتم تنفيذ الكتلة الخاصة بـ if. وإذا استمرت المشكلة أرفق مجلد المشروع.
  16. إذا كان لديك خبرة في اللغات الأساسية وهي HTML, CSS, JS وتريد التطبيق بشكل مباشر فلا مشكلة، لكن إذا كنت في بداية تعلمك فلا أنصحك بذلك إطلاقًا. فتعلم الأساسيات والتطبيق عليها دون محاولة التخطي سريعًا للتطبيق على مشاريع كاملة هو الطريق الصحيح، فصدقًا ستعاني لو قمت بذلك عليك بالتأني في مرحلة تعلم الأساسيات وهي مرحلة طويلة نسبيًا لكن ستجني ثمار ذلك عند تنفيذ المشاريع على فهم واستيعاب لما تقوم به وستصبح قدرتك على المشاكل التي تواجهك أفضل. وأنصحك مرة أخرى بألا تستعجل في تعلم الأساسيات، حاول التطبيق والتعلم والاستزادة من أكثر من مصدر ولا تكتفي بالدورة فقط، وابحث عما تريد معرفته، وستجد على اليوتيوب مشاريع كثيرة للمبتدأين باللغات الأساسية HTML, CSS, JS. وبخصوص JS يوجد معلومات إضافية في المسار الأول في دورة تطوير التطبيقات باستخدام لغة JavaScript، وجميع المسارات الأولى من الدورات الأخرى متاحة لك بشكل مجاني، وأيضًا على يوتيوب ابحث عن مشاريع جافاسكريبت للمبتدئين وحاول تنفيذها وابحث عما تريد معرفته، سواء على يوتيوب أو على جوجل وتستطيع السؤال هنا وسيتم مساعدتك. وهناك نقاشات مفيدة حاول قراءتها بتأني:
  17. في البداية أنت تحاول استدعاء localStorage.getItem('data') للحصول على القيمة المخزنة في الـ localStorage تحت المفتاح "data"، ثم التحقق مما إذا كانت القيمة معرفة بالفعل أم لا باستخدام الشرط localStorage.getItem('data') !== undefined. وإذا كانت القيمة غير معرفة (أي undefined)، فسيتم تعيين قيمة افتراضية فارغة [] للـ data. لكن، قبل تعيين القيمة للـ data، ما يتم هو تحليل القيمة المسترجعة من localStorage كصيغة JSON باستخدام JSON.parse(localStorage.getItem('data')). فإذا كانت القيمة المسترجعة غير صالحة كـ JSON، فيتم إطلاق خطأ بصيغة: SyntaxError: Unexpected token u in JSON at position 0 أو SyntaxError: Unexpected token < in JSON at position 0. ولتجنب حدوذ ذلك عليك بالتحقق من صحة القيمة المسترجعة من localStorage قبل تحليلها كـ JSON. باستخدام الدالة JSON.parse() داخل عبارة try-catch للتعامل مع أي أخطاء تحليل الصيغة، هناك طرق مختلفة لمعالجة المشكلة، ومنها الحل التالي: let initialData = []; const [data, setData] = useState(initialData); const storedData = localStorage.getItem('data'); try { if (storedData) { initialData = JSON.parse(storedData); } } catch (error) { console.error('Error parsing stored data:', error); } وقمت بتخزين القيمة المسترجعة من localStorage في متغير storedData. ثم استخدام عبارة try-catch لمحاولة تحليل الصيغة باستخدام JSON.parse() وتعيين القيمة إلى initialData في حال نجح التحليل، وإذا حدث أي خطأ أثناء التحليل، فسيتم طباعة رسالة الخطأ في وحدة التحكم ويتم تعيين القيمة الافتراضية [] لـ initialData. أخيرًا، تعيين القيمة النهائية للـ data باستخدام useState(initialData).
  18. أرجو منك طرح السؤال أسفل فيديو الدورة المتعلق بالسؤال، وطرح الأسئلة العامة الغير المتعلقة بالدورة هنا، وذلك لكي يتم مساعدتك بشكل أفضل.
  19. عليك بتعديل المسار كما أشرت إليك فأنت تشير إلى المسار الكامل لكن يجب الإشارة إلى المسار بناءًا على مكان ملف App.sj، جرب استخدام المسار الذي أشرت إليك به، وإذا استمرت المشكلة أرفق مجلد المشروع بعد ضغطه.
  20. عند استخدام React.js و React Native، فإنك لن تحتاج إلى التعامل مباشرة مع DOM و BOM بنفس الطريقة التقليدية. وفي React.js، يستخدم Virtual DOM (DOM افتراضي) لتمثيل الهيكل الشجري للعناصر المرئية في التطبيق، وتقوم React بإدارة تحديثات الـ DOM بشكل فعال ويقوم بإعادة رسم المكونات فقط عند الحاجة، مما يوفر أداءً محسّنًا، لذلك، لا تحتاج إلى التعامل مباشرة مع DOM الحقيقي في معظم الحالات عند استخدام React.js. ومن الأفضل لك فهم الـ DOM بشكل جيد، وإلا ستعاني في فهم ما يحدث، أو البعض يتغاضى عن ذلك ويستخدم التنقية بدون فهم، وأنا لا أنصحك بذلك أبدًا. بالنسبة لـ React Native، فهي تتيح لك بناء تطبيقات محمولة باستخدام JavaScript وتقوم بترجمة الكود إلى عناصر واجهة المستخدم الأصلية للمنصة التي تعمل عليها التطبيق، وبناء وتنسيق العناصر المرئية بدلاً من التعامل المباشر مع DOM و BOM. لكن فهم أساسيات DOM و BOM لا غنى عنه إذا أردت أن تصبح مطور ويب جيد وليس مستخدم للتقنيات فقط، ونصيحتي إليك هي بالتركيز على تعلم الأساسيات في أي شيء ثم انتقل لتعلم التقنيات مثل React وغيرها.
  21. مشاهدة دورات أكاديمية حسوب بدون إنترنت أي offline عن طريق تحميلها، غير متاح حاليًا وربما يتم إتاحة ذلك مستقبلاً، وبإمكانك مشاهدة الفيديوهات على دقة أقل تتناسب مع سرعة الإنترنت لديك مثل 540p أو أقل بدلاً من 1080p. وأرجو أن تتفهم السبب وراء عدم توفر إمكانية تحميل الفيديوهات، فإذا سمحنا بتحميل الفيديوهات، سيتمكن الجميع من الوصول إلى الدورات بسهولة، وقد بذل فريق المدربين مجهودًا كبيرًا في إعداد وتوفير هذه الدورات لك، ويتم تحديثها كل 3 او 6 أشهر حسب الحاجة وتستطيع الوصول للتحديثات مدى الحياة، بالإضافة إلى الدعم من عدة مدربين للإجابة على أسئلتك ومساعدتك في أي وقت. وهناك أيضًا الشهادات والاختبارات والدورات الأخرى التي يتم توفيرها لك لمساعدتك في استكمال مسارك البرمجي الذي اخترته. والسبب الرئيسي وراء عدم السماح بتحميل الدورات لمشاهدتها بدون اتصال هو أن معظم منصات التعليم الإلكتروني تعتمد على نموذج البث المباشر لتوفير المحتوى التعليمي، وتخزين محتوى الفيديو والمواد التعليمية على خوادم الشركة المزودة للخدمة التعليمية، ويمكن الوصول إليها فقط عبر الإنترنت. وهناك سبب آخر أيضًا، وهو أن توفير المواد التعليمية بشكل مجاني قد يكون له تأثير سلبي أكثر من نفعه، فمن يسعى للتعلم ويعتز بالتحصيل العلمي يكون مستعدًا لبذل بعض الجهد والتكلفة للحصول على المواد التعليمية القيمة التي تؤهله لتحقيق أهدافه، أما من لا يبدي الاجتهاد ولا يهتم بجدية التعلم، فمن المرجح أنه لن يقوم بذلك، ولكن أنت لست كذلك، فأنت مستعد للجهد والالتزام.
  22. ببساطة، عليك بدراسة الشهادات التالية فهى خاصة بمجال الشبكات، لكن عليك بالبحث عن الوظائف الخاصة بالشبكات وتعلم الشهادات المطلوبة، فبالطبع ليس المطلوب منك تعلم كل تلك الشهادة في البداية، لذلك أشرت إليك بتفقد متطلبات الوظائف والتي ستجدها على موقع مثل LinkedIn أو وظف. شهادة A+ (CompTIA A+): تعتبر تلك الشهادة بمثابة الأساس للدخول إلى مجال تكنولوجيا المعلومات. تغطي المعرفة والمهارات الأساسية في صيانة وتشخيص أجهزة الكمبيوتر وأنظمة التشغيل. شهادة N+ (CompTIA Network+): تركز على المفاهيم والمهارات الأساسية في تصميم وإدارة شبكات الكمبيوتر، بما في ذلك التكنولوجيا المتعلقة بالشبكات السلكية واللاسلكية. شهادة S+ (CompTIA Security+): تركز على أمن المعلومات وتغطي المفاهيم الأساسية للأمان السيبراني والتهديدات والحماية وإدارة المخاطر. شهادة Linux+ (CompTIA Linux+): مهمة إذا كنت ترغب في العمل على أنظمة تشغيل Linux، وتغطي المفاهيم الأساسية والمهارات في تثبيت وتكوين وإدارة أنظمة Linux. شهادة Cloud: تعنى تقنيات الحوسبة السحابية وتوفر المعرفة والمهارات اللازمة لتصميم وإدارة بيئات الحوسبة السحابية، مثل منصات مثل AWS أو Microsoft Azure. شهادة MCSA (Microsoft Certified Solutions Associate): تركز على منتجات وتقنيات مايكروسوفت، مثل أنظمة التشغيل وخوادم الشبكات والتخزين. شهادة MCSE (Microsoft Certified Solutions Expert): شهادة أخرى متقدمة لشهادة MCSA، وتركز على تصميم وتطوير حلول مايكروسوفت الشاملة. شهادة Redhat Administrator: تركز على نظام تشغيل Linux المبني على Red Hat Enterprise Linux وتعتبر مهمة للعمل كمسؤول للنظام. شهادة Unix Administrator: تركز على نظام التشغيل Unix وتوفر المعرفة والمهارات اللازمة لإدارة وصيانة نظام التشغيل هذا. شهادة Networks Administrator: تركز على إدارة وصيانة شبكات الكمبيوتر وتغطي المفاهيم والمهارات الأساسية في إعداد وتكوين الشبكات. شهادة CCNA R&S (Cisco Certified Network Associate Routing and Switching): تعتبر هذه الشهادة مهمة في مجال الشبكات وتركز على تصميم وتكوين وتشخيص شبكات سيسكو. شهادة CCNA Security: تركز على الأمان السيبراني في شبكات سيسكو وتغطي المفاهيم والتقنيات المتعلقة بالحماية والأمان. شهادة CCNA Voice: تركز على تقنيات الاتصالات الصوتية عبر الشبكات وتوفر المعرفة والمهارات اللازمة لتكوين وإدارة أنظمة الاتصالات الصوتية. شهادة CCDA (Cisco Certified Design Associate): تعتبر هذه الشهادة مهمة للمهندسين المعماريين وتركز على تصميم الشبكات المعقدة. شهادة CCNP R&S (Cisco Certified Network Professional Routing and Switching): تعتبر هذه الشهادة متقدمة وتركز على مهارات التصميم والتكوين والتشخيص لشبكات سيسكو. شهادة CCNP Security: تركز على أمن الشبكات وتوفر المهارات اللازمة لحماية شبكات سيسكو من التهديدات السيبرانية. شهادة VMware: تركز على تقنيات الـ Virtualization وتغطي المفاهيم والتقنيات المتعلقة بإنشاء وإدارة بيئات الـ Virtualization. دروس ومقالات عن CCNA من أكاديمية حسوب دروس ومقالات عن الشبكات من أكاديمية حسوب
  23. الأمر ليس علاقة بشهادتك إطلاقًا، بالتأكيد الشهادة لها عامل مؤثر فلك الأفضلية في حال كنت متميز في مجالك ولديك شهادة جامعية به أيضًا. ولكن حاليًا نسبة كبيرة من العاملين في مجال البرمجة لم يتدارسوا بكلية خاصة بالبرمجة مطلقًا، بل هم خريجين جامعات أخرى. والمهم هو الإلتزام بمسار تعليمي جيد لفترة 6 شهور على الأقل وحتى سنة، تبعًا للوقت الذي ستخصصه للتعلم ومدى اجتهادك وصبرك، فالمجال بحاجة إلى صبر وعزيمة بلا شك، وإلا كان الجميع أصبحوا مبرمجين أو متخصصين في الشبكات. لا تضع تركيزك أبدًا على الشهادات، بل اسعى بجد واجتهاد نحو تحصيل المهارات المطلوبة في الوظيفة التي تريد العمل بها، وسيتم قبولك بلا شك، يجب إمتلاك المهارات وأيضًا التطبيق لتكوين معرض أعمال يثبت أنك قادر على تنفيذ المطلوب. عليك بتحديد ما الذي تريده، هل تريد التخصص في مجال الشبكات والـ IT أم تريد التخصص في أحد مجالات البرمجة؟ ثم البحث عن مسار تعليمي سواء مجاني أو مدفوع، ولديك يوتيوب ولديك دورات في أكاديمية حسوب ألقي نظرة عليها إذا كانت ستفيدك. وعامة النقاشات والمقالات التالية ستساعدك كثيرًا، وتم فيها ذكر مسارات برمجية ومنها دورات في أكاديمية حسوب:
  24. إذا فهمت سؤالك بشكل صحيح أنت تريد شرح كل من الـ Relational Schema و ERD (Entity-Relationship Diagram) وتوضيح الاختلافات بينهما، صحيح؟ Relational Schema ببساطة هو تصميم قاعدة البيانات المرتبطة بالنموذج العلائقي (Relational Model)، ويوفر الـ Schema هيكلية لقاعدة البيانات، ويصف الجداول (Tables) الموجودة في القاعدة بما في ذلك العلاقات بين الجداول والعمود (Column) الموجود في كل جدول والقيود (Constraints) المفروضة على البيانات. Entity-Relationship Diagram (ERD) نموذج يستخدم لتصميم وتصور قاعدة البيانات. يستخدم ERD مجموعة من المفاهيم لوصف الكيانات (Entities) والعلاقات (Relationships) بينها والسمات (Attributes) المرتبطة بكل كيان، وتستخدم رموز معينة مثل المستطيلات والخطوط والماسات لتوضيح الكيانات والعلاقات والسمات. الاختلافات بين الـ Relational Schema و ERD: الـ Relational Schema هو تصميم قاعدة البيانات على مستوى متقدم ومفصل، بينما ERD يقدم صورة أعمق وأكثر تجريدًا لقاعدة البيانات. الـ Relational Schema يركز بشكل رئيسي على هيكلية قاعدة البيانات والعلاقات بين الجداول والقيود، بينما ERD يركز على وصف الكيانات والعلاقات بينها والسمات المرتبطة بكل كيان. الـ Relational Schema يوفر مستوى تجريدي أقل، حيث يصف الجداول والعمود بشكل محدد ومفصل، بينما ERD يوفر مستوى تجريدي أعلى يسمح بتصور عام لقاعدة البيانات. الـ Relational Schema غالبًا ما يتم تعبئته في شكل جداول وقوائم، بينما ERD يستخدم رموز رسومية لتوضيح الكيانات والعلاقات بينها. ولاحظ أن الـ Relational Schema و ERD هما أحد أدوات تصميم قاعدة البيانات، يستخدمان معًا غالبًا لتوضيح وتصميم قاعدة البيانات. أمثلة عملية Relational Schema فلنفترض أن لدينا قاعدة بيانات بسيطة لنظام إدارة المبيعات، فتستطيع الإعتماد على Relational Schema لتوضيح هيكل القاعدة والجداول والعلاقات بينها بالتفصيل. Customers (CustomerID, FirstName, LastName, Email) Orders (OrderID, CustomerID, OrderDate, TotalAmount) OrderItems (OrderItemID, OrderID, ProductID, Quantity) Products (ProductID, ProductName, Price) وكما ترى لدينا أربع جداول: Customers (العملاء) و Orders (الطلبات) و OrderItems (عناصر الطلب) و Products (المنتجات). العمود المشترك بين جداول Customers و Orders هو CustomerID، وبين جداول Orders و OrderItems هو OrderID، وبين جداول OrderItems و Products هو ProductID. وتوضح هذه العلاقات كيفية ربط الجداول ببعضها البعض. Entity-Relationship Diagram (ERD) 1- الكيانات (Entities): العملاء (Customers): يمثل المشترين الذين يقومون بالطلبات. الطلبات (Orders): يمثل الطلبات التي يقوم العملاء بإجرائها. المنتجات (Products): يمثل المنتجات المتاحة للشراء. 2- العلاقات (Relationships): العلاقة بين العملاء والطلبات: يمكن لعميل واحد أن يقوم بعدة طلبات، وهذا ما يعكسه الخط المتصل بين الكيانين "Customers" و "Orders". العلاقة بين الطلبات والمنتجات: يمكن لكل طلب أن يحتوي على عدة منتجات، وهذا ما يعكسه الخط المتصل بين الكيانين "Orders" و "Products". 3- السمات (Attributes): لكل كيان في النموذج، يوجد سمات محددة. على سبيل المثال، العملاء يحتوون على السمات: CustomerID وFirstName وLastName وEmail، والطلبات يحتون على السمات: OrderID وOrderDate وTotalAmount، والمنتجات يحتون على السمات: ProductID وProductName وPrice.
  25. اسم المكون في الكود لديك كان register، ولكنه يجب أن يكون Register مع حرف البداية كبيرًا، ويجب غلق العناصر بشكل صحيح وهم <label> و</label> و<input> و</input> و <form> و </form>. وعليك بتحديد السمات htmlFor بدلاً من for لوصف العلاقة بين العنصر label وحقل الإدخال. حيث أن في HTML، يتم استخدام السمة "for" لربط عنصر label بعنصر input المقابل، ولكن يجب استخدام "htmlFor" بدلاً من "for" عند كتابة JSX في React. والسبب يعود إلى أن "for" هو كلمة محجوزة في JavaScript، لذا تم استخدام "htmlFor" بدلاً منها في JSX لتجنب التعارض. أيضًا تصحيح الأسماء للحقول input لتكون name بدلاً من Name، فاسم الخاصية بحرف صغير وليس كبير في HTML. وأخيرًا تصحيح العنصر input باسم معرف exampleInputPassword1 وتغيير اسمه إلى exampleInputPassword2 ليتوافق مع العلامة المقابلة له في label. وإليك الكود بعد التعديل: import React from 'react'; export default function Register() { return ( <div className="container mt-5 pt-5"> <form className='w-50 m-auto text-center'> <div className="mb-3"> <label htmlFor="exampleInputEmail1" className="form-label">Email address</label> <input type="email" className="form-control" id="exampleInputEmail1" name="email" /> </div> <div className="mb-3"> <label htmlFor="exampleInputName" className="form-label">Name</label> <input type="text" className="form-control" id="exampleInputName" name="name" /> </div> <div className="mb-3"> <label htmlFor="exampleInputPassword1" className="form-label">Password</label> <input type="password" className="form-control" id="exampleInputPassword1" name="password" /> </div> <div className="mb-3"> <label htmlFor="exampleInputPassword2" className="form-label">Confirm Password</label> <input type="password" className="form-control" id="exampleInputPassword2" name="confirmPassword" /> </div> <button type="submit" className="btn btn-primary">Submit</button> </form> </div> ); }
×
×
  • أضف...