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

Mustafa Suleiman

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

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

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

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

    472

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

  1. أعانكم الله وسدد خطاكم، المتاح أمامك هو مواقع العمل الحر العربية، وهي مستقل وخمسات، عدا ذلك فالأمر غير حقيقي، الواقع هو أن تمتلك مهارة يحتاجها غيرك ويدفع لك من أجل القيمة التي تقدمها له. لذا كل ما عليك هو إنشاء حساب على كلاهما، وتهيئة معرض الأعمال ووصف لحسابك الشخصي، ولكن تخصص في مجال واحد فقط، لا تقم بعرض نفسك كمتخصص في أكثر من مجال دونّ وجود رابط بينهم، مثلاً في البرمجة تستطيع الجمع بين تصميم واجهة المستخدم وبين البرمجة، وفي الكتابة تستطيع الجمع ما بين التصميم والكتابة أيضًا وهكذا. أعلم أنّ الكلام سهل، لكن ما باليد حيلة سوى السعي، حاول تحسين مهاراتك في مجال مطلوب على تلك المواقع، ولو احتجت إلى أي مساعدة أخبرني.
  2. في صفحتك الشخصية انزل للأسفل وستجد قسم الخبرة Experience، فاضغط على أيقونة الزائد + لإضافة خبرة: ثم اختر add position: ثم قم بإضافة أكاديمية حسوب في حقل Company or organization بكتابة Hsoub Academy وستظهر لك فاخترها، ثم في حقل Employment type اختر وظيفتك هي internship أي تدريب، وفي حقل title قم بكتابة Software Engineer Intern: وقم بملء باقي الحقول، ويجب أن تُحدد أنك ما زلت تعمل حتى الآن في Hsoub Academy من خلال حقل التاريخ، ثم اضغط على Save للحفظ. الآن توجه لأعلى صفحتك الشخصية وستجد أيقونة قلم بجانب اسمك اضغط عليها، ثم قم بتفعيل خيار Show current company in my intro أي إظهار الشركة التي تعمل بها حاليًا بجانب اسمك:
  3. من المفترض أنّ Nest.js أفضل، لكن في البرمجة ذلك غير صحيح، النهج السليم هو التركيز على حل المشكلة التي تعمل عليها وليس على التقنية المستخدمة. فالمشاريع الصغيرة والمتوسطة الأنسب لها هو إطار Express.js، مثل مشاريع بناء API لمدونة شخصية أو صفحة هبوط أو متجر إلكتروني متوسط به 1000 منتج أو أقل، أو مشروع تطبيق محادثات، أو للتجارب السريعة لتطوير نماذج أولية MVPs. بينما في المشاريع الأكبر والتي يعمل عليها فريق كامل أكثر من 3 أشخاص، هنا تظهر أهمية وجود إطار قوي ذو هيكل ثابت مثل Nest.js ومعمارية متقدمة، وتعلمه ليس سهل فهو يعتمد على مباديء البرمجة كائنية التوجه وأنماط التصميم بشكل مُكثف، فهو يفرض هيكلية موحدة، بالتالي كل مبرمج سيعرف أين يجد الـ Controller وأين يكتب الـ Business Logic في الـ Service، الأمر الذي يقلل من الفوضى ويسرّع عملية انضمام المطورين الجدد في الشركات. أي الأمر بحاجة إلى وقت لتبدأ التطوير من خلاله، وللعلم ستجد أنّ من لديه خبرة في لغات برمجة قوية كائنية التوجه مثل Net. أو Java يستطيع التعامل بسهولة مع الإطار، لأنّ NestJS مستوحى من Enterprise Frameworks أي إطارات العمل الخاصة بالشركات مثل Spring Boot، وبالطبع ليس شرطًا تعلم أحد تلك اللغات، لكن للعلم بالشيء. وهو مطلوب في سوق العمل بالنسبة لمطوري الواجهة الخلفية من خلال Node.js:
  4. يجب أولاً تحديد الفئة المستهدفة، وعلى أساسها تضع خطة التسويق وليس العكس، فليس جميع شرائح المستخدمين يتم التسويق لهم بنفس الآلية، وأيضًا أماكن تواجدهم على الإنترنت وطريقة التخاطب معهم مختلفة. وقبل خطة التسويق، عليك بتحديد احتياجات تلك الفئة وهل يوجد حلول متوفرة بالفعل؟ ما الدافع أو ميزة الجذب في المنتج الخاص بك؟ فهناك فئة تريد حلول متكاملة وسهلة الاستخدام وواجهة تصميم جذابة مثلاً، وفئة أخرى تريد حلول لمشاكل غير منتشرة لكن لها جمهورها، عليك بتحديد الفئة التي تحقق لك عائد أكبر والتنافسية بها قليلة قدر الإمكان، إلا لو لديك القدرة على توفير حلول تنافسية بالفعل. وبالنسبة للتسويق، فهو نتاج استكشاف ما سبق، لو وجدت أنّ الفئة المستهدفة تقوم بالبحث على جوجل، فعليك إذن استهداف SEO كخطة تسويق لتصدر النتائج في محركات البحث. أو قم بتقديم نسخة مجانية من القالب وبها ميزات مدفوعة مثلاً، لكن بشرط الإشتراك من خلال البريد الإلكتروني وكون قائمة لإعادة الاستهداف. ويجب بذل مجهود في التسويق من خلال محتوى الفيديو بغض النظر عن المنصة المستهدفة. وقم بتوفير 5 رخص مجانية لمطورين تثق بهم، مقابل مراجعة علنية ودراسة حالة.
  5. جيد جدًا، لكن أنت لم تستوعب بل حفظت ما تم شرحه ثم قمت بالنقل كما بالشرح، أي عقلك لم يستوعب ما يحدث بل يتتبع الخطوات ليس أكثر. لتخطي تلك المشكلة، عليك بتعديل ما تقوم بتنفيذه أي التغيير في الأكواد والتصميم، لإجبار عقلك على الاستيعاب والتركيز.
  6. وكيف قمت بتنفيذ 6 مشاريع دونّ معالجة تلك النقطة؟ هل قمت بالتطبيق العملي مع الشرح أي رؤية الخطوات ثم قمت أنت بالتنفيذ بمفردك؟ أم قمت بالتطبيق خطوة ونقل الكود من الشرح؟ الصحيح هو التدرج في التطبيق العملي من خلال تنفيذ نماذج بسيطة، ثم الإنتقال لبناء أقسام من الموقع، ثم الربط بين تلك الأقسام لإنشاء الموقع، وهناك خطوات ثابتة لتطوير موقع الويب تم توضيحها في دورة تطوير واجهات المستخدم. في حال تستطيع بناء صفحة كاملة بواسطة HTM وCSS مع استخدام Flexbox أو Grid و Media Queries دون أنّ تواجه صعوبة كبيرة، فقم بالإنتقال للتعمق في لغة جافاسكريبت. ولا مشكلة في نسيان بعض الأمور، فليس المطلوب منك حفظ جميع الأكواد، تستطيع البحث عما تريد لكن ليس كل شيء بالطبع.
  7. الأمر بحاجة إلى توضيح، ما معنى "لا أتذكر إلا القليل جدًا"؟ هل لا تستطيع كتابة الأكواد من تلقاء نفسك وتضطر إلى البحث لتذكر الـ Syntax؟ وما نسبة حدوث ذلك؟
  8. دورة تطوير واجهات المستخدم تُركز على الأساسيات الخاصة بتطوير الواجهة الأمامية، وهي اللغات الأساسية للويب HTML, CSS, JS بجانب المكتبات والإطارات المساعدة في عملية التطوير والمبنية على تلك اللغات. أولها مكتبة jQuery والتي تُسهل علينا كتابة المنطق البرمجي بدلاً من كتابته من الصفر بواسطة لغة جافاسكريبت، وبالطبع المكتبة تعتمد على لغة جافاسكريبت. ثم إطار عمل Bootstrap لتسهيل عملية تصميم الواجهة الأمامية بدلاً من كتابة أكواد CSS من الصفر، حيث كلاسات بوتستراب تقوم بتطبيق تنسيقات جاهزة. ما سبق هو ما سنتعلمه في تلك الدورة، أي جميع المشاريع سنستخدم بها HTML, CSS, JS بجانب jQuery وبوتستراب فقط. بينما دورة جافاسكريبت متعلقة بالتقنيات الخاصة بها وهي React وNext.js وخلافه.
  9. حسب التخصص البرمجي الذي اخترته، فهناك حد أدنى للمهارات الواجب توافرها لكي تمتلك القدرة على تنفيذ المشاريع وأيضًا لكي تتفهم المطلوب من العميل وتوفر له حلول مناسبة. أعتقد أنك تقوم بدراسة الواجهة الأمامية حاليًا، والحد الأدنى هو تعلم لغات الويب الأساسية HTML, CSS, JS والتعمق بهم، ثم تعلم إطار بوتستراب أو tailwind والأفضل في رأي هو tailwind، ثم تعلم أساسيات مكتبة jQuery. ثم تعلم أساسيات التصميم الجيد لواجهة المستخدم، وستجد تفصيل هنا: وبعد ما سبق تستطيع التقدم للمشاريع التي تطلب تطوير مواقع ثابتة static، أي محتواها ثابت لا يتغير، أو يتغير لكن من خلال API خارجي وليكن جلب أخبار الطقس مثلاً، حيث لا يوجد واجهة خلفية بل ستعمل على تطوير واجهة أمامية فقط. المشكلة أنّ تلك المشاريع المنافسة عليها مرتفعة، لذا فرصة قبول عرضك منخفضة نسبيًا، لكن حاول على أي حال وستتعلم أثناء ذلك الطريقة المناسبة لطرح عرضك وخلافه، ونوعية المشاريع المطلوبة على منصة العمل الحر، والمهارات المطلوبة لذلك. وأثناء تلك الفترة، اعمل على تحسين مهاراتك بتعلم تقنيات الويب ومنها React وNext.js وأيضًا لغة Typescript. وبعدها حاول تعلم أساسيات Node.js لتصبح مطور Full-stack لتستطيع التقدم لمشاريع أفضل وتبتعد عن الزحام قدر الإمكان.
  10. سنة ونصف مدة كبيرة جدًا، لا أعتقد أنك قمت بدراسة بايثون كل تلك المدة، بل على فترات أي تنقطع ثم تعود وهكذا، لو واصلت على نفس المنوال ستمر سنوات دونّ أنّ تصل لوجهتك. يجب الإلتزام بجدول زمني واقعي والدراسة بشكل شبه يومي، حدد فترة 6 أشهر لدراسة المسار الذي تريده، و6 أشهر أخرى لتحسين مستواك به أي التعمق وتنفيذ مشاريع متقدمة، ولو انشغلت لفترة فعلى الأقل خصص ساعتين للدراسة يوميًا ولا تنقطع تمامًا، فالاستمرار في بدايات التعلم هام للغاية لتثبيت ما تعلمته وتجنب المشاكل التي مررت بها. وبالنسبة للطريقة المناسبة للدراسة، فلكل شخص طبيعة خاصة، البعض يقوم بتلخيص النقاط الهامة مع شرح مُختصر ومُركز يمكنه من المراجعة والاستيعاب عند العودة لتلك الملخصات، والبعض الآخر يُفضل الاستيعاب والتطبيق بشكل عملي ويمتلك القدرة على التذكر بشكل جيد بجانب البحث عما يريده بالنسبة للنقاط التي نسيها وذلك أمر طبيعي لكنه مستوعب لها ويستطيع توظيفها فور تذكر طريقة كتابتها أي الـ Syntax. بالنسبة لك الأفضل هي الطريقة الأولى، لأسباب منها عدم التفرغ بشكل كامل لدراسة البرمجة، وأرجو قراءة التالي: وبخصوص الحفظ فهو مهم في البداية فقط، لكن الأهم هو الاستيعاب، لذا لا تشغل بالك به واهتم بالتركيز على لماذا قمنا بالأمر بتلك الطريقة وكيف نستخدم ما تعلمناه، ثم اربط بين المفاهيم التي تعلمتها من خلال تطبيق عملي، مثلاً قم بتوظيف ما تعلمته في الدرس الحالي على تمرين سابق. وبالنسبة للإختبار فلا يتطلب منك سوى استيعاب ما قمت بدراسته والقدرة على تنفيذ مشروع كامل من خلال ما تعلمته، طالما لديك القدرة على تنفيذ مشروع بمفردك تستطيع التقدم للإختبار.
  11. أحسنت في الإسراع لتوظيف ما تعلمته وتثبيته من خلال مشاريع عملية، الوقت الذي قضيته في بحث، قراءة، مشاهدة وممارسة سيعود عليك بنفع كبير، وسيجنبك الكثير من المعاناة التي تحدث نتيجة السرعة في دراسة الأساسيات وتخطي التعمق بها. المشروع به مجهود كبير بالفعل، قمت بعمل ممتاز في تطبيق المفاهيم التي تعلمتها، بدءًا من البرمجة كائنية التوجه والتعامل مع الملفات، إلى معالجة الأخطاء والتعامل مع مكتبات خارجية Selenium و openpyxl. لتحسين ما قمت به، عليك بإتباع الممارسات الجيدة الخاصة بالكود النظيف، فأسماء الدوال والمتغيرات يُفضل استخدام تسمية snake_case وهي كلمات صغيرة مع شرطة سفلية بينها، بمعنى webScraping تصبح web_scraping و all_dataBase_books تصبح all_database_books. أسماء الملفات أيضًا، الأفضل استخدام snake_case كذلك، أي Autmoations.py يصبح automations.py. وفي دالة csv_import، قمت بتحويل csv_reader إلى قائمة مرتين، في المرة الأولى، يتم استهلاك كل محتوى الملف، وفي المرة الثانية القائمة فارغة، وذلك يؤدي إلى عدم استيراد أية بيانات. عليك بقراءة الملف مرة واحدة فقط وخزن محتواه في متغير. وحاليًا، عند استيراد الكتب، قمت بجلب كل الكتب من قاعدة البيانات إلى الذاكرة، ثم تتحقق من وجود الكتاب المستورد، ولا مشكلة به هنا، لكن لو قاعدة البيانات كبيرة فالأداء سيتأثر بشكل كبير. فبدلاً من جلب كل الكتب، الأفضل أن تُنفذ استعلام بسيط على قاعدة البيانات لكل كتاب مستورد للتحقق هل هو موجود بالفعل باستخدام عنوانه ومؤلفه مثلاً، الأمر الذي يقلل من استخدام الذاكرة ويزيد من سرعة التنفيذ. وفي دالة send_email_remainders، طلبت من المستخدم إدخال كلمة المرور مباشرة في الطرفية، وبالطبع ذلك غير آمن على الإطلاق، حيث يجب عدم كتابة كلمات المرور في الكود أو إدخالها كنص عادي، استخدم متغيرات البيئة أو ملفات الإعدادات لتخزين تلك المعلومات الحساسة، الموضوع متقدم قليلاً، ولكن للعلم بالشيء. وبالنسبة للـ webScraping فالمحدد table:nth-child(13) خاص بتصميم معين للصفحة، ولو تغير التصميم قليلاً، سيتوقف الكود عن العمل، الأفضل استخدام مُحددات عامة أكثر مثل البحث عن جدول يحتوي على عنوان معين. وبالنسبة لقاعدة البيانات فدالة control ودالة fitch تقومان بالكثير من المهام بناءًا على قيمة نصية، الأفضل تطبيق مبدأ المسؤولية الواحدة Single Responsibility Principle وإنشاء دوال صغيرة ومحددة لكل مهمة، الأمر الذي يسمح لك عندما تحتاج لإضافة كتاب من أي مكان في الكود، ستستدعي دالة واضحة مثل dataBase.add_book(my_boo) بدلاً من dataBase.control('add', my_book). أيضًا ابحث عن مبدأ فصل الاهتمامات Separation of Concerns سيُفيدك.
  12. تلك ليست الطريقة الصحيحة لمشاركة المشاريع في مجال البرمجة، ما يتم استخدامه هو تقنية Git والتي تعتمد عليها منصات مثل GitHub. أي الملاحظات الخاصة بك ليس لها علاقة بالتسليمات المطلوبة عند التقدم للإختبار، ما تقوم به جيد بالطبع استمر في ذلك واهتم به، حيث ستنسى بعض الأمور بعد فترة وهو ما يحدث مع الجميع، والملاحظات أو التلخيصات المركزة هي الحل، ولا تقم بتلخيص كل شيء، بل النقاط الهامة التي استوعبتها من الشرح وبشكل مُفصل بعض الشيء، بحيث تتمكن من الاستيعاب عند مراجعة تلك الملخصات فيما بعد. وبخصوص التسليمات ليس المطلوب منك تسليم كافة ما نقوم به بالدورة، بل المشاريع العملية فقط، حيث ستجد بعض الدروس بجانبها كلمة تدريب عملي، هنا يجب تسليم ما قمنا به، وليس شرطًا أن يكون التطبيق من خلال كود برمجي، فتلك دورة علوم الحاسوب وبها تطبيقات بأنواع مختلفة مثل الخوارزميات وتطبيقات سكراتش. أنشيء مجلد باسم دورة علوم الحاسوب ثم بداخله مجلد لكل خورازمية وضع به بداخل كل مجلد الملف الخاص بالخورازمية ثم ملف البرنامج الخاص بمنصة سكراتش. وبعد ذلك في المسارات الأخرى ستجد دروس باسم تطبيق عملي أو التمرين النهائي خاصة بالتدريب العملي على كتابة الأكواد البرمجية في جافاسكريبت وبايثون، حيث يتم شرح المطلوب في البداية أو الشرح بشكل نظري ثم يقوم المدرب بالتنفيذ. المطلوب منك هو الاستماع للشرح النظري والمطلوب، ثم محاولة التنفيذ بمفردك وبعد المحاولة بشكل كافي والبحث عن كيفية تنفيذ أمر على جوجل أو يوتيوب، قم بمشاهدة حل المدرب. ثم أنشيء مجلد خاص بالأكواد فقط، داخل مجلد دورة علوم الحاسوب الرئيسي واحتفظ بالكود في ملف خاص باسم المسار مثلاً أساسيات البرمجة - التمرين النهائي أي اسم المسار الخاص به ليتم مراجعته، ثم ارفع المجلد الرئيسي بالكامل على مستودع في GitHub.
  13. ستحتاجين إلى التعمق في مكتبة pygame من خلال دراسة الكورسات المتاحة على اليوتيوب، ويوجد بالأكاديمية هنا دروس أيضًا: حاولي حل المشكلة، ثم توفير الكود وسيتم مساعدتك.
  14. ستحتاج إلى تعلم لغات الويب الأساسية HTML, CSS, JS وذلك هو الحد الأدنى والذي من خلاله تستطيع تنفيذ ما تراه، ولو أردت تسهيل الأمر عليك يوجد مكونات جاهزة يوفرها إطار بوتستراب أو tailwind لتنفيذ نفس الواجهة، لكن لو تريد التخصص في مجال الواجهة الأمامية وإحترافه، فلا تعتمد على المكتبات وإطارات العمل في البداية، تعمق في اللغات الأساسية أولاً. والواجهة سيتم تنسيقها من خلال flex-box لذا تعمق في ذلك المفهوم عند دراسة CSS. ثم ابحث على اليوتيوب عن Build a Quiz App with HTML CSS and JavaScript أو بناء تطبيق اختبارات (كويز) باستخدام HTML CSS JavaScript وستجد مشاريع مماثلة لما تريده.
  15. تقصد قسم الأسئلة الشائعة في صفحة وصف الدورة؟ أم منتدى كما في أكاديمية حسوب لطرح الأسئلة والتعليق عليها؟
  16. يظهر خطأ pygame.error: font not initialized عند تشغيل الكود بسبب السطر: font = pygame.font.Font(None, 36) والمشكلة أنّ الخط لم تهيئته بشكل صحيح، حيث يجب استدعاء الدالة pygame.init() في بداية البرنامج، مباشرة بعد استيراد مكتبة pygame، وستقوم تلقائيًا بتهيئة جميع وحدات pygame التي تم استيرادها. وسيظهر التالي، مثلث متحرك من اليسار إلى اليمين بشكل مستمر:
  17. جيد جدًا، الأمر سيتحسن مع الوقت، حاول فقط التعمق قليلاً من خلال قراءة التالي:
  18. شعورك غير مطابق لما قمت به، طالما تستطيع تطوير موقع ويب بالكامل حتى لو بتصميم بسيط، فأنت على الطريق الصحيح، أي توظيف ما تعلمته والربط بين المفاهيم، وذلك يتأتى بتنفيذ تمارين عبارة عن نماذج أي أجزاء من الموقع بشكل متدرج ثم تنفيذ مشاريع ويب كاملة وهو ما قمت به. هل تستطيع تحويل أيًا من تصاميم الصفحات التالية إلى كود؟ https://www.frontendmentor.io/challenges?difficulty=1 لو تستطيع فلا داعي للقلق.
  19. انتقل حاليًا إلى دورة جافاسكريبت ودراسة أساسيات جافاسكريبت بها، حيث يوجد تفصيل أكثر مقارنًة بدورة تطوير واجهات المستخدم والتي تُركز أكثر على تطوير الواجهة وليس اللغة. ثم أكمل دورة تطوير واجهات المستخدم إلى نهايتها، وبعد ذلك انتقل إلى دورة جافاسكريبت، وادرس المسارات التالية: أساسيات React.js تطبيق دردشة يشبه WhatsApp (تطبيق الويب فقط أي الواجهة الأمامية client من خلال react) أساسيات TypeScript إنشاء تطبيق أسئلة وأجوبة باستخدام Next.js تطبيق تعلم اللغات باستخدام Next.js وتقنيات الذكاء الاصطناعي تطبيقات الويب التقدمية PWA
  20. المشكلة تم حلها، تابع خطوات التثبيت
  21. الكود غير صحيح، يوجد تطابق لعدد العناصر، فالدالة plt.scatter تتوقع أن يكون لكل نقطة أي لكل زوج من x و y لون مقابل لها. ما لديك هو 15 نقطة لأن طول القائمة x والقائمة y هو 15، ولكن قمت بتمرير 13 قيمة لون فقط في القائمة colors، لذا يجب إضافة قيمتين إلى قائمة colors لتصبح بطول 15. import matplotlib.pyplot as plt x = [2,2,8,1,15,8,12,9,7,3,11,4,7,14,12] y = [100,105,84,105,90,99,90,95,94,100,79,112,91,80,85] colors = [0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100, 110, 120] plt.scatter(x, y, c=colors, cmap='Purples') plt.colorbar() plt.show()
  22. أغلق النظام، ثم اضغط على settings بعد ذلك اختر تبويب storage ثم أسفل Controller: IDE قم بإختيار القرص الموجود ثم اضغط على زر Remove بالأسفل واختر remove: ثم اضغط على زر الإضافة واختر optical drive: ثم اختر ملف الـ ISO الخاص بالنظام، ثم اضغط على OK للحفظ، وقم بالتجربة.
  23. عند تنفيذ أمر معين مثل npm install وخلافه، يتم البحث عن مسار مخصص لذلك في متغيرات البيئة في النظام، من أجل تشغيل npm أي ملف البرنامج الخاص بها، وأثناء التثبيت لأغلب البرامج يتم إضافة متغيرات بيئة بشكل تلقائي دونّ تدخل منك، في بعض الأحيان تحتاج إلى ذلك فقط. أي النظام يبحث مباشرًة في متغيرات البيئة عن مسار ملف npm.exe ليتمكن من تنفيذ أمر npm، وبالطبع لا يتم إضافة مسار الملف بشكل منفرد، بل المجلد الذي يحتويه، وفي أغلب البرامج هو باسم bin وستجد تفصيل هنا لطريقة الإضافة:
  24. اسم المتغير ثابت بينما المؤشر متغير وديناميكي، بمعنى هو مجرد label يضعه المترجم على مكان محدد في الذاكرة، والربط بين الاسم والمكان يتم في وقت الترجمة، وليس بإمكانك تغيير المكان الذي يشير إليه الاسم x، فسيظل يشير دائمًا إلى نفس العنوان في الذاكرة طوال فترة حياته. بينما المؤشر هو متغير بحد ذاته، وظيفته هي تخزين عنوان ذاكرة لمتغير آخر، وبما أنّ المؤشر متغير، فباستطاعتك تغيير القيمة التي يحملها أي العنوان الذي يشير إليه في أي وقت أثناء تشغيل البرنامج. للتوضيح، المؤشر مثل ورقة ملاحظات في يدك، تستطيع أن تكتب عليها شارع القاهرة، منزل رقم 10، ثم تمسحها وتكتب عنواناً آخر، مثل شارع النهضة، منزل رقم 55، فالورقة نفسها وهي المؤشر لم تتغير، لكن العنوان الذي تشير إليه تغير. بالتالي الفائدة تظهر مثلاً عند الحاجة إلى مساحة في الذاكرة أثناء تشغيل البرنامج ولا تعرف حجمها مسبقاً، فتستخدم دوال مثل malloc في C أو new في C++، وستحجز لك مكاناً في الذاكرة وتوفر عنوان بدايته، والطريقة الوحيدة للوصول إليه هي عن طريق مؤشر يخزن العنوان، ولا تستطيع تعيين اسم ثابت لأن المترجم لم يكن يعرف بوجوده أصلاً. المؤشر بالفعل يخزن عنوان أول بايت فقط من المتغير، الفكرة في نوع المؤشر، أي عند تعريفه تحدد نوع البيانات التي سيشير إليها: int* p_int; بالتالي المترجم يعلم حجم البيانات، حيث تلك العملية تسمى Dereferencing، بمعنى يعلم أن p_int هو مؤشر من نوع int، وبناءًا على ذلك، يذهب إلى العنوان المخزن في p_int ويقرأ 4 بايتات تالية أو حسب حجم الـ int في نظامك، ولو كان *p_double، لقرأ 8 بايتات. أيضًا حسابات المؤشرات، فبزيادة المؤشر p_int++ أو p_int + 1، فالمترجم لا يضيف 1 إلى العنوان بل يضيف حجم النوع الذي يشير إليه، حيث p_int + 1 سينتقل إلى العنوان التالي بمقدار sizeof(int) أي 4 بايتات. وp_double + 1 سينتقل إلى العنوان التالي بمقدار sizeof(double) أي 8 بايتات. في مكتبة CS50 وكذلك في لغة C، النوع string ليس كائن معقد مثل std::string في لغة C++، بل مجرد اسم بديل typedef لنوع char* typedef char* string; إذن، بكتابة التالي: string s = "HI!"; فالنص HI! والذي هو في الحقيقة {'H', 'I', '!', '\0'} يتم تخزينه في مكان ما في الذاكرة في قسم للقراءة فقط، والمتغير s يتم إنشاؤه بما أن string هو char*، فالمتغير s هو مؤشر. وقيمة المؤشر s تصبح هي عنوان أول حرف في النص، أي عنوان الحرف H، لذا عندما تسأل عن sizeof(s)، أنت لا تسأل عن حجم النص HI! بل تسأل عن حجم متغير المؤشر s نفسه. ويظهر 8 لأنك على الأغلب تستخدم نظام تشغيل بمعمارية 64-bit، والتي بها أي عنوان ذاكرة وبالتالي أي مؤشر يحتاج إلى 64 بت لتخزينه. 64 bits / 8 bits per byte = 8 bytes. بالنسبة لـ 32 فالرقم غريب لحجم مؤشر، لأنّ أنظمة 32-bit حجم المؤشر بها 4 بايت أي 32 بت، عامًة لا تستخدم sizeof واعتمد على دالة strlen() من مكتبة <string.h>: #include <stdio.h> #include <string.h> #include <cs50.h> int main(void) { string s = "HI!"; printf("Size of the pointer 's' itself: %lu\n", sizeof(s)); printf("Length of the string content: %lu\n", strlen(s)); }
  25. دورة الذكاء الاصطناعي ليس لها علاقة بلغة PHP، ما تحتاجه هو التعمق في لغة بايثون، أتفهم سبب سؤالك، لكن سنستخدم مشاريع جاهزة أي متاجر إلكترونية جاهزة مطورة من خلال لغة PHP في المسار، فوظيفة تضمين النموذج في المتجر هي خاصة بمطور الواجهة الخلفية والذي سيقوم بتطوير الـ API، وليس أنت، لكن في الدورة تم شرح ذلك من أجل التعلم واكتساب تلك المهارة لو أردت، ولتوضيح كيف سيتم الاستفادة مما قمت به بشكل عملي. أي تعلم كيف يتم إنشاء API من خلال Flask أو Django ولكن تجاهل الجزء الخاص بـ PHP، ستجد الأكواد جاهزة.
×
×
  • أضف...