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

Mustafa Suleiman

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

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

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

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

    365

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

  1. السؤال مطروح بشكل عام، حيث أن اللاب توب جيد بالطبع ومناسب للبرامج الهندسية والألعاب، فإذا كنت تطمح لتشغيل بعض الألعاب الثقيلة وأيضًا برامج هندسية مثل 3D MAX فلن يخذلك اللاب توب بتلك المواصفات. لكن قد تكون تلك الإمكانيات زائدة عن حاجتك، فهل تريد اللاب توب لتعلم البرمجة مثلاً؟ ففي تلك الحالة عليك بشراء جهاز بمواصفات أقل فأنت لن تحتاج إلى كل تلك المواصفات، لكن المهم هو أن تكون الرامات 16 جيجا والهارديسك الخاص بالنظام من نوع SSD لتجنب بطيء النظام والعمل بسلاسة على الجهاز، والمعالج من فئة H وليس U. وأيضًا إذا كنت على معرفة بشخص لديه دراسة في أجهزة الحاسوب، فمن الأفضل شراء جهاز مستعمل بحالة جيدة حيث أنك ستحصل عليه بنصف الثمن.
  2. من الأفضل أن تشاهد Crash Course يوضح لك طريقة استخدام GitHub بدلاً من العناء الغير ضروري الذي يواجهه الكثيرين في البداية، وبعد الشرح ستجد أن الأمر أصبح بسيط، وستجد ذلك متوفر في أكاديمية حسوب من هنا: بعد ذلك أنصحك بقراءة التالي: ولا تنسى استخدام ملف .gitignore وذلك لتجنب رفع المجلدات الغير ضرورية مثل node_modules وغيرها، وقد تم توضيح الأمر هنا:
  3. عليك بإضافة متغيرات البيئة Environment variables في Netlify تفقد التالي: https://docs.netlify.com/environment-variables/overview/ https://docs.netlify.com/environment-variables/get-started/#import-variables-with-the-netlify-ui
  4. الأمر راجع لك، فمثلاً البعض يقوم بمشاهدة 4 فيديوهات مثلاً وفهمها جيدًا ثم التطبيق على ما جاء فيها من خلال إعادة كتابة الكود بمفرده، وذلك في حال كانت تلك الفيديوهات مرتبطة بموضوع معين. أما إذا كانت منفصلة فعليك بالتطبيق مع المدرب من خلال مشاهدة جزء ثم التوقف وكتابة الكود والعودة للمشاهدة، أو مشاهدة الفيديو للنهاية ثم التطبيق بمفردك من خلال إعادة كتابة ما جاء في الفيديو ومحاولة التغيير في الكود لتفهم طبيعة عمله ولا تقلق من التجربة والخطأ فستتعلم من أخطائك أكثر من شيء آخر. وبأي حال من الأحوال عليك بالتطبيق بمفردك مرة على الأقل من أجل تثبيت المعلومات واستيعاب طريقة كتابة الكود وتمرين مهارة التفكير المنطقي لديك ومع الوقت ستتحسن. ومن الأفضل ألا تكتفي بالتمارين البسيطة على الأساسيات، بعد الإنتهاء من تعلم الأساسيات ابحث عن مشاريع للمبتدئين على اليوتيوب وقم بتنفيذها من أجل توظيف ما تعلمته في مشروع حتى لو كان هناك مشروع من الأفضل أن تقوم بتنفيذ مشروع آخر، لكون مرحلة تعلم الأساسيات هامة جدًا من أجل المراحل التي بعدها. وقد يفيدك النقاش التالي:
  5. الأمر بسيط، بإمكانك وضع العنصرين الشعار والأيقونة داخل عنصر حاوي لهم أي عنصر أب، ثم إعطاء خاصية flex للعنصر الأب وستظهر العناصر بداخله بجانب بعضها البعض، مع استخدام خاصية gap بقيمة 10 بكسل مثلاً من أجل توفير مساحة بين عناصرالـ flexbox. أو لا داعي لاستخدام الـ Flex حيث يمكنك وضع الشعار والأيقونة داخل عنصر أب حاوي لهم، ثم إعطاء خاصية margin للأيقونة من جهة اليمين أو اليسار بحسب رغبتك، وبذلك سيتم عرضهم بجانب البعض، لكن عليك بإعطاء العنصر الخاص بالأيقونة والشعار خاصية inline-block من أجل أن يتموضع كل منهم بجانب بعضهم البعض، حيث أن عناصر block مثل div تستحوذ على كامل عرض الشاشة وتأتي العناصر الأخرى بعدها في سطر جديد. ولكن أسهل وأفضل طريقة هي استخدام الـ Flex وقد تم توضيح ذلك، وأنصحك بالإعتماد على الأداة التالية لكي تفهمي خواص الـ Flex: https://flexbox.malven.co
  6. أولاً عليك تغيير الروابط المطلوبة في ملف .env على الاستضافة وحفظ التغييرات بشكل صحيح، وافحص الملف مرة أخرى وتأكد من أن الروابط الصحيحة تم تعيينها لمتغيرات البيئة. حيث أن هناك إعدادات خاصة بمتغيرات البيئة في الاستضافة وعليك ضبطها وإعداداها بناءًا على المتغيرات في مشروعك. وهل البيانات المرسلة بواسطة طلبات API تتم معالجتها بشكل صحيح وتخزينها بنجاح. وقد يفيد ااستخدم أدوات التطوير المتاحة مثل تفقد هل يوجد خطأ في الكونسول أو الإعتماد Postman للتحقق من طلبات API الصادرة والاستجابات المستلمة، وتحقق من رموز الاستجابة (response codes) والبيانات المرسلة والمستلمة للتأكد من أنه لا يوجد أي خطأ في عملية استدعاء البيانات وتخزينها.
  7. جميع لغات وبيئات الواجهة الخلفية مطلوبة في سوق العمل، لكن عليك بتفقد المطلوب بنسبة أكبر في السوق المحلي لديك من خلال البحث على الموقع التوظيف مثل LinkedIn بكلمة مفتاحية مثل Back-End developer. وبالطبع PHP ولارافيل أكثر طلبًا في العالم العربي من Node.js، وأيضًا نفس الأمر على مواقع العمل الحر، ولا تنسى أنا .NET مطلوب بكثرة أيضًا في الشركات، وقد تم الإجابة بشكل مفصل هنا:
  8. عليك باستيعاب أنه في لغة البرمجة بايثون، تستخدم الإزاحات (Indentations) لتنظيم الكود وتحديد الهيكل والتسلسل الزمني للتعليمات، وعند تضمين تعليمات داخل كتلة معينة مثل الشروط (if/else) أو الحلقات (loops)، نستخدم الإزاحات لتحديد البلوك الذي يتبع الكود. لنفترض أن لديك شرط "if" للتحقق مما إذا كانت قيمة متغير ما تساوي 10، فنستخدم الإزاحات لتحديد الكود الذي سيتم تنفيذه في حالة تحقق الشرط كالتالي: x = 10 if x == 10: print("قيمة x تساوي 10") print("هذا الكود ينفذ فقط إذا كانت القيمة تساوي 10") print("هذا الكود يعمل بعد انتهاء الشرط") ولاحظ الإزاحات (المسافات في بداية كل سطر) لتحديد الكود الذي يتم تنفيذه في حالة تحقق الشرط x == 10، والأسطر الملونة تحت الشرط هي جزء من البلوك الذي سيتم تنفيذه فقط إذا كانت القيمة مساوية لـ 10، بينما السطر الملون بالأزرق يتم تنفيذه بغض النظر عن الشرط. تستخدم الإزاحات أيضًا في حلقات الكود، مثل حلقة "for"، لتحديد الكود المراد تكراره داخل الحلقة وإليك مثال آخر: for i in range(5): print("قيمة i هي:", i) print("هذا السطر يعمل في كل تكرار للحلقة") print("هذا السطر يعمل بعد انتهاء الحلقة") استخدمت الإزاحات لتحديد الكود الذي يتم تنفيذه في كل تكرار للحلقة "for"، والأسطر الملونة تحت الحلقة هي الأوامر التي ستتم تكرارها على مدار الحلقة، بينما السطر الملون بالأزرق يتم تنفيذه بعد انتهاء الحلقة.
  9. في البداية لا مشكلة أبدًا في ذلك، عليك بتفهم أنك في البداية ستتعلم بتقليدك لما يتم شرحه في الدورة أو الشروحات الأخرى، ثم محاولة تطبيق ذلك بنفسك من أجل تثبيت ما تعلمته، ولا مشكلة في البحث لكن بعد التفكير أولاً في كيفية حل أو تنفيذ ما تريده بنفسك من خلال ما تعلمته، ثم تأتي خطوة البحث. والغرض هو تمرين عقلك على حل المشكلات البرمجية وربط ما تعلمته ببعضه البعض ومع الوقت والاستمرارية ستجد أن مستواك تطور وأصبحت قادر على تنفيذ المشاريع بنفسك، ولكن سيظل جوجل هو صديقك في البحث عن ما تريد تنفيذه مثل البحث عن مكتبة معينة أو اسم كلاس معين أو خاصية معينة في CSS وهكذا، فأنت لن تحفظ كل شيء لكن تعرف ما تعلمته جيدًا وطريقة استخدامه وتوظيفه في مشروعك.
  10. هناك عدة طرق لإضافة إمكانية التحديث اللحظي بين شيت إكسل وتطبيق آخر، وأحد تلك الطرق هي استخدام وظيفة "Data Refresh" لتحديث البيانات في شيت الإكسل من مصدر البيانات تلقائيًا كالتالي: افتح شيت الإكسل الذي تريد تحديث بياناته. حدد النطاق الذي تريد تحديث بياناته. انقر على علامة التبويب "بيانات". في المجموعة "أدوات البيانات"، انقر فوق "تحديث". في مربع الحوار "تحديث البيانات"، حدد "تحديث كل البيانات" من القائمة المنسدلة "تحديث". انقر فوق "موافق". طريقة أخرى وهي استخدام وظيفة "Power Query" لتجميع البيانات من مصادر متعددة ودمجها في شيت إكسل كالتالي: افتح شيت الإكسل الذي تريد تحديث بياناته. انقر على علامة التبويب "بيانات". في المجموعة "أدوات البيانات"، انقر فوق "استيراد". في مربع الحوار "استيراد البيانات"، حدد "من Power Query" من القائمة المنسدلة "مصدر البيانات". حدد مصدر البيانات الذي تريد استيراده. انقر فوق "موافق". سيتم الآن استيراد البيانات من مصدر البيانات إلى شيت الإكسل. لإعداد التحديث التلقائي، انقر بزر الماوس الأيمن على النطاق الذي يحتوي على البيانات المستوردة. من القائمة المنسدلة، حدد "تحديث".
  11. لا مشكلة ولا تنزعج من ذلك، فذلك أمر وارد وأنا لا أعلم ما الذي مررت به أنت، لكن أحيانًا نحتاج إلى التوقف قليلاً من أجل استكمال حياتنا. من الأفضل أن تقوم بمراجعة سريعة للدورة، وذلك بتشغيل الدروس على سرعة أعلى من 1 حسب المناسب لك، وذلك للدروس التي قمت بدراستها من قبل، ثم التطبيق على ما تم شرحه في تلك الدروس سواء من خلال إعادة كتابة الكود بمفردك أو تنفيذه بشكل مختلف ولكن يؤدي نفس المطلوب أي محاولة الحل بمفردك، المهم هو المحاولة وتمرين عقلك على التفكير المنطقي وتمرين يديك على كتابة الكود في البداية وتثبيت المعلومات. وقد أشرت إليك بمراجعة الدورة من أجل أن تتمكن من استكمال باقي المسارات بدون مشاكل لكونها تعتمد على المسارات التي قبلها. وإذا أردت تستطيع البحث على اليوتيوب عن "أساسيات بايثون" وستجد الكثير من الدورات المختصرة. وأنصحك بقراءة النقاش التالي فهو مشابه لسؤالك: وفي المسار الأول تم استخدام مكتبات قياسية في بايثون، والمكتبة الخارجية التي تم استخدامها هي tabulate.
  12. شعور طبيعي وطال الجميع في بداية رحلة تعلم البرمجة، لكن ليس من الطبيعي التعلم بشكل خاطيء ثم التساؤل عن سبب ذلك الشعور وبالطبع أنت لم تقصد ذلك، لكن الصحيح هو التركيز على تعلم الأساسيات بشكل جيد والبحث عن تمارين على اليوتيوب للمبتدئين من أجل التطبيق عليها، والبحث عن ما تريد تنفيذه لتفهم كيف يتم ذلك في البداية ولا مشكلة في ذلك فأنت ما زلت تتعلم، لكن حاول التفكير أولاً لتمرين نفسك على حل المشكلات. وعليك بعدم المشاهدة السلبية، أي لا يكفي أن تشاهد الفيديوهات وتفهمها وتظن أنك قادر على تنفيذ ذلك، لا تقع في ذلك الفخ، ففي البداية يجب إعادة كتابة كل شيء بمفردك ومحاولة التغيير في الكود لتفهم طبيعة عمله ولماذا يتم كتابته بذلك الشكل وليس بطريقة أخرى وهكذا، فمن خلال تمرين عقلك ويديك على كتابة الكود تصبح مبرمج وليس بالمشاهدة فقط. وفي حال كنت تقوم بالكتابة وراء المدرب وتلك طريقة جيدة لا مشكلة، لكن ذلك لا يغنى عن إعادة الكتابة بمفردك، فستتعلم الكثير من أخطائك أنت، ولا تخف من التجربة والتغيير ومحاولة الحل بنفسك، المهم هو أن الكود يعمل. وبذلك ستصبح قادر على استخدام ما تعلمته في تنفيذ مشروع، وأيضًا لا تفكر في المشروع ككل، بل قسمه إلى أجزاء صغيرة وتلك الأجزاء إلى أجزاء أصغر ثم حاول تنفيذ كل جزء، وأيضًا خطط للمشروع والتفكير قبل كتابة الكود، فلا تهرع أبدًا لكتابة الكود أولاً وذلك خطأ شائع في البداية لا مشكلة، وأنصحك بقراءة التالي: وأعطي نفسك بعض الوقت ولا تستعجل، فمع التدرب بشكل يومي ستذهل من مستواك بعد فترة.
  13. عليك بإنشاء واجهة المستخدم في NetBeans، واستخدام JFrame و JTextField لإنشاء مربع نص لإدخال تاريخ الميلاد وزر لحساب العمر، عن طريق نافذة الجديدة، اختر "Java" من القائمة الجانبية اليسرى وحدد "Java Application" ثم انقر فوق "الزر التالي". بعد ذلك أضف إلى واجهة المستخدم مربع نص JTextField لإدخال تاريخ الميلاد وزر JButton لحساب العمر. ثم كتابة الكود للحصول على تاريخ الميلاد المدخل وحساب العمر، وسيكون الكود لديك كالتالي بناءًا على الخطوات السابقة: import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class AgeCalculator extends JFrame { private JTextField dateOfBirthTextField; private JButton calculateButton; private JLabel ageLabel; public AgeCalculator() { initComponents(); } private void initComponents() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("حاسبة العمر"); JPanel panel = new JPanel(); dateOfBirthTextField = new JTextField(10); calculateButton = new JButton("احسب العمر"); ageLabel = new JLabel(); calculateButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { calculateAge(); } }); panel.add(dateOfBirthTextField); panel.add(calculateButton); panel.add(ageLabel); add(panel); pack(); setVisible(true); } private void calculateAge() { String dateOfBirthStr = dateOfBirthTextField.getText(); DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); try { Date dateOfBirth = dateFormat.parse(dateOfBirthStr); Calendar today = Calendar.getInstance(); Calendar birthDate = Calendar.getInstance(); birthDate.setTime(dateOfBirth); int age = today.get(Calendar.YEAR) - birthDate.get(Calendar.YEAR); if (today.get(Calendar.DAY_OF_YEAR) < birthDate.get(Calendar.DAY_OF_YEAR)) { age--; } ageLabel.setText("عمرك هو " + age + " سنة."); } catch (Exception e) { ageLabel.setText("تاريخ الميلاد غير صالح."); } } public static void main(String[] args) { new AgeCalculator(); } } بعد تشغيل البرنامج ستظهر واجهة المستخدم الخاصة بحاسبة العمر، فقم بإدخال تاريخ الميلاد بتنسيق "dd/MM/yyyy" في مربع النص وانقر على زر "احسب العمر" لعرض العمر في التسمية. ولاحظ أن تنسيق تاريخ الميلاد هو "dd/MM/yyyy"، وفي حال كان تنسيق تاريخ الميلاد لديك مختلفًا، يجب تعديل الكود وفقًا لذلك.
  14. عليك بتثبيت حزمة Microsoft Visual Studio 2010 Service Pack 1 من خلال الرابط التالي: https://www.microsoft.com/en-us/download/details.aspx?id=27049 وبعد التثبيت عليك بإعادة تشغيل الحاسوب، ثم إعادة تثبيت SQL Server مرة أخرى. وإذا استمرت المشكلة، من الأفضل أن تقوم بحذف Visual Studio 2010 ثم إعادة تشغيل الحاسوب، وتثبيت SQL Server، وبعدها تستطيع تثبيت Visual Studio 2010.
  15. الأمر غريب حقًا، حاول إعادة تثبيت بايثون وتثبيت أحدث إصدار من خلال الرابط التالي ولا تنسى إختيار add to path أثناء الثتبيت: https://www.python.org/downloads/ وأيضًا حاول تغيير الكود للتالي import sys num = int(input("enter the num: ")) sys.exit() وجرب استخدام الكود في منفذ الأوامر ولكن خارج vscode، أي قم بكتابة python ثم Enter ثم كتابة الكود الذي تريده لترجمته.
  16. الكود به عدة أخطاء: في السطر import ttkbootstrap as ttk، الوارد في السطر الثاني، تحتاج إلى استبدالها بـ from tkinter import ttk، حيث أن ttkbootstrap ليس وحدة معترف بها في مكتبة tkinter. في السطر BOOK1 = load_document(file_path)، يجب تمرير القيمة file_path كوسيطة للكائن load_document بدلاً من BATH، وتغيير السطر إلى BOOK1 = load_document(file_path). يجب استدعاء load_file() لتحميل الملف داخل الدالة COLS_V() بعد تعيين قيمة BATH لكائن BOOK1، وتغيير السطر BOOK1.load_file() إلى BOOK1.load_file(). تحديث قائمة column_values داخل الدالة COLS_V2() بعد تحميل الملف واستعادة أسماء الأوراق، أي تغيير السطر column_values = BOOK1.workbook.sheetnames إلى column_values = BOOK1.sheet.sheetnames. from openpyxl import load_workbook from tkinter import ttk, filedialog class load_document: 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 BOOK1 = load_document() column_values = () def COLS_V(): # اختيار الملف file_path = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main",title="Open file okay?",filetypes=(("text files","*.xlsx"),("all files","*.*"))) BOOK1 = load_document(file_path) BOOK1.load_file() def COLS_V2(): global column_values column_values = BOOK1.sheet.sheetnames # تحديث قيم Combobox combo['values'] = column_values # أدوات الواجهة root = ttk.Tk() #----------------------------------------------------------- frame = ttk.Frame(root) frame.pack() #----------------------------------------------------------- widgets_frame = ttk.LabelFrame(frame, text="إختر الملف") widgets_frame.grid(row=0, column=0, padx=20, pady=5, sticky="nsew") #----------------------------------------------------------- b1 = ttk.Button(widgets_frame, text="إختر الملف", style="info.Outline.TButton", command=COLS_V) b1.grid(row=0, column=0, padx=5, pady=5, sticky="ew") b2 = ttk.Button(widgets_frame, text="إدرج أوراق العمل للقائمة", style="info.Outline.TButton", command=COLS_V2) b2.grid(row=1, column=0, padx=5, pady=5, sticky="ew") #----------------------------------------------------------- combo = ttk.Combobox(widgets_frame, values=column_values) combo.grid(row=2, column=0, padx=5, pady=5, sticky="ew") root.mainloop()
  17. هل ما تتحدث عنه هو أساسيات؟ بالطبع لا يجب عليك حفظ الأساسيات والقواعد الأساسية للغة والإطار، ولكن عليك بالفهم أولاً ثم الحفظ، وفي البرمجة بشكل خاص الحفظ وحدة لن يفيدك بشيء ولن تصل بعيدًا بذلك. وستيعين عليك المراجعة والتطبيق على نماذج صغيرة ثم بناء مشروع من أجل تثبيت ما تعلمته، وحاول بناء مشروع للمراجعة على مافات من أجل التثبيت، فالتعلم لا يسير بشكل خطي بل عليك الرجوع قليلاً للوراء ثم المراجعة والتقدم مرة أخرى، أي التكرار. وبعد ذلك لا مشكلة إن نسيت جزء معين من الأساسيات أو أمور أخرى، طالما أنك فهمتها وقمت بالتطبيق بمفردك بعد مشاهدة المدرب أو الشرح، وحاولت التجربة على أمور مختلفة والتغيير في الكود لتفهم كيف يعمل، وفي حال نسيت أمر ما كل ما عليك هو البحث عنه على جوجل وستتذكر مباشرًة طريقة الاستخدام، وستستطيع تنفيذ ما تريد لكونك على دراية به. الأمر أشبه بكونك عالم كيمياء يعود للبحث في المراجع عن معادلة معينة أو تركيبة معينة ثم يقوم بتحضيرها واستخدامها، هل فهمت قصدي؟ مثلاً كلاسات بوتستراب لا حاجة لحفظها عن ظهر قلب، بل لديك المستند الرسمي وجوجل، عليك بفهم قواعد كتابتها والهيكلية الخاصة بها، ومع الوقت ستحفظ الكلاسات التي تستخدمها بكثرة. ولا يوجد مبرمج مهما كان محترف يتذكر او يحفظ كل شيء، حيث أنه يوجد بعض الأمور لا حاجة لحفظها عن ظهر قلب، وستعرف ما هي مع مرور الوقت، لكن في البداية لا تتدخر جهدًا بل حاول فهم وحفظ كل شيء والتطبيق عليه.
  18. الأمر يعتمد على ما تريد فعله وعلى الأماكن الجغرافية لزوار الموقع، فاستدعاء الخطوط عن طريق CDN من خلال جوجل يتيح لك الآتي: تحسين أداء الموقع، حيث تُحمل الخطوط من سيرفر قريب من المستخدم، مما يقلل من وقت التحميل ويعزز سرعة التصفح. يتم تحديث خطوط CDN تلقائيًا، مما يعني أنك لن تحتاج إلى القلق بشأن تحديث الإصدارات أو حل المشاكل الأمنية للخطوط. خدمات CDN متاحة عالميًا، وهذا يعني أن المستخدمين في جميع أنحاء العالم سيتمكنون من الوصول إلى الخطوط بشكل سريع وسهل. أما تحميل الخطوط وإضافتها عن طريق CSS فيتيح لك: الحصول على مستوى أعلى من التحكم في الخطوط المستخدمة في مشروعك، وتخصيص خصائص الخطوط بدقة وتحديد الإصدار المحدد الذي ترغب في استخدامه. عند تحميل الخطوط محليًا، فإن الموقع سيكون قادرًا على عرض الخطوط بشكل صحيح حتى في حالة انقطاع الاتصال بالإنترنت. متاح لك أنواع خطوط أكثر من المتاح على Google Fonts أي أن استخدام CDN مناسب عندما تهتم بأداء الموقع وسرعة التحميل، وتفضل عدم التعامل مع الصيانة الدورية للخطوط، أما إذا كنت تحتاج إلى مرونة أكبر وتحكم دقيق في الخطوط، وتفضل الاستقلالية عن الاتصال بالإنترنت، فقد يكون تحميل الخطوط وإضافتها عن طريق CSS هو الخيار الأنسب لك.
  19. شركات الـ Software house راتبها اٌقل من الشركات الكبيرة لكن ستتعلم الكثير في تلك الشركة في حال وجود مشاريع مختلفة، أما الشركات ذات المنتج الواحد ستتعلم الكثير في البداية ثم يصبح الأمر روتيني. أما عن متوسط المرتبات فما هي خبرتك وماهو الـ Stack أو اللغة والإطار الذي تعمل به؟ عامة المرتبات تبدأ من 8 آلاف وحتى 15 ألف حسب مستواك والـ Stack الخاص بك. في حال كونك مطور واجهات امامية فالمرتب سيتراوح ما بين 8 إلى 10 آلاف. في حال كان مستواك Fresh فربما يتم عرض مرتب أقل. وأنصحك بالبحث عن الشركة في جروب Don't work there على الفيسبوك وسترى أيضًا المرتبات.
  20. حاول استخدام دالة exit لإنهاء البرنامج بعد تنفيذ الكود كالتالي: num = int(input("enter the num: ")) exit() # إنهاء البرنامج
  21. 1- يوجد موقع Microsoft Docs وهو هو موقع الوثائق الرسمي لـ .NET Framework و .NET Core، ويوفر وثائق شاملة للمكتبات والإطارات الأساسية في .NET، وتستطيع العثور على معلومات مفصلة وبرامج تعليمية وأمثلة لمكتبات وواجهات برمجة التطبيقات المختلفة في لغة C#. 2- أيضًا NuGet Gallery هو مستودع لمكتبات .NET من الطرف الثالث، ويحتوي على مجموعة واسعة من المكتبات التي يمكنك استخدامها في مشاريع C# الخاصة بك. يتضمن الموقع خاصية البحث، مما يتيح لك البحث عن المكتبات بناءً على الأسماء أو الكلمات الرئيسية أو الفئات، وبمجرد العثور على مكتبة تهمك، يمكنك الوصول إلى وثائقها وتعليمات التثبيت. 3- بالإضافة إلى موقع Nuget must haves ويحتوي على أفضل الحزم وأشهرها. وإليك بعض النصائح الإضافية للعثور على وثائق المكتبات في لغة C#: استخدم التوجيه using لاستيراد فضاء الأسماء (namespace) الخاص بالمكتبة التي تهتم بها، مما سيمنحك الوصول إلى وثائق المكتبة في نافذة IntelliSense في برنامج Visual Studio. ابحث عن وثائق المكتبة على موقع المكتبة نفسه، فالعديد من المكتبات لديها مواقع خاصة بها توفر معلومات أكثر تفصيلاً من وثائق Microsoft Docs. تحقق من وثائق المكتبة على موقع GitHub، فأغلب المكتبات مستضافة على GitHub، وغالبًا ما يتم تخزين وثائقها في ملف README.md في مستودع المشروع.
  22. عليك برفع الفيديو في المرفقات:
  23. بالطبع لا، إلا إذا أردت توزيع العناصر داخل حاوية Flexbox، حيث نستخدم justify-content لتوزيع العناصر أفقيًا بينما نستخدم align-items لتوزيع العناصر رأسيًا. لكن انتبه إلى أنه عندما نحدد خاصية flex-direction بقيمة column أي تحويل إتجاه العناصر من أفقي إلى رأسي، يتم عكس استخدام justify-content حيث تصبح خاصة بتوزيع العناصر رأسيًا، بينما تصبح خاصية align-items خاصة بتوزيع العناصر أفقيًا ونفس الأمر بالنسبة لخاصية align-content. لكن فرق بين align-items و align-content حيث أن الأولى خاصة بتوزيع خط واحد من العناصر، بينما الثانية خاصة بتوزيع أكثر من خط كالتالي: وأنصحك باستخدام الموقع التالي للتعرف على خواص Flexbox أنثاء تعلمك وسيسهل عليك الأمر كثيرًا: https://flexbox.malven.co
  24. لأكون واضحًا معك، لن تفهم الأمر بشكل واضح إلا إذا قمت بدراسة الدالة البانية Constructor والسياق والنطاق Context and Scope وPrototype والتعرف على الطرق المختلفة لاستدعاء الدوال في جافاسكريبت، مثل استدعاء الدوال من كائنات، واستدعاءها كدوال عادية، واستدعاءها باستخدام الدوال السهمية، واستدعاءها باستخدام الـapply والـcall والـbind. و "this" ببساطة هي كلمة محجوزة تشير إلى الكائن الحالي الذي يتم تنفيذ الكود فيه، ونستخدم "this" داخل الوظائف والأساليب والأحداث للإشارة إلى الكائن الحالي الذي تم استدعاء الوظيفة أو الأسلوب منه. أما فائدة "this" تكمن في القدرة على الوصول إلى الخصائص والأساليب الخاصة بالكائن الحالي، فعندما تستدعى الوظيفة أو الأسلوب باستخدام "this"، يتم تمرير الكائن الحالي كوسيط للعمليات التي يجريها الكود. مثلاً لنفترض أن لدينا كائنًا يُمثل سيارة، ولديه خاصية "السرعة" وأسلوب "تشغيل"، وعند استدعاء أسلوب "تشغيل"، تستخدم "this" للإشارة إلى الكائن الحالي (السيارة) وتغيير خاصية "السرعة" بناءًا على الإجراء المناسب. وفي جافاسكريبت، قيمة "this" تختلف بين الدوال العادية (Regular Functions) والدوال السهمية (Arrow Functions): الدوال العادية: قيمة "this" تشير إلى الكائن الذي يتم استدعاء الدالة منه، أو الكائن الذي يحتوي على الدالة، أي تعتمد قيمة "this" في الدوال العادية على سياق الاستدعاء وطريقة استدعاء الدالة. والتوضيح من خلال الكود أفضل، ولنبدأ باستخدام "this" في الوظائف المنفصلة: const person = { name: "John", age: 30, greet: function() { console.log("Hello, my name is " + this.name); } }; person.greet(); // الناتج: "Hello, my name is John" قمت بتعريف دالة greet داخل كائن person، وعند استدعاء الدالة باستخدام person.greet()، تستخدم "this" للإشارة إلى الكائن الحالي (person) والوصول إلى خاصية name لطباعة رسالة تحتوي على اسم الشخص. الدوال السهمية: قيمة "this" ليست مرتبطة بسياق الاستدعاء ولا تتأثر بطريقة الاستدعاء، ولكنها تستمد قيمتها من النطاق الذي تم تعريف الدالة فيه كالتالي: const person = { name: "John", age: 30, greet: () => { console.log("Hello, my name is " + this.name); } }; person.greet(); // الناتج: "Hello, my name is undefined" وكما ترى بغض النظر عن كيفية استدعاء الدالة person.greet()، قيمة "this" في الدالة السهمية تشير إلى النطاق العلوي (lexical scope) الذي تم تعريف الدالة فيه، وفي هذه الحالة قيمة this.name ستكون غير معرفة (undefined). 2- استخدام "this" في الأحداث (Events) const button = document.getElementById("myButton"); button.addEventListener("click", function() { console.log("Button clicked by " + this.textContent); }); تم تعيين حدث النقر (click event) لزر HTML بواسطة addEventListener. عند حدوث النقر، تستدعى الوظيفة المنفذة، وهنا يتم استخدام "this" للإشارة إلى العنصر الذي تم النقر عليه (الزر) وطباعة نص الزر في الكونسول. 3- استخدام "this" في الأشياء الموروثة (Inheritance) والمثال التالي يفترض أنك على دراسة بالـ prototype. function Animal(name) { this.name = name; } Animal.prototype.greet = function() { console.log("Hello, I'm " + this.name); }; function Dog(name, breed) { Animal.call(this, name); this.breed = breed; } Dog.prototype = Object.create(Animal.prototype); Dog.prototype.constructor = Dog; const myDog = new Dog("Max", "Labrador"); myDog.greet(); // الناتج: "Hello, I'm Max" عرفت الدالة Animal وتأخذ معلمة name، ثم قمت بإنشاء دالة greet باستخدام النمط الأساسي للوظائف الموروثة (prototype inheritance). بالمثل، تعريف الدالة Dog التي ترث من Animal وتضيف خاصية breed، وعند إنشاء كائن Dog واستدعاء الدالة greet، تستخدم"this" للإشارة إلى الكائن الحالي (myDog) واستدعاء greet من النمط الأساسي.
  25. من الأفضل فهم طريقة استخدام مشغل باقي القسمة % Remainder وهو يعتمد على العملية الحسابية المعروفة باسم "العملية الباقية" أو "العملية الباقية المعدلة"، وهي تقوم بحساب الباقي المتبقي عند قسمة رقمين. ولحساب باقي القسمة في جافاسكريبت، نستخدم عامل العملية "%" كما هو موضح أدناه: let dividend = 10; let divisor = 3; let remainder = dividend % divisor; console.log(remainder); ونقوم بقسمة العدد 10 على 3، وحساب باقي القسمة بواسطة العملية المعروفة "%" وتخزين النتيجة في المتغير remainder. وستظهر النتيجة 1 في وحدة التحكم. وعند قسمة رقم على رقم آخر، ما يحدث هو حساب الباقي عن طريق تحديد المبلغ المتبقي بعد القسمة، ولاحظ أن باقي القسمة يكون أقل من المقسوم عليه ويتواجد بين 0 والقيمة المقسوم عليه. وفي المثال، نقوم بقسمة العدد 10 على العدد 3، وعند قسمة 10 على 3، الناتج هو 3 مع باقي 1، وذلك يعني أن 3 هي الناتج الصحيح للقسمة، والباقي هو 1. أي أنه تم قسمة 9 على 3 وتبقى لنا 1 من الـ 10.
×
×
  • أضف...