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

عبد الوهاب بومعراف

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

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

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

كل منشورات العضو عبد الوهاب بومعراف

  1. تحتاج إلى حفظ البيانات المعدلة في قاعدة البيانات باستخدام مكتبة sqlite3 أو SQLAlchemy حيث بعد التعديل تضيف هذا السطر: heart.to_sql('cholesterol', conn, if_exists='replace', index=False) و تأكد من استبدال cholesterol باسم الجدول الصحيح في قاعدة البيانات، و الوسيط if_exists='replace' ستستبدل الجدول القديم بالبيانات الجديدة، أما إذا كنت تريد إضافة البيانات بدون استبدال الجدول، يمكنك استخدام if_exists='append'.
  2. الخطأ الذي تواجهه ناتج عن محاولة الوصول إلى phpMyAdmin باستخدام بروتوكول HTTP على منفذ 443، وهو المنفذ المخصص لاتصالات HTTPS المشفرة، يعني يجب استخدام HTTPS بدلا من HTTP عندما تحاول الوصول إلى المنفذ 443. لإصلاح هذا الخطأ، قم بتغيير العنوان في المتصفح ليكون: https://localhost/phpmyadmin بالتوفيق إن شاء الله.
  3. المشكلة لديك في مسار الملف، حيث يجب إضافة حرف r قبل النص لتحويله إلى سلسلة نصية خام بحيث يتجاهل بايثون علامات الهروب بهذا الشكل: heart = pd.read_sql(r"Data-Heart-Disease\heart.db") print(heart.head()) و أيضا تأكد من أنك تستخدم مكتبة pandas بشكل صحيح وتأكد من وجود قاعدة البيانات heart.db في المسار المحدد.
  4. الشهادات التي تقدمها الأكاديمية تعتمد على إتمام المتعلم للدورات التدريبية بنجاح بالإضافة إلى إجتياز الإختبار و الذي يكون عبارة عن مشروع يتم فيه تطبيق ما تعلمته، و الشهادة تشمل اسم الدورة، واسم المتعلم، وتاريخ الإتمام، ويمكن استخدامها لإثبات المهارات والمعارف المكتسبة أثناء الدورة. لكن غالبا الشركات لاتنظر كثيرا إلى الشهادة ومن أين حصلت عليها فالأهم هو الخبرة التي تلمكها ومعرض الأعمال الذي لديك والذي يؤكد للشركة مدى تعلمك، ومن خلال دورات الأكاديمية فأنت سوف تملك معرض أعمال لابأس به ويمكنك تطويره بنفسك مع الوقت.
  5. إن كان سؤالك متعلقا بإحدى الدورات أو بإحدى الدروس فأرجو في المرة القادمة وضع تعليقك أسفل الدرس في صندوق التعليقات المخصص لذلك، كي يتسنى لنا معالجة المشكلة التي تواجهها بشكل سريع وفعال أما بالنسبة للخطأ الظاهر في الصورة فهو خطأ في المسافة البادئة (IndentationError) ولغة بايثون حساسة للمسافات ورسالة الخطأ هذه: unindent does not match any outer indentation level تعني أن هناك خطأ في ترتيب المسافات أو علامات الجدولة (tabs) في السطر المحدد، والذي يُظهره الخطأ على السطر 5 لذا تأكد من أن جميع الأسطر مصطفة بشكل صحيح في الشيفرة كالتالي: my_num = 6 user_guess = input("Enter your guess: ") if not user_guess: print("You did not enter a number!") exit() if int(user_guess) > 0: user_guess = int(user_guess) if my_num == user_guess + 1 or my_num == user_guess - 1: print("So close!!!") elif my_num == user_guess: print("You win!!!") else: print("You lose!!!") else: print("Enter a positive number.")
  6. مسار تطوير واجهات المستخدم لا يُعنى بتدريس رياكت بشكل مفصل، يمكنك الاطلاع على محتوى دورة تطوير واجهات المستخدم من خلال هذا الرابط: دورة تطوير واجهات المستخدم ويتم تدريس إطار العمل رياكت بشكل مفصل في دورة تطوير التطبيقات بلغة جافا سكريبت ويمكنك التعرف على مساراتها ومحتوياتها من خلال هذا الرابط:
  7. حسب الصورة فالصفحة التي تحاول الوصول إليها غير موجودة فقد تكون إعدادات النشر (Publish Directory) غير صحيحة لذا يجب التأكد من أن إعداد "مجلد النشر" في إعدادات Netlify يتوافق مع مجلد بناء المشروع الخاص بك يجب أن يكون "مجلد النشر" هو build لذا تحقق من الإعدادات وتأكد من تعيين المجلد بشكل صحيح. كما أنه من المحتمل عدم وجود ملف index.html في المجلد الصحيح لذا تأكد من أن هناك ملف index.html في مجلد النشر المحدد، لأنه إذا كان الملف الرئيسي للموقع غير موجود في المجلد الذي تم تحديده للنشر فلن يتم عرض الموقع وسيظهر خطأ 404.
  8. أنصحك باستخدام Pandas لتحويل البيانات لأنه سيوفر لك الكثير من الوقت والجهد في معالجة البيانات، لأنه يوفر واجهة سهلة للتعامل مع البيانات، مما يجعل من السهل قراءة ملفات CSV وتحويلها كما يمكنك إجراء معالجة مسبقة للبيانات (مثل التنظيف، التحويل، والتصفية) باستخدام وظائف pandas قبل تخزينها في قاعدة البيانات. كما أن المكتبة متكاملة مع SQL يمكن استخدامها مع مكتبات مثل SQLAlchemy أو SQLite لكتابة البيانات إلى قواعد البيانات بسهولة.
  9. إذا كنت تقصد ديسكورد خاص بالأكاديمية فهو غير متوفر حاليا، و لكن يوجد منصة حسوب IO التي تحتوي على العديد من المجتمعات سواء خاصة بالبرمجة أو مجالات أخرى، يمكنك طرح تساؤلاتك و المشاركة بالمساهمات هناك و ستجد مستخدمين مهتمين بنفس المجال الذي تريد، أما إذا كنت تريد سرفرات خاصة بديسكورد يمكنك فقط البحث في جوجل على نوع السرفر الذي تريد و ستجد الكثير، فيوجد العديد من المواقع التي توفر سرفرات في أغلب المجالات على ديسكورد.
  10. حاليا يوجد في دورة الجافاسكريبت مسار خاص تطوير تطبيقات الأندرويد باستخدام React Native، و لكن نقدر اقتراحك بشأن دورة تطوير تطبيقات الأندرويد بلغة كوتلن، وسنقوم بإيصال طلبك إلى الإدارة، فإذا كان الطلب عليها كبير ستراجع الإدارة هذه النقطة و ربما ستتوفر في القريب العاجل.
  11. هندسة الشبكات بالطبع هي مطلوبة في الوقت الحالي ولها مستقبل واعد خاصة مع تزايد التحول الرقمي والاعتماد المتزايد على الحلول السحابية فالشركات اليوم لا تزال بحاجة إلى مهندسي شبكات لإدارة البنية التحتية الرقمية الخاصة بها وضمان أمانها واستمراريتها خاصة مع تزايد التهديدات الأمنية أين أصبح دور مهندسي الشبكات وأمن الشبكات ضروريا لحماية البيانات الحساسة. من بين الوظائف المتاحة يمكن أن نعدّد التالي: مهندس شبكات (Network Engineer): ويكون مسؤولا عن تصميم وإعداد وصيانة شبكات الحاسوب للشركات والمؤسسات وقد يتخصص البعض في مجالات مثل الأمن أو الشبكات اللاسلكية. مدير شبكات (Network Administrator): وهو الذي يدير الشبكات الموجودة في المؤسسات والشركات، بما في ذلك مراقبة الأداء، استكشاف الأخطاء، وإصلاحها، والتأكد من أن الشبكة تعمل بكفاءة. محلل أمان الشبكة (Network Security Analyst): هنا يقوم بالتركيز على حماية الشبكة من التهديدات السيبرانية ويعمل على تأمين البنية التحتية للشبكة. مهندس مراكز البيانات (Data Center Engineer): يتعامل مع إعداد وصيانة الخوادم والأنظمة في مراكز البيانات، والتي تشكل البنية التحتية الأساسية للعديد من الشركات. مهندس السحابة (Cloud Network Engineer): يعمل مع بنية الشبكات السحابية، مثل AWS، Azure، وGoogle Cloud، لضمان الربط والأداء والأمن في السحابة. بالنسبة للعلاقة، فلا توجد علاقة مباشرة بين علوم الحاسب وتطوير واجهة المستخدم من جهة وهندسة الشبكات من جهة أخرى فكل مجال يركز على جوانب مختلفة فعلوم الحاسب تتناول دراسة الخوارزميات، البرمجة، بنية الحوسبة، والذكاء الاصطناعي يمكن أن تعطيك فهما أساسيا لأنظمة التشغيل والبنية التحتية التي قد تفيدك في هندسة الشبكات، ولكنها ليست شرطا أساسيا لها، لهذا يمكنك دراسة كل مجال على حدة بناء على اهتماماتك وأهدافك لكن هذا لا يعني أن هذه المجالات ليست لديها بعض التداخلات في بعض المفاهيم الأساسية.
  12. لتحقيق هذا النوع من التحكم في الوصول عادة نقوم باستخدام كلا من نظام التوثيق (Auth) وMiddleware يمكن استخدام نظام التوثيق لتحديد من هو المستخدم (مدير أو طالب) وعادة ما يتم ذلك عند تسجيل الدخول بعد ذلك يمكنك تخزين نوع المستخدم في الجلسة أو في التوكن. كما يمكن استخدام Middleware للتحقق من نوع المستخدم قبل الوصول إلى أجزاء معينة من التطبيق فيقوم ال Middleware بفحص إذا كان المستخدم يمتلك الصلاحيات اللازمة للوصول إلى صفحة معينة أو تنفيذ إجراء معين. سأسترسل في الطريقة عبر مثال توضيحي، أولا تقوم بإنشاء Middleware للتحقق من نوع المستخدم: php artisan make:middleware CheckRole ثم داخله نضع التالي، وفي الأخير نعيد المستخدم الذي لا يمتلك أي صلاحيات إلى الصفحة الرئيسية: public function handle($request, Closure $next, $role) { if (auth()->check() && auth()->user()->role == $role) { return $next($request); } return redirect('/home'); } الخطوة التالية هي التسجيل في Kernel من خلال تسجيل Middleware في app/Http/Kernel.php هكذا: protected $routeMiddleware = [ 'role' => \App\Http\Middleware\CheckRole::class, ]; وهذا نموذج لاسخداماته في الRoutes: Route::group(['middleware' => ['role:admin']], function () { // المسارات الخاصة بالمدير }); Route::group(['middleware' => ['role:student']], function () { // المسارات الخاصة بالطالب });
  13. كل شيء ممكن لذا حاولي التركيز على التدريب العملي والمشاريع من خلال البحث عن فرص التدريب (Internships) في الشركات المحلية أو عبر الإنترنت فهذه الفرص تساعدك على تعلم كيفية العمل في بيئة مهنية والاستفادة من خبرة العمل ضمن الفريق مع الاهتمام ببناء ملف أعمال يعرض مشاريعك الشخصية والمشاريع التي شاركت فيها و يجب أن يتضمن ذلك مشاريع تستخدم لغة Python وC++ وبعض التقنيات الأخرى مثل تحليل البيانات، التعلم الآلي (Machine Learning)، أو الذكاء الاصطناعي (AI) بعدها شاركي أعمالك على GitHub وأنشئي حسابا على LinkedIn لعرض خبراتك ومهاراتك. ورحلة التعلم لا تنتهي لذا استمري في تعلم الأدوات والمنصات التي تستخدم في علم البيانات مثل NumPy، Pandas، Matplotlib، Scikit-Learn، TensorFlow، وPyTorch. يمكنك تجربة العمل ضمن منصات العمل الحر كمستقل وخمسات عبر هذه الروابط: مستقل و خمسات. العمل الحر مدونة مستقل و دروس و مقالات في العمل الحر أكاديمية حسوب كما يمكنك أيضا متابعة منصة بعيد فهي منصة تسمح للشركات بتقديم عروض للعمل عن بعد.
  14. وعليكم السلام. الـ int في لغة البرمجة هو نوع بيانات (Data Type)، ويمكن اعتباره class فكل نوع بيانات في بايثون، مثل int للأعداد الصحيحة، وfloat للأعداد العشرية، وstr للنصوص، يُعتبر كلاس. وبالتالي، يمكن إنشاء كائنات من هذه الأنواع لكنه ليس بدالة ونوع البيانات هذا يمثل الأعداد الصحيحة (integers) لهذا تم أخذ أول ثلاث أحرف int لتسمية هذا النوع ويستخدم لتخزين القيم العددية أما ال class فهي كائنات يمكن أن تحتوي على خصائص (attributes) وطرق (methods). أما الدالة فهي مجموعة من التعليمات التي تؤدي وظيفة معينة، ويمكن أن تأخذ مدخلات وتعيد نتائج. وهذه المقالة شاملة وتشرح جميغ الأنواع:
  15. بايثون تفسر الأوامر في وقت التشغيل مما يعني أن الكود يترجم سطر بسطر أثناء التنفيذ، و هذا يضيف طبقة إضافية من العمل بالمقارنة مع لغات تترجم بالكامل قبل التشغيل، كما أنها لغة ديناميكية مما يعني أنها تدعم تغييرات في وقت التشغيل مثل تغيير أنواع المتغيرات، و هذا يتطلب عمليات تحقق إضافية أثناء التشغيل. و اللغات المفسرة مثل بايثون تسهل عملية التطوير لأنها لا تتطلب وقت ترجمة طويل، حيث يمكن للمطورين تجربة الكود بشكل أسرع، و غالبا ما توفر مرونة أكبر في التعامل مع الكود، مثل القدرة على تشغيل الأوامر التفاعلية مباشرة، كما أنه ليس كل التطبيقات تحتاج إلى الأداء العالي الذي توفره اللغات المترجمة، في بعض الأحيان سهولة التطوير والصيانة تكون أكثر أهمية من سرعة التنفيذ، فكل نوع من اللغات له استخداماته ومميزاته بناء على احتياجات المشروع.
  16. حاول استخدام مكتبة time لتنفيذ تأخير، ومكتبة os لتنفيذ الأوامر، و يمكنك أن تبرمجه على حسب نظام التشغيل الخاص بك لأن الأمر يختلف بينهم بهذا الشكل: import os import time time.sleep(5) if os.name == 'nt': # ويندوز os.system('cls') else: # لينكس/ماك os.system('clear')
  17. بما أنك ما زلت في عمر 15 عاما، لديك الوقت لتطوير مهاراتك تدريجيا، فالذكاء الإصطناعي يعتمد بشكل كبير على بايثون و بالتالي يجب عليك تعلمه أولا و من ثم الإنتقال لهذا المجال، و بما أنك تعرف في الرياضيات، هذا جيد جدا، فالذكاء الاصطناعي يعتمد بشكل كبير على الرياضيات، خصوصا في مجال التعلم الآلي، فاستمر في تطوير مهاراتك الرياضية. بعد إنتهائك من دورة البايثون يمكنك الإنتقال إلى دورة الذكاء الإصطناعي و التي بدورها أيضا تحتوي على مسار خاص بالبيثون الذي سيساعدك على التقدم أكثر في هذا المجال، و ستتعلم بأسلوب عملي وشيق الخوارزميات والمفاهيم البرمجية وراء تحليل البيانات Data Analysis وتمثيلها مرئيا، وتعلم الآلة Machine Learning والتعلم العميق Deep Learning وغيرها، وستكون تجربتك التعليمية مرتكزة على ممارسة ما تتعلمه على مشاريع حقيقية تستخدم في سوق العمل؛ مما يؤهلك للمنافسة بقوة في هذا المجال.
  18. التعليم الجامعي قد يوفر لك أساسا قويا في العلوم الأساسية للهندسة البرمجية، مثل الخوارزميات، وهندسة البرمجيات، والتصميم المنطقي كما أن هذه المفاهيم الأساسية تستمر في تطبيقها في الممارسة المهنية، حتى لو تطورت التقنيات والأدوات. ولكن سوق العمل يتطلب مهارات عملية إضافية لا يتم تغطيتها بالكامل في الدراسة الجامعية، مثل خبرة العمل الفعلي، والتواصل، وحل المشكلات، وإدارة المشاريع لذا فإن الخبرة العملية والتدريب الإضافي مهمان لتطوير هذه المهارات. والتعليم الجامعي يعد بداية الرحلة المهنية فبعد التخرج ستحتاج إلى استمرار التعلم والتطور المهني عبر التدريب والتطوير الذاتي لأن التعليم الجامعي لا يمكن أن يوفر كل ما تحتاجه على الفور لسوق العمل. كما أن الشهادة الجامعية تعطيك الأساس والمصداقية المطلوبة لدى أصحاب العمل. ولكن عليك أيضا أن تواصل تطوير نفسك وإثبات قدراتك العملية. لذا فالخلاصة هي أن التعليم الجامعي يوفر لك أساسا قويا، ولكن عليك أن تكمل هذا التعليم بالخبرة والتطوير المستمر لتكون مهيئًا بشكل كامل لسوق العمل ويعد هذا هو الطريق الأمثل للوصول إلى النجاح المهني.
  19. إحدى الطرق تتمّ عبر إنشاء قاعدة بيانات SQL جديدة ثم إنشاء جدول جديد مطابق لتركيب بيانات ملف CSV الخاص بك مع التأكد من تحديد أنواع البيانات المناسبة لكل عمود عبر استيراد ملف CSV إلى جدول SQL: يمكنك استخدام أداة واجهة المستخدم الرسومية في قاعدة البيانات. استخدام أداة مثل phpMyAdmin أو SQLWorkbench. كتابة استعلام SQL لتحميل البيانات من ملف CSV إلى الجدول. ومن فوائد تحويل البيانات من CSV إلى SQL أنّ معالجة البيانات ستكون بكفاءة فقواعد البيانات SQL توفر إمكانيات أكبر في تخزين وإدارة البيانات مقارنة بملفات CSV، مما يسهل إجراء استعلامات واستخراج بيانات بحيث يمكّن من تعريف قيود وتأكيدات على البيانات لضمان سلامتها وصحتها وقواعد البيانات مصممة للتعامل مع كميات كبيرة من البيانات بكفاءة، بينما ملفات CSV لها قيود في هذا الجانب. بالنسبة للمشاريع الحقيقية، غالبا ما يتم استخدام قواعد البيانات SQL كمخزن رئيسي للبيانات، بينما قد تستخدم ملفات CSV لأغراض معينة كنقل البيانات أو التحليل الأولي وهذا كله يعتمد على طبيعة المشروع ومتطلباته. أما في مجال تعلم الآلة والتعلم العميق، يمكن استخدام ملفات CSV كمصدر أولي للبيانات لإجراء التحليلات والتجارب الأولية ومن ثم يمكن استيراد هذه البيانات إلى قواعد بيانات SQL لمزيد من المعالجة والتحليل المتقدم.
  20. أعتقد أنّ المشكلة قد تكون في طريقة بناء URL لطبقات الرادار والأقمار الصناعية هنا: var tileLayer = L.tileLayer(baseUrl + radarData.path + "/256/{z}/{x}/{y}.png", { opacity: 0.5 }); و var tileLayer = L.tileLayer(baseUrl + satelliteData.path + "/256/{z}/{x}/{y}.png", { opacity: 0.3 }); لذا يجب تعديل هذه الأسطر لتتوافق مع الصيغة الصحيحة لـ RainViewer API والصيغة الصحيحة هي: var tileLayer = L.tileLayer(baseUrl + radarData.path + "/{z}/{x}/{y}/2/1_1.png", { opacity: 0.5 }); و var tileLayer = L.tileLayer(baseUrl + satelliteData.path + "/{z}/{x}/{y}/2/1_1.png", { opacity: 0.3 }); وهذا وفقا لتوثيق RainViewer API وقد يكون السبب في عدم تحميل البيانات بشكل صحيح من API الخاص بـ RainViewer أو عدم إضافة طبقات الخريطة بشكل صحيح إلى عنصر الخريطة.
  21. وعليكم السلام. حاليا وفي الوقت الراهن لا توجد دورة مخصصة للأمن السيبراني، لكن يمكنك الاستفسار مباشرة مع مركز دعم الأكاديمية للاطلاع على أيّ جديد من هنا: مركز مساعدة أكاديمية حسوب. بداية عليك بتعلم اللغات البرمجية المهمة للأمن السيبراني كبايثون وتعلم مختلف أساسيات الشبكات كبروتوكولات TCP / IP و DNS و DHCP و HTTP و HTTPS و SSL / TLS ودراسة المفاهيم الأساسية للأمن السيبراني، ومنها أنواع الهجمات والأدوات المستخدمة فيها وكيفية تحليل الثغرات وإصلاحها وتحديد مجالات الأمن السيبراني التي تهمك والتخصّص فيها، مثل الهجمات الاجتماعية والاختراق والحماية من الفيروسات والبرمجيات الخبيثة وتطوير البرمجيات الآمنة جمعت لك بعض المقالات التي يمكن أن تفيدك في هذا المجال:
  22. لا داعي للقلق، فبعد إكمالك للدورة بإذن الله ستتمكن من العثور على فرص عمل، لأن الكثير من المشاريع التي تم تطويرها سابقا لا تزال تعمل على إصدارات أقدم مثل Laravel 9 والشركات عادة لا تنتقل فورا إلى أحدث إصدار من Laravel إلا إذا كانت هناك حاجة قوية لذلك، لذا ستجد بالتأكيد فرصا للعمل في مشاريع تستخدم إصدارات أقل. لكن هذا الأمر لا يعني أن نستغني عن مواكبة التحديثات والتطورات في هذه اللغة فحتى بعد إكمال الدورة قد يتمّ تحديثها من قبل فريق الأكاديمية وأنصحك بالاطلاع على أي تحديثات تطرأ بين الفينة والأخرى، حتى تكون جاهزا للتعامل مع أي مشروع جديد أو حتى لترقية المشاريع الحالية. التحديثات غالبا ما تأتي بتحسينات كبيرة كما أنّ معرفة الإصدارات الأحدث سيجعلك مرشحا أقوى في سوق العمل. كما أنّ فيديوهات الأكاديمية في قناة اليوتيوب تضع فيديوهات حول إختلافات هذه الإصدارات:
  23. دالة ToLower() يمكنك استخدامها فهي متوفرة ضمن فئة string وهذه الدالة تقوم بتحويل كل الحروف الكبيرة في السلسلة النصية إلى حروف صغيرة كما تريد، وهذا مثال على كيفية عملها: using System; class Program { static void Main() { string originalText = "HELLO WORLD!"; string lowerCaseText = originalText.ToLower(); Console.WriteLine("Original Text: " + originalText); Console.WriteLine("Lower Case Text: " + lowerCaseText); } }
  24. أرجو في قادم المرات إن كان سؤالك متعلقا بإحدى دورات الأكاديمية أن تقوم بإدراجه أسفل كلّ درس استصعب عليك فهمه أو لديك استفسار حوله، أين ستجد صندوقا للتعليقات مثل الذي هنا، يمكنك إرفاق مجلدات مشروعك أو لقطات شاشة وإرفاق الاستفسار الذي لديك وسنجيبك بكلّ صدر رحب. بالنسبة لسؤالك، فالرقم 1 الموجود في resolve(1) هو القيمة التي يتم تمريرها عند نجاح الـPromise وهذا الرقم هو الذي يتم إرساله عند استدعاء الدالة resolve بعد مرور الوقت المحدد (في هذه الحالة، بعد 1000 ميلي ثانية أو 1 ثانية). أما إذا قمت بحذف الرقم 1 تماما، فإن الكود قد لا يعمل كما هو متوقع، لأن الدالة resolve ستستدعى بدون أي قيمة وبشكل افتراضي، إذا لم تمرر أي قيمة إلى resolve، سيتم تمرير undefined. لذلك إذا كنت بحاجة إلى إزالة الرقم 1، عليك التأكد من أن الكود الذي يستخدم الـPromise قادر على التعامل مع القيمة undefined. مثلا في هذا المثال، resolve ستستدعى بدون أي قيمة أي بعد 1 ثانية وإذا كانت هناك عملية تعتمد على القيمة التي تمرر من resolve، قد تتعطل هذه العملية إذا لم تكن تتوقع الحصول على undefined: new Promise((resolve, reject) => { setTimeout(() => resolve(), 1000); })
  25. أرجو في قادم المرات إن كان سؤالك متعلقا بإحدى دورات الأكاديمية أن تقوم بإدراجه أسفل كلّ درس استصعب عليك فهمه أو لديك استفسار حوله، أين ستجد صندوقا للتعليقات مثل الذي هنا، يمكنك إرفاق مجلدات مشروعك أو لقطات شاشة وإرفاق الاستفسار الذي لديك وسنجيبك بكلّ صدر رحب.
×
×
  • أضف...