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

كل الأنشطة

تحدث تلقائيًا

  1. الساعة الماضية
  2. هذا الأمر بالفعل يسبب إلتباس وخطأ وهو يكمن في الفرق بين التحويل الضمني (Type Coercion) عند استخدام عامل الجمع و المقارنة بعامل المقارنة ==. ففي JavaScript يمتلك عامل الجمع + وظيفتين مختلفتين تماما ويتم تحديد الوظيفة بناء على نوع البيانات : الجمع الحسابي (Addition): إذا كان الطرفين أرقاما. الدمج النصي (Concatenation): إذا كان أحد الطرفين أو كلاهما نصا (String). ففي JavaScript للنصوص الأولوية القصوى عند استخدام عامل + فبمجرد أن يرى المحرك نصا واحدا في العملية فإنه يقوم بتحويل كل ما يليه إلى نصوص ودمجها. ففي مثالك الأول: value1 هو نص "32". وعند تنفيذ value1 + value2 تصبح العملية "32" + 10. بسبب وجود النص يتم تحويل 10 إلى "10" والنتيجة "3210". ثم "3210" + 7 تصبح "32107". ولاحظ أن العملية ستختلف بناء على ترتيب الأرقام والنصوص فمثلا : var value1 = 32; var value2 = 10; var value3 = "7"; var sum = value1 + value2 + value3; console.log(sum); ستجد النتيجة 427 وذلك لأنه أولا تم جمع 32 و 10 لأنهم أرقام والناتج هو 42 ومن ثم يتم جمع 42 مع النص 7 ليصبح الناتج 427 . أما بخصوص سؤالك لماذا في true == "1" يتم التحويل لرقم بينما في المثال الأول لم يحدث ذلك فإن الإجابة تكمن في أن قواعد التحويل تختلف باختلاف العامل (Operator): فعند استخدام == لمقارنة أنواع مختلفة تتبع JavaScript خوارزمية محددة تسمى (Abstract Equality Comparison Algorithm) : فإذا تم مقارنة Boolean مع أي نوع آخر يتم تحويله أولا إلى Number (أى true تصبح 1). وإذا تم مقارنة Number مع String يتم تحويل النص إلى رقم. ولذلك فإن true == "1" تتحول إلى 1 == 1 والنتيجة true. وفي حالة الجمع المحرك لا يحاول تحويل النص إلى رقم لأن الدمج النصي هو السلوك الافتراضي لعامل الجمع + وهو يفترض أنك تريد بناء نص طويل وليس بالضرورة إجراء عملية حسابية. وستلاحظ الفرق عند إستخدام عامل الطرح "-" فعامل الطرح لا يعمل إلا مع الأرقام ولذلك فإنه يجبر التحويل إلى رقم وليس سلسة نصية.
  3. السادة الافاضل مرفق الكود التالى var value1 = "32"; var value2 = 10; var value3 = 7; var sum = value1 + value2 + value3; console.log(sum); بيرجع 32107 و الكود التالى بيرجع var value1 = 32; var value2 = 10; var value3 = 7; var sum = value1 + value2 + value3; console.log(sum); بيرجع 49 الكود الاول تعامل مع جميع الارقام على انها من النوع STRING بينما الكوت الثانى تعامل مع جميع الارقام ك NUMBER مع العلم عند الرجوع الى Type coercion وكتابه true == "1" بيكون الناتج true ويتم تحويل نوع البايانت من string to number بشكل ضمنى لماذا لايتم مثل هذا فى المثال الاول بناءا على Type coercion
  4. اليوم
  5. أنصحك بالذهاب إلى الصفحة التالية الخاصة بتفاصيل الدورة : https://academy.hsoub.com/learn/python-application-development/ ستجد أن الدورة تتكون من 69 ساعة فيديو تدريبية وستجدها مقسمة إلى مسارات وكل مسار مقسم إلى أقسام أخرى بها الفيديوهات وستجد كل مسار موضح به عدد الدروس والساعات . فدورة بايثون تحتوي على أكثر من دورة بداخلها ومقسمة إلى مسارات كما أخبرتك وستحتاج إلى 4 أشهر على الأقل لإنهائها بالكامل والفترة المناسبة هي 6 أشهر . فمثلا ستجد أن المسار الأول يحوي 11 ساعة من الدروس و المسار الثاني يحوي 15 ساعة والمسار الثالث يحوي 7 ساعات والمسار الرابع يحوي 5 ساعات . إذا فالأربع مسارات مجموعهم 38 ساعة من الدروس . ويجب عليك معرفة أنه لإنهاء ساعة واحدة من الدورة فهي تختلف من شخص إلى أخر في نطاق 3 إلى 5 ساعات . وذلك لأن الطلاب يقومون بإيقاف الدرس مثلا لكتابة كود والتطبيق أو لإستيعاب جزء ما أو البحث عن معلومة معينة أو إعادة جزء معين . إذا بهذا المعدل يمكننا حساب متوسط 38 * 4 ساعات أى أن الأربع مسارات ستأخذ منك من 114 ساعة إلى 152 ساعة مذاكرة وتطبيق وهي تختلف بناء على مدى قدرة إستيعابك وأيضا تطبيقك للدروس . وإذا قمت بدراسة 20 ساعة فيا الإسبوع أى بمعدل ثلاث ساعات في اليوم فستنهي أول أربع مسارات في 6 أسابيع إلى 8 أسابيع ويمكنك حساب باقي المسارات بنفس الطريقة. وإليك نصائح وتفاصيل أكثر من خلال التعليق التالي :
  6. السلام عليكم ورحمة الله وبركاته، الدورة في الحقيقة يمكن أن تكملها في وقت قصير لما يقارب الشهر إن درست يوميا وبشكل مستمر ودون تقطع لكن هذا لا يكفي، وهنا دوما نشجع الطلبة على أن لا يربطوا مسارهم في التعلم بوقت زمني لإنهاء الدورة، فالدورة بعد الاشتراك فيها فستبقى متاحة لك مدى الحياة، وسيكون لديك وصول مجاني لأية تحديثات قد تطرأ على الدورة في المستقبل. لذا حاول التركيز أكثر على محتوى الدرس والتطبيق أكثر فأكثر ويمكنك طرح أسئلتك في أي وقت تريد وسنساعدك على الفهم ونبسط لك أي مفاهيم تجدها صعبة.
  7. كم يوم احتاج لانتهي من هذي الدوره
  8. السلام عليكم ما رأيكم في شركة https://www.dzsecurity.com/ar/ اريد ان استضيف موقع static مبني بNext.js و تطبيق كامل مبني بReact + backend (لم احدد بعد) اريد استضافة جيدة و سعر منخفض هل هي افضل خيار ؟ بارك الله فيكم
  9. البارحة
  10. سوق العمل ستحتاج إلى تفقده بنفسك من خلال تفقد الوظائف المعروضة على مواقع التوظيف مثل LinkedIn وIndeed، أي البحث بالكلمات المفتاحية الخاصة بمجال بايثون مثل Python Django Backend Developer بالنسبة لما يمكنك العمل به بعد الإنتهاء من الدورة،: مطور Full-stack لبناء مواقع الويب والمتاجر الإلكترونية أي قادر على تطوير الواجهة الأمامية والخلفية أيضًا من خلال Django و Flask. مطور واجهة خلفية Back-End فقط. مجال تعلم الآلة ولكن هنا أنت بحاجة إلى تعلم المزيد وعدم الإكتفاء بالدورة والأمر بحاجة إلى وقت أكثر من أي مجال آخر. محلل بيانات (Data Analyst )، حيث ستتمكن من استخدام مهارات البرمجة الخاصة بك للتحليل واستخراج البيانات من مصادر متنوعة، ومعالجة البيانات، وإجراء التحليلات الإحصائية والتعلم الآلي باستخدام مكتبات Python مثل pandas و NumPy و scikit-learn. مطور odoo ستجد تفصيل أكثر هنا:
  11. في أغلب الأحيان ستجد السبب هو الذاكرة العشوائية، وهو أمر لا يتضح لك عند دراسة لغات مرتفعة المستوى مثل جافاسكربيت وبايثون والتي تقوم بتجريد الكثير من الأمور أي إخفائها عنك. السبب هو الـ Memory Offset أو إزاحة الذاكرة، حيث الذاكرة RAM شكلها كالتالي تقريبًا: العنوان: 1000 1001 1002 1003 1004 القيمة: 'H' 'e' 'l' 'l' 'o' وذلك عند تخزين المتغير: let str = "Hello"; فالكمبيوتر يحفظ أول حرف في عنوان أساسي base address مثلاً 1000 وللوصول لباقي الأحرف نستخدم الإزاحة: عنوان الحرف = العنوان الأساسي + الإزاحة (offset) أي ما يحدث في الخلفية عند كتابة str[0] : str[0] 1000 + 0 = 1000 str[1] 1000 + 1 = 1001 str[2] 1000 + 2 = 1002 لو بدأنا من 1 كنا نحتاج إلى تنفيذ طرح في كل مرة: str[1] 1000 + (1-1) = 1000 وتلك عملية زائدة لا حاجة إليها.
  12. آلية الإختبار هي كالتالي، بعد إنهاء 4 مسارات من الدورة على الأقل، أو الدورة بالكامل وذلك أفضل في حال كنتي مبتدئة، عليكِ رفع المشاريع التي قمتي بها بالدورة على حسابك في github، ثم التحدث لمركز المساعدة وإخبارهم أنك تريدين التقدم للإختبار وتوفير روابط المشاريع على github. ثم الإنتظار لبعض الوقت لحين مراجعة المشاريع وسيتم الرد عليك، وتحديد موعد لإجراء مقابلة، وبها يتم: إجراء محادثة صوتيّة لمدة 30 دقيقة يطرح المدرّب عليك أسئلة متعلّقة بالدورة والأمور التي نفّذتيها خلالها. يحدد لك المدرّب مشروعًا مرتبطًا بما قمت به أثناء الدورة لتنفيذه خلال فترة محددة تتراوح بين أسبوع إلى أسبوعين. إجراء محادثة صوتيّة أخرى لمدّة 30 دقيقة يناقش بها مشروعك وما نفذته وتطرح أسئلة خلالها. إن سارت على جميع الخطوات السابقة بشكل صحيح، تحصلين على الشهادة أو يرشدك المدرّب لأماكن القصور ويطلب منك تداركها ثم التواصل معنا من جديد. وبعد الحصول على الشهادة ستحصلين على المزايا التالية: إن لم تحصلين على عمل خلال 6 أشهر يغطي قيمة الدورة التي دفعتها، فسنعيد لك ما دفعتيه. موقع إلكتروني لمدة سنة مقدم من سنديان مع نطاق مخصص لعرض أعمالك وبناء تواجدك الرقمي على الإنترنت. اشتراك لمدة سنة في العضوية المميزة على منصة مستقل لمساعدتك على الانطلاق في العمل الحر وحصولك على أول عميل. استشارة توظيف فردية، وسيرة ذاتية احترافية من موقع بعيد تعزز فرصك في الحصول على الوظيفة التي تتطلعين إليها. بالنسبة لطريقة الدراسة ستجدين تفصيل هنا:
  13. الطريقة الحديثة حاليًا هي من خلال القالب النصي Template Literals، والصيغة الخاصة به هي علامة تنصيص مائلة ` ` تستطيع كتابتها بالضغط على حرف ذ أعلى اليسار في لوحة المفاتيح لكن قم بتحويلها إلى الإنجليزية أولاً. const newLineString = `Up up down down`; console.log(newLineString); وبدونها ستحتاج إلى استخدام رمز السطر الجديد n\ const newLineString = 'Up up\n down down'; console.log(newLineString); والأفضل القالب النصي، لأنه يسمح أيضًا بإضافة متغيرات لتكوين النص كالتالي: const name = 'mustafa' const newLineString = `Up up down down ${name}`; console.log(newLineString);
  14. دورة علوم الحاسب غير مخصصة لتعليمك مجال محدد في البرمجة من أجل سوق العمل، بل غرضها هو تأهيلك لتعلم البرمجة بشكل سليم ودخول سوق العمل بقوة، حيث أنك ستمتلك أفضلية بالطبع بسبب تعلمك لأساسيات البرمجة من خلال بايثون وجافاسكريبت وأيضًا علوم الحاسب والتي تتضمن التالي: أساسيات الحاسوب وعلومه والتفكير المنطقي وما هي الخوارزميات وكيف تفيد في البرمجة تطبيقات عملية على أساسيات التفكير المنطقي باستخدام بيئة سكراتش Scratch التفاعلية أساسيات أنظمة التشغيل المختلفة وكيفية تثبيت البرمجيات اللازمة للبرمجة عليها أساسيات سطر الأوامر في نظام لينكس، وشرح الأسس التي بني عليها النظام مع تطبيقها عمليًا أنظمة قواعد البيانات المختلفة، مع شرح تفصيلي للغة SQL للتعامل معها مبادئ أساسية في أنظمة قواعد البيانات NoSQL المفاهيم الأساسية التي تبنى فيها صفحات الويب مفاهيم أساسية في الشبكات والخوادم، وكيف يتم استقبال الطلبيات إلى الخادم والرد عليها مبادئ الحماية والأمان في الويب وبالتالي يصبح لديك قاعدة معرفة قوية ووعي ودراية بمجالات البرمجة، الأمر الذي يؤهلك للخطوة القادمة وهي إختيار مجال البرمجة الذي تريده، حيث سيتم توجيهك بعد إنتهاء الدورة وإجتياز الإختبار إلى كيفية تعلم المجال الذي تريده لدخول سوق العمل أو إقتراح مجالات ومنها الويب أو تطوير تطبيقات الهاتف أو مجال الواجهة الخلفية Back-End أو الجمع بين الواجهة الأمامية والخلفية لتصبح مطور Full-stack. وأيضًا ستجد نفسك قادر على حل المشكلات التي تواجهك ولديك مهارة التفكير المنطقي أي مستواك أفضل من أي شخص قام ببدأ المسار التعليمي في مجال معين دون تعلم الأساسيات. وبخصوص التوظيف وسوق العمل، فأرجو مناقشة ذلك مع مركز المساعدة وسيتم إرشادك لما يجب فعله.
  15. السلام عليكم و رحمة الله و براكاته أسمي مصطفى عمري 22 عاما , أنا من العراق, و أعتذر مقدماً لأن كلامي سوف يكون طويل : في سنة 2025 قررت دراسة الذكاء الاصطناعي أولاين لأنني لم استطع دخول الجامعة بسبب الحالة المادية , لذالك في يوم 19/4/2025 قررت دراسة لغة بايثون عند أبراهيم عادل لان لغة بايثون هي العمود الفقري للذكاء الاصطناعي أكملت تقريبا 13 ساعة فيديو , أي أكملت المستوى الاول , وبعدها قررت الدخول في دورة أكاديمية حسوب الخاصة بالذكاء الاصطناعي لانها أكبر دورة في الوطن العربي لكن لم أستطع لأن أكثرية المصارف العراقية عليها عقوبات لذالك لم استطع . لذالك قررت دراسة الذكاء الاصطناعي من اليوتيوب في يوم 10/9/2025 لكن بعد فترة وجدت نفسي مشتت لان في اليوتيوب لا يعلمونك ان تكتب كود عملي او مشروع حقيقي , لذالك قررت الذهاب الى منصة كورسيرا و بحثت عن دورات خاصة بالذكاء الاصطناعي و وجت و حصلت عليها مجانا لكن كانت الدورات عبارة عن دورات نظرية عن التعلم الالي الذي يقدمها الاب الروحي للذكاء الاصطناعي أندرو نيك , وعندما أكملتها و حصلت على الشهادة فهمت الكثير الكثير لكن نظريا و ليس عمليا, أكملت تقريبا 23 ساعة فيديو , وهذه 23 ساعة ما عدا دورات اليوتيوب التي تفوق هذا الرقم بكثير , و في يوم من الايام وجدت طريقة للدفع عن بعد ,لذالك قمت بشراء دورة أكاديمية حسوب الخاصة بالذكاء الاصطناعي في يوم21/1/2026 لكن دورة أكاديمية حسوب دورة ضخمة لا أستطيع تكملتها كلها لانني منذ 7 أشهر كنت ادرس على اليوتيوب و درست لغة بايثون أيضا و درست دورة التعلم الالي من كورسيرا كنت ادرس يوميا تقريبا بدون تقطع من 3 ساعات الى4, لذا لا استطيع تكملة دورة من الصفر ,لذا قررت الدخول في أختصاص معين من الدورة و هي أكمال خمس مسارات من الدورة : وهي : 1- أساسيات بايثون2-تطبيقات عملية على النماذج LLMs النصية الكبيرة 3- Data Analysisتحليل البيانات 4-التعامل مع البيانات 5- إنشاء وكلاء ذكاء اصطناعي باستخدام MCP أي بمعنى أختص فقط في بناء وكلاء ذكاء اصطناعي MCP . هل هذا التخصص كافي لكي أستطيع الحصول على عمل , لانني متأكد من أنني لا استطيع تكملة الدورة في الوقت الحالي فقط اكمال هذه المسارات الخمسة التي ذكرتها , أرجو منكم أعطائي نصيحة من القلب و شكراً و أعتذر مجدداً على أطالة الكلام .
  16. السلام عليكم ورحمة الله، يمكنك استخدام Template Literals وهي وضع النص بين العلامتين التاليتين ` ` حيث تسمح هذه الطريقة بضغط زر Enter داخل الكود لينتقل النص فعليا لسطر جديد أو يمكنك استخدام علامات الاقتباس العادية مع إضافة الرمز \n في المكان الذي ترغب ببدء السطر الثاني منه، وهو رمز برمجي يعبر عن سطر جديد فمثلا بكتابة: `"Up up\ndown down"` عند الطباعة سيقوم بفصل الكلمتين ووضعهما تحت بعضهما البعض تماما كما تريد.
  17. كيف يمكننى عمل string باستخدام js واريد طباعة جزء من string فى السطر الاول والجزء الاخر فى السطر الثانى "Up up down down" return 'up up down down'
  18. وعليكم السلام ورحمة الله، السبب الأساسي هو أن الفهرس يمثل المسافة من بداية المصفوفة في الذاكرة تخيل أنه عندك صف من الصناديق بحيث أن أول صندوق موجود عند نقطة البداية بالضبط، يعني المسافة من البداية = صفر أما الصندوق الثاني بعيد عن البداية بمسافة صندوق واحد يعني المسافة = 1، وهكذا. لما الكمبيوتر يبحث عن عنصر في الذاكرة ييحسب موقعه كالتالي: عنوان البداية + الفهرس. لكن لو بدأنا من 1 بدل 0، الكمبيوتر سيضطر أن يطرح 1 في كل مرة لكي يصل للموقع الصحيح، وهذا سيبطئ البرنامج كما أنه عندما تعمل loop مثل for(i=0; i<10; i++) فأنت ستكرر بالضبط 10 مرات من 0 ل 9 وهذا منطقي رياضيا. فاللصفر سيترك الحسابات أبسط وأسرع وهذا السبب الذي جعل معظم لغات البرمجة تستخدمه.
  19. نعم هناك أسباب منطقية منها أن الـ Index هو إزاحة وليس ترتيب بمعنى عندما تكتب string[0]، فإن الرقم 0 هنا لا يعني "العنصر الأول"، بل يعني "كم خطوة أبتعد عن البداية؟". وأيضاً أسباب تاريخية حيث كان هذا الترتيب يساهم في سرعة الحساب في الذاكرة في لغة مثل ال c ولذلك للتفصيل أكثر يرجى الإطلاع على التعليقات التالية
  20. هل هناك سبب منطقى لبدأ العد من الصفر ؟ سؤال جاء فى عقلى وانا استخدم index string[0]
  21. ماذا استطيع ان عمل في سوق الحر بعد انهاء دورة علوم كبيوتر
  22. وعليكم السلام، هنا في: "Hello + 5*10" كل ما بين علامتي الاقتباس يعتبر نصا حرفيا فلا تنفّذ 5*10 كعملية رياضية بل تطبع كما هي داخل السلسلة فيكون الناتج "Hello + 5*10" أمّا في التعبير: Hello" + 5*10" فليس كله داخل string أولا تنفّذ عملية الضرب [5*10] فتُعطي العدد 50 لأن * له أسبقية أعلى من + بعدها يُطبَّق عامل الجمع + بين "Hello" (string) و 50 (number) وقاعدة عامل + في جافاسكربت تقول أنه إذا كان أحد الطرفين string يتم تحويل الطرف الآخر إلى string ويتم الدمج، فيتحول 50 إلى "50" وينتج "Hello50".
  23. ذلك الأمر يتحكم به ما يسمى بتحويل الأنواع بمعنى أنه في المثال "Hello" + 5*10 * لها أولوية أعلى من +، فتحسب 5*10 أولاً وتحصل على 50. الآن التعبير أصبح: "Hello" + 50 هنا ال Type Coercion (تحويل الأنواع) عملية جمع بين نوعين مختلفين: string وnumber. قاعدة JavaScript هنا واضحة: إذا كان أحد طرفي + نصاً، يتحول الطرف الآخر إلى نص تلقائياً، وتصبح العملية دمج نصوص (concatenation) لا جمعاً رياضياً. فتتحول 50 إلى "50" ويصبح الناتج "Hello50". وإذا كان السؤال خاص بأحد دروس الدورات فيرجى طرحه أسفل الدرس
  24. بخصوص جمع string مثل "Hello " + "World" هذا سهل وبسيط وواضح لكن فى "Hello + 5*10" ترجع 'Hello + 5*10' المثال التالى ايضا "Hello" + 5*10 ترجع Hello50 كيف ل جافا اسكريبت ان تفكر وتتعامل مع مثل هذا البيانات؟
  25. الإستفادة من شهادة أكاديمية حسوب سواء في الدول العربية أو بالخارج يعتمد على العديد من العوامل فمثلاً في هذا المجال يتم التركيز أكثر على المهارات والخبرة التي لديك والمشاريع التي قمت بها ومعرض الأعمال لديك وعند الحصول على الشهادة من أكاديمية حسوب سيكون لديك المهارات الكافية وسيرة ذاتية جيدة حيث أنه يتم الإختبار والتأكد من تنفيذ المشاريع كما أنه يوجد مشروع تخرج للحصول على الشهادة
  26. بالإضافة للشرح الرائع في التعليقات السابقة يمكنك الاستفادة من المميزات التالية التي تحسن من تجربة المستخدم أولاً بالنسبة للتنقل في الموقع فهناك بعض المميزات المهمة مثل زر "العودة للأعلى" الذي ذكرته مثال ممتاز على تحسين تجربة المستخدم Breadcrumbs في المواقع ذات الصفحات المتعددة حتى يعرف المستخدم أين هو تمييز الرابط النشط في القائمة بوضوح وبالنسبة للنماذج النماذج (Forms) عند الضغط على زر إرسال، يجب أن يرى المستخدم شيئاً يحدث (Loading spinner، رسالة نجاح، أو خطأ واضح) التحقق الفوري inline validation بدلاً من انتظار الإرسال رسائل خطأ واضحة وقريبة من الحقل المعني حفظ بيانات النموذج إذا حدث خطأ حتى لا يُعيد المستخدم الكتابة
  27. السلام عليكم، بداية فالدورة تركز على أساسيات اللغة مع أطر العمل الرئيسية مثل Django لتطوير تطبيقات ويب كاملة مثل المتاجر الإلكترونية وربط خدمات الدفع المختلفة وذلك لبناء واجهات برمجية REST APIs سريعة وفعالة، بالإضافة إلى التعامل مع قواعد البيانات والملفات والأتمتة لذا فبعد إنهائنا ستكون مؤهلا لتكون مطور Python في مجال Backend حيث يعد Django الخيار الأمثل للمشاريع الكبيرة القابلة للتوسع بفضل مزاياه الجاهزة مثل ORM والأمان التلقائي بينما Flask يناسب ال APIs الخفيفة والمخصصة. لكن تبقى كلمة السر للاحتراف تكمن في الاجتهاد وفهم الدروس وتطبيقها بشكل جيد وفي الاستمارية وعمل المشاريع حتى بعد إنهاء الدورة وليس مجرد إنهائها من أجل الحصول على الشهادة. لكن مع ذلك فإن الدورة مصممة لتحويلك إلى مطور قادر على العمل فورا في شركات الويب والأتمتة دون خبرة سابقة مع ضمان استعادة الاستثمار خلال 6 أشهر إذا لم تحصل على وظيفة، وهذا يتناسب تماما مع سوق العمل العربي والدولي الذي يطلب هذه المهارات بشدة لتطوير أنظمة الإدارة والتجارة الإلكترونية. لذا حاليا فنصيحتي هي في التركيز على دروس الدورة والتطبيق مع المدرب بشكل جيد، فمسيرة الألف ميل تبدأ بخطوة.
  28. بعد ما اخلص دورة تطوير التطبيقات باستخدام لغة Python اي الوظايف اللي ممكن اشتغلها ؟ هل هكون backend ولا full stack
  1. عرض المزيد
×
×
  • أضف...