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

Mustafa Suleiman

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

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

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

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

    305

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

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

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

    وستجد هنا مصادر جيدة لتعلم ما ذكرته:

     

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

    أما عن إنشاء تطبيق مثل واتساب، فيمكنك إنشاء تطبيق مماثل ويمكنك البحث على يوتيوب عن What'sApp Clone.

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

    • أعجبني 1
  4. لاحظ أنك تستخدم دالة بانية باسم Function وهي خاصة بإنشاء الدوال، عليك استخدام إعلان الدالة function declaration من خلال حرف f صغير كالتالي:

    function(err){
    
    }

    وليس:

    Function(err){
    
    }

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

    const sum = new Function('a', 'b', 'return a + b');
    
    console.log(sum(2, 6));
    // Expected output: 8

    قمت بكتابة معاملات للدالة وأيضًا القيمة التي سيتم إعادتها.

  5. ما تتحدث عنه هو الـ Syntax بالإضافة إلى أفضل الممارسات أثناء كتابة الكود حيث يمكن الاطلاع علىPEP 8 وهو مستند يحتوي على مجموعة من المعايير والإرشادات المتعلقة بأسلوب كتابة الأكواد في لغة Python.

    وتمثل "PEP" اختصارًا لـ "Python Enhancement Proposal"، وهي وثائق تُستخدم لاقتراح تحسينات للغة Python ومكتباتها المرتبطة.

    والأمر يطول شرحه لكن هناك بعض القواعد الأساسية لكتابة أكواد Python هي التالي:

    • المسافات البيضاء (Whitespace)

    Python تستخدم المسافات البيضاء (المسافات والتابات) لفهم وتنسيق الأكواد، ويجب أن تكون المسافات محددة بشكل صحيح.

    for i in range(5):
        print(i)
    • الهوامش (Indentation)

    تعتمد بايثون على التعريفات لتنظيم الكود وبالتي يجب أن تكون التعريفات متساوية من حيث التباعد (indentation)، والعادة تستخدم أربع مسافات أو مسافتين (PEP 8 توصي باستخدام أربع مسافات).

    if x > 5:
        print("x is greater than 5")
    • التعليقات (Comments)

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

    # هذا تعليق
    • أسماء المتغيرات والدوال 
    1. يمكن استخدام الأحرف الأبجدية (a-z و A-Z) والأرقام (0-9) وشرطة سفلية (_) في تسمية المتغيرات.
    2. ابدأ اسم المتغير بحرف (a-z أو A-Z) أو بشرطة سفلية (_). ليس مسموحًا بالبدء برقم.
    3. Python حساسة لحالة الأحرف، مما يعني أن المتغيرات "myVar" و "myvar" تعتبران مختلفتين.
    4. لا يمكن استخدام كلمات محجوزة مثل if و while و for كأسماء متغيرات.

    يُفضل اتباع بعض الممارسات الجيدة في تسمية المتغيرات:

    1. استخدم أسماء متغيرات واضحة ومعبرة توضح الغرض من المتغير.
    2. استخدم حروف صغيرة لأسماء المتغيرات وفصل الكلمات بواسطة الشرطة السفلية (snake_case). مثال: my_variable.
    3. لأسماء المتغيرات الثابتة والمتغيرات التي تعتبر خاصة بالصف تبدأ بحرف تسطيري واحد (underscore), وذلك للإشارة إلى أنها خاصة. مثال: _private_variable.
    4. يُفضل استخدام اختصارات لأسماء المتغيرات إذا كان ذلك يزيد من وضوح الكود، مثال: num_of_items يمكن تختصرها إلى num_items.
    name = "mustafa"
    • التعبيرات الشرطية (Conditional Statements)

    استخدم تعبيرات شرطية مثل if, elif, و else للتحكم في تدفق البرنامج.

    if x > 10:
        print("x is greater than 10")
    elif x == 10:
        print("x is equal to 10")
    else:
        print("x is less than 10")

     

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

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

    كالتالي:

    // تعريف متغيرات عالمية
    $qINkg = $_POST['qINkg'];
    $sCustomercredit = $_POST['sCustomercredit'];
    
    // Check if the quantity is greater than the customer's credit
    if ($qINkg >= $sCustomercredit) {
        // Show an error message
        echo "The quantity is greater than the customer's credit.";
        exit;
    }

    وبخصوص jQuery الكود سيكون كالتالي:

    let qINkg = $(".qINkg").val();
    let sCustomercredit = $(".sCustomercredit").val();
    
    // Check if the quantity is greater than the customer's credit
    if (qINkg >= sCustomercredit) {
        // Show an error message
        Swal.fire(
            <?php echo json_encode($langs->trans('error')); ?>,
            <?php echo json_encode($langs->trans('invalidReturn1')); ?>,
            'error'
        );
        event.preventDefault(); 
        return false;
    }

    أيضًا من الأفضل إضافة فحص إضافي للتأكد من أن المتغيرات ليست فارغة باستخدام الشرط التالي:

    PHP

    
    if (!empty($qINkg) && !empty($sCustomercredit)) {
        // Check if the quantity is greater than the customer's credit
        if ($qINkg >= $sCustomercredit) {
            // Show an error message
            echo "The quantity is greater than the customer's credit.";
            exit;
        }
    
    }

    JS:

    if (qINkg && sCustomercredit) {
        // Check if the quantity is greater than the customer's credit
        if (qINkg >= sCustomercredit) {
            // Show an error message
            Swal.fire(
                <?php echo json_encode($langs->trans('error')); ?>,
                <?php echo json_encode($langs->trans('invalidReturn1')); ?>,
                'error'
            );
            event.preventDefault(); // Prevent form submission
            return false;
        }

     

  7. تستطيع معرفة آخر التحديثات المضافة في أكاديمية حسوب من خلال صفحة آخر التحديثات.

    وما تم إضافته مؤخرًا في دورة جافاسكريبت هو التالي:

    أضفنا مسارًا جديدًا لتطوير تطبيق تعلم اللغات باستخدام Next.js وتقنيات الذكاء الاصطناعي المقدمة من OpenAI إلى دورة تطوير التطبيقات باستخدام JavaScript.

    ستتعلم في 6 ساعات فيديو كيف تتعامل مع OpenAI API ومختلف تقنياتها وأبرزها ChatGPT، وكيف تستفيد من هذه التقنيات في مشاريعك الخاصة بتطويرنا لتطبيق متكامل عبر Next.js و MUI يوضح الاستخدام العملي لها.

    • أعجبني 1
  8. من الأسهل لك إذا لم يكن لديك دراية كبيرة بجافاسكريبت استخدام مكتبة جاهزة لإرسال الإشعارات، مثل مكتبة pushjs وبعد تثبيت المكتبة ستقوم بإرسال إشعار كالتالي:

    Push.create("Hello world!", {
        body: "How's it hangin'?",
        icon: '/icon.png',
        timeout: 4000,
        onClick: function () {
            window.focus();
            this.close();
        }
    });

    وستجد تفصيل أكثر في المستند الرسمي وأيضًا مثال حي للإشعارات المرسلة للمتصفح:

  9. لا سبيل للتراجع عن ذلك لللأسف، عليك الإعتماد في المستقبل على Git وGitHub بحيث تقوم برفع التعديلات للمستودع على وGitHub وسيتم حفظها هناك للأبد وتستطيع التراجع عنها بسهولة.

    وعدا تلك الطريقة ستكون عرضة لفقد ملفات مشروعك في أي وقت ولأي سبب مثلما حدث معك.

    وهنا شرح وافي لأساسيات استخدام Git وGitHub:

    • شكرًا 1
  10. أنت تريد أن تصبح مطور واجهات أمامية، صحيح؟

    إذن عليك تعلم اللغات الأساسية والتي تعتمد عليها باقي التقنيات مثل مكتبة React وغيرها، وأقصد باللغات الأساسية HTM, CSS, JS عليك التركيز على تعلمهم بشدة ولا تتسرع في الإنتقال لتعلم أي مكتبة أو إطار بدون الشعور بأريحية في تفنيذ مشروع كامل من خلال تلك اللغات وأقصد مشروع متوسط التعقيد.

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

     

  11. الإجابة ببساطة هي نعم في حال كنت مصمم وليس مبرمج واجهات أمامية UI\UX.

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

    وستجد شرح مفصل هنا:

     

    • شكرًا 1
  12. يمكنك الإعتماد على مكتبات مثل difflib أو fuzzywuzzy، وسأوضح لك كيفية القيام بذلك باستخدام مكتبة fuzzywuzzy.

    يجب عليك تثبيت المكتبة إذا لم تكن مثبتة بالفعل باستخدام pip:

    pip install fuzzywuzzy

    ثم استخدامها كالتالي:

    from fuzzywuzzy import fuzz
    
    # النصوص التي ترغب في مقارنتها
    text1 = "النص الأول"
    text2 = "النص الثاني"
    
    # احتساب نسبة التشابه بين النصوص
    similarity_ratio = fuzz.ratio(text1, text2)
    
    print("نسبة التشابه بين النصوص:", similarity_ratio)

    الكود سيعممل على حساب نسبة التشابه بين النصوص text1 و text2 ويطبعها لك، والنتيجة ستكون قيمة بين 0 و100، حيث 0 يعني أنهما غير متشابهين تمامًا و100 يعني أنهما متطابقين تمامًا من ناحية الترتيب والمحتوى.

    • شكرًا 1
  13. بتاريخ 13 دقائق مضت قال Ahmed Ebrahim11:

    اخذت الشهاده البارحه ولكن لم يتواصل معي احد هل يتواصل معي بعد فتره؟

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

    • شكرًا 1
  14. بالطبع فذلك مذكور في وصف كل دورة، وهو الآتي:

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

     

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

    وبخصوص السعر هناك العديد من العوامل التي يجب معرفتها وستجد البعض من هنا في النقاش التالي:

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

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

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

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

    أي توزيع الأرباح والخسائر بالتساوي بينك وبين الشخص الآخر، وذلك يعني أنكما ستقسمان الأرباح والخسائر بالنسبة المئوية نصفين - أي 50% لك و50% للشخص الآخر.

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

    وبناءًا على كلامه فهو يعتبر أن لك حصة في الشركة وعليك أن تسأله ما هي نسبة الحصة الخاصة بي. 

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

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

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

    • احصل على نسخة من الاتفاق مكتوبة وموقعة من الطرفين.
    • احتفظ بسجلات دقيقة لجميع المعاملات التجارية بينكما.
    • تجنب الدخول في أي اتفاقات شفهية أو غير مكتوبة.
    • إذا واجهت أي مشاكل، فاستشر محامياً أو مستشاراً قانونياً.
  17. بتاريخ 38 دقائق مضت قال Karem Mohammed2:

    انه يظهر له مواقيت الصلاة الخاصة باليوم 

    او البحث بالتاريخ 

    يمكنك ذلك من خلال إرسال التاريخ  والموقع كالتالي:

    https://api.aladhan.com/v1/timings/16-10-2023?latitude=51.508515&longitude=-0.1254872&method=2

    وستحصل على رد كالتالي:

    {
    code: 200,
    status: "OK",
    data: {
    timings: {
    Fajr: "05:54",
    Sunrise: "07:26",
    Dhuhr: "12:46",
    Asr: "15:33",
    Sunset: "18:06",
    Maghrib: "18:06",
    Isha: "19:37",
    Imsak: "05:44",
    Midnight: "00:46",
    Firstthird: "22:32",
    Lastthird: "02:59"
    },
    date: {
    readable: "16 Oct 2023",
    timestamp: "1697436000",
    hijri: {
    date: "01-04-1445",
    format: "DD-MM-YYYY",
    day: "01",
    weekday: {
    en: "Al Athnayn",
    ar: "الاثنين"
    },
    month: {
    number: 4,
    en: "Rabīʿ al-thānī",
    ar: "رَبيع الثاني"
    },
    year: "1445",
    designation: {
    abbreviated: "AH",
    expanded: "Anno Hegirae"
    },
    holidays: [ ]
    },
    gregorian: {
    date: "16-10-2023",
    format: "DD-MM-YYYY",
    day: "16",
    weekday: {
    en: "Monday"
    },
    month: {
    number: 10,
    en: "October"
    },
    year: "2023",
    designation: {
    abbreviated: "AD",
    expanded: "Anno Domini"
    }
    }
    },
    meta: {
    latitude: 51.508515,
    longitude: -0.1254872,
    timezone: "Europe/London",
    method: {
    id: 2,
    name: "Islamic Society of North America (ISNA)",
    params: {
    Fajr: 15,
    Isha: 15
    },
    location: {
    latitude: 39.70421229999999,
    longitude: -86.39943869999999
    }
    },
    latitudeAdjustmentMethod: "ANGLE_BASED",
    midnightMode: "STANDARD",
    school: "STANDARD",
    offset: {
    Imsak: 0,
    Fajr: 0,
    Sunrise: 0,
    Dhuhr: 0,
    Asr: 0,
    Maghrib: 0,
    Sunset: 0,
    Isha: 0,
    Midnight: 0
    }
    }
    }
    }

    والمزيد من التفاصيل في المستند الرسمي:

  18. منصة railway كانت الأسهل إلا أنها لم تعد مجانية أيضًا، ومن حيث السهولة في الاستخدام لديك الآن vercel (تدعم (Node.js, Go, Ruby, Python) و أيضًا يوجد Render.com وcyclic.sh، بجانب Netlify والتي تدعم اللغات التالية:

    • Node.js
    • Ruby
    • Python
    • PHP
    • Go
    • Java

    والمزيد يمكنك تفقده من خلال المستند الرسمي.

    وبخصوص استضافة قاعدة بيانات، فلديك planetscale وsupabase وcockroachDB بالإضافة إلى Atlas.

    • أعجبني 1
  19. أولاً عليك تثبيت Homebrew من خلال الأمر التالي:

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

    بعد ذلك عليك تثبيت Ruby ومن الأفضل استخدام مدير إصدارات مثل ASDF بحيث يمكنك التنقل بين الإصدارات بكل سهولة وأيضًا هو يدعم Node.js.

    لتثبيت asdf عليك بتنفيذ كل أمر من الأوامر التالية:

    cd
    git clone https://github.com/excid3/asdf.git ~/.asdf
    echo '. "$HOME/.asdf/asdf.sh"' >> ~/.zshrc
    echo '. "$HOME/.asdf/completions/asdf.bash"' >> ~/.zshrc
    echo 'legacy_version_file = yes' >> ~/.asdfrc
    exec $SHELL

    الآن لنقم بتحديد ما اللغات التي نريد تثبيتها من خلال asdf من خلال الأوامر التالي:

    asdf plugin add ruby
    asdf plugin add nodejs

    بعد ذلك تحديد الإصدار الإفتراضي لـ Ruby وتثبيتها:

    asdf install ruby 3.2.2
    asdf global ruby 3.2.2
    
    gem update --system

    والآن تأكد من التثبيت تم من خلال الأمر التالي:

    ruby -v

    ولتثبيت node.js من أجل التعامل مع ملفات جافاسكريبت في المشروع لديك، عليك بالتالي:

    asdf install nodejs 18.16.1
    asdf global nodejs 18.16.1

    والآن لنقم بتثبيت Rails من خلال الأمر التالي لتثبيت الإصدار  7:

    gem install rails -v 7.0.6

    وأيضًا تثبيت sqlite3:

    brew install sqlite3

     

  20. بتاريخ 14 ساعة قال Rok Kor:

    جربت كذا مرة مش عارف العيب فين

    حضرتك ممكن تجربه 

    انا استعملت بيشارم

    C:\Users\Y9tt6\AppData\Local\Programs\Python\Python311\python.exe C:\kk\kkkkkkk.py 
    2023-10-15 22:11:35.056470: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
    To enable the following instructions: SSE SSE2 SSE3 SSE4.1 SSE4.2 AVX AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
    Traceback (most recent call last):
      File "C:\kk\kkkkkkk.py", line 6, in <module>
        image = cv2.imread('C:\kk\k.jpg')
                ^^^
    NameError: name 'cv2' is not defined

    Process finished with exit code 1
     

    عمل ملف ووردdocument.docx  فىه الصورة وكقايمة كام كلمة

    الصورة مش نص دى ممسوحة ضوييا

    الخطأ في الكود يعني أنك إما لم تقم بتثبيت مكتبة opencv وعليك تثبيتها كالتالي:

    pip install opencv-python

    أو لم تقم باستيراد الحزمة في الكود لديك بالأعلى كالتالي:

    import cv2

     

  21. بتاريخ الآن قال محمد احمد فتحي:

    مثل الفصله المنقوطه

    هل تقصد مثل التالي؟

    const x = 5;
    const y = 10;
    
    

    عامًة الحروف المنقوطة (semicolon) تُستخدم لإنهاء التعبيرات أو الأوامر، أي إن وجودها يشير إلى نهاية تعليمة معينة في الكود.

    وذلك يساعد المترجم (interpreter) أو المتصفح على فهم هذا الجزء من الكود وتنفيذه بشكل صحيح.

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

    • شكرًا 1
  22. بتاريخ 15 ساعة قال Qor Qar:

    Mustafa Suleiman

    شكرا جدا لك

    الكود موجود اعلى الصفحة ومعرفتش استعمبه لا ف جوبيتر ولا ع الموبيل

    لو حضرتك تعرف تتعامل معاه اتفضل  ولو ممكن تقولى استخدمه ازى

    لو اى حد يعرف فيديو لحل سؤالى اعلى الصفحة لو ممكن يعرضه وشكرا له

     

    استاذ عمار معلا

    شكرا لك

    بدون زعل انا مش عارف استعمل الكود ازى 

    بيطةلب جوبيتر حاجات تانية

    حضرتك اختبرته ع الصورة 

    لو كدة معلش ممكن صور لما فعلته ومتزعلش 

     

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

×
×
  • أضف...