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

Mustafa Suleiman

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

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

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

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

    300

أجوبة بواسطة Mustafa Suleiman

  1. الخطأ الذي يظهر لك هو:

    An error occurred while resolving packages:
    Project has invalid dependencies:
    com.unity.render-pipelines.universal: Package [com.unity.render-pipelines.universal@14.0.7) cannot be found

    وتستطيع هذا الخطأ في برنامج Unity عن طريق إجراء الخطوات التالية:

    1. التأكد من أن الإصدار المذكور بالخطأ "com.unity.render-pipelines.universal@14.0.7" مثبت بشكل صحيح في مشروع Unity الخاص بك، وتحقق من ذلك عن طريق التنقل إلى قائمة الـ Package Manager في Unity.
    2. إذا كان الإصدار المذكور في الخطأ غير مثبت، يتم تثبيته عن طريق النقر فوق زر "Add package" في Package Manager، ثم البحث عن الإصدار المطلوب وتثبيته.
    3. إذا لم يتم حل المشكلة بعد ذلك، تستطيع محاولة حذف مجلد "Packages" في مشروع Unity الخاص بك وإعادة تشغيل Unity، ثم إعادة تثبيت الإصدار المذكور في الخطأ من Package Manager.
    4. في حالة عدم حل المشكلة بعد محاولة الخطوات السابقة، عليك بمحاولة تحديث إصدار Unity الذي تستخدمه إلى الإصدار الأحدث المتاح وتثبيت الإصدار المذكور في الخطأ من Package Manager.
  2. بالطبع لن تحتاج إلى أكثر من المسارات المتواجدة على أكاديمية حسوب، فالبداية من مسار علوم الحاسب لتعلم الأساسيات.

    ثم إختيار المسار الذي تريده سواء دورة تطوير التطبيقات باستخدام لغة JavaScript أو دورة تطوير تطبيقات الويب باستخدام لغة PHP.

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

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

     

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

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

    أو تستطيع تنفيذ التحديات على موقع مثل frontend mentor وقد تم شرح الأمر هنا ورؤية مواقع أخرى توفر تحديات مثله:

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

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

    وقد يفيدك الإطلاع على النقاش التالي أيضًا:

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

     

  4. تستطيع الإعتماد على الطريقة التالية بالإَضافة للطرق السابقة:

    من خلال دالة reduce() في JavaScript لتحقيق ذلك بطريقة أخرى.

    حيث نستخدم reduce() للحفاظ على المصفوفة الأصلية وإعادة مصفوفة جديدة تحتوي على العناصر غير المكررة.

    مع استخدام Map() لتخزين اسماء الـ HTML tag الفريدة، وتحديث ال Map() مع كل عنصر في المصفوفة الأصلية.

    في النهاية ، تستطيع تحويل Map() إلى مصفوفة باستخدام الدالة Array.from().

    const arr = [  'a:href,title',  'a:href,title,accesskey',  'div:class',  'div:class,role,id',  'h3:',  'li:id',  'ul:'];
    
    const uniqueArr = Array.from(arr.reduce((map, current) => {
      const tagName = current.match(/\w+(?=\:)/)[0];
      return map.has(tagName) ? map : map.set(tagName, current);
    }, new Map()).values());
    
    console.log(uniqueArr);
    // Output: [ 'a:href,title,accesskey', 'div:class,role,id', 'h3:', 'li:id', 'ul:' ]

     

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

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

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

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

    والمصاريف هي 8000 آلاف جنيه مصري سنويًا.

    أي حوال 750 جنيه للساعة المعتمدة الواحدة، وستدرس حلاص 4 سنوات 141 ساعة.

    والجدير بالذكر أن هناك كلية منفردة غير حاسبات وهي باسم الذكاء الاصطناعي وبداخلها 4 أقسام رئيسية «برمجة الآلة واسترجاع المعلومات، تكنولوجيا أنظمة الشبكات المدمجة، الروبوتات والآلات الذكية، علوم البيانات».

    وتعمل بنظام الساعات المعتمدة أيضًا وبنفس المصاريف تقريبًا، ولكن هناك قسم خاص بتكلفة 20 ألف جنيه مصري.

    والأسعار قد تتغير لذلك عليك بالسؤال من داخل الجامعة للتأكد.

    وتتواجد كلية الذكاء الاصطناعي في عدة جامعات حكومية وهي:

    • جامعة القاهرة
    • جامعة طنطا
    • جامعة حلوان
    • جامعة الزقازيق
    • جامعة كفر الشيخ
    • جامعة بنها
    • جامعة المنوفية
    • جامعة دمنهور
    • جامعة الأقصر

    وأنصحك بالبحث بالتالي " كلية الحاسبات و الذكاء الاصطناعي" على اليوتيوب وستجد شرح للكلية ونصائح.

  6. تتم عملية نقل الصوت والفيديو في تطبيقات المحادثة مثل الواتساب عبر استخدام تقنية Protocol (IP)، وتتضمن هذه التقنية تحويل الصوت والفيديو إلى تنسيق رقمي يمكن نقله عبر الانترنت، وذلك باستخدام تقنيات الضغط والتشفير لتحسين جودة الصوت والفيديو وتأمينه.

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

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

    ويستخدم كل من Protocol (IP) و WebRTC في تطبيقات المحادثة ونقل الصوت والفيديو.

     Protocol (IP) كبروتوكول رئيسي لنقل البيانات عبر الإنترنت بشكل عام، ويعتمد على تجزئة البيانات إلى حزم ونقلها من خلال الشبكة. ويستخدم في تطبيقات المحادثة كأساس لنقل الصوت والفيديو من جهاز المرسل إلى جهاز المستقبل.

    أما WebRTC فهو تقنية حديثة ومفتوحة المصدر تم تطويرها خصيصاً لنقل الصوت والفيديو والبيانات الحية في الوقت الحقيقي عبر الإنترنت.

    ويتضمن WebRTC بروتوكولات مخصصة للصوت والفيديو والشات وتقنيات الضغط والتشفير وغيرها لتحسين جودة الاتصال وتأمينه. ويستخدم WebRTC في العديد من تطبيقات المحادثة عبر الإنترنت والتطبيقات الأخرى التي تحتاج إلى نقل الصوت والفيديو عبر الإنترنت بشكل سريع وآمن.

    وتستطيع إنشاء تطبيق محادثة صوتية باستخدام بايثون باستخدام بعض المكتبات المتاحة، مثل:

    1. PyAudio: مكتبة بايثون للعمل مع الصوت، وتتيح لك إمكانية تسجيل وتشغيل الصوت على نظام التشغيل الخاص بك.
    2. Socket: مكتبة بايثون للتواصل بين العملاء والخوادم باستخدام TCP/IP.
    3. PyQT: مكتبة بايثون لإنشاء واجهات المستخدم الرسومية (GUI)، والتي يمكن استخدامها لإنشاء واجهة المستخدم لتطبيق المحادثة الصوتية.

    ومن الخطوات التي يمكن اتباعها لإنشاء تطبيق محادثة صوتية باستخدام بايثون:

    1. تسجيل الصوت باستخدام مكتبة PyAudio.
    2. إنشاء واجهة المستخدم باستخدام مكتبة PyQT.
    3. التواصل بين العميل والخادم باستخدام مكتبة Socket.
    4. نقل بيانات الصوت بين العميل والخادم عبر الاتصال الشبكي باستخدام بروتوكولات الإنترنت مثل TCP/IP أو UDP.
    5. تشفير وفك تشفير الصوت باستخدام تقنيات التشفير المناسبة.
    6. تشغيل الصوت على العميل باستخدام مكتبة PyAudio.

    إنشاء موقع يتضمن مقاطع فيديو أو صوت

    تستطيع استخدام لغة البايثون في إنشاء موقع مثل هذا، بالإضافة إلى العديد من التقنيات الأخرى مثل HTML وCSS وJavaScript و Django framework لإدارة الموقع.

    وإليك مثال، أنت قمت بإنشاء مشروع دجانغو، عليك بفعل التالي:

     تحديد نموذج Django الذي سيستخدم لتمثيل الفيديو أو الصوت. يمكن إنشاء نموذج بسيط كالتالي:

    from django.db import models
    
    class Video(models.Model):
        title = models.CharField(max_length=200)
        video_file = models.FileField(upload_to='videos/')

    حيث تم تحديد نموذج Video الذي يحتوي على اسم الفيديو وملف الفيديو.

    بعد تحديد نموذج الفيديو، يجب إنشاء عرض (View) Django الذي يعرض الفيديو. وتستطيع إنشاء عرض بسيط باستخدام الكود التالي:

    from django.shortcuts import render
    
    def video(request, video_id):
        video = Video.objects.get(id=video_id)
        return render(request, 'video.html', {'video': video})

    يتم تحديد العرض "video" الذي يستخدم نموذج Video ويسترد الفيديو الذي يحمل نفس معرف video_id.

    ويجب إنشاء قالب (Template) Django الذي يستخدم لعرض الفيديو.

    حيث تستطيع إنشاء قالب بسيط باستخدام HTML و Django Template Language، و استخدام HTML5 Video Tag لعرض الفيديو.

    <html>
        <head>
            <title>{{ video.title }}</title>
        </head>
        <body>
            <h1>{{ video.title }}</h1>
            <video controls>
                <source src="{{ video.video_file.url }}" type="video/mp4">
            </video>
        </body>
    </html

    وهناك العديد من المكتبات التي يمكن استخدامها مع Django لإضافة الوسائط مثل الفيديو والصوت والصور.

    بالنسبة للفيديو والصوت، تستطيع استخدام مكتبات مثل Django-ffmpeg و Django-Video-Encoder لمعالجة وتشفير الوسائط المتحركة.

    أيضًا يمكن استخدام مكتبات مثل Pillow و Django-imagekit لمعالجة الصور.

    وهناك مكتبات JavaScript مثل Plyr و Video.js و WaveSurfer.js لتشغيل الفيديو والصوت وتحريرهم في صفحات الويب.

     

    • شكرًا 1
  7. للإجابة على ذلك يجب ذكر مثال لوصف وظيفة خاصة بمطور بايثون حيث ستجد وصف مشابه له على مواقع التوظيف مثل LinkedIn:

    • خبير في لغة البرمجة بايثون، بالإضافة إلى معرفة على الأقل بإطار عمل بايثون الويب {{مثل Django، Flask، وما إلى ذلك، اعتمادًا على تكنولوجيا الشركة}}.
    • معرفة ببعض مكتبات ORM (Object Relational Mapper).
    • القدرة على دمج مصادر البيانات وقواعد البيانات المتعددة في نظام واحد.
    • فهم قيود المتعددات المتزامنة في بايثون وهندستها المتعددة العمليات.
    • فهم جيد للغات النمذجة الخاصة بالخادم {{مثل Jinja 2، Mako، وما إلى ذلك، اعتمادًا على تكنولوجيا الشركة}}.
    • فهم أساسيات تقنيات الواجهة الأمامية، مثل JavaScript و HTML5 و CSS3.
    • فهم للامتثال للوصول والأمان {{اعتمادًا على المشروع المحدد}}.
    • المعرفة بالمصادقة والتفويض للمستخدمين بين أنظمة وخوادم وبيئات متعددة.
    • فهم المبادئ التصميمية الأساسية لتطبيق مقياسي.
    • المعرفة ببرمجة المحفزات الحدثية في بايثون.
    • فهم الاختلافات بين منصات التسليم المتعددة، مثل الجوال مقابل سطح المكتب، وتحسين الإخراج ليتناسب مع المنصة المحددة.
    • القدرة على إنشاء مخططات قواعد البيانات التي تمثل وتدعم العمليات التجارية.
    • مهارات قوية في اختبار الوحدات وتصحيح الأخطاء.
    • فهم متقن لأدوات إصدار الرمز {{مثل Git، Mercurial أو SVN}}.

    ونظرًا إلى ما سبق أنت ستتعلم في الدورة التالي:

    • الأسس البرمجية السليمة عبر لغة Python
    • التعامل مع مختلف صيغ الملفات مثل إكسل Excel وورد Word وخدمات المستندات السحابية
    • استخراج البيانات من صفحات الويب Web Scraping وتحليلها
    • أساسيات التعامل مع قواعد البيانات عبر بايثون، والتعامل مع البريد الإلكتروني لإرسال الرسائل
    • أساسيات إطار العمل جانغو Django
    • بناء تطبيق إدارة المهام باستخدام إطار العمل جانغو Django
    • تطوير متجر إلكتروني متكامل باستخدام إطار العمل جانغو Django وربطه مع وسائل الدفع باي بال PayPal وسترايب Stripe
    • أساسيات إطار العمل فلاسك Flask، وبناء مدونة بسيطة
    • تطوير تطبيقات أودو Odoo

    • تطوير واجهة برمجية API اعتمادًا على نمط RESTful لمعالجة الصور

    وبالتالي أنت قد ألممت بجزء كبير من وصف الوظيفة، وتحتاج فقط إلى تعلم  أساسيات تقنيات الواجهة الأمامية، مثل JavaScript و HTML5 و CSS3.

    وبالنسبة لطريقة التعلم المناسبة فأرجو منك قراءة النقاش التالي وقراءة النقاشات التي إرفاقها بداخله:

     

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

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

    والباقي عليك بالبحث عنه والقراءة، أو البحث باسم how to تنفيذ شيء معين وهكذا.

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

    وبخصوص طريقة التعلم المناسبة قد تم التطرق إلى ذلك بالتفصيل في النقاش التالي:

     

    • أعجبني 1
  9. في البداية حزمة "phpdotenv" هي حزمة تساعد على تحميل متغيرات البيئة في تطبيق PHP.

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

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

    فيما يلي بعض الفوائد الرئيسية لاستخدام حزمة "phpdotenv":

    1- تحسين أمان التطبيق

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

    2- التبسيط

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

    3- المرونة

    تستطيع استخدام متغيرات البيئة لتكوين العديد من جوانب التطبيق المختلفة، مثل إعدادات البريد الإلكتروني وإعدادات قاعدة البيانات وتكوينات مزود الخدمة وغيرها.

    4- الإدارة

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

    لتوضيح كيفية استخدام حزمة "phpdotenv"، إليك مثال بسيط لتكوين متغيرات البيئة لتطبيق PHP.

    حيث سنقوم بتخزين المعلومات الحساسة المتعلقة بقاعدة البيانات، مثل اسم المستخدم وكلمة المرور واسم قاعدة البيانات، في ملف .env الموجود في الجذر الرئيسي لتطبيق PHP.

    ثم استخدام الحزمة لتحميل هذه المتغيرات واستخدامها في الرمز الخاص بالتطبيق.

    1- عليك بتثبيت حزمة "phpdotenv" باستخدام مدير حزم Composer:

    composer require vlucas/phpdotenv

    2- إنشاء ملف .env وتحديد المتغيرات المطلوبة وقيمها، مثال لملف .env:

    DB_HOST=localhost
    DB_DATABASE=mydatabase
    DB_USERNAME=myuser
    DB_PASSWORD=mypassword

    3- استخدام الحزمة في الكود:

    require __DIR__ . '/vendor/autoload.php';
    
    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
    $dotenv->load();
    
    $host = $_ENV['DB_HOST'];
    $database = $_ENV['DB_DATABASE'];
    $username = $_ENV['DB_USERNAME'];
    $password = $_ENV['DB_PASSWORD'];
    
    // استخدم المتغيرات للإتصال بقاعدة البيانات

    تعمل الحزمة على تحميل قيم متغيرات البيئة من ملف .env وإضافتها كمتغيرات PHP للتطبيق، وتستطيع استخدام هذه المتغيرات في الكود.

  10. دورة تطوير واجهات المستخدم تعتبر مكملة لدورة تطوير التطبيقات باستخدام لغة JavaScript حيث ستتعلمي كيف يتم تصميم وبناء واجهة المستخدم وذلك باستخدام اللغات الأساسية وهم HTML, CSS, JavaScript بالإضافة إلى استخدام أحدث أدوات التطوير: Bootstrap, jQuery, Sass, Gulp.

    وهي لا غنى عنا إذا كنتي تريدي أن تتخصي في مجال الواجهة الأمامية front-end وبعد الإنتهاء منها سيتعين عليك استكمال مسار الـ front-end وذلك بتعلم مكتبة React.js فبدونها لا يمكن العمل بشكل إحترافي في سوق العمل كمطور واجهات أمامية.

    وفي دورة تطوير التطبيقات باستخدام لغة JavaScript ستتعلمي مكتبة React.js بالإضافة إلى بيئة العمل Node.js الخاصة بالواجهة الخلفية والتي تعتمد على جافاسكريبت كلغة لها، ناهيك عن إطار العمل Next.js الذي لاغنى عنه لتتمكني من تنفيذ Server-side Rendering أي  تصيير من جهة الخادم.

    وكل ما سبق سيؤهلك لتصبحي مطورة Full stack أي قادرة على القيام بمهام الواجهة الأمامية والخلفية معًا، وإذا أردتي التخصص في الواجهة الأمامية فقط، فيكفيك تعلم React.js فقط، رغم أني لا أنصحك بذلك وعليك بتعلم Node.js لتتمكني من الحصول على وظيفة في السنة الأولى لك بعد الإنتهاء من الدورة.

    وإذا قمت بتعلم React.js فقط، فستحتاجي إلى بعض الوقت لاكتساب الخبرة وبعدها سيتم قبولك في الوظائف، ولذلك أخبرتك بتعلم Node.js لتفادي تلك المشكلة، وإذا كان لديك الوقت فتعلمي React.js فقط واجتهدي في بناء المشاريع لاكتساب الخبرة.

    ولزيادة مهاراتك عليك بتعلم Next.js بعد تعلم Node.js، وذلك ما سيتم شرحه خلال الدورة وأيضًا التطبيق من خلال بناء مشاريع لوضعها في معرض أعمالك.

    والقرار لك في تعلم ما تريدين.

    ويتوفر في الدورة أيضًا شرح مكتبتي React Native و Expo  لتطوير تطبيقات الهاتف المحمول، بالإضافة إلى إنشاء تطبيقات سطح مكتب باستخدام JavaScript باستخدام إطار العمل Electron.js.

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

    وكل ما سبق يندرج تحت مسمى  MERN Stack وقد تم شرح الأمر هنا:

    لذلك عليك بالإختيار ما بين أن تصبحي مطورة Fron-End فقط أو مطورة Full stack، ولمساعدتك في إتخاذ القرار تصفحي الوظائف على LinkedIn وتفقدي ماهي المهارات المطلوبة بالنسبة لمستوى Entry Level أو Junior وتعلمي تلك المهارات من خلال الدورتين.

    وأيضًا أنصحك بقراءة النقاشات التالية:

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

    ولحل مشكلة تعارض الحزم، يجب القيام بعدة خطوات:

    الخطوة الأولى هي تحديد الحزم التي تسبب التعارض والتأكد من أنها تستخدم إصدارًا متوافقًا مع الحزم الأخرى التي يعتمد عليها التطبيق. يمكن تحديد الحزم المتعارضة باستخدام أدوات إدارة الحزم مثل npm-check و npm ls.

    npm-check و npm ls هما أوامر في واجهة سطر الأوامر لإدارة حزم npm والتحقق من حالة الحزم المثبتة في المشروع وتحديد التعارضات.

    فالأمر npm-check يقوم بإظهار حالة الحزم المثبتة ويسمح بتحديد الحزم التي تحتاج إلى التحديث أو حذفها.

    أما الأمر npm ls فيقوم بإظهار قائمة بكافة الحزم المثبتة بما فيها الإصدارات والتعليقات والتبعيات بين الحزم لتحديد التعارضات.

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

    بعد تحديد الحزم المتعارضة والخطأ الناتج عنه، يمكن اتخاذ إحدى الخطوات التالية:

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

    والحل الأسهل هو  استخدام الأمر npm install --legacy-peer-deps لحل مشكلة تعارض الحزم، فهو يستخدم خيار --legacy-peer-deps لتمكين npm من تثبيت الحزم المتعارضة كما كان يفعل في إصدارات سابقة، حيث تم تغيير سلوكية تثبيت الحزم المتعارضة في إصدارات npm الأحدث.

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

    • أعجبني 1
  12.  الهكر الأخلاقي هو شخص يستخدم مهارات الحوسبة والبرمجة وأمن المعلومات لاختبار نظام الأمان والحماية للأنظمة والشبكات والتطبيقات والمواقع.

    ويعمل الهكر الأخلاقي على اختبار النظام للبحث عن الثغرات والاختراقات والتحقق من أن النظام آمن بشكل كافي، من خلال الإعتماد على المعرفة والخبرة في مجال البرمجة وأمن المعلومات والتعامل مع الأدوات اللازمة لاختبار النظام.

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

    ومع ذلك، تستطيع استخدام أنظمة تشغيل أخرى مثل نظام التشغيل Mac لأغراض الاختبار والاختراق الأخلاقي.

    وفيروسات الحاسوب هي برامج ضارة تتسبب في إتلاف بيانات المستخدم أو إعاقة عمل النظام، وتختلف فيروسات الحاسوب من حيث الشكل والتصميم ولكنها تتألف من برامج مكتوبة بلغة برمجة معينة.

    ومنعًا للتكرار، قد تم التطرق بالتفصيل حول سؤالك في النقاشات التالية:

     

    • أعجبني 1
  13. بتاريخ 33 دقائق مضت قال Mohammed Hendawy:

    تمام ازي بقا بعد ما يتم وضعي علي الطريق الصحيح اكمل الليي ناقص وابقي محترف زي الناس اللي احترفت 

     

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

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

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

    وعود نفسك أن تركز في الحاضر والمستقبل القريب مع التخطيط للمستقبل البعيد، ولكن لا تشغل بالك بالمستقبل البعيد فتفشل في تحقيق ما تريده في حاضرك ومستقبلك القريب.

    وبخصوص سعر الدورة فهو ثابت بتكلفة 290 دولار لكل دورة

    وأنصحك بقراءة كل حرف في النقاش التالي والأسئلة التي تم إرفاقها به:

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

    وبعد تعلم الأساسيات والتي منها أساسيات لغة جافاسكريبت عليك بتعلم دورة تطوير تطبيقات الويب باستخدام لغة PHP:

     

    • شكرًا 1
  14. في البداية الخطأ الذي تواجهه يحدث عند استخدام String بدلاً من Map<String, dynamic>، والسبب في الخطأ هو أنَّ قيمة "ImageTopic" في الكود الخاص بك ليست في صيغة JSON صحيحة.

    حاول التأكد من أن جميع القيم الموجودة في حقل "ImageTopic" تم تخزينها بصيغة JSON صحيحة، أيضًا التأكد من أن موديل "ImageTopicModel" يتوافق مع القيم الموجودة في "ImageTopic".

    ولتحديد الخطأ بشكل أدق، تستطيع تحويل الـ Map<String, dynamic> إلى String باستخدام JSON.encode() ومن ثم استخدام print() لطباعة الناتج، وهذا يمكن أن يساعد في تحديد ما إذا كانت البيانات الموجودة في حقل "ImageTopic" تتوافق مع JSON صحيح أم لا.

    استخدم الكود التالي لتحويل الـ Map<String, dynamic> إلى String:

    final jsonString = json.encode(myMap);

    ولتحويل الـ String إلى Map<String, dynamic> استخدام هذا الكود:

    final myMap = json.decode(jsonString);

    وأيضًا حاول تغيير هذا السطر في الكود:

    List<dynamic> myArray = querySnapshot.docs.first.get('ImageTopic') ?? [];

    إلى هذا الشكل:

    List<dynamic> myArray = List<Map<String, dynamic>>.from(querySnapshot.docs.first.get('ImageTopic') ?? []);

    هذا التغيير سيحول النوع المسترجع من البيانات إلى List<Map<String, dynamic>> والذي يمكن استخدامه في الخطوة التالية من تحويل العناصر إلى قائمة من Model objects.

    وبعد ذلك، يجب تحديث تابع fromJson() في ImageTopicModel ليتعامل مع Map<String, dynamic> بدلاً من String.

    استخدام الكود التالي كنموذج للتحديث:

    factory ImageTopicModel.fromJson(Map<String, dynamic> json) {
      return ImageTopicModel(
        imageTopic: json['imageTopic'],
      );
    }

     

  15. لطباعة متغير PHP داخل صفحة HTML، يجب استخدام علامة الإغلاق للـ PHP

     "<?php ?>"

    وذلك لوضع كود PHP داخل الصفحة HTML، وبعد ذلك بإمكانك استخدام الإخراج echo لعرض قيمة المتغير.

    <?php
    $userName = 'Belal';
    ?>
    <h1> Welcome <?php echo $userName; ?> </h1>

    سيظهر لك رسالة "Welcome Belal" وستكون قيمة المتغير $userName قد تم عرضها داخل عنصر العنوان.

    وهناك طريقة أخرى  لطباعة المتغيرات في صفحة HTML باستخدام دالة sprintf() في PHP.

    ستحتاج إلى تعريف نص العنوان كنص قالب مع علامات %s تمثل مكان وضع قيمة المتغير، ومن ثم يمكن استخدام دالة sprintf() لوضع قيمة المتغير في النص القالب.

    <?php
    $userName = 'Belal';
    $title = sprintf('Welcome %s', $userName);
    ?>
    <h1> <?php echo $title; ?> </h1>

    سيتم طباعة "Welcome Belal" وعرض قيمة المتغير $userName داخل العنوان باستخدام دالة sprintf().

    وإليك طريقة أخرى،  لطباعة المتغيرات في صفحة HTML باستخدام قوسين مربعين "[ ]" للإشارة إلى المتغير داخل النص.

    <?php
    $userName = 'Belal';
    ?>
    <h1> Welcome [<?= $userName ?>] </h1>

    ستظهر الصفحة بعد ذلك برسالة ترحيب "Welcome [Belal]" وسيتم عرض قيمة المتغير $userName داخل العنوان بين قوسين مربعين.

  16. في حال أنك تريد ترتيب النتائج حسب المتوسط الأعلى، فتستطيع تحديث الاستعلام  لاستخدام الدالة orderByDesc() على نتائج الدالة average() بدلاً من عدد التقييمات.

    $users = User::with('ratings')
        ->withCount('ratings')
        ->orderByDesc(function ($user) {
            return $user->ratings->avg('stars');
        })
        ->get();

    تستخدم الدالة avg() هنا لحساب المتوسط عن طريق الاستعانة بالعلاقة ratings في نموذج المستخدم.

    ثم الإعتماد على  orderByDesc() لترتيب النتائج بترتيب تنازلي وفقًا لنتائج الدالة avg() للتقييمات. بهذه الطريقة ، ستظهر النتائج بترتيب تنازلي وفقًا للمتوسط الأعلى لتقييمات المستخدمين.

    لاحظ أني قمت بإضافة with('ratings') لجلب بيانات التقييمات مع كل مستخدم ، ولذلك يجب التأكد من استخدام الاسم الصحيح للعلاقة بين الجدولين في نموذج المستخدم الخاص بك.

    • أعجبني 1
  17. من خلال الدالة orderBy() في Laravel لترتيب البيانات تصاعديًا أو تنازليًا وفقًا لنتائج الدالة average() التي تم إنشاؤها، وتستطيع تحقيق ذلك بسهولة عن طريق إضافة السطر التالي إلى استعلام قاعدة البيانات الخاص بك:

    $users = User::withCount('ratings')->orderByDesc('ratings_count')->get();

    وتستخدم withCount() لحساب عدد التقييمات لكل مستخدم ، و orderByDesc() لترتيب النتائج بترتيب تنازلي وفقًا لعدد التقييمات.

    بالتالي، سيكون أولئك الذين لديهم المزيد من التقييمات في الأعلى وسيتم ترتيبهم بشكل تنازلي.

    وإذا كنت تريد ترتيبهم تصاعديًا ، فتستطيع استخدام orderBy() بدلاً من orderByDesc().

    $users = User::withCount('ratings')->orderBy('ratings_count')->get();

    وتأكد من استبدال ratings بالاسم الصحيح للعلاقة بين الجدولين في نموذج المستخدم الخاص بك.

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

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

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

     

    • شكرًا 1
  19. تستطيع إضافة progress bar للكود عن طريق إنشاء واجهة المستخدم وجعلها تستخدم هذا الكود، ثم يمكن عرض progress bar لمستخدمي التطبيق لإظهار تقدم عملية الرفع.

    ثم استخدام الكود المعطى في حدث زر الرفع (upload)، ومن ثم تحديث progress bar بشكل منتظم لإظهار تقدم عملية الرفع. ويمكن ذلك بإضافة شرطات التقدم في مخرجات الكود، مثلاً، حاول إضافة حدث يقوم بتحديث progress bar بناءً على عدد البايتات التي تم رفعها.

     

    وتستطيع الاطلاع على مقالات أو دليل مطورين مثل هذا الدليل لمعرفة المزيد حول إضافة progress bar في تطبيقات Android:

    https://developer.android.com/reference/android/widget/ProgressBar

    وإليك مثال بسيط يستخدم مكتبة Volley لإجراء طلب HTTP POST مع تمكين ProgressBar عند الرفع:

    public class MainActivity extends AppCompatActivity {
        private Button uploadButton;
        private ProgressBar progressBar;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            uploadButton = findViewById(R.id.upload_button);
            progressBar = findViewById(R.id.progress_bar);
    
            uploadButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // Create a multipart request using Volley
                    VolleyMultipartRequest request = new VolleyMultipartRequest(Request.Method.POST, UPLOAD_URL, new Response.Listener<NetworkResponse>() {
                        @Override
                        public void onResponse(NetworkResponse response) {
                            // Handle successful response
                        }
                    }, new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            // Handle error
                        }
                    }) {
                        @Override
                        protected Map<String, DataPart> getByteData() {
                            // Add file to request
                            Map<String, DataPart> params = new HashMap<>();
                            params.put("file", new DataPart("file.jpg", getFileDataFromDrawable(getBaseContext(), R.drawable.image), "image/jpeg"));
                            return params;
                        }
    
                        @Override
                        protected Response<NetworkResponse> parseNetworkResponse(NetworkResponse response) {
                            // Update progress bar based on response
                            int percentage = (int) (((float) response.uploadedBytes / (float) response.totalBytes) * 100);
                            progressBar.setProgress(percentage);
                            return super.parseNetworkResponse(response);
                        }
                    };
    
                    // Add request to the queue
                    VolleySingleton.getInstance(getBaseContext()).addToRequestQueue(request);
                }
            });
        }
    
        private byte[] getFileDataFromDrawable(Context context, int id) {
            Drawable drawable = ContextCompat.getDrawable(context, id);
            Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 80, byteArrayOutputStream);
            return byteArrayOutputStream.toByteArray();
        }
    }

    وعليك باستبدال UPLOAD_URL بعنوان URL الخاص بخادم الرفع الخاص بك و R.drawable.image بمورد الصورة الخاصة بك.

  20. في البداية أرجو توضيح السؤال وكتابته بالعربية، وإذا كان سؤالك بخصوص ما هو التشغيل غير المنسق، فإليك شرح للأمر.

    التشغيل غير المنسق (أو Uncoordinated Execution) هو نمط من أنماط التشغيل في الحوسبة الموزعة يشير إلى عدم وجود تنسيق أو توافق بين العمليات المنفذة في النظام.

    يعني هذا أن العمليات المختلفة قد تقوم بتنفيذ الأعمال المختلفة في نفس الوقت ودون التنسيق مع بعضها البعض.

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

    وعلى الرغم من أن التشغيل غير المنسق يعتبر أحد النماذج الأساسية في الحوسبة الموزعة، إلا أنه قد يكون غير مثالي في بعض الحالات، وعادةً ما يتم استخدام أنماط التشغيل المنسق أو المتزامن (Coordinated/Synchronized Execution) عند الحاجة إلى التحكم في التنفيذ وضمان التنسيق بين العمليات المختلفة في النظام.

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

    كما أنه يحتوي على نظام تشغيل macOS الذي يدعم العديد من لغات البرمجة والأدوات اللازمة لتطوير البرمجيات، وتعتبر البيئة الأمثل لمحترفي البرمجة.

    ونظام macOS قد يكون مناسبًا للعديد من المطورين. يتضمن نظام macOS بيئة تطوير متكاملة (IDE) مثل Xcode والتي تدعم العديد من لغات البرمجة مثل Swift و Objective-C و C++ وغيرها، كما يتضمن العديد من الأدوات المساعدة لتطوير البرمجيات مثل محررات النصوص والمترجمات ومكتبات البرمجة.

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

    وقد تم التطرق بالتفصيل لمواصفات الحاسوب المناسبة للبرمجة بالتفصيل في النقاشات التالية:

     

  22. السؤال كان غير واضح بعض الشيء، بخصوص تشغيل المشروع على شبكة محلية حاول تجربة التالي:

    1. تأكد من أن جهاز الكمبيوتر الذي تريد تشغيل السيرفر عليه متصل بالشبكة المحلية.
    2. قم بفتح موجه الأوامر (command prompt) واستخدم الأمر "ipconfig" للحصول على عنوان IP الخاص بجهاز الكمبيوتر الخاص بك في الشبكة المحلية.
    3. استخدم الأمر "python manage.py runserver 0.0.0.0:8000" لتشغيل السيرفر المحلي وجعله يستجيب لأي طلبات HTTP على جميع عناوين IP الموجودة في الشبكة المحلية.
    4. اطلب من الآخرين في الشبكة المحلية استخدام عنوان IP الخاص بجهاز الكمبيوتر الخاص بك ورقم المنفذ 8000 للوصول إلى الموقع الخاص بك عن طريق متصفح الويب.

    مثلاً، إذا كان عنوان IP الخاص بجهاز الكمبيوتر الخاص بك هو "192.168.1.100"، يمكن للآخرين في الشبكة المحلية الوصول إلى الموقع الخاص بك عن طريق زيارة العنوان "http://192.168.1.100:8000/".

  23. إذا كنت لم تحدد المجال الذي تريد تعلمه في البرمجة سواء ويب أو تطوير تطبيقات الهاتف باستخدام Flutter أو React Native ولديك الوقت فأنصحك بتعلم أساسيات البرمجة أولاً.

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

    وإن كنت تريد الوظيفة بشكل سريع وبحاجة إلى المال وليس لديك وقت لتعلم الأساسيات، فأنصحك برؤية ما هي المهارات المطلوبة في سوق العمل لديك بالنسبة لمستوى Entry Level أو Junior على مواقع التوظيف مثل LinkedIn وإذا كان المطلوب بكثرة مطور وورد بريس أو مطور PHP ولارافيل مع Vue.js أو مطور React.js أو مطور Angular.js أو مطور .net أو مطور React Native وهكذا.

    فعليك بتعلم ماهو متاح في سوق العمل ثم تعلم ما تريده بعد الحصول على الوظيفة، ولكن إذا كان لديك الوقت ومازلت صغير السن فقم بتعلم مجال الويب لأنه سيفتح أفاقك على كافة مجالات البرمجة وهو سهل في البداية وبه مجالات مختلفة مثل مطور الواجهة الأمامية والواجهة الخلفية وبإمكانك استخدام React.js الخاصة بالواجهة الأمامية في تعلم React Native.

    أي أنك ستستطيع التوجه إلى أكثر من مجال عند تعلم الويب على عكس لو قمت بتعلم تطوير التطبيقات فقط.

    وبخصوص الأساسيات، عليك البدء أولاً بلغة C++ إذا أردت التأسيس بشكل سليم، وإذا أردت تخطي ذلك الأمر فعليك بتعلم لغة جافاسكريبت في البداية لتسريع عملية التعلم.

    وقد تم التطرق بالنقاش حول سؤالك بالتفصيل في النقاشات التالية:

     

×
×
  • أضف...