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

عبدالباسط ابراهيم

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

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

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

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

    11

أجوبة بواسطة عبدالباسط ابراهيم

  1. السؤال جيد وسأحاول الشرح بأبسط طريقة ممكنة

    يمكن استخدام الأنواع البدائية مثل الحروف والأرقام مباشرة في دوال الكلاس Character، دون الحاجة إلى إنشاء كائنات جديدة من الكلاس.

    ولكن يمكن استخدام كائنات من الكلاس Character عندما نحتاج إلى تمثيل حرف ككائن وليس كقيمة بدائية. فعلى سبيل المثال، إذا كنت تحتاج إلى تخزين سلسلة من الأحرف وإجراء عمليات متعددة عليها، فيمكن تمثيل كل حرف ككائن من الكلاس Character.

    علاوة على ذلك، يمكن إنشاء كائنات من الكلاس Character عندما نحتاج إلى استخدام خصائص الكائنات مثل `isLetter()` مع متغيرات أو بيانات تمثل حرف معين، مثلما فعلنا في الكود الذي ذكرته في السؤال.

    بشكل عام، يمكن استخدام الأنواع البدائية مثل الحروف والأرقام مباشرة في العديد من دوال الكلاس Character، ولا يلزم إنشاء كائنات جديدة من الكلاس لتمثيل هذه القيم. ومع ذلك، قد يكون من المفيد استخدام كائنات الكلاس Character في بعض الحالات التي تتطلب التعامل مع الأحرف ككائنات بدلاً من قيم بدائية.

  2. أولاً يجب فهم الفرق بين الخاصيتين حيث أن هناك اختلاف كبير بين خاصية margin و خاصية border-collapse عند تصميم جداول بلغة HTML.

    • خاصية margin تضع هامش حول كامل الجدول. وهذا يعني أن الجدول ككل سينتقل إلى الداخل أو الخارج بمقدار القيمة المحددة لـmargin.
    • في حين أن خاصية border-collapse تجعل الحدود الداخلية للخلايا تندمج في حد واحد. وهذا يزيل الفراغات الزائدة بين الخلايا.

    فعند تحديد margin=0 للجدول، فهذا لن يؤثر على الفراغات بين الخلايا الفرعية td و th. فهذه الفراغات تتحكم بها خاصية الحدود border.

    لكن عند تحديد border-collapse للجدول، سيتم دمج الحدود الداخلية للخلايا، مما يزيل الفراغات الزائدة بينها.

    لذا فخاصية margin تؤثر على الجدول ككل، بينما خاصية border-collapse تؤثر على الفراغات بين الخلايا الفرعية.

    • شكرًا 1
  3. Font Awesome هي مكتبة تحتوي على مجموعة كبيرة من الأيقونات أو الرموز التي يمكن استخدامها في صفحات الويب. تحتوي هذه المكتبة على العديد من الفئات (classes) المرتبطة بالأيقونات الخاصة بها، وهي تساعد على تحديد الأيقونات بشكل أسهل وأكثر فعالية.

    عند تحميل صفحة الويب التي تحتوي على الأيقونات المرتبطة بـ Font Awesome، يتم تحميل الخطوط التي تحتوي على الأيقونات، وهي عبارة عن "خطوط الأيقونات" (icon fonts)، وهي خطوط تحتوي على مجموعة من الأيقونات المختلفة. يحتوي كل خط على مجموعة من الأحرف التي تمثل الأيقونات، ويمكن تحميل الخطوط باستخدام CSS.

    يمكن استخدام الفئات المختلفة المرتبطة بـ Font Awesome لتحديد الأيقونات. على سبيل المثال، يمكن استخدام الفئة "fa fa-car" لتحديد أيقونة السيارة، وتستخدم هذه الفئة لتحديد الأيقونات المرتبطة بأيقونات السيارات. يتم استخدام هذه الفئات في HTML و CSS لتحديد الأيقونات.

    لتحديد الأيقونات، يتم استخدام CSS لتحديد الخصائص المرتبطة بالأيقونات، وتضمن CSS تحديد الفئات المرتبطة بالأيقونات والمزيد من الخصائص مثل الحجم واللون ونوع الخط. وبالتالي، يتم تعيين الرموز المرتبطة بـ Font Awesome باستخدام CSS وتحديد الفئات المرتبطة بالأيقونات الخاصة بها.

    عند تحميل الصفحة التي تحتوي على الأيقونات المرتبطة بـ Font Awesome، يتم تحميل الخطوط وتحديد الأيقونات المرتبطة بها باستخدام الفئات المختلفة، وعادة ما يتم عرض الأيقونات بصورة افتراضية في المتصفح. يتم استخدام هذه الأيقونات في التصميم الجرافيكي والتطوير الويب والتطبيقات.

  4. بتاريخ 2 ساعة قال Ali Ahmed39:

    وهل احتاج API في مجال تعلم الاله ؟

    نعم، يمكن أن يحتاج مجال تعلم الآلة إلى استخدام API (واجهة برمجة تطبيقات) لعدة أسباب، بما في ذلك:

    •  جمع البيانات: يمكن استخدام API للحصول على البيانات التي تحتاجها لتدريب نماذج التعلم الآلي. على سبيل المثال، يمكن استخدام API للوصول إلى بيانات الوسائط الاجتماعية أو بيانات التجارة الإلكترونية أو بيانات الملاحة.
    • التكامل مع تطبيقات أخرى: يمكن استخدام API للتكامل مع تطبيقات أخرى، مثل تطبيقات الويب أو التطبيقات المحمولة أو أنظمة إدارة البيانات. هذا يمكن أن يساعد على تحسين تجربة المستخدم وتحسين دقة النتائج.
    •  إرسال الطلبات: يمكن استخدام API لإرسال الطلبات إلى الخوارزميات التي تعمل على السحابة أو الخوادم البعيدة. هذا يمكن أن يساعد على تحسين الأداء وتوفير الموارد المحلية.
    • توفير الخدمات: يمكن استخدام API لتوفير خدمات التعلم الآلي
  5. بالإضافة للتعليق السابق من مقالات وبعض النصائح يفضل الإطلاع على النصائح التالية ربما تساعد في التركيز على مسار واحد 

    • تحديد الأهداف: يجب تحديد الأهداف التي تريد تحقيقها في المشروع البرمجي، وتحديد الخطوات اللازمة لتحقيق هذه الأهداف. يمكن استخدام قائمة المهام أو جدول المهام لتحديد الخطوات اللازمة ووضع جدول زمني لتنفيذها.
    •  الالتزام بمنهجية العمل: يجب اتباع منهجية عمل محددة والالتزام بها، مثل Agile أو Scrum أو Waterfall. هذا يساعد على تنظيم العمل وتحديد المهام الأساسية وتحديد المسؤوليات بشكل واضح.
    • التركيز على المهمة الحالية: يجب تركيز الجهود على المهمة الحالية وإتمامها بشكل صحيح قبل الانتقال إلى المهمة التالية. يمكن استخدام تقنية Pomodoro لتحديد فترات زمنية محددة للعمل المتركز على المهمة الحالية دون التشتت.
    • الحفاظ على التواصل: يجب الحفاظ على التواصل المستمر مع الفريق والعمل بشكل منتظم على مشاركة المعلومات والتحديثات حول تقدم المشروع والتحديات التي قد تواجهها.
    •  التطوير المستمر: يجب العمل على تحسين المهارات البرمجية والتعلم المستمر للتقنيات الجديدة والأدوات لتحسين جودة العمل وزيادة الإنتاجية.
    • الإدارة الجيدة للوقت: يجب تخصيص وقت كافٍ للعمل على المشروع وتحقيق الأهداف المحددة، وتجنب التأجيل والتسويف.
    • أعجبني 1
  6. يمكن تطوير برامج الروبوتات باستخدام بيئات البرمجة التي تعمل على الحاسوب الشخصي أو باستخدام بيئات السحابة مثل Google Colab، وذلك يعتمد على حجم المشروع ومتطلباته البرمجية.

    إذا كنت تعمل على مشروع صغير أو بسيط، فإن استخدام بيئة البرمجة على الحاسوب الشخصي يكون كافياً، ويمكنك استخدام أحد البرامج المتاحة مثل MATLAB Robotics System Toolbox أو Robot Operating System (ROS) أو Gazebo أو PyRobot.

    أما إذا كان لديك مشروع أكبر أو أكثر تعقيداً وتحتاج إلى موارد أكبر، فإن استخدام بيئة السحابة مثل Google Colab يمكن أن يكون خياراً جيداً، حيث يمكنك الوصول إلى موارد الحوسبة السحابية عالية الأداء والتخزين والتحليل والعرض والمشاركة عبر الإنترنت.

    ومن الجدير بالذكر أن استخدام بيئات السحابة يمكن أن يوفر لك تكاليف الشراء والصيانة والترقية للأجهزة اللازمة لتشغيل برامج الروبوتات، وكذلك يمكن أن يساعدك في توفير الوقت والجهد المطلوبين لإعداد البيئة البرمجية على الحاسوب الشخصي.

    يمكنك استخدام أحد البيئات التالية:

    • Robot Operating System (ROS): هذه البيئة البرمجية الشهيرة والمفتوحة المصدر تعمل على نظامي التشغيل Linux وMacOS، وتوفر مكتبات وأدوات تساعد على تطوير برامج الروبوتات بسهولة.
    • MATLAB Robotics System Toolbox: هذه الأداة توفر واجهة برمجة التطبيقات (API) لتطوير برامج الروبوتات باستخدام MATLAB، مع مجموعة من الأدوات الإضافية للمحاكاة والتصميم.
    • Gazebo: هذه الأداة المفتوحة المصدر تستخدم للمحاكاة والاختبار للروبوتات، وتوفر واجهة برمجة للتفاعل مع الروبوتات المحاكاة، مما يجعلها مثالية للتطوير والاختبار.
    • PyRobot: هذه الأداة القائمة على Python تساعد في تطوير برامج الروبوتات باستخدام واجهة برمجة التطبيقات (API) بسيطة، وتتضمن مجموعة من الأدوات الإضافية للمحاكاة والتصميم.
    • أعجبني 1
  7. بالإضافة للطرق المقترحة في التعليق السابق يمكنك ايضاً

    • محاولة إطلاقه على خادمك الخاص خلف شاشة تسجيل الدخول. هذا يعطيه طريقة لرؤيته واختباره قبل أن تسلمه المصدر أو نسخه إلى خادمه.
    • استخدام website builder: توفر بعض أدوات بناء المواقع وضع "معاينة" يتيح رؤية الموقع كما سيبدو عند الإطلاق، دون جعله متاحاً بالفعل للجمهور. ويمكن مشاركة رابط المعاينة مع العميل.

    على المدى الطويل، كمطور ويب أو مصمم، من الجميل أن يكون لديك خادمك الخاص. هناك العديد من خيارات الاستضافة رخيصة التكلفة.

  8. بالإضافة إلى التعليق السابق أفضل تطبيقات التقاط الشاشة في كروم:

    Awesome Screenshot:

    من أشهر التطبيقات وأسهلها استخدامًا. يسمح لك بما يلي:

    • التقاط صور الصفحات بأكملها 
    • التقاط مناطق محددة على الصفحة
    • تحرير الصور (قص، التعليق، إظلام، الخ)
    • حفظ الصور أو مشاركتها مباشرة في جوجل درايف، دروب بوكس، وان درايف، الخ.
    • فاير شوت:

    FireShot:

    Screenshot Capture + Editor:

     

    • يلتقط صورًا للصفحة بأكملها أو مناطق محددة
    • التقاط الصفحات التي تتحرك
    • تحرير الصور باستخدام أدوات القص والتحديد وإضافة النصوص والأشكال
    • حفظ على الجهاز أو رفع إلى إيمجر، دروب بوكس، جوجل درايف، الخ.
  9. بتاريخ On 1‏/6‏/2023 at 19:35 قال Mohamed Boumlik:

    نعم لاكن من اين تعرف الصورة غير مصرح بها او لا 
    هل هناك موقع ما يدلي بها ام مادا 

    هناك طرق مختلفة للتحقق مما إذا كانت الصورة مصرحًا باستخدامها تجاريًا أم لا:

    • التحقق من موقع المصدر: في كثير من الأحيان، يحدد موقع الويب الذي حصلت منه الصورة شروط استخدامها. قد توجد صفحة أسئلة متكررة أو صفحة سياسة ملفية توضح شروط استخدام المحتوى، بما في ذلك الصور.
    • البحث عن تراخيص بذيل الصورة: تحتوي العديد من الصور على ما يسمى "تراخيص بذيل الصورة" توضح شروط استخدامها. يمكن العثور على هذه التراخيص عادةً في وصف الصورة. في موقع المصدر
    • التحقق من مواقع مطابقة/عكس الصور: هناك العديد من المواقع التي يمكنها إيجاد الصورة الأصلية وتراخيص بذيل صورتها. مثل موقع tin eye أو google image search.
    • شكرًا 1
  10. هناك العديد من الطرق التي يمكن استخدامها لجلب زيارات حقيقية إلى موقعك وتحسين تصنيفه في محركات البحث وزيادة الدومين اثورتي (Domain Authority)، ومن بين هذه الطرق:

    الاعتماد على طرق التسويق الرقمي:يمكن استخدام العديد من طرق التسويق الرقمي للحصول على زيارات حقيقية لموقعك، مثل:

    •  الإعلانات المدفوعة عبر الإنترنت: يمكنك استخدام الإعلانات المدفوعة عبر الإنترنت في محركات البحث مثل Google AdWords أو الإعلانات على مواقع التواصل الاجتماعي مثل Facebook و Twitter لجذب الزوار إلى موقعك.
    • التسويق عبر محتوى الفيديو: يمكنك إنشاء محتوى فيديو جذاب ومفيد عن مجال عملك أو نشاطك التجاري ونشره على مواقع مثل YouTube و Vimeo لجذب الزوار إلى موقعك.
    • البريد الإلكتروني التسويقي: يمكنك إرسالتسويق عبر البريد الإلكتروني إلى العملاء الحاليين والمحتملين لجذبهم إلى موقعك.
    •  استخدام وسائل التواصل الاجتماعي: يمكن استخدام وسائل التواصل الاجتماعي للترويج لموقعك وجذب زوار جدد. يمكنك نشر محتوى موقعك على صفحات وحسابات التواصل الاجتماعي الخاصة بك والتفاعل مع المتابعين والجمهور.
    •  إنشاء روابط وصلة خارجية: يمكن استخدام تقنية بناء الروابط (Link Building) لزيادة عدد الروابط الواردة إلى موقعك من مواقع أخرى، وهذا يساعد في زيادة الدومين اثورتي وتحسين تصنيفموقعك في محركات البحث. يمكن القيام بذلك عن طريق إنشاء محتوى عالي الجودة يستحق الربط به من مواقع أخرى

     التفاعل مع الجمهور: يجب أن تكون نشطًا في التواصل مع الجمهور والمستخدمين على موقعك وعلى مواقع التواصل الاجتماعي. يمكنك تنشيط المناقشات والردود على التعليقات والأسئلة المطروحة على موقعك للمساعدة في تحسين تجربة المستخدم وتحسين تصنيف موقعك في محركات البحث.

     التركيز على الكلمات المفتاحية: يجب أن تركز على الكلمات المفتاحية التي يبحث عنها الزوار في مجال عملك، ويجب أن تدرس استراتيجيات الكلمات المفتاحية من أجل جذب المزيد من الزوار المستهدفين. يمكنك استخدام أدوات البحث عن الكلمات المفتاحية مثل Google Keyword Planner للحصول على قائمة بالكلمات المفتاحية ذات الصلة بمجال عملك، ويجب أن تدمج هذه الكلمات في محتوى موقعك وفي أنشطة التسويق الرقمي الخاصة بك.

    تحسين تجربة المستخدم: يجب أن تكون تجربة المستخدم في موقعك سهلة وممتعة، ويجب أن يكون المحتوى مفيدًا وشيقًا للزوار. يمكنك تحسين تجربة المستخدم عن طريق تحسين تصميم الموقع وتحسين جودة المحتوى وتغيير الأدوات والوظائف المتاحة في الموقع ويجب تحسين سرعة التحميل.

    • أعجبني 1
  11. بتاريخ 17 ساعة قال Jehan Alalbirikan:

    فتح موجة الأوامر في هذا المسار وكتبت امر sdkmanager --version

    C:\Users\jo141\AppData\Local\Android\Sdk\cmdline-tools\bin

    وظهر لي هذي الرسالة كيف احل المشكلة؟

    لحل هذه المشكلة، يُرجى اتباع الخطوات التالية:

    • تأكد من أن لديك تثبيت برنامج JDK (Java Development Kit) على جهاز الكمبيوتر الخاص بك. يمكن تنزيله من الموقع الرسمي لجافا.
    • بعد التثبيت، يجب تحديد مسار JDK الصحيح. يمكنك العثور على مسار JDK الخاص بك بالذهاب إلى مجلد التثبيت الخاص ببرنامج JDK والبحث عن المجلد الذي يحتوي على مجموعة من الأدوات مثل javac و java.
    • بعد تحديد مسار JDK الصحيح، يتعين تعيين متغير البيئة JAVA_HOME ليشير إلى المجلد الخاص بـ JDK.
    • لتعيين المتغير JAVA_HOME، يتعين عليك فتح نافذة سطر الأوامر وإدخال الأمر التالي:
    setx -m JAVA_HOME "C:\Program Files\Java\jdk-xx"

    حيث تحتاج إلى استبدال "C:\Program Files\Java\jdk-xx" بالمسار الصحيح لمجلد JDK على جهاز الكمبيوتر الخاص بك.

    بعد ذلك، قم بإعادة تشغيل أي تطبيق يستخدم JAVA_HOME، ويجب أن يتم الآن تشغيله بنجاح.

    ملاحظة: يتم تعيين JAVA_HOME بشكل افتراضي فيبعض الحالات، ولكن يمكن أن يتم تعيينه بشكل يدوي في بعض الأحيان. إذا كنت تعمل على نظام التشغيل Windows، فيمكنك التحقق من مسار JDK الصحيح عن طريق الانتقال إلى "لوحة التحكم" والنقر على "نظام" ثم "الإعدادات المتقدمة للنظام" و "متغيرات البيئة". يمكنك العثور على قيمة JAVA_HOME تحت "متغيرات النظام" وتعديلها إذا لزم الأمر.

  12. الجدول  STATION يحتوي على بيانات مدن وخصائصها الجغرافية. السؤال يطلب إيجاد الفرق بين إجمالي عدد سجلات CITY في الجدول وعدد CITY الفريدة.

    على سبيل المثال، إذا كان هناك ثلاثة سجلات في الجدول مع قيم CITY 'نيويورك' و 'نيويورك' و'بنغالورو'، فهناك اسماء مدن مختلفة وهما 'نيويورك' و 'بنغالورو'. 
    إذا كان إجمالي عدد السجلات 3 وعدد أسماء المدن الفريدة هو 2، فإن الاستعلام يعيد 1 لأن:

    إجمالي عدد السجلات - عدد أسماء المدن الفريدة = 3 - 2 = 1

    COUNT(CITY) ستعد إجمالي عدد سجلات CITY 
    COUNT(DISTINCT CITY) ستعد عدد أسماء CITY المختلفة
    وسيكون الفرق هو الناتج.

  13. بتاريخ 20 ساعة قال Lino El:

    :for i in range(1,7)
      ()print
       : for j in range(1,i)
            print("*", end=" ")
            

    استخدمت لغة البايثون

    تم تصحيح الأخطاء في الكود المعطى، ولكن هناك بعض الملاحظات والتحسينات التي يمكن إجراؤها على الكود لتحسينه  ، وهذه الملاحظات والتحسينات على النحو التالي:

    •  استخدام نطاق range() بشكل صحيح: يجب تحديد النطاق الصحيح للحلقة الخارجية بناءً على عدد الصفوف التي تريد طباعة النجوم فيها. على سبيل المثال، إذا كنت تريد طباعة 5 صفوف من النجوم، يجب تعيين range(1,6) في الحلقة الخارجية.
    •  تحسين الحلقة الداخلية: يجب وضع الحلقة الداخليةبشكل صحيح، حيث يجب أن يتم طباعة النجمة في السطر الحالي بدون فراغات بينها، وبعد ذلك يجب طباعة سطر جديد باستخدام دالة print(). لذلك، يمكن تحسين الحلقة الداخلية لتصبح كالتالي:
    for i in range(1, 6):
        for j in range(1, i+1):
            print("*", end="")
        print()
    • استخدام f-string لتحسين قابلية القراءة: يمكن استخدام f-string لتحسين قابلية القراءة وتسهيل فهم الكود. يمكن تحسين الكود بشكل التالي:
    for i in range(1, 6):
        row = "*" * i
        print(f"{row}")

    باستخدام f-string، يمكن استخدام المتغير row لتخزين النجومات المطلوبة في كل صف، ومن ثم طباعته باستخدام دالة print().

    بهذه الطريقة، يمكن تحسين الكود وجعله أكثر فعالية وصحة، كما يمكن تحسين قابلية القراءة وتسهيل فهم الكود.

    • أعجبني 2
  14. نعم، هذا أمر طبيعي في بداية تعلم أي مهارة جديدة، فالاستماع للمدرسين ومشاهدة الفيديوهات يساعد على فهم المفاهيم والمهارات بشكل جيد، ولكن الحصول على الخبرة العملية والتدريب الكافي يتطلب الوقت والجهد.

    لذلك، لا تقلق إذا واجهت صعوبة في تطبيق المهارات التي تعلمتها من الفيديوهات، ولا تشعر بالإحباط. بدلاً من ذلك، حاول ممارسة التمارين العملية وحل المشاكل بنفسك، واستخدم مصادر تعليمية متعددة مثل الكتب والمقالات والمشاريع العملية.

    وهنا بعض النصائح التي يمكن أن تساعدك في تحسين مهاراتك وتطويرها:

    • الممارسة والتدريب العملي: حاول حل المشاكل والتمارين عندما تشاهد الفيديوهات وحاول العمل على مشاريع عملية.
    • كرر الممارسة: قد يتطلب الأمر القيام بالتمارين والمشاريع عدة مرات حتى تتمكن من اتقان المهارات والتقنيات.
    • بحث عن المصادر الكافية: قم بالبحث عن المزيد من المصادر التعليمية والكتب والمقالات والمشاريع على الإنترنت.
    • تطوير المهارات الأساسية: تأكد من فهم المفاهيم الأساسية والمهارات قبلالانتقال إلى الأشياء الأكثر تعقيدًا، فبناء قاعدة جيدة من المهارات الأساسية سوف يساعدك على فهم المفاهيم الأكثر تعقيدًا بشكل أفضل.
    • الصبر والاستمرار: تعلم مهارات جديدة يتطلب الصبر والاستمرار، ولا يمكن تحقيق النجاح في وقت قصير، لذلك استمر في العمل وتحسين مهاراتك بشكل مستمر.

    إذا اتبعت هذه النصائح، فستلاحظ تحسنًا في مهاراتك وقدرتك على حل المشاكل وتطوير التطبيقات. ولا تنسى أن التعلم المستمر والتطوير الذاتي هو مفتاح النجاح في أي مجال.

  15. بتاريخ 11 ساعة قال Jehan Alalbirikan:

    انحلت المشكلة معي شكرا جزيلا لكن ظهر لدي مشكلة اخرى وهو عند تشغيل امر flutter doctor يظهر هذا الأخطاء

      عندما تم تحميل ملف cmdline-tools ظهر هذي الرسالة

    وطبعا تم تنزيل tools sdk في الاندرويد استديو لكن للاسف لم يعمل ذلك

     

    لحل هذه المشكلة، يجب عليك تحديث Android SDK إلى أحدث إصدار والتأكد من تثبيت cmdline-tools بشكل صحيح.

    يجب اتباع الخطوات التالية بالترتيب :

    • قم بفتح Android Studio وانتظر حتى يتم تحميله بالكامل.
    • انتقل إلى قائمة "Tools" في القائمة العلوية ثم اختر "SDK Manager".
    • في نافذة "SDK Manager"، تحقق من وجود علامة صح بجانب "Android SDK Platform" و "Android SDK Build-Tools" و "Android SDK Command-line Tools" و "Android SDK Platform-Tools" و "Android SDK Tools". إذا لم تكن هذه المكونات مثبتة، حددها ثم اضغط على "Apply" لتثبيتها.
    • بعد الانتهاء من التثبيت، قم بفتح محرر الأوامر (Command Prompt) أو نافذة الطرفية (Terminal) على جهاز الكمبيوتر الخاص بك واكتب الأمر التالي:
    sdkmanager --version

    إذا تم عرض رسالة خطأ تشير إلى عدم العثور على sdkmanager، قم بتعيين مسار SDK الخاص بك بوضع الأمر التالي في النافذة نفسها:

    export PATH=$PATH:<path-to-android-sdk>/tools/bin

    حيث يجب استبدال <path-to-android-sdk> بالمسار الحقيقي لمجلد SDK على جهاز الكمبيوت الخاص بك. على سبيل المثال، إذا كان مجلد SDK الخاص بك موجودًا في C:\Android\Sdk ، يجب عليك كتابة الأمر التالي:

    export PATH=$PATH:C:\Android\Sdk\tools\bin
    • بعد ذلك، قم بتشغيل الأمر sdkmanager --version مرة أخرى للتحقق من أن sdkmanager يعمل بشكل صحيح.

     

  16. لا يمكن أن تتعلم جميع مجالات البرمجة: البرمجة هي مجال واسع جداً ويشمل العديد من المجالات مثل تطوير المواقع، تطوير التطبيقات المحمولة، تطوير تطبيقات سطح المكتب، وغيرها الكثير. يتم تطوير هذه التطبيقات باستخدام لغات البرمجة المختلفة وتقنيات البرمجة المختلفة. إذا كنت تحاول تعلم كل شيء، فستجد صعوبة في تحقيق التخصص والتميز في مجال محدد.

    التخصص في مجالين على الأكثر: يفضل المطورون التخصص في مجال واحد أو اثنين على الأكثر، لأن هذا يسمح لهم بتحقيق التميز في هذا المجال وتطوير مهاراتهم بشكل أفضل. وبالتالي، يمكنهم التركيز على تعلم لغات البرمجة والتقنيات التي تناسب هذا المجال بدلاً من إنفاق الوقت والجهد في تعلم كل شيء.

    تعلم اللغات المناسبة لكل مجال: كل مجال يتطلب لغات البرمجة وتقنيات مختلفة. على سبيل المثال، لتطوير تطبيقات iOS، يجب أن تتعلم لغة Swift و Objective-C، في حين أن تطوير تطبيقات Android يتطلب تعلم لغة Kotlin و Java. ولتطوير تطبيقات سطح المكتب، يجب تعلملغات مثل C++ و Java و Python وغيرها. لذلك، يجب عليك تحديد المجال الذي تريد العمل فيه وتعلم اللغات والتقنيات المناسبة لهذا المجال.

    بالنسبة لتعلم لغة C و C++:  يمكن أن يكون مفيداً في بعض المجالات مثل تطوير البرمجيات المنخفضة المستوى وتطبيقات الألعاب والتطبيقات المتقدمة. ومع ذلك، فإنه ليس من الضروري تعلم هذه اللغات لتصبح مطوراً ناجحاً في جميع المجالات. يمكنك تحديد المجال الذي تريد العمل به وتعلم اللغات والتقنيات المناسبة لهذا المجال.

    ونصيحة بعد تحديد المجال الذي تريد العمل به وتعلم اللغات والتقنيات المناسبة، يجب عليك العمل على تطوير مهاراتك وخبرتك في هذا المجال. يمكنك البدء بتطوير مشاريع صغيرة والعمل على تطبيق ما تعلمته وتحسينه بشكل مستمر بدلاً من التنقل بين المجالات. 

     

    • أعجبني 1
  17. هذه المشكلة تحدث عندما لا يكون لمستخدم الـ MySQL الذي تستخدمه حقوق الوصول إلى قاعدة البيانات. لحل هذه المشكلة يمكنك:

    •  إعطاء مستخدم الـ MySQL حقوق الوصول إلى قاعدة البيانات. يمكنك القيام بذلك من خلال MySQL shell:
    GRANT ALL ON database_name.* TO 'username'@'localhost';

    حيث `database_name` هو اسم قاعدة البيانات و `username` هو مستخدم MySQL الذي تستخدمه.

    • 2. إنشاء مستخدم جديد في MySQL مع حقوق الوصول إلى قاعدة البيانات، ثم استخدام هذا المستخدم في مشروع Laravel. يمكنك إنشاء المستخدم باستخدام:
    CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL ON database_name.* TO 'newuser'@'localhost';

    ثم في مشروع Laravel، تحرير ملف `.env` وتغيير `DB_USERNAME` و `DB_PASSWORD` إلى اسم المستخدم الجديد وكلمة المرور.

    • في بعض الإصدارات الأحدث من MySQL، يتم تقييد حقوق مستخدم الجذر (`root`) من أجل الأمان. تأكد من أن لمستخدم الجذر حقوق الوصول إلى قاعدة البيانات هذه. يمكنك منحها باستخدام الأمر نفسه في الخيار 1 أعلاه، مع استبدال `username` بـ `root`.
  18.  يحدث هذا الخطأ على سبيل المثال عند تشغيل الأمر `php artisan migrate` الذي يقوم بتنفيذ عمليات التهجير (migrations) في Laravel وإنشاء جداول قاعدة البيانات المحددة في الملفات الموجودة في المجلد `database/migrations`.

    بالنسبة لحل هذا الخطأ، يمكن مراجعة اسم الجدول المحدد في الملفات migration والتأكد مما إذا كان هناك جدول بنفس الاسم موجود في قاعدة البيانات بالفعل. وفيحدث هذا الخطأ، يمكن حذف الجدول الحالي إذا كان غير مهم أو إعادة تسمية الملف migration لتغيير اسم الجدول المحدد فيه. وبالطبع يجب تأكيد الأمر عند إنشاء جدول جديد في قاعدة البيانات للتأكد من عدم وجود جدول بنفس الاسم موجود بالفعل.

    ويمكن أيضاً استخدام الأمر

    php artisan migrate:fresh
    

    بدلاً من

    php artisan migrate
    

    لحذف جميع الجداول الحالية في قاعدة البيانات وإنشاء جداول جديدة من جديد، ولكن يجب الانتباه إلى أن هذا الأمر سيؤدي إلى فقد جميع البيانات الموجودة في الجداول الحالية.

    ويمكن أيضاً استخدام أمر

    php artisan migrate:refresh

    الذي يقوم بحذف جميع الجداول الحالية في قاعدة البيانات وإعادة إنشائها من جديد، وذلك بدلاً من استخدام `php artisan migrate:fresh` الذي يقوم بإسقاط جميع الجداول وإعادة إنشائها من جديد، مما يؤدي بالضرورة إلى فقد جميع البيانات الموجودة في الجداول الحالية. 

    ويمكن استخدام الأمر `php artisan migrate:refresh` على سبيل المثال في حالة تعديلات على بنية الجداول أو إضافة حقول جديدة، ويمكن أن يساعد على تحديث الجداول بشكل أكثر فعالية. ويجب الانتباه إلى أن استخدام هذا الأمر سيؤدي إلى فقد جميع البيانات الموجودة في الجداول الحالية كذلك.

    • شكرًا 1
  19. يعتبر مواصفات الحاسوب جيدة لمعظم مجالات البرمجة كما يمكنك تطوير أداء الحاسوب من خلال إضافة ssd

    ويمكنك الإطلاع على المصادر التالية للمزيد من المعلومات

     

  20. دالة الـ xxxValue() هي دالة متوفرة في العديد من الكائنات في لغة جافا، وتستخدم لتحويل قيمة الكائن إلى نوع بدائي معين. وهي مفيدة عندما تريد تحويل قيمة كائن إلى نوع بدائي محدد، مثل تحويل قيمة Integer إلى int أو Long إلى long.

    في الكود الذي قدمته، تم استخدام دالة longValue() لتحويل قيمة Integer إلى long. ولكن يمكن استخدام المطابقة الضمنية (implicit casting) بحيث يتم تحويل القيمة تلقائياً من Integer إلى long عند الحاجة، كما هو موضح في الكود الثاني.

    ومع ذلك، يجب الانتباه إلى أن استخدام المطابقة الضمنية ليس دائمًا ممكنًا، فبعض الأنواع البدائية لا يمكن تحويلها تلقائيًا إلى بعضها الآخر. على سبيل المثال، لا يمكن تحويل قيمة Double إلى int تلقائيًا، ويجب استخدام الدالة intValue() لتحويلها.

    بالنسبة للأداء، فإن استخدام المطابقة الضمنية أسرع بشكل عام من استخدام الدالة xxxValue()، حيث يعتبر تحويل القيمة تلقائيًا أسرع من استدعاء الدالة وتنفيذها. ومع ذلك، يمكن أن تكون الفرق في الأداء ضئيلًا بشكل كبير وغير ملحوظ في حالة تحويل قيمة واحدة فقط

    • شكرًا 1
  21. في المصادر الموجودة في التنعليق الأول يوجد شرح كامل للفرق بين ال بين let و var و const بشكل مفصل 

    ولكن 

    بتاريخ 2 ساعة قال oubai nezar:

    و بالتحديد لم أفهم ماهي القيمة الإبتدائية التي تعطى للvar

    عند استخدام "var" في JavaScript ، يتم تعيين قيمة افتراضية للمتغير.قيمة الافتراضية التي تتم تعيينها للمتغير عند استخدام "var" هي undefined. وهذا يعني أنه إذا قمت بتعريف متغير باستخدام "var" ولم تقم بتعيين قيمة له ، فسيتم تعيين قيمة undefined له تلقائيًا. على سبيل المثال:

    var x;
    console.log(x);
    // سيتم طباعة undefined
  22. كلا الأساليب تحقق نفس النتائج، وهي تحميل نموذج ذي صلة على النموذج الأول. في الواقع، كلاهما يقومان بتشغيل نفس الاستعلامين. الفرق الرئيسي هو أن with() يحمل النموذج ذي الصلة مسبقًا، فوريًا بعد الاستعلام الأول (all ()، first ()، أو find (x)، على سبيل المثال)؛ عند استخدام load()، تقوم بتشغيل الاستعلام الأول أولاً، ثم تحميل النموذج ذي الصلة في وقت لاحق.

    "التحميل الفوري" هنا يعني أننا نربط جميع النماذج ذات الصلة لمجموعة نتائج معينة باستخدام استعلامة واحدة فقط، بدلاً من الحاجة إلى تشغيل n استعلامات، حيث n هو عدد العناصر في المجموعة الأولية.

    يمكن استخدام with() للتحميل الفوري

    على سبيل المثال، إذا استخدمنا with() للتحميل الفوري:

    $users = User::with('comments')->get();

    ... إذا كان لدينا 5 مستخدمين، يتم تشغيل الاستعلامين التاليين على الفور:

    select * from `users`
    select * from `comments` where `comments`.`user_id` in (1، 2، 3، 4، 5)

    ... وننتهي بمجموعة من النماذج التي تحتوي على التعليقات المرتبطة بنموذج المستخدم، لذلك يمكننا القيام بشيء مثل

    $users->comments->first()->body.

    يمكن استخداما باستخدام load()، يمكننا فصل الاستعلامين، أولاً عن طريق الحصول على النتيجة الأولية:

    $users = User::all();

    الذي يشغل:

    select * from `users`

    وفي وقت لاحق، إذا قررنا أننا بحاجة إلى التعليقات ذات الصلة لجميع هؤلاء المستخدمين، يمكننا تحميلها في وقت لاحق:

    $users = $users->load('comments');

    الذي يشغل الاستعلام الثاني:

    select * from `comments` where `comments`.`user_id` in (1، 2، 3، 4، 5)

    ونحن ننتهي بنفس النتيجة، مقسمة إلى خطوتين. مرة أخرى، يمكننا استدعاء $users->comments->first()->body للوصول إلى النموذج ذي الصلة لأي عنصر.

    لماذا استخدام load() مقابل with()؟ يمنحك load() خيار تحديد ذلك لاحقًا، بناءً على بعض الشروط الديناميكية، سواء كنت تحتاج إلى تشغيل الاستعلام الثاني أم لا. إذا كان لا شك في أنك ستحتاج إلى الوصول إلى جميع العناصر ذات الصلة، استخدم with().

    البديل لكل من with() و load() هو التكرار عبر مجموعة النتائج الأولية والاستعلام عن العلاقة hasMany() لكل عنصر. هذا سيؤدي إلى تشغيل n+1 استعلامات، أو 6 في هذا المثال. التحميل الفوري، بغض النظر عما إذا تم تنفيذه مباشرة باستخدام with() أو في وقت لاحقًا باستخدام load()، يشغل 2 استعلامات فقط.

  23. كما أخبرك عمر أنه يمكنك توظيف مبرمج على مصنات العمل العمل لتنفيذ ذلك أو يمكنك بناء الصفحة بنفسك بالإستعانة بالمصادر في التعليق السابق أو يمكنك استخدام المنصات التالية لتنفيذ ذلك الموقع من خلال قالب مجاني 

     توجد خدمات ومصادر جاهزة يمكنك استخدامها لبناء صفحة شراء متطورة بدون الحاجة للكود الخاص بك. بعض الخيارات:

    • WooCommerce: هو إضافة WordPress شعبية لبناء متجر تجاري إلكتروني. يمكنك بناء صفحات شراء وفواتير ومنتجات بسهولة.
    • Shopify: منصة بناء المواقع التجارية الإلكترونية الشاملة. تقدم خدمة بناء صفحة شراء وتوصيل بسيطة ومتكاملة.
    • Snipcart: خدمة بناء صفحات شراء بسيطة ومتكاملة. تقوم بإضافة المنتجات وحساب التوصيل بشكل تلقائي.
    • BigCommerce: منصة تجارة إلكترونية تقدم إمكانية بناء صفحة شراء متكاملة ومتقدمة. تدعم خيارات عديدة للتوصيل وحساب التكاليف.

    هذه بعض الخيارات، تركز على اختيار المنصة الأكثر انسجامًا مع احتياجاتك وميزانيتك، ثم قم ببناء صفحة الشراء عليها.

  24. بالإضافة لمكتبات الموجودة في التعليقات السابقة هناك عدة طرق بديلة لإضافة محرر نصوص في تطبيق Flutter:

    •  استخدام التبعية flitter_quill  بدلا من rich_text_editor. flitter_quill هي مكتبة مبنية على قلم Quill الشهير وتوفر مزيدا من الميزات. وشرحها موجود في التعليق السابق
    •  استخدام حلول جاهزة كاملة مثل Text Editor SDK من Aample. هذه الحلول توفر الكثير من الميزات وتسهل التطبيق.
    •  استخدام الـWebView لعرض محرر النصوص المبني على الويب. هذا يسمح باستخدام محررات نصوص واسعة الانتشار مثل TinyMCE أو CKEditor.
    •  استخدام مكتبات جاهزة لمؤشرات النص. مثلما flutter_text_input_highlight و flutter_editable_text.

    على العموم، إذا كنت تريد فقط ميزة بسيطة مع بعض أدوات التنسيق، فإن rich_text_editor جيدة. ولكن إذا كنت تريد محرر نصوص متطور مع الكثير من الميزات، فإن من الأفضل الاستعانة بحلول جاهزة.

  25. سأحاول توضيح السؤالين بشكل مبسط ويجب ملاحظة أنه هذه الأسئلة خاصة بال backend حيث أنك مبرمج واجهات مستخدم

    بتاريخ منذ ساعة مضت قال Otaku Arabs:

    2) في بعض المواقع -المتاجر مثلا- نرى زر اضافة وعند الضعط عليه نرى صفحة للمعلومات المطلوب اضافتها مثلا رفع صورة و اضافة عنوان واضافة سعر....الخ كيف ستضاف هذه المعلومات 

    عادةً ما يتم استخدام نموذج الإرسال (form submission) لجمع المعلومات المطلوبة من المستخدمين في صفحة إضافة المنتج أو العنصر أو الخدمة. يتم عرض نموذج الإرسال في هذه الصفحة، ويحتوي على الحقول التي يجب على المستخدم ملئها، مثل العنوان والسعر والوصف وصورة المنتج أو العنصر.

    بعد ملء المستخدم لجميع الحقول المطلوبة، ينقر على زر "إضافة" لإرسال المعلومات إلى الخادم. يتم إرسال المعلومات باستخدام البروتوكول HTTP POST، ويتم إرسالها إلى مسار (route) معين في الخادم، الذي يتعامل معهاويقوم بمعالجة البيانات المستلمة. يتم تحليل البيانات المستلمة في الخادم باستخدام لغة البرمجة المستخدمة في تطوير الموقع، ويتم حفظ البيانات في قاعدة البيانات المستخدمة لتخزين المنتجات أو العناصر أو الخدمات، ويتم عرض النتيجة للمستخدم عن طريق صفحة العرض أو القائمة الرئيسية في الموقع.

    يمكن استخدام تقنيات الجافاسكريبت لتحسين تجربة المستخدم، مثل إضافة تأثيرات انتقالية أو تحميل صور المنتج أو العنصر بشكل ديناميكي دون إعادة تحميل الصفحة بالكامل. كما يمكن استخدام تقنيات التحقق من صحة البيانات (validation) للتأكد من صحة المعلومات التي تم إدخالها من قبل المستخدم، وذلك لتجنب وجود أخطاء أو بيانات غير صحيحة في قاعدة البيانات. ويمكن أيضًا استخدام تقنيات التحميل الجزئي (AJAX) لتحميل البيانات بشكل ديناميكي دون إعادة تحميل الصفحة بالكامل، مما يجعل تجربة المستخدم أكثر سلاسة وسهولة.

    بتاريخ منذ ساعة مضت قال Otaku Arabs:

    نرى في المتاجر ان المشتري لا يستطيع اكمال الطلب ما لم يسجل فكيف يحصل ذلك
    وشكرا لكم مقدما

    لتطبيق هذا السيناريو برمجياً، يمكن اتباع الخطوات التالية:

    • عند إضافة منتج إلى السلة، احفظ معلومات المستخدم في جلسة (session) أو ملف تعريف ارتباط (cookie).
    • عند الانتقال إلى خطوة الدفع، قم بالتحقق مما إذا كان المستخدم مسجلاً أم لا.
    • إذا لم يكن المستخدم مسجلاً، اظهر له رسالة تطلب منه التسجيل أو تسجيل الدخول لإكمال عملية الشراء.
    • بعد تسجيل الدخول، استرجع معلومات السلة التي حفظتها سابقاً لهذا المستخدم.
    • اطلب من المستخدم إدخال معلومات الدفع وأكمل عملية الشراء.
    • أعجبني 1
×
×
  • أضف...