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

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

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

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

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

2 متابعين

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

المعلومات الشخصية

آخر الزوار

167 زيارة للملف الشخصي

إنجازات عبد الوهاب بومعراف

عضو نشيط

عضو نشيط (3/3)

39

السمعة بالموقع

3

إجابات الأسئلة

  1. عملية التنبؤ بالمبيعات باستخدام تحليل السلاسل الزمنية، يمكننا أن نبدأ بهذه الطريقة، أولا نقوم بجمع بيانات المبيعات التاريخية التي تشمل التواريخ وكميات المبيعات، هذه البيانات يمكن أن تكون يومية، أسبوعية، أو شهرية. بعد جمعها، نبدأ بفهمها من خلال استعراضها ورسمها لرؤية الأنماط العامة مثل الاتجاهات والتغيرات الموسمية وأي تقلبات غير منتظمة. تفكيك السلسلة الزمنية يتضمن ثلاثة مكونات رئيسية وهي الاتجاه (Trend) الذي يمثل التغيرات طويلة الأمد، الموسمية (Seasonality) التي تعكس الأنماط المتكررة على فترات محددة مثل الزيادة في المبيعات خلال فصل الصيف، والتغيرات العشوائية (Noise) التي لا تتبع نمطا محددا. لتحليل وتفكيك السلسلة الزمنية، يمكننا استخدام أدوات برمجية مثل Python، في هذا السياق يمكن أن نستخدم مكتبة statsmodels لتفكيك السلسلة الزمنية من خلال قراءة بيانات المبيعات من ملف CSV، ثم استخدام seasonal_decompose لتفكيك السلسلة الزمنية وعرض النتائج باستخدام الرسوم البيانية. وبعد تحليل السلسلة الزمنية، نختار نموذجا مناسبا للتنبؤ. مثلا نموذج ARIMA أو (الانحدار الذاتي والمتوسط المتحرك) هو أحد النماذج الشائعة. ففي هذا النموذج، نقوم بإعداد النموذج باستخدام بيانات المبيعات، ثم التنبؤ بالمبيعات للأشهر القادمة وعرض التنبؤات. أهم مرحلة وهي تقييم النموذج بمقارنة التنبؤات مع البيانات الفعلية باستخدام مقاييس مثل MAE (متوسط الخطأ المطلق) أو RMSE (جذر متوسط مربعات الخطأ) لتحسين دقة النموذج. أما بالنسبة لتحليل المبيعات، يمكن أن يكون التحليل على مستوى المنتجات الفردية إذا كنا نهتم بأداء منتج معين، أو على مستوى التحصيلات الكلية إذا كنا مهتمين بالأداء العام للشركة من خلال اختيار مستوى التحليل الذي يعتمد على الهدف من التنبؤ.
  2. نعم، هي مناسبة ويمكن استخدامها لكتابة الأكواد وتنفيذها بسهولة دون الحاجة إلى إعداد برامج معقدة، فالنسخة المجانية تقريبا توفر كل ما تحتاجه للبدء في تعلم البرمجة والعمل على مشاريع صغيرة. وعندما تتقدم في مهاراتك وتحتاج إلى موارد أكبر أو وقت تشغيل أطول، يمكن التفكير في الاشتراك في الخدمات المدفوعة للحصول على ميزات إضافية. ولكن في البداية، النسخة المجانية ستكون كافية جدا لتعلم الأساسيات والقيام بمشاريع بسيطة. تصفح هذه المصادر لمعلومات أكثر حول Google Colab:
  3. يمكنك ضبط حجم واجهة Visual Studio Code بسهولة وإعادة تكبير أو تصغير الشاشة إلى الحجم الطبيعي باتباع الخطوات التالية: استخدام اختصارات لوحة المفاتيح: - لتصغير التكبير (Zoom Out): اضغط على `Ctrl` و`-`. - لتكبير الشاشة (Zoom In): اضغط على `Ctrl` و`+`. - لإعادة التكبير إلى الوضع الافتراضي (Reset Zoom): اضغط على `Ctrl` و`0`. استخدام قائمة العرض (View Menu): - اذهب إلى شريط القوائم في الأعلى واختر View. - من القائمة المنسدلة، اختر Appearance. - هنا ستجد خيارات مثل Zoom In و Zoom Out , Reset Zoom. يمكنك إيجاد العديد من الاختصارات التي ستفيدك من هنا:
  4. حسنا هذا مثال باستخدام مكتبة Smarty. لنبدأ أولا بصفحة تعديل القالب التي ستسمح للمستخدم بتحرير محتوى ملفات القالب من خلال لوحة التحكم. <?php require_once('init.php'); $template = isset($_GET['template']) ? $_GET['template'] : 'default'; $templateDir = __DIR__ . "/templates/{$template}"; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $filepath = $templateDir . '/' . $_POST['file']; file_put_contents($filepath, $_POST['content']); echo "Template updated successfully!"; } $files = array_diff(scandir($templateDir), ['..', '.']); $selectedFile = isset($_POST['file']) ? $_POST['file'] : (reset($files) ?: ''); ?> ولتثبيته هذا مثال عليه: <!DOCTYPE html> <html> <head> <title>Edit Template</title> </head> <body> <h1>Edit Template: <?php echo htmlspecialchars($template); ?></h1> <form method="get"> <label for="template">Select Template:</label> <select name="template" id="template" onchange="this.form.submit()"> <?php $templates = array_diff(scandir(__DIR__ . '/templates'), ['..', '.']); foreach ($templates as $tpl) { echo "<option value='{$tpl}'" . ($tpl == $template ? ' selected' : '') . ">{$tpl}</option>"; } ?> </select> </form> <form method="post"> <label for="file">Select File:</label> <select name="file" id="file" onchange="this.form.submit()"> <?php foreach ($files as $file) { echo "<option value='{$file}'" . ($file == $selectedFile ? ' selected' : '') . ">{$file}</option>"; } ?> </select> <br> <textarea name="content" rows="20" cols="80"><?php echo htmlspecialchars(file_get_contents($templateDir . '/' . $selectedFile)); ?></textarea> <br> <input type="submit" value="Save"> </form> </body> </html>
  5. Matplotlib هي مكتبة رسم بياني في بايثون تقدم تحكما دقيقا في تفاصيل الرسوم البيانية وتتيح مرونة كبيرة في التخصيص، كما يمكن استخدامها لإنشاء رسوم بيانية بسيطة ومعقدة وتدعم مجموعة واسعة من الأنواع مثل الخطوط والأشرطة والدوائر وحتى الرسوم البيانية ثلاثية الأبعاد. في حين أن Seaborn مبنية على Matplotlib وتستخدم لإنشاء رسوم بيانية أكثر تعقيدا وجمالية بشكل أسهل وتأتي بأنماط جاهزة تجعل الرسوم البيانية أكثر جاذبية وتوفر دوال مدمجة لإنشاء الرسوم البيانية الإحصائية بسهولة. كما أنها تتكامل بسهولة مع مكتبة Pandas، مما يجعلها مناسبة لتحليل البيانات والاستكشاف في النهاية فإن اختيار المكتبة يعتمد على احتياجات المشروع، فإذا كنت بحاجة إلى تخصيص دقيق، فإن Matplotlib هي الأفضل، أما إذا كنت تريد سهولة في الاستخدام ورسوم بيانية جميلة بسرعة، فإن Seaborn هي الخيار الأنسب.
  6. إذا بدأت بدورة علوم الحاسوب وليس لديك خبرة سابقة، نعم يمكنك دخول سوق العمل بعد الانتهاء منها بشرط أن تكون الدورة شاملة وتغطي الأساسيات مثل البرمجة وهياكل البيانات والخوارزميات. مسألة الدخول لسوق العمل برأيي أنه لا يحتاج اكتساب خبرة كبيرة، فيمكن البدء من خلال العمل على مشاريع صغيرة نجد أنفسنا قادرين على حلها ثم التدرج شيئا فشيئا وبالطبع سنتعلم أكثر من خلال المشاريع التي ننجزها. من المهم أيضًا أن تطبق ما تتعلمه من خلال مشاريع عملية وتبقى على اطلاع بالتطورات الجديدة في المجال. الخبرة العملية، سواء من خلال التدريب أو العمل بدوام جزئي، ستساعدك كثيرا. وإذا وجدت نفسك مهتما بمجال معين بعد الانتهاء من الدورة، يمكنك متابعة التعلم في هذا المجال لتزيد من فرصك في الحصول على وظيفة مناسبة مستقبلا، فهذه الدورة يبدو أنها ضرورية لدخول الدورات الأخرى وتعلمها. يمكنك مراجعة الاستفسارات والإجابات حول دورة علوم الحاسوب من هنا:
  7. العديد من المواقع توفر إمكانية تصميم صفحات ويب باستخدام قوالب جاهزة، وتتيح لنا أيضا تحميل الكود الخاص بالموقع بعد الانتهاء من التعديلات. من بين هذه المواقع، موقع Wix وهو أحد الخيارات الشهيرة، حيث يمكن استخدام واجهة مستخدم بديهية وسهلة لتصميم الموقع دون الحاجة إلى كتابة أي كود وبعد الانتهاء من تصميم الموقع، يمكن تصديره كملفات HTML وCSS وJavaScript. Squarespace هو الآخر يقدم خدمة مماثلة، حيث يتيح استخدام مجموعة من القوالب الاحترافية التي يمكن تخصيصها بسهولة. بعد تصميم الموقع، يمكن نشره مباشرة أو تصديره للاحتفاظ بنسخة من الكود. WordPress غني عن التعريف وهو يعتبر منصة مرنة للغاية، خصوصا عند استخدام إضافات مثل Elementor أو Divi. فهذه الإضافات توفر واجهات سحب وإفلات تتيح تصميم الموقع بدون كتابة كود. بعد الانتهاء، يمكن تصدير الكود الخاص بالموقع فإذا كنت تستخدم مكونات إضافية معينة تدعم هذه الخاصية. Bootstrap Studio هو تطبيق يمكن تنزيله، ويتيح تصميم مواقع باستخدام Bootstrap من خلال واجهة سحب وإفلات أيضا والعديد من المواقع تعمل بنفس المبدأ لأن استخدام هذه الأدوات يوفر الوقت والجهد لكن استخدامها قد لا يكون مناسبا عندما تحتاج إلى تخصيصات متقدمة جدا أو تفاعلات معقدة لا تستطيع هذه الأدوات توفيرها بشكل كامل. فإذا كان الأداء الأمثل هو هدف رئيسي، فقد تنتج هذه الأدوات كودا غير فعال مما يؤثر سلبا على سرعة وأداء الموقع. ففي المشاريع التي تتطلب توافقا مع أنظمة أو متصفحات قديمة، قد يكون من الضروري كتابة الكود يدويا لضمان التوافق الكامل. أما بالنسبة للمشاريع التي تتطلب مستويات عالية من الأمان، الاعتماد على أدوات التصميم بدون كود قد يكون غير كاف لضمان كل متطلبات الأمان الضرورية.
  8. أنصحك باتباع خطة تتضمن الاستماع للدرس مرة واحدة بتركيز ثم تدوين الملاحظات، وبعد الانتهاء من الدرس، تقوم بتلخيص المفاهيم والدوال الرئيسية مع استخداماتها ثم افتح محرر الأكواد وابدأ في تجربة الدوال والأمثلة التي تم شرحها. مع محاولة تطبيق ما تتعلمه فورا لترسيخ المفاهيم وتثبيتها في ذهنك. لتحقيق أفضل النتائج، من المفيد البحث عن مصادر إضافية للتعلم. يمكنك الاعتماد على أكاديمية حسوب حيث توفر العديد من المقالات والمصادر من بينها: كما يمكنك استخدام موقع roadmap.sh للحصول على خارطة طريق مفصلة توضح المهارات والمفاهيم التي يجب تعلمها لتصبح مطور بايثون محترف فتلك الخارطة تقدم ترتيبا منطقيا للموضوعات وتساعد على تتبع تقدمك في التعلم وهذا رابطها: Step by step guide to becoming a Python developer in 2024
  9. أول خطوة نقوم بتنظيم ملفات القوالب وذلك من خلال إنشاء مجلد `templates` في جذر الموقع، ونضع بداخله مجلدات لكل قالب بحيث يكون لكل مجلد قالب يحتوي على ملفات `.tpl` الخاصة به هكذا: project_root/ |-- templates/ | |-- template1/ | | |-- header.tpl | | |-- footer.tpl | | |-- index.tpl | |-- template2/ | |-- header.tpl | |-- footer.tpl | |-- index.tpl |-- other_files_and_folders/ لإعداد نظام القوالب نستخدم مكتبة مثل Smarty لتسهيل الأمر، نقوم بتثبيتها من خلال ال Composer composer require smarty/smarty ثم نقوم بإعداد ملف php: require_once('vendor/autoload.php'); $smarty = new Smarty; $template = isset($_GET['template']) ? $_GET['template'] : 'default'; $templatePath = __DIR__ . "/templates/{$template}"; $smarty->setTemplateDir($templatePath); $smarty->setCompileDir('templates_c'); $smarty->setCacheDir('cache'); $smarty->setConfigDir('configs'); // Assign variables and display template $smarty->assign('name', 'Abdelouahab'); $smarty->display('index.tpl'); ثم نقوم بإنشاء صفحة في لوحة التحكم لعرض وتعديل ملفات القوالب بهذا الشكل: $templatesDir = __DIR__ . '/templates'; $templates = array_diff(scandir($templatesDir), ['..', '.']); foreach ($templates as $template) { echo "<a href='edit_template.php?template={$template}'>{$template}</a><br>"; } صفحة تعديل القالب: $template = isset($_GET['template']) ? $_GET['template'] : ''; $filepath = __DIR__ . "/templates/{$template}/index.tpl"; if ($_SERVER['REQUEST_METHOD'] === 'POST') { file_put_contents($filepath, $_POST['content']); } $content = file_get_contents($filepath); ?> <form method="post"> <textarea name="content" rows="20" cols="80"><?= htmlspecialchars($content) ?></textarea><br> <input type="submit" value="Save"> </form> ثم نضيف جدول في قاعدة البيانات لحفظ القالب المختار من قبل المستخدم: CREATE TABLE settings ( id INT AUTO_INCREMENT PRIMARY KEY, template VARCHAR(255) NOT NULL ); ثم نقوم بحفظ القالب: $template = $_POST['template']; $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password'); $stmt = $pdo->prepare("UPDATE settings SET template = ? WHERE id = 1"); $stmt->execute([$template]); ثم نستخدمه من خلال هذه الشيفرة: $stmt = $pdo->query("SELECT template FROM settings WHERE id = 1"); $template = $stmt->fetchColumn(); $templatePath = __DIR__ . "/templates/{$template}"; $smarty->setTemplateDir($templatePath); $smarty->assign('name', 'Abdelouahab'); $smarty->display('index.tpl'); وأخيرا في لوحة التحكم، نقوم بإضافة خيار لتحديد القالب الحالي من خلال إنشاء قائمة منسدلة (Dropdown) لاختيار القالب، وتحديث القيمة في قاعدة البيانات عند التغيير هكذا: $templatesDir = __DIR__ . '/templates'; $templates = array_diff(scandir($templatesDir), ['..', '.']); echo "<form method='post'>"; echo "<select name='template'>"; foreach ($templates as $template) { echo "<option value='{$template}'>{$template}</option>"; } echo "</select>"; echo "<input type='submit' value='Save'>"; echo "</form>"; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $selectedTemplate = $_POST['template']; $stmt = $pdo->prepare("UPDATE settings SET template = ? WHERE id = 1"); $stmt->execute([$selectedTemplate]); }
  10. بداية، ستحتاج إلى إنشاء نموذج Django يعبر عن البيانات التي تريد تخزينها لنفترض أنك تريد حفظ اختيار المستخدم في حقل يسمى 'choice' فأول خطوة كما ذكرنا هي إنشاء النموذج على النحو التالي في ملف `models.py`: from django.db import models class ChoiceModel(models.Model): CHOICES = [ ('option1', 'Option 1'), ('option2', 'Option 2'), ('option3', 'Option 3'), ] choice = models.CharField(max_length=10, choices=CHOICES) def __str__(self): return self.choice وهذا النموذج يحتوي على حقل يتضمن خيارات ثابتة يمكن للمستخدم الاختيار منها. ثاني شيء ستحتاج إلى إنشاء نموذج Form يعرض القائمة المنسدلة في HTML ننشؤه من خلال ملف forms.py على النحو التالي: from django import forms from .models import ChoiceModel class ChoiceForm(forms.ModelForm): class Meta: model = ChoiceModel fields = ['choice'] ولتوضيح الفكرة فهذا النموذج يستخدم النموذج الذي أنشأته في الخطوة السابقة لعرض القائمة المنسدلة في HTML. بعدها ستحتاج إلى إنشاء عرض أو (View) يعرض النموذج ويتعامل مع البيانات المرسلة من المستخدم ننشؤه في ملف views.py على النحو التالي: from django.shortcuts import render, redirect from .forms import ChoiceForm def choice_view(request): if request.method == 'POST': form = ChoiceForm(request.POST) if form.is_valid(): form.save() return redirect('success') else: form = ChoiceForm() return render(request, 'choice_form.html', {'form': form}) هذا العرض يتأكد من أن النموذج يتم عرضه بشكل صحيح ويتعامل مع إرسال البيانات فإذا كان الطلب من نوع POST يتم التحقق من صحة النموذج وحفظ البيانات في قاعدة البيانات لكن سنحتاج إلى إنشاء قالب HTML يعرض النموذج. يمكنك إنشاء هذا القالب في ملف choice_form.html داخل مجلد `templates` على النحو التالي: <!-- templates/choice_form.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Choice Form</title> </head> <body> <h1>اختر من القائمة المنسدلة</h1> <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">إرسال</button> </form> </body> </html>
  11. لحل المشكلة يمكنك تعطيل الكود في ملف 'AuthServiceProvider.php' مؤقتا حتى يتم إنشاؤه بنجاح أثناء عملية الترحيل والبذر لأنه يستخدم جدول 'permissions' كما هو موضح هنا: /* Permission::whereIn('name', ['edit-post', 'delete-post', 'add-post'])->get()->map(function($per) { Gate::define($per->name, function($user, $post) use ($per) { return $user->hasAllow($per->name) && ($user->id == $post->user_id || $user->isAdmin()); }); }); Permission::whereIn('name', ['edit-user', 'delete-user', 'add-user'])->get()->map(function($per) { Gate::define($per->name, function($user) use ($per) { return $user->hasAllow($per->name) && $user->isAdmin(); }); }); */ ثم قم بتشغيل الأمر التالي لإنشاء مفتاح التطبيق: php artisan key:generate ثم تأكد من إدخالك لمعلومات الاتصال الصحيحة في ملف `.env` مثلما هو موضح هنا: DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=اسم_قاعدة_بياناتك DB_USERNAME=اسم_مستخدم_قاعدة_بياناتك DB_PASSWORD=كلمة_مرور_قاعدة_بياناتك والآن يمكنك القيام بتشغيل الأمر التالي لترحيل الجداول وتعبئتها بالبيانات الأولية: php artisan migrate:fresh --seed وبعد الانتهاء من الترحيل والبذر بنجاح، افتح ملف `AuthServiceProvider.php` مرة أخرى وقم بإزالة التعليق عن الأسطر التي علقتها سابقا. Permission::whereIn('name', ['edit-post', 'delete-post', 'add-post'])->get()->map(function($per) { Gate::define($per->name, function($user, $post) use ($per) { return $user->hasAllow($per->name) && ($user->id == $post->user_id || $user->isAdmin()); }); }); Permission::whereIn('name', ['edit-user', 'delete-user', 'add-user'])->get()->map(function($per) { Gate::define($per->name, function($user) use ($per) { return $user->hasAllow($per->name) && $user->isAdmin(); }); }); وشغل المشروع مباشرة: php artisan serve ففي هذه العملية، قمنا بتعليق الكود مؤقتا لتجنب حدوث خطأ عند تشغيل الأوامر المتعلقة بتهيئة قاعدة البيانات. فالكود الذي يتم تعليقه يستخدم جدول permissions، وهو جدول لم يتم إنشاؤه بعد. تعليق الكود مؤقتا هنا سيسمح لك بإتمام عملية الترحيل والبذر بنجاح وبمجرد أن يتم إنشاء الجدول من خلال عملية الترحيل والبذر، يمكن إزالة التعليق وإعادة تفعيل الكود لتشغيله بشكل طبيعي.
  12. نعم، يمكنك استخدام منصات مثل Glide أو AppSheet أو Power Apps لتحويل ملف بصيغة Excel يحتوي على معادلات إلى تطبيق موبايل يعمل على نظام أندرويد. لتحويل ملفك باستخدام Glide، قم بتحويل ملف Excel إلى Google Sheets برفعه على Google Drive، ثم الذهاب إلى موقع Glide وإنشاء مشروع جديد بربطه بملف Google Sheets. لاستخدام Glide يمكنك التوجه للموقع موقع GLIDE والتسجيل باستخدام حساب Google ثم: الضغط على "New Project" لإنشاء مشروع جديد. اختيار "Google Sheets" كمصدر البيانات، ثم اختيار جدول البيانات الذي قمت بإنشائه سابقا. بعد ربط جدول البيانات، سيتم توجيهك إلى واجهة تصميم التطبيق في Glide. يمكنك تخصيص شاشات التطبيق، الأزرار، النماذج، والعناصر الأخرى حسب احتياجاتك. والتأكد من أن جميع البيانات والمعادلات تظهر وتعمل بشكل صحيح داخل التطبيق. بعد الانتهاء من تخصيص التطبيق، اختبره جيدا للتأكد من أن كل شيء يعمل كما هو متوقع فإذا كان كل شيء صحيحا، اضغط على "Publish" لنشر التطبيق وستتمكن من مشاركة رابط التطبيق أو رمز الاستجابة السريعة (QR code) للوصول إليه على جهاز أندرويد.
  13. الأغلب أن مشكلة الألوان عند الطباعة يمكن حلها من خلال ضبط إعدادات الطابعة على نوع الورق اللاصق الذي تستخدمه وهذا الإعداد موجود في خصائص الطابعة ضمن خيارات الطباعة مع تنزيل وتثبيت ملف تعريف الألوان المناسب للطابعة والورق اللاصق من موقع الشركة المصنعة للطابعة. هذا سيساعد الطابعة على معالجة الألوان بشكل صحيح. الأمر ثاني، وهو من خلال معايرة الشاشة لضمان عرض الألوان بشكل صحيح، يمكن القيام بذلك باستخدام أدوات المعايرة المدمجة في نظام التشغيل أو برامج متخصصة مثل X-Rite أو Datacolor. على نظام Windows، من خلال الذهاب إلى "لوحة التحكم" ثم "إدارة الألوان" واختيار "معايرة الشاشة". الحل الآخر الممكن من خلال تحويل الصورة إلى نموذج الألوان CMYK، حيث تستخدم الطابعات هذا النموذج للطباعة. في Adobe Photoshop، يمكنك القيام بذلك عن طريق الذهاب إلى "صورة" ثم "نمط" واختيار "CMYK". في Adobe Illustrator، اذهب إلى "ملف" ثم "نمط المستند" واختر "CMYK". مثل الصورة:
  14. عادة لا نقوم بالإجابة على أسئلة الامتحانات والاختبارية، سأحاول شرح الطريقة والكيفية لمساعدتك على حلها بنفسك، يمكنك البدء بأن تطلب من المستخدم إدخال رقم باستخدام input() وحوّله إلى عدد صحيح باستخدام int(). والتحقق من القسمة باستخدام معامل الباقي %؛ فإذا كان الرقم يقبل القسمة على 10، النتيجة ستكون num % 10 == 0، وإذا كان الرقم يقبل القسمة على 5، النتيجة ستكون num % 5 == 0. يمكنك جمع الشروط للتحقق من القسمة على 10 و5 معا باستخدام شرط مركب بـ and. وكتابة الشروط في الكود باستخدام if للتحقق من الشرط الأول، وelif للتحقق من الشروط الأخرى، وelse للحالة الأخيرة. وبناء على تلك الشروط، يمكنك طبع الرسالة المناسبة. ستساعدك هذه المصادر للتعلم بشكل أفضل: العمليات العددية في بايثون وهذه المقالة:
×
×
  • أضف...