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

Mustafa Suleiman

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

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

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

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

    302

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

  1. إذا فهمت سؤالك بشكل صحيح، فأنت ترغب في تجميع المقالات التي تحمل نفس التاريخ تحتاج إلى استخدام حلقة foreach في Laravel صحيح؟ وإذا كان كذلك فتستطيع استخدام دالة groupBy المتاحة في Laravel لتجميع المقالات حسب التاريخ كالتالي: // استعلام لاسترداد جميع المقالات الموجودة في قاعدة البيانات $articles = Article::all(); // تجميع المقالات حسب التاريخ $groupedArticles = $articles->groupBy('date'); // عرض المقالات حسب التاريخ @foreach($groupedArticles as $date => $articles) <h2>{{ $date }}</h2> @foreach($articles as $article) <h3>{{ $article->title }}</h3> <p>{{ $article->content }}</p> @endforeach @endforeach حيث تسترد جميع المقالات من قاعدة البيانات، ثم تجميعها حسب التاريخ باستخدام الدالة groupBy('date')، ثم استخدام حلقتي foreach متداخلتين لعرض المقالات حسب التاريخ. وعليك بالتأكد من ضبط النموذج وقاعدة البيانات بشكل صحيح وفقًا لما تريده.
  2. أهلاً بك عبد اللطيف، أرجو منك طرح السؤال المتعلق بالدورة أسفل الفيديو الخاص بالسؤال وسيتم الإجابة عليك، وطرح الأسئلة العامة هنا. وبخصوص سؤالك، المشروع القادم هو مشروع تطوير مجتمع يشبه حسوب I/O وستجد في فيديو المقدمة في المدخل ملفات المشروع أسفل الفيديو أرجو منك تحميلها واستخدامها كما فعلت سابقًا، حيث أن الحزم مختلفة، وإليك رابط الفيديو للمشروع القادم:
  3. بالطبع يظهر لك الخطأ عليك باستخدام ملف إكسيل الذي أرفقته لك في مجلد المشروع وليس ملفك أنت، وقم بالتجربة.
  4. سأختصر الطريق عليك والإجابة هي لا قولاً واحدًا ليس في الوقت الحالي، من الممكن أتمتة 70% من عملية تطوير الواجهة الأمامية بحلول 2027 بناءًا على دراسة نشرت مؤخرًا، ولكن ذلك لا يعني أن ذلك أكيد بنسبة 100% فكان من المتوقع أن توجد عربات طائرة في بداية الألفينات وهو ما لم يحدث. عليك بتعلم البرمجة والتركيز بشدة على الأساسيات لا تعلم التقنيات فقط مثل React بدون تعلم اللغات الأساسية وهي HTML, CSS, JS ثم التعمق في مجالك بحيث تصبح قادر على حل المشاكل في المشاريع الكبيرة بعد اكتساب الخبرة. لا تشغل بالك بذلك حاليًا، وتعلم ما تريده والتجربة خير دليل، جرب إنشاء موقع بواسطة أي ذكاء اصطناعي وسيفشل بشكل مضحك. ما يتم حاليًا هو أتمتة المهام المكررة والمساعدة في كتابة أجزاء من الكود، تستطيع البحث عن Copilot وستفهم ما أقصده، وإليك نظرة، الأمر أشبه بمساعد شخصي للبرمجة: https://github.com/features/copilot
  5. أرجو منك الإنتباه، حيث أنك وضعت قيمة إفتراضية في ملف MINE.py بقيمة 1 للمتغير column_values وعند تشغيل البرنامج ستجد في القائمة رقم واحد بشكل إفتراضي وتلك القيمة غير موجودة في ملف إكسيل الذي ارفقته لك بالطبع. ويجب تغيير قيمة المتغير column_values كالتالي: column_values = "test" ثم شغل البرنامج وعند الضغط على print سيتم طباقة القيم الموجودة في العمود الأول.
  6. المطلوب هو إعادة ترتيب البيانات في عمود "Occupation" في جدول "OCCUPATIONS" بحيث يتم فرز كل اسم تحت المهنة المناسبة له ووضعه بشكل أبجدي، وعرضها في أعمدة جديدة تحمل عناوين "Doctor"، "Professor"، "Singer"، و "Actor"، على التوالي. وعندما لا يكون هناك أسماء إضافية تتوافق مع المهنة، يتم عرض القيمة NULL. وفي حالة عدم وجود أسماء إضافية في بعض الأعمدة، سيتم ملء الخانات الفارغة بقيمة NULL.
  7. حددي العمود الذي ترغبين في تصفيته، وكما ذكرتي فهو عمود "اسم الدورة". انتقلي إلى علامة تبويب "بيانات" (Data) في شريط الأدوات العلوي. في مجموعة الأدوات الخاصة بـ "فرز وتصفية" (Sort & Filter)، انقري على الزر "تصفية" (Filter)، وستظهر صناديق تصفية بجانب عناوين الأعمدة. اضغطي على السهم المنسدل بجانب عنوان العمود الذي ترغبين في تصفيته، وستظهر قائمة منسدلة كالتالي اختاري منها: Text filters أو تصفية بالنصوص، وستظهر قائمة جانبية اختاري منها contains أو تحتوي على. والآن قومي بكتابة رياضيات مثلاً وسيتم تصفية كل الخانات في العمود التي تحتوي على رياضيات كالتالي:
  8. قمت بتعديل المشروع لك ورفعه بعد التعديل، عليك فقط تعديل المسار لملف people.xlsx الذي أنشأته وبه بيانات تجريبية فقط، وستقوم بتعديل المسار في ملف MINE.py وتغيير اسم المستخدم إلى اسم المستخدم الخاص بحاسوبك، حيث افترضت أن مجلد المشروع موجود لديك على سطح المكتب. file_path = r"C:\Users\اسم المستخدم هنا\Desktop\CLASS_1\people.xlsx" # المسار الذي تريده CLASS_1.rar
  9. هناك مشكلة في السطر التالي: self.column_values_list = [cell.value for cell in self.sheet['A']] ففي الدالة column_values() في صنف book_E، الخطأ الذي يحدث هو AttributeError: 'book_E' object has no attribute 'column_values_list'. وذلك لأنك تحاول تعيين قائمة column_values_list كخاصية للكائن self، ولكن لم تقم بتعريفها كمتغير عضو في الكلاس book_E. عليك بتعريف المتغير column_values_list كمتغير عضو في الدالة __init__ كالتالي: def __init__(self, BATH=None): self.BATH = BATH self.workbook = None self.sheet = None self.column_values_list = [] # تعريف المتغير كمتغير عضو في الكلاس بعد ذلك، تستطيع استخدام المتغير self.column_values_list في الدالة column_values() بدون أن تحدث الأخطاء. تأكد أيضًا من استيراد load_workbook من الوحدة الصحيحة openpyxl.
  10. إذا كان السؤال تابع لأحد الأسئلة الخاصة بك أرجو وضعه أسفل السؤال وسيتم الرد عليك لا تقلق، وبخصوص سؤالك، في السطر التالي: from LOOD_BOOK import book_E هل أخطأت في اسم الملف؟ حيث أنك قمت بتهجئتها على أنها "LOOD_BOOK" بدلاً من "LOAD_BOOK"، تأكد من أن اسم الملف صحيح. وفي السطر: from ttkbootstrap.constants import * يتم استيراد جميع الثوابت من وحدة ttkbootstrap.constants. ولكن الوحدة ttkbootstrap لا توفر هذه الثوابت، والأفضل الاستيراد كالتالي: from tkinter import ttk وفي السطر التالي: b1 = ttk.Button(widgets_frame, text="print", bootstyle=("info", "outline"), command=COLS_V) الخاصية bootstyle ليست خاصية صحيحة.، هل أنت ترغب في تعيين نمط الزر؟ باستطاعتك استخدام الخاصية style بدلاً من ذلك كالتالي: b1 = ttk.Button(widgets_frame, text="print", style="info.Outline.TButton", command=COLS_V) وفي السطر التالي: combo_name = ttk.Combobox(widgets_frame,justify=RIGHT,width=35,values=column_values) لم يتم تعريف المتغير column_values في هذا المكان، وعليك تعريفه كمتغير عالمي أو تمرير قيمة صحيحة للوظيفة ttk.Combobox أي التعديل لما يلي: combo_name = ttk.Combobox(widgets_frame, justify="right", width=35)
  11. في الكلاس book_E، عليك بتعديل الدالة __init__ لتستقبل المسار كمعامل افتراضي بدلاً من استخدام القيمة المباشرة: class book_E: def __init__(self, BATH=None): self.BATH = BATH self.workbook = None self.sheet = None def load_file(self): if self.BATH: self.workbook = load_workbook(self.BATH) self.sheet = self.workbook.active # ... الدوال الأخرى هنا ... وأيضًا تعديل دالة COLS_V لتحميل الملف عند النقر على زر "Button": def COLS_V(): file_path = "E:\people.xlsx" # المسار الذي تريده BOOK1 = book_E(file_path) BOOK1.load_file() combo_name.configure(values=BOOK1.column_values()) وعليك بتحديث الأمر المرتبط بزر "Button" في الكود الرئيسي ليستدعي الدالة COLS_V بدلاً من COLS_V(BOOK1): b1 = ttk.Button(widgets_frame, text="print", bootstyle=("info", "outline"), command=COLS_V) وبذلك عند النقر على زر "Button" سيتم تحميل الملف وتعيين القيم في combobox. أما بالنسبة لتعديل المتغير column_values، بإمكانك تغيير قيمته بناءً على ما تحتاجه في البرنامج، باستخدام دالة BOOK1.column_values() للحصول على قائمة القيم من الملف، ومن ثم تعيينها للمتغير column_values. كمثال: column_values = BOOK1.column_values() وتستطيع استخدام هذه القائمة لإعداد الخيارات المتاحة في combobox كما فعلت في الكود الحالي لديك.
  12. لا أحد بإمكانه الإجابة على ذلك السؤال سوى مركز المساعدة الخاص بأكاديمية حسوب، عليك بالتحدث إليهم والسؤال. وإذا كان هناك تساؤل لديك حول العروض والخصومات، فقد تم توضيح الأمر هنا:
  13. اسمح لي بنصحك بالتالي، كثرة الأسئلة وتشتيت نفسك ستعيقك عن تعلم أي مجال، وكل ما تحتاجه هو تعلم أساسيات البرمجة وعلوم الحاسب، ثم اختر المجال الذي تريد التخصص به واتبع مسار تعليمي لمدة 6 أشهر ولا تحيد عنه. أي كل ما تحتاجه هو أن تبدأ فقط وستتضح لك كافة الأمور، وستجد نفسك قادر على التحديد والإختيار. وبخصوص سؤالك، لن يتم إختراق جهازك وأنت تعمل على مشروع ما، وما يعرض جهازك للإختراق بالفعل هو استخدام برامج مكركة بدون أي وعي لمخاطر ذلك، وأيضًا عدم وجود وعي أمني عند تصفح الإنترنت والتحميل منه بدون دراية. وعند نشر المشروع على الإنترنت عليك بتوفير الحماية اللازمة لحماية البيانات الحساسة، وستتعلم ذلك عند تعلم مجال الويب، في الوقت المناسب لذلك.
  14. وظيفة lambda في Python تستخدم لإنشاء وظائف مجهولة (anonymous functions)، وتسمح لك بتعريف وظيفة صغيرة دون الحاجة إلى تسميتها بشكل صريح، وتستخدم lambda في السياقات التي تحتاج فيها إلى وظيفة بسيطة وقصيرة. وبخصوص الزر الذي تستخدمه في واجهة البرنامج، تحتاج إلى تعيين دالة (function) للقيام بإجراء معين عند النقر على الزر، وباستخدام lambda، يتم تعريف دالة مجهولة بشكل فوري لتنفيذ الأمر الذي ترغب فيه عند النقر على الزر. بالنسبة للخطأ (TypeError: 'list' object is not callable)، فهناك تعارض في تسمية المتغيرات. وفي الكود الأول لديك، قمت بتسمية المتغير الذي يحمل قائمة القيم بنفس اسم الوظيفة column_values، وبالتالي، عند استدعاء الوظيفة للمرة الثانية، يتم تجاوز الدالة واستدعاء القائمة نفسها، وهذا هو سبب ظهور الخطأ. أي عليك بتغيير اسم المتغير الذي يحمل القائمة إلى اسم مختلف مثلاً تغييره إلى column_values_list كما يلي: class book_E: def __init__(self, BATH): self.BATH = BATH self.workbook = load_workbook(BATH) self.sheet = self.workbook.active def column_values(self): # استخراج قيم العمود الأول من ورقة العمل وتخزينها في قائمة: self.column_values_list = [cell.value for cell in self.sheet['A']] return self.column_values_list ثم في الكود الذي يعرض واجهة البرنامج، استخدم الدالة COLS_V مباشرة بدون استدعاء print: def COLS_V(BOOK1): B = BOOK1.column_values() print(B)
  15. في البداية عليك بتصميم واجهة التطبيق ثم إختيار لغة البرمجة وإطار العمل لبرمجته، فإذا كنت تريد خفض التكلفة، فأنصحك ببرمجته عن طريق Flutter أو React Native. وسيتعين عليك تنفيذ نظام برمجي للحسابات الشخصية يسمح للأعضاء بإنشاء حسابات شخصية وإدارة بياناتهم الشخصية والمعاملات المالية، وأيضًا تنفيذ نظام يتيح للأعضاء إضافة كتب للبيع، وتعديل التفاصيل، وتحديد السعر وحالة الكتاب (مثل جديد أو مستعمل)، وإزالة الكتب التي تم بيعها. بعد ذلك تأتي مرحلة إختيار بوابات دفع مثل Stripe أو PayPal لتسهيل عمليات الدفع، وعندما يقوم عضو بشراء كتاب من آخر، يتم توجيهه لإجراء عملية الدفع عبر البوابة المحددة، وبعد تأكيد الدفع، تستطيع استخدام واجهات برمجة التطبيقات (API) المقدمة من البوابة لإجراء عملية التحويل من حساب التاجر إلى حساب الكاتب، وبالإمكان الإعتماد على المعاملات المالية الوهمية في حساب الكاتب في التطبيق لتتبع الأموال التي يتم تحصيلها بصورة منفصلة عن حساب التاجر. وهناك عامل آخر وهو تحصيل نسبة معينة من المبلغ المدفوع كعمولة للموقع، عن طريق تنفيذ نظام يحتسب هذه العمولة تلقائيًا ويحولها إلى حساب الموقع. وعليك بإنشاء دراسة جدوى للمشروع والطلب المتوقع والتكاليف مقابل العائد ولا تتوقع عائد من أي مشروع على الإنترنت إلا بعد مرور فترة سنة على الأقل.
  16. المشكلة تكمن في الطريقة التي تقوم بها بتعيين الدالة المرتبطة بزر الطباعة (b1) في واجهة البرنامج، ويجب أن تقوم بتمرير الدالة نفسها بدون استدعاءها فورًا. وباستطاعتك استخدام وظيفة lambda لتعيين الدالة كوظيفة منفصلة بدون استدعائها فورًا، وإليك الكود: b1 = ttk.Button(widgets_frame, text="print", bootstyle=("info", "outline"), command=lambda: COLS_V(BOOK1)) باستخدام lambda، سيتم تمرير الدالة COLS_V(BOOK1) نفسها كوظيفة مستقلة إلى الزر، ولن تستدعى فورًا عند تشغيل البرنامج. وعليك أيضًا تصحيح خطأ آخر في الدالة sheet_Names و COLS_V، وفي الدالة sheet_Names يجب أن تقوم بإرجاع A بدلاً من q. وفي الدالة COLS_V يجب أن تقوم بطباعة B بدلاً من q، وإليك الكود بعد التعديل: def sheet_Names(BOOK1): A = BOOK1.workbook.sheetnames return A def COLS_V(BOOK1): B = BOOK1.column_values() print(B) وبعد التعديل من المفترض أن تستدعى الدالة COLS_V(BOOK1) فقط عند النقر على زر "print" في واجهة البرنامج.
  17. لبرمجة تطبيقات iPhone بشكل Native، فمن الضروري أن تتعلم لغة Swift، حيث أن لغة Swift هي لغة برمجة مطورة من قِبل Apple وتستخدم لتطوير تطبيقات iOS وMac. أما لغة Dart، على الجانب الآخر، هي لغة برمجة تستخدم بشكل رئيسي في إطار عمل Flutter الذي يستخدم لتطوير تطبيقات متعددة المنصات، وإذا كان هدفك تطوير تطبيقات لنظام Apple بشكل حصري، فمن الأفضل التركيز على تعلم لغة Swift. وبخصوص الـ API فعليك بتعلم الواجهة الخلفية Back-End لتتمكن من إنشاء API ولكن ذلك ليس ضروري، فيمكنك استخدام منصة مثل Firebase كواجهة خلفية لتطبيقك، وقد أوضحت لك ذلك هنا: وبخصوص تطوير تطبيقات الهاتف والحيرة في إختيار اللغة المناسبة أو الإطار، فأنصحك بقراءة التالي:
  18. السؤال غير واضح، لكن بالطبع تريد استخدام لغة الاستعلام المهيكلة (SQL) لاستخراج الحرف الأول من اسم الوظيفة ووضعه بين قوسين في نتائج الاستعلام، وهناك العديد من قواعد البيانات المختلفة التي تدعم SQL، مثل MySQL و PostgreSQL و SQL Server وغيرها. وفيما يلي مثال لكيفية تنفيذ ذلك باستخدام جملة SQL: SELECT CONCAT('(', SUBSTRING(occupation, 1, 1), ')') AS first_letter FROM your_table_name; وتأكد من استبدال your_table_name بالاسم الصحيح للجدول الذي يحتوي على الأسماء والوظائف، حيث أن الاستعلام سيستخرج الحرف الأول من الوظيفة في كل سجل ويضعه بين قوسين في عمود يسمى "first_letter" في النتائج.
  19. عليك بتفهم، أنك بحاجة إلى فهم ما يتم شرحه وليس حفظه وبالطبع هناك ما يجب تذكره، لكن ليس كل ما يتم شرحه، ومن خلال الفهم ستتمكن من تنفيذ ما تريده والتعديل على الكود والبحث عن حل لمشكلة تواجهك أيضًا. والتطبيق هو العامل الأهم للاستفادة من أي دورة، فإذا قمت بمشاهدة الدروس فقط فلن تتعلم البرمجة، وإذا قمت بالتطبيق مرة واحدة فقط مع المدرب ستتعلم بنسبة 50% مثلاً، لكن إذا أردت الاستفادة حقًا، عليك بكتابة الكود مع المدرب ومرن يديك وعقلك على كتابة الكود بشكله الصحيح. ثم قم بتنفيذ التمرين أو إعادة ما قام به المدرب بمفردك، ولا مشكلة إذا كان مختلف أو الكود ليس بأفضل جودة ممكنة، طالما أنه يعمل فذلك هو المطلوب في البداية، لكن بالطبع تعلم الطريقة الصحيحة لكتابة الكود فيجب معرفة ذلك. وإذا واجهتك مشكلة عليك بتفقد أولاً هل أخطأت في الأساسيات مثل كتابة حرف بصورة غير صحيحة أو كتابة المسار بشكل غير صحيح، أو لم أقم باستيراد الملف وهكذا، ثم بعد ذلك ابحث عن حل للمشكلة على جوجل فإن لم تجد ابحث على يوتيوب. وقسم المشكلة إلى أجزاء صغيرة ثم أجزاء أصغر وهكذا، واتبع تلك الطريقة أيضًا عند تنفيذ مشروع. وقد شرحت بالتفصيل في النقاشات التالية كيف تستفيد من الدورات والدراسة بالشكل الصحيح، أرجو منك قراءتها: صعوبات البرمجة للمبتدئين
  20. عادةً، تستخدم واجهات برمجة التطبيقات (APIs) المقدمة من مزودي خدمات الدفع لتسهيل هذه العملية، وتستطيع تضمين واجهة برمجة التطبيقات المقدمة من بوابة الدفع داخل تطبيقك وتتفاعل معها لإجراء عمليات الدفع. وعند استخدام بوابة الدفع داخل التطبيق، بإمكان المستخدمين إدخال تفاصيل الدفع (مثل بيانات البطاقة الائتمانية أو طرق الدفع الأخرى) مباشرة في التطبيق نفسه، دون الحاجة إلى توجيههم إلى صفحة خارجية لإتمام العملية. وتستطيع الاستعانة بخدمات مشهورة مثل Stripe وBraintree وPayPal وغيرها من بوابات الدفع لتحقيق هذه الوظيفة، ويجب النظر في الوثائق والتوجيهات المقدمة من مزود البوابة لمعرفة كيفية تنفيذ هذه العملية بالتفصيل داخل تطبيقك. وإليك نقاش به الكثير من المعلومات حول بوابات الدفع المتوفرة: ما هي أفضل بوابات دفع في المنطقة العربية وتكلفة كل منها وما هي أرخص بوابة دفع؟
  21. عند الرغبة في استخدام تقنية معينة، يجب المفاضلة بين المزايا والعيوب التي تأتي بها، حيث تُستخدم تقنية تجميع الاتصالات (Connection Pooling) في برمجة الحواسيب لإدارة مجموعة من اتصالات قاعدة البيانات يمكن إعادة استخدامها من قبل العملاء أو التطبيقات المختلفة. بدلاً من إنشاء اتصال جديد بقاعدة البيانات في كل مرة يحتاج فيها العميل إلى التفاعل مع قاعدة البيانات، وتسمح تجميع الاتصالات باستخدام الاتصالات الحالية، مما يؤدي إلى تحسين الأداء والكفاءة. وإليك بعض فوائد استخدام تجميع الاتصالات: 1- إنشاء اتصال جديد بقاعدة البيانات يستغرق وقتًا طويلاً، حيث يتضمن تكاليف الشبكة والمصادقة. بواسطة تجميع الاتصالات، يتم إنشاء الاتصالات مسبقًا ويتم الاحتفاظ بها في مجموعة جاهزة لإعادة الاستخدام من قبل العملاء المختلفين، مما،يقلل ذلك من تكلفة إنشاء وإغلاق الاتصالات، مما يؤدي إلى تحسين استخدام الموارد. 2- إعادة استخدام الاتصالات الحالية يحل محل الحاجة إلى إنشاء اتصال جديد لكل عملية في قاعدة البيانات، مما يؤدي إلى زمن استجابة أسرع، ويتم تجنب تكاليف الاتصال مثل تأخير الشبكة وعملية المصادقة، مما يتيح للتطبيقات تنفيذ استعلامات قاعدة البيانات بكفاءة أعلى. 3- يتيح تجميع الاتصالات استخدام الموارد الخاصة باتصال قاعدة البيانات بكفاءة، مما يسمح للعملاء أو التطبيقات المختلفة بمشاركة عدد محدود من الاتصالات، ويساعد ذلك في إدارة الأحمال العالية ويضمن عدم استنفاد الاتصالات، مما يعزز قابلية توسع النظام. 4- يوفر تجميع الاتصالات آليات مدمجة لإدارة الاتصالات، مثل التحقق من الاتصال، وانتهاء الصلاحية للاتصالات الخاملة، وإعادة تدوير الاتصالات التي قد تكون غير صالحة أو تسبب مشاكل، وتضمن تلك الميزات أن الاتصالات في حالة صحية، وتمنع الاتصالات من البقاء خاملة لفترات طويلة، وتعيد استخدام الاتصالات التي قد تكون قديمة أو تسبب مشاكل. وعلى الرغم من فوائدها، إلا أنه هناك سلبيات في تجميع الاتصالات أيضًا: 1- تحتوي مجموعات الاتصال على حد أقصى لعدد الاتصالات التي يمكن أن تحتويها، فإذا تجاوز عدد العملاء المتزامنين هذا الحد الأقصى، قد يكون من الضروري إنشاء اتصالات جديدة، مما يؤثر على الأداء. يُعد تكوين حجم مجموعة الاتصال بشكل صحيح مهمًا لضمان الأداء المثلى وتجنب التضارب في استخدام الموارد. 2- يتطلب الاحتفاظ بمجموعة من الاتصالات موارد ذاكرة على خادم التطبيق، فإذا تم تعيين حجم المجموعة بشكل كبير جدًا، فقد يستهلك ذلك ذاكرة زائدة، مما قد يؤثر على الأداء العام للنظام، وإيجاد التوازن المناسب بين حجم المجموعة والموارد المتاحة في النظام أمر مهم. 3- في بعض الحالات، يمكن أن تصبح الاتصالات في المجموعة قديمة أو مفصولة بسبب مشاكل في الشبكة أو إعادة تشغيل خادم قاعدة البيانات أو أسباب أخرى، ويجب أن تتضمن آليات تجميع الاتصالات عمليات التحقق والاختبار للتأكد من صحة الاتصالات قبل إعادة استخدامها، وإلا، قد يؤدي استخدام الاتصالات القديمة إلى حدوث أخطاء وسلوك غير متوقع.
  22. قمت برفع مجلد node_modules وهو يحتوي على كافة الحزم الخاصة بالمشروع، وهو أمر غير صحيح، لذلك عليك بإضافة ملف .gitignore لمجلد المشروع لديك ولذلك رفع الكود المصدري فقط وتجاهل مجلدات مثل node_modules وdist وbuild. وقد شرحت ذلك هنا: وبعد تطبيق الشرح السابق، عليك بحذف المستودع وإعادة رفع المشروع من جديد وإليك طريقة حذف المستودع: وإليك طريقة رفع المشروع على GitHub pages أو استضافة مجانية مثل Netlify: ونصيحتي إليك هي برفع مجلد build أو dist على فرع منفصل داخل المستودع ثم استخدامه في GitHub pages أي أنشيء مستودع داخل المجلد ثم قم برفع محتوياته إلى فرع منفصل. أو بطريقة أسهل استخدم Netlify وستقوم برفع مجلد build مباشرًة إلى الاستضافة:
  23. عند مواجهة رسالة الخطأ "Expected Expression" عند كتابة else في برنامج Python، فربما المحتمل هناك خطأ في بنية الشرط الذي يسبق else، وعند استخدام else، يجب أن يتم توفير شرط متبوعًا بالكلمة المفتاحية if أو شرط آخر. وإليك بعض الأمثلة على استخدام else بشكل صحيح: المثال الأول: x = 5 if x > 10: print("x is greater than 10") else: print("x is not greater than 10") المثال الثاني: grade = 80 if grade >= 90: print("Excellent") elif grade >= 70: print("Good") else: print("Failed") وتأكد من أن هناك شرطًا سليمًا قبل else.
  24. حاول التثبيت من خلال إنشاء بيئة إفتراضية كالتالي: python -m venv myenv ثم تفعيل البيئة الإفتراضية: venv\Scripts\activate ثم تثبيت المكتبات: pip install pandas openpyxl وإذا استمرت المشكلة، فانتبه إلى عند استخدام أمر pip install لتثبيت مكتبة ما باستخدام PIP، يكون لديه قيمة افتراضية للوقت المسموح به لعملية التنزيل والتثبيت وهي 15 ثانية. ونظرًا لأن مكتبة pandas حجمها كبير نسبيًا بحجم 10 ميجابايت وتعتمد على مكتبة numpy بحجم 20 ميجابايت والتي قد تكون مطلوبة إذا لم تكن مثبتة بالفعل، فقد يستغرق التنزيل والتثبيت وقتًا طويلاً إذا كان الإنترنت ضعيف. وإذا كانت لديك اتصال بالشبكة بطيء أو تحتاج إلى زيادة الوقت المسموح به لـ PIP لإكمال عملية التثبيت، بتعيين قيمة زمنية أطول لـ PIP عن طريق تمرير معامل --timeout مع القيمة المطلوبة. وإليك أمر تعيين الوقت إلى 1000 ثانية (حوالي 16 دقيقة): pip --timeout=1000 install pandas وسيتم إنتظار عملية التحميل والتثبيت لمدة أطول.
×
×
  • أضف...