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

Mustafa Suleiman

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

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

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

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

    336

كل منشورات العضو Mustafa Suleiman

  1. من المفترض أن الكود الصحيح هو كالتالي، وأرجو منك مشاركة الكود هنا من خلال الضغط على علامة <> عند كتابة السؤال بدلاً من الصور وأيضًا كتابة الأخطاء التي تظهر لك، وإذا استمرت المشكلة، أرفق الكود الكامل لملف ProjectController.php public function index() { $projects = auth()->user()->projects; return view('projects.index', compact('projects')); }; public function create() { // كود إنشاء المشروع } والخطأ الثاني الخاص بـ undefined type Auth يظهر لك لأنه يجب عليك استيراد فصل Auth في ملف web.php قبل استخدامه، ويمكنك القيام بذلك باستخدام الكود التالي في بداية ملف web.php: use Illuminate\Support\Facades\Auth; يتم استدعاء هذا الكود لاستيراد الفصل Auth الذي يقدم وظائف المصادقة في Laravel.
  2. هناك طريقة أخرى لتعريف الدالة وهي Function Declaration دونّ الحاجة إلى تخزين قيمتها في متغير والتي تعرف باسم Function Expression. فعند استخدام طريقة Function Declaration يمكنك نداء الدالة بعد تعريفها بالشكل التالي: تتميز Function Declaration بأنها تعريف الدالة باستخدام الكلمة المحجوزة function واسم الدالة وقائمة المعاملات (إذا كانت الدالة تأخذ معاملات) وجسم الدالة بين الأقواس المنفتحة والمغلقة. على سبيل المثال: function myFunction(param1, param2) { // كود الدالة هنا } myFunction(1, 2) وبالطبع يجب كتابة اسم الدالة حتى تتمكن من ندائها وهنا اسم الدالة هو myFunction. ويمكن استدعاء الدالة التي تم تعريفها بواسطة Function Declaration في أي مكان في الكود، حتى قبل تعريفها، لأن الدوال التي تم تعريفها بهذه الطريقة ترفع إلى الأعلى (Hoisting) من قبل JavaScript. بينما Function Expression: تتميز بأنها تعريف الدالة بتعبير يتم تخزينه في متغير. في هذه الحالة، يمكن استخدام تعبير السهم (Arrow Function) أو الدالة المجهولة (Anonymous Function) لتعريف الدالة. على سبيل المثال: // Arrow Function Expression: const myFunction = (param1, param2) => { // كود الدالة هنا } // Anonymous Function Expression: const myFunction = function(param1, param2) { // كود الدالة هنا } يجب تعريف المتغير الذي يحتوي على الدالة قبل استخدامها في الكود، ولا يتم رفع هذا النوع من الدوال إلى الأعلى في JavaScript. يمكن استخدام كل من Function Declaration و Function Expression لتعريف الدوال في JavaScript، ويتوقف الاختيار على المطلوب والأسلوب الذي يسهل فهمه.
  3. في البداية أرجو منك، طرح كافة الأسئلة الخاصة بك المتعلقة بموضوع واحد في سؤال واحد هنا، فقد تم طرح أكثر من سؤال عن المصفوفات ويمكن جمعهم في سؤال واحد هنا. وتنويه آخر بخصوص الأسئلة الخاصة بك هي أسئلة إمتحانية ولا يتم تقديم كود كحل لها بل يتم شرح الخطوات التي تمكنك من تنفيذ ما تريدينه، وإذا واجهتي مشكلة في الحل يمكنك توفير الكود وسيتم مساعدتك في الحل. وهناك 5 أسئلة في الملف الخاص بك في المرفقات عن المصفوفات باستخدام لغة C# وهم كالآتي: اكتب برنامجا يطلب من المستخدم ادخال مصفوفتين من األعداد الصحيحة و يخزن في مصفوفة جديدة جميع عناصر المصفوفة األولى متبوعة بجميع عناصر المصفوفة الثانية. اكتب برنامجا يخزن المصفوفة التالية {3,3,2,2,1,1,1,3,2,1 {و يطلب من المستخدم ادخال رقم للبحث عنه ثم يطبع رقم اخر عنصر داخل المصفوفة يتواجد فيه الرقم الذي ادخله المستخدم و اذا لم يكن الرقم موجودا يطبع للمستخدم 0. اكتب برنامجا يطلب من المستخدم ادخال مصفوفة من األعداد الصحيحة و يطبع ثاني أكبر عنصر في المصفوفة. اكتب برنامجا يطلب من المستخدم ادخال مصفوفة من األعداد الصحيحة و يطبع العناصر األكبر من متوسط جميع العناصر في المصفوفة. اكتب برنامجا يطلب من المستخدم ادخال مصفوفة ثنائية األبعاد من األعداد الصحيحة ويعيد رقم الصف الذي يحتوي على أكبر مجموع خطوات حل السؤال الأول تعريف ثلاث مصفوفات، مصفوفتي الأعداد الأولى والثانية، ومصفوفة جديدة: طلب إدخال المصفوفة الأولى من المستخدم باستخدام دالة الإدخال Console.ReadLine(). تحويل الإدخال المدخل من النص إلى مصفوفة أعداد صحيحة باستخدام دالة التحويل Int32.Parse(). طلب إدخال المصفوفة الثانية من المستخدم باستخدام دالة الإدخال Console.ReadLine(). تحويل الإدخال المدخل من النص إلى مصفوفة أعداد صحيحة باستخدام دالة التحويل Int32.Parse(). تعيين قيم المصفوفة الأولى في المصفوفة الجديدة. تعيين قيم المصفوفة الثانية في المصفوفة الجديدة، بداية من المؤشر الذي يلي آخر عنصر في المصفوفة الأولى. عرض المصفوفة الجديدة للمستخدم باستخدام دالة الإخراج Console.WriteLine(). خطوات حل السؤال الثاني بتعريف مصفوفة من نوع الصحيح وتعبئتها بالقيم التالية: {3,3,2,2,1,1,1,3,2,1}. الطلب من المستخدم إدخال رقم للبحث عنه باستخدام دالة لقراءة الإدخال من المستخدم. البحث في المصفوفة عن الرقم المدخل باستخدام حلقة for. في حال وجود الرقم المدخل، احتفظ بالموقع الذي تم العثور فيه على الرقم. بعد الانتهاء من البحث، قومي بطباعة العنصر الذي يلي العنصر الذي تم العثور فيه على الرقم إذا كان الرقم موجودًا، وإذا لم يكن الرقم موجودًا قومي بطباعة 0. خطوات حل السؤال الثالث استخدام دالة Console.ReadLine() لطلب المصفوفة من المستخدم عبر واجهة الأمر الخاصة بالبرنامج. استخدام دالة Split() لتحويل السلسلة النصية إلى مصفوفة من الأعداد الصحيحة. إنشاء متغيرات مناسبة للحفاظ على العناصر الأكبر والثاني الأكبر في المصفوفة. استخدام حلقة تكرارية للمرور على جميع العناصر في المصفوفة ومقارنتها بالعناصر الأكبر والثاني الأكبر. إذا كانت العنصر أكبر من الأكبر ، فتحديث القيمة الخاصة بالأكبر والثاني الأكبر على التوالي. إرجاع القيمة الثانية الأكبر من المصفوفة باستخدام دالة Console.WriteLine(). خطوات حل السؤال الرابع استخدام الدالة Console.ReadLine() لطلب إدخال المصفوفة من المستخدم. استخدام الدالة Split() لتقسيم النص المدخل إلى مصفوفة من السلاسل. استخدام حلقة for لحساب مجموع جميع العناصر في المصفوفة. حساب متوسط العناصر في المصفوفة عن طريق قسمة مجموع العناصر على عددها. استخدام حلقة for مرة أخرى للبحث عن العناصر التي تزيد عن المتوسط، وإضافة هذه العناصر إلى مصفوفة جديدة. استخدام دالة Array.Sort() لفرز المصفوفة الجديدة. استخدام شرط if للتحقق من وجود عناصر أكبر من المتوسط، وإذا كانت الشرط صحيحة، فإنه يتم طباعة هذه العناصر. خطوات حل السؤال الخامس استقبال المصفوفة الثنائية الأبعاد من المستخدم عن طريق استخدام دالة الإدخال Console.ReadLine() وتخزينها في متغير مناسب. إنشاء متغير لتخزين القيمة القصوى لمجموع العناصر في الصفوف وتعيينه بالقيمة الأولى في المصفوفة. إنشاء متغير لتخزين رقم الصف الذي يحتوي على المجموع الأكبر وتعيينه برقم الصف الأول. البدء في البحث عن الصف الذي يحتوي على المجموع الأكبر. يتم ذلك بتكرار الخطوة الخامسة والسادسة حتى نصل إلى نهاية المصفوفة. إنشاء متغير مؤقت لتخزين مجموع العناصر في الصف الحالي. الحصول على مجموع العناصر في الصف الحالي بواسطة تكرار العناصر في الصف وإضافتها إلى المتغير المؤقت. التحقق إذا كان مجموع العناصر في الصف الحالي أكبر من المجموع الحالي. إذا كان الأمر كذلك ، فتعديل المجموع الأكبر ورقم الصف. بعد الانتهاء من البحث في جميع الصفوف ، يتم طباعة رقم الصف الذي يحتوي على المجموع الأكبر. يمكن ذلك باستخدام دالة الإخراج Console.WriteLine(). وإليك شروحات لتسهيل الأمر عليكي، أتمنى منك دراستها. واجب فصل المصفوفات.pdf
  4. باستطاعتك تشغيل ملفات الـBash script على أجهزة الأندرويد باستخدام تطبيقات مثل Termux و GNURoot Debian. فتلك التطبيقات توفر بيئة لينكس على الأندرويد، وتسمح لك بتشغيل العديد من الأوامر والأدوات التي تستخدمها على أجهزة الكمبيوتر الشخصي. وبالنسبة للتشغيل على أجهزة الويندوز واللينكس، يمكنك تشغيل ملفات الـBash script باستخدام Terminal أو Command Prompt. من خلال فتح Terminal أو Command Prompt وتشغيل الأمر bash تليه اسم الملف الذي تريد تشغيله مثل: bash myscript.sh حيث "myscript.sh" هو اسم الملف الذي تريد تشغيله. ويجب عليك التأكد من أن الـBash script الذي تحاول تشغيله قابل للتشغيل، ويمكنك تغيير صلاحيات الملف باستخدام الأمر chmod في حال لم يكن قابل للتشغيل.
  5. أرجو منك قراءة السؤال الخاص بك سابقًا فقد تم طرح نفس السؤال، وإذا كان لديك سؤال آخر لا تتردد في طرحه
  6. اسم النموذج المحدد app\models\user لم يتم كتابته بالحروف الأولى الكبيرة كما هو معتاد في لارافيل. بالإضافة إلى ذلك، يتعين عليك التأكد من أن اسم المسار المستخدم في النموذج صحيح، حيث يفترض أن يكون المسار إلى نموذج المستخدم app\Models\User بدلاً من app\models\user. لذا، يمكن إصلاح الخطأ بكتابة اسم النموذج بالحروف الأولى كما هو معتاد في لارافيل، وتصحيح المسار ليصبح app\Models\User على النحو التالي بحرف U كبير. $user = App\Models\User::find(1); بعد التعديل، يمكن إعادة تشغيل php artisan tinker وتحديد السجلات المطلوبة.
  7. المشكلة التي في الصورة تحدث بسبب وجود علامة تنصيص خاطئة في الكود الموجود في الملف app\Http\Controllers\ProjectController.php، والتي أدت إلى إعطاء رسالة خطأ بأنه تم توقع فاصلة منقوطة ";" بدلاً من علامة "}". حاول التحقق من السطر الذي يأتي بعد السطر 16، لمعرفة ما إذا كانت هناك أي أخطاء في الـ Syntax، وعليك التأكد من أن العلامات التنصيصية والفواصل المستخدمة في الأسطر السابقة تم وضعها بشكل صحيح، وخاصة في السطر 16 الذي يحتوي على دالة compact(). ويجب معرفة أنه يمكن أن يتسبب تفريط بعلامات التنصيص أو الفواصل في حدوث أخطاء في لغة PHP، لذا عليك التحقق من أن جميع العلامات التنصيصية والفواصل تم وضعها بشكل صحيح في الأماكن الصحيحة في الكود. وأنصحك بقراءة الأخطاء التي تظهر لك ثم البحث برسالة الخطأ على جوجل لمعرفة السبب، وأيضًا تفقد الأسطر التي يتم الإشارة لك بها في الخطأ مثل السطر 16 في الصورة، وإذا واجهت مشكلة لا تتردد في السؤال هنا.
  8. الأفضل النقاش هنا لتحقيق استفادة للجميع، وبخصوص سؤالك، لتتمكن من الوصول إلى قاعدة البيانات الموجودة على جهازك المحلي، يجب أن يكون لديك خادم backend تستطيع الوصول إليها. ويمكن القيام بذلك باستخدام تقنيات مثل Node.js و Express أو Django و Flask أو PHP. بعد ذلك ستحتاج إلى استخدام أي نظام إدارة قواعد البيانات مثل MySQL أو PostgreSQL أو SQLite والعديد من الخيارات الأخرى. ويمكنك تثبيتها على جهازك المحلي وإنشاء قاعدة بيانات جديدة واستخدامها كقاعدة بيانات خاصة بالتطوير الخاص بك، وأيضا إنشاء قاعدة بيانات مماثلة على الخادم الذي يتم استضافة موقعك عليه. وللمزامنة بين القاعدتين، يمكنك استخدام أدوات المزامنة المتاحة مثل برنامج pg_dump لنظام PostgreSQL أو mysqldump لنظام MySQL، بالإضافة لاستخدام خدمات الاستضافة التي توفر خدمات النسخ الاحتياطي والمزامنة الآلية. وباستطاعتك كتابة برنامج مخصص للمزامنة بين القاعدتين باستخدام لغة البرمجة التي تستخدمها في التطوير. مثال، سنستخدم Express.js لإنشاء نهايات (endpoints) API التي تتيح لنا الوصول إلى البيانات من قاعدة البيانات المحلية ومزامنتها مع خادم الويب البعيد. سنستخدم cron لتنفيذ العملية بشكل دوري: const express = require('express'); const mysql = require('mysql'); const axios = require('axios'); const cron = require('node-cron'); const app = express(); // اتصال بقاعدة البيانات المحلية const db = mysql.createConnection({ host: 'localhost', user: 'username', password: 'password', database: 'database_name' }); // اتصال بخادم الويب البعيد const remoteApi = axios.create({ baseURL: 'http://remote-server.com/api', timeout: 1000, headers: {'Authorization': 'Bearer YOUR_API_KEY'} }); // API endpoint لاسترداد البيانات من قاعدة البيانات المحلية app.get('/local-data', (req, res) => { db.query('SELECT * FROM table_name', (error, results) => { if (error) { throw error; } res.send(results); }); }); // API endpoint لإضافة البيانات إلى خادم الويب البعيد app.post('/remote-data', (req, res) => { remoteApi.post('/data', req.body) .then(response => { res.send(response.data); }) .catch(error => { console.log(error); }); }); // دالة لمزامنة البيانات function syncData() { db.query('SELECT * FROM table_name', (error, results) => { if (error) { throw error; } results.forEach(result => { remoteApi.post('/data', result) .then(response => { console.log(response.data); }) .catch(error => { console.log(error); }); }); }); } // cron job لتنفيذ مزامنة البيانات بشكل دوري cron.schedule('0 0 * * *', () => { syncData(); }); // تشغيل السيرفر app.listen(3000, () => { console.log('Server started on port 3000'); });
  9. لا مشكلة عزيزي، بخصوص جافاسكريبت، فإذا كان المقصود قسم المقدمة، فنعم هو قسم نظري للغة ومن المفيد مشاهدته بالطبع ولا يوجد تطبيق عملي به. أما بدايًة من قم أساسيات جافاسكريبت فيبدأ التطبيق العملي وكتابة الأكواد وأنصحك بالكتابة وراء المدرب، ولا تترك فيديو إلا قد قمت بكتابة الكود الخاص به، وبذلك ستتخلص من الكثير من المشاكل مستقبلاً بسبب المشاهدة السلبية وعدم كتابة الكود بنفسك، وحاول التغيير في الكود وتنفيذ أفكارك والبحث عن حلول للمشاكل أو طريقة لتنفيذ ما تريده. فستتعلم الكثير من خلال فعل ذلك، وليس بالمشاهدة والتطبيق بالحرف فقط، أي كل 5 فيديوهات مثلاُ قم بتعمل تحدي لنفسك بتنفيذ فكرة مختلفة أو إضافة شيء جديد أو خاصية جديدة في الكود.
  10. المشكلة تحدث بسبب عدم وجود مسار النطاق الافتراضي للتطبيق في الملف الذي تعمل عليه، ويمكن حل هذه المشكلة بإضافة الأمر use في بداية الملف، لتحديد مسار المجال الذي تعمل عليه النماذج: use App\Models\User; وفي هذه الحالة، يجب استخدام Models بدلاً من Model بسبب تغيير في الاسم في إصدارات Laravel الحديثة. وبعد ذلك، يمكنك استخدام الأمر التالي لاستدعاء النموذج User وجلب سجل واحد من قاعدة البيانات: $user = User::find(1); ويجب التأكد من أن الملف الذي تعمل عليه موجود في المجال المناسب لتطبيق Laravel وأنه يتم تشغيله من داخل مجلد التطبيق. كما يجب التأكد من أنه تم تشغيل الأمر من داخل مجلد التطبيق Laravel باستخدام منفذ الأوامر CMD.
  11. أهلا بك روجيه، إذا كان السؤال خاص بأحد دورات أكاديمية حسوب، أرجو منك طرح السؤال في المرة القادمة أسفل فيديو الدورة المتعلق بالسؤال. وبالنسبة لسؤالك، ما هي الفيديوهات التي شاهدتها؟ فإذا كانت مجرد شرح نظري ولا يوجد تطبيق عليه فلا مشكلة أبدًا، حيث يجب فهم الأمور النظرية لتنفيذ الأمور العملية على دراية وعلم وليس كتابة أكواد أو تنفيذ خطوات تم حفظها فقط. ويمكنك الاستزادة من خلال البحث عن الموضوع الذي تعلمته أو الأمور التي بحاجة إلى توضيح أو المزيد من الشرح بالنسبة لك، وأيضًا ربما تجد تطبيقات عملية على ما تعلمته.
  12. الإجابة التي تم ذكرها من قبل قيس مشكورًا، تحتوي على فكرة جيدة، وهي استخدام دالة clean() الموجودة في ال model الخاص بالمنتج للتحقق من أن الحد الأدنى المحدد للكمية التي يمكن طلبها لهذا المنتج قد تم الالتزام به. ولكن، هناك تحدي يحدث عند استخدام هذه الطريقة، وهو أن الخطأ لن يتم عرضه على الحقل المرتبط بالكمية، وإنما سيتم عرضه على النموذج بشكل عام. لذلك، يمكن استخدام مجموعة العناصر الإضافية (widgets) في Django، وتحويل الحقل المرتبط بالكمية إلى نوع IntegerField والتحقق من الحد الأدنى لهذا الحقل في العنصر الإضافي clean() الخاص به. فيما يلي مثال محدث للطريقة السابقة: from django import forms from django.db import models class Product(models.Model): product_number = models.PositiveIntegerField(unique=True) min_count = models.PositiveIntegerField() class ProductForm(forms.ModelForm): class Meta: model = Product fields = '__all__' count = forms.IntegerField(widget=forms.NumberInput(attrs={'min': '0'})) def clean_count(self): count = self.cleaned_data['count'] min_count = Product.objects.get(product_number=self.cleaned_data['product_number']).min_count if count < min_count: raise forms.ValidationError(f'The minimum count for this product is {min_count}.') return count في المثال، يتم استخدام Django form بدلاً من استخدام clean() في ال model، ويتم إنشاء عنصر إضافي (count) لإدخال الكمية، وتحويل الحقل المرتبط بهذا العنصر الإضافي إلى IntegerField. ثم التحقق من الحد الأدنى للكمية في clean_count()، وعرض الخطأ على الحقل المرتبط بهذا العنصر الإضافي.
  13. الخطأ في الصورة يشير إلى أنّ الدالة resources() في لارافيل تتطلّب مصفوفة كمدخل، ولكنها تستلم سلسلة نصية. ويمكن أن يحدث هذا الخطأ عندما تكتب الكود بشكل خاطئ أو عند إعطاء المتغير الخاص بالمصفوفة قيمة نصية بدلاً من مصفوفة. لذلك، يجب التحقق من كود routes/web.php للتأكد من أن الدالة resources() تتلقى مصفوفة كمدخل بدلاً من سلسلة نصية، كما يجب التأكد من أنّ المتغير الذي يحوي المصفوفة يتم تمريره بشكل صحيح إلى الدالة. على سبيل المثال، إذا كان كودك كالتالي: Route::resources('/projects', 'App\Http\Controllers\ProjectController'); يجب تغييره إلى: Route::resource('/projects', 'App\Http\Controllers\ProjectController'); ويتم استخدام الدالة resource() بدلاً من resources() لأنها تستلم مصفوفة واحدة بدلاً من مصفوفة متعددة كما هو الحال في resources().
  14. باستطاعتك إضافة خدمة الدفع Transfermate إلى مشروع Django الخاص بك باستخدام API Transfermate. أولاً، يجب عليك التسجيل في Transfermate والحصول على مفاتيح API الخاصة بك. يمكنك الحصول عليها من لوحة التحكم الخاصة بك في Transfermate. ثانياً، يمكنك استخدام مكتبة requests في Django لإرسال طلبات API إلى Transfermate. يمكنك إنشاء عملية الدفع باستخدام تعليمات API الموجودة في وثائق Transfermate. يمكنك إنشاء view في Django لإنشاء عملية الدفع. يجب عليك تضمين مفتاح API الخاص بك في الطلب وإجراء عملية التحقق من الأمان. بعد الحصول على رد من Transfermate، يمكنك استخدامه لتحديث حالة عملية الدفع في مشروع Django الخاص بك. وباستطاعتك استخدام مكتبات Transfermate في مشروع Django الخاص بك لتسهيل عملية الدفع، باتباع الخطوات التالية: تسجيل الدخول على موقع Transfermate والحصول على مفتاح API. تثبيت مكتبة Python Transfermate باستخدام pip عن طريق تشغيل الأمر التالي في سطر الأوامر: pip install transfermate إضافة Transfermate API key إلى ملف الإعدادات (settings.py) في مشروع Django الخاص بك: TRANSFERMATE_API_KEY = 'your_api_key_here' استيراد Transfermate API واستخدامه لإنشاء عملية دفع جديدة: from transfermate.api import TransfermateAPI api = TransfermateAPI(api_key=settings.TRANSFERMATE_API_KEY) payment_data = { 'recipient_currency': 'EUR', 'recipient_country': 'DE', 'amount': '1000.00', 'purpose': 'Test payment', 'sender_currency': 'GBP', 'sender_country': 'GB', 'sender_reference': '123456' } payment_result = api.create_payment(payment_data) في المثال، يتم استخدام Transfermate API لإنشاء عملية دفع جديدة بين حسابين بعملات مختلفة. يتم تمرير بيانات الدفع إلى create_payment() كمعلمة ويتم إرجاع نتيجة العملية في payment_result.
  15. كما ذكر عدنان الأمر طبيعي، ولكن لا أنصحك إطلاقًا بالتقدم إلى React دون القيام بمشروع أو إثنان باستخدام جافاسكريبت ويجب أن تكون المشاريع ذات حجم كبير وليس نماذج صغيرة. فأنا لا أريد لك أن تصبح مستخدم لإطار عمل بدلاً من أن تصبح متقن للغة جافاسكريبت، ففهم وإتقان اللغة بنسبة معينة، سيتيح لك التنقل بحرية بين إطارات العمل وستصبح مبرمج محترف يعتمد عليه وستزول من أمامك الكثير من العقبات. فالغالبية يقوم باستخدام الإطار ويصعب عليه الإنتقال إلى إطار عمل آخر فهو غير متقن للغة الأساسية للإطار وهي جافاسكريبت، فمثلاً لديك إطارات Vue.js و Angular.js وغيرها من إطارات JS. لذلك عليك بالبحث عن مشاريع برمجية على اليوتيوب باستخدام جافاسكريبت وقم بتنفيذها، والأفضل تنفيذ المشروع مرتين، مرة بالتنفيذ مع الشرح، ومرة أخرى بمفردك، فصدقني ستذهل من كم الأشياء التي أنت بحاجة إلى مراجعتها وتثبيتها في ذهنك. وهناك مثل قائل "تعب شهر ولا تعب سنة!" فقم بالإجتهاد في البداية وسترتاح فعلاً بعد ذلك، وستنسى أشياء لا مشكلة في ذلك ولا يوجد مبرمج يحفظ أو يتذكر كل شيء بل يعلم أنه يمكنه تنفيذ الأمر بخاصية ما في اللغة ويبحث عنها ليتذكر طريقة تنفيذها.
  16. أنصحك باستخدام Vite بدلاً من webpack فهو يستخدم إعدادات تلقائية لمعظم المشاريع القياسية ويتعرف تلقائيًا على معظم أنواع الملفات مثل HTML و CSS و JavaScript و JSON و PNG و SVG وغيرها، ويحل محل webpack في الغالب في مشاريع Vue.js و Svelte وReact. فكل ما تحتاجه هو التالي: npm init vite@latest والآن قم بإختيار المشروع الذي تريد العمل عليه، ومثلا Vanilla هنا تعني HTM,CSS, JS فقط بدون استخدام إطار عمل. والآن ستجد السكريبتات التالية تم إضافتها لملف package.json ومن خلال الأمر npm run dev ستتمكن من تشغيل مشروعك دون أية مشكلة.
  17. ماذكره لك عمر صحيح بالنسبة للاستخدام المباشر لقاعدة البيانات على الجهاز الخاص بك دون استخدام خادم backend، فعادة ما يتطلب الأمر الاتصال بقاعدة البيانات من خلال خادم backend الذي يستطيع الوصول إلى الجهاز والبيانات المحفوظة فيه. وبالفعل، يمكن استخدام خدمات الـ third-party مثل Firebase وغيرها لإنشاء قاعدة بيانات وتطبيقات backend بسرعة وسهولة، والتي يمكن الوصول إليها مباشرةً من الـ client. ولكن هذا يتطلب التعامل مع خدمات الـ third-party وفهم كيفية استخدامها، بالإضافة إلى الاعتماد عليها في تشغيل تطبيقك. وهناك حلول أخرى: 1- استخدام برامج إدارة قواعد البيانات المحلية مثل MySQL Workbench أو phpMyAdmin لإدارة قاعدة البيانات المحلية. 2- استخدام Node.js ومكتبة مثل SQLite للتواصل مع قاعدة البيانات الموجودة على جهازك وإجراء التعديلات اللازمة عليها. وبالطبع أنت بحاجة إلى خادم (server) مثبت على الجهاز الخاص بك لكي تتمكن من الاتصال بهذه القاعدة. ويمكنك استخدام خوادم مثل Apache أو Nginx لتنفيذ الخادم الخاص بك، ثم استخدام لغات السيرفرات الشائعة مثل PHP أو Node.js للاتصال بقاعدة البيانات. وبعد ذلك، باستطاعتك استخدام لغة البرمجة الخاصة بالواجهة الأمامية مثل JavaScript للوصول إلى هذه البيانات واستخدامها في تطبيقك.
  18. تسمح بتمرير الدوال كمعاملات للدوال الأخرى، ويتم استخدامها بشكل شائع في البرمجة الوظيفية والبرمجة الشيئية، وتمكنك من كتابة الأكواد بشكل أكثر جودة وإنتاجية. على سبيل المثال، يمكن استخدام الدوال كمعاملات لدوال أخرى لتحسين الكود وجعله أكثر قابلية للصيانة وإعادة الاستخدام، كما يمكن إنشاء الوظائف واستخدامها كقيم لمتغيرات أو خصائص، مما يتيح للمطورين إنشاء برامج أكثر مرونة وقابلية للتوسع. هذا مثال بسيط لإنشاء واستخدام وظيفة من الدرجة الأولى في جافاسكريبت: // إنشاء دالة من الدرجة الأولى function greet(name) { console.log('Hello, ' + name + '!'); } // استخدام دالة كمعامل لدالة أخرى function sayHi(callback) { callback('John'); } // استخدام الدالة كقيمة لمتغير const myGreet = greet; myGreet('Mary'); // استخدام الدالة داخل دالة أخرى sayHi(function(name) { console.log('Hi, ' + name + '!'); }); الدالة greet هي دالة بسيطة تستقبل اسم وتطبع رسالة تحيي بها الشخص الذي يحمل هذا الاسم. ثم يتم استخدام هذه الدالة كمعامل في دالة sayHi. هذا يعني أن دالة sayHi تتوقع دالة (أي تعامل معها بطريقة مماثلة لطريقة تعاملها مع البيانات) كمدخل لها. بعد ذلك، يتم استدعاء الدالة الممررة إلى sayHi، والتي تكون الدالة greet في هذه الحالة، مع إعطاءها اسم "John" كوسيط. في السطر التالي، يتم إنشاء متغير جديد باسم myGreet، والذي يشير إلى نفس الدالة greet. ثم يتم استدعاء دالة sayHi مرة أخرى، لكن هذه المرة يتم تمرير دالة جديدة كوسيط، وهي دالة تستقبل اسمًا وتطبع رسالة تحيا بها الشخص الذي يحمل هذا الاسم. يتم تمرير هذه الدالة باستخدام دالة callback التي تمرر دالة كمعامل. يتم استدعاء الدالة الممررة إلى sayHi مع إعطائها اسم "John" كوسيط. سيتم تنفيذ الدالة الممررة، والتي تمرر لها الاسم "John"، وسيتم طباعة رسالة تحيا بها الشخص الذي يحمل هذا الاسم.
  19. الأسئلة الإمتحانية لا يتم الإجابة عليها ولكن يمكن إرشادك لطريقة الحل. لحل السؤال الخاص بك، يمكن اتباع الخطوات التالية: إنشاء مكدس (Stack) خاص بالأقواس. تمرير النص الذي يحتوي على الأقواس إلى البرنامج. البحث عن الأقواس الافتتاحية " ( [ { " في النص وإضافتها إلى المكدس. البحث عن الأقواس الختامية " ) ] } " في النص ومقارنتها بالأقواس في أعلى المكدس. إذا كانت الأقواس الموجودة في النص متوازنة، سيتم إخراج جملة تفيد بأن الأقواس صحيحة، في حين إذا كانت غير متوازنة، فسيتم إخراج جملة تفيد بأن الأقواس غير صحيحة. الخطوات يمكن تنفيذها باستخدام كود جافا، باستخدام أساليب تضمن أن المكدس يتم التعامل معها بشكل صحيح، مثل دالة push() و pop()، حيث تتم إضافة الأقواس إلى المكدس عند العثور عليها في النص، وإزالة الأقواس من المكدس عند العثور على أقواس ختامية. في النهاية، يمكن فحص المكدس إذا كان فارغاً ليتم تحديد ما إذا كانت الأقواس متوازنة أم لا.
  20. لا يتم الإجابة على الأسئلة الإمتحانية ولكن يمكن إرشادك لطريقة الحل. العناصر المختلفة للمخطط الانسيابي هي: بداية البرنامج (Start) استلام الإدخال من المستخدم (Input) التحقق من صحة الإدخال (Decision) إذا كان الإدخال غير صالح ، فإنشاء رسالة خطأ (Process) إذا كان الإدخال صالحًا ، حساب المضاعفات الثلاثية بين الرقمين (Process) عرض المضاعفات الثلاثية (Output) نهاية البرنامج (End) ويمكن توضيح هذه الخطوات في المخطط الانسيابي النهائي للسيناريو كالتالي: Start | v Input | v Decision / \ / \ Invalid Valid Input Process | | v v Output Output | | v v End End وبالنسبة لخطوات كتابة الكود باستخدام جافاسكريبت: يتم استخدام دالة prompt() لاستقبال إدخال المستخدم. استخدام دالة parseInt() لتحويل النص الذي تم استلامه من المستخدم إلى رقم صحيح. التحقق من صحة الرقمين المدخلين عن طريق إجراء الاختبارات التالية: التحقق من أن الرقمين المدخلين هما رقمين صحيحين، وإلا فإنه سيتم عرض رسالة خطأ. التحقق من أن الرقم الأول أصغر من الرقم الثاني، وإلا فإنه سيتم عرض رسالة خطأ. استخدام حلقة for للعثور على جميع الأعداد بين الرقمين المدخلين. التحقق من كل عدد إذا كان مضاعفاً للعدد 3 باستخدام العملية الحسابية (العدد % 3 === 0)، إذا كان العدد مضاعفاً للعدد 3، فسيتم عرضه على الشاشة. ثم يتم إنهاء البرنامج.
  21. تتوافر الدالة Math.abs() في جافاسكريبت لعرض الأعداد بشكل موجب وسالب، حيث تعيد هذه الدالة القيمة المطلقة لأي عدد تم تمريره إليها، أي أنها تعيد العدد نفسه إذا كان إيجابيًا وتعيد نفس العدد ولكن مع اتجاه معاكس (سالب) إذا كان سالبًا. لذا، يمكن استخدام الدالة Math.abs() لعرض جميع الأعداد الموجودة في المصفوفة بشكل موجب كما يلي: for (let i = 0; i < arr.length; i++) { console.log(Math.abs(arr[i])); // طباعة العدد بشكل موجب } أما إذا أردت عرض الأعداد بشكل سالب، فيمكن استخدام العلامة "-" قبل العدد، كما يلي: for (let i = 0; i < arr.length; i++) { console.log(-arr[i]); // طباعة العدد بشكل سالب }
  22. الأسئلة الإمتحانية لا يتم الإجابة عليها ولكن يمكن إرشادك لطريقة الحل. بالنسبة لسؤالك، يمكنك اتباع الخطوات التالية: الحصول على النص المراد عكسه من المستخدم باستخدام مثلاً prompt() في JavaScript. تقسيم النص إلى مصفوفة من الأحرف باستخدام split()، وهذه الدالة تأخذ المحتوى الذي تم الحصول عليه في الخطوة السابقة وتحويله إلى مصفوفة. إنشاء مكدس stack باستخدام push() و pop()، يتم استخدام push() لوضع العناصر في المكدس، و pop() لإزالتها. يتم وضع الأحرف واحدة تلو الأخرى في المكدس باستخدام حلقة for أو while. يتم إزالة الأحرف من المكدس ووضعها في مصفوفة جديدة لعكس النص. يتم عرض المصفوفة الجديدة باستخدام دالة alert() أو console.log() في JavaScript. هذه هي الخطوات الأساسية لحل السؤال، ولكن يجب الانتباه إلى تفاصيل الكود والتأكد من اتباع معايير البرمجة المناسبة ومراعاة الأخطاء الشائعة مثل تجنب الحروف الكبيرة والصغيرة والتحقق من الأسماء المستخدمة للمتغيرات والدوال ومراجعة الحل بعد الانتهاء منه.
  23. يمكن إنشاء مصفوفة وملؤها باستخدام حلقة for في جافاسكريبت، وذلك كالتالي: let arr = []; // إنشاء المصفوفة الفارغة let start = 2; // الرقم الأول في المصفوفة let end = 100; // الرقم الأخير في المصفوفة for (let i = start; i <= end; i += 2) { if (i % 4 !== 0) { // تجاهل الأعداد المتعددة لـ 4 arr.push(i); // إضافة العدد للمصفوفة } else if (i % 4 === 0 && i % 100 === 0) { // إضافة الأعداد المتعددة لـ 100 arr.push(i); } } console.log(arr); // عرض المصفوفة في وحدة التحكم وباستطاعتك عرض جميع الأرقام في المصفوفة باستخدام حلقة for أخرى وطباعة كل عدد في الصفحة، كالتالي: for (let i = 0; i < arr.length; i++) { console.log(arr[i]); // طباعة العدد في وحدة التحكم // يمكن استخدام العدد في عمليات أخرى هنا }
  24. أهلا بك فاطمة، هل سؤالك بخصوص دورات حسوب، إذا كان كذلك، فالإجابةهي لا يوجد فترة محددة للإنتهاء من الكورس لكن الأفضل وضع جدول زمني والإلتزام به. وإذا كنت تتسائلين عن مدة تعلم البرمجة فقد تم الإجابة على ذلك هنا في النقاش التالي وأيضًا بخصوص دورات حسوب. كم من الوقت احتجت لتعلم أساسيات برمجة المواقع ؟
  25. سأحاول توضيح بعض الأمور لك. إطار العمل Hugo هو إطار عمل يستخدم لبناء مواقع الويب السريعة والآمنة والسهلة الصيانة. يتميز Hugo بكونه إطار عمل سريع وخفيف الوزن حيث أنه يستخدم لغة البرمجة Go والتي تعتبر من أسرع لغات البرمجة، ويستخدم Hugo أيضاً نظام تحديد الموقع الذي يعمل بشكل مشابه لـ WordPress ولكنه يوفر أداء أفضل وأمان أعلى. وإطار Hugo و React و Vue.js جميعها تقنيات تطوير الواجهات الأمامية Front-end، ولكن لكل منها فلسفة ومميزات مختلفة: فإطار Hugo هو إطار عمل موجه لإنشاء مواقع الويب الثابتة (static websites) بسرعة وسهولة. حيث يستخدم Hugo لغة الترميز Markdown والقوالب (templates) وتوفريه السرعة والأمان، حيث أن موقع الويب الثابت لا يتطلب قواعد بيانات ديناميكية، مما يتيح أداءً سريعًا وأمانًا أفضل، ويستخدم Hugo في العادة لإنشاء المدونات والمواقع الشخصية ومواقع الأخبار وما إلى ذلك. بينما React هو إطار عمل تم تطويره بواسطة Facebook وهو يستخدم تقنية تسمى "تجريد الواجهة" (interface abstraction)، والتي تسمح للمطورين ببناء مكونات الواجهة معيارية قابلة لإعادة الاستخدام، و يعتبر React واحدًا من أشهر إطارات العمل الحديثة ويستخدم في العديد من التطبيقات على الويب والجوال. أما Vue.js هو إطار عمل تم تطويره من قبل Evan You وهو يستخدم تقنية تسمى "تكوين المكونات" (component composition)، والتي تسمح للمطورين ببناء واجهات مستخدم مرنة وسهلة الصيانة، ويتميز Vue.js بالبساطة والسهولة في التعلم والاستخدام، كما أنه يعد أحد أسرع إطارات العمل في الأداء. الفرق الرئيسي بين هذه التقنيات هو الغرض الذي تستخدم له، فإطار Hugo يستخدم لإنشاء المواقع الثابتة، في حين يتم استخدام React و Vue.js لإنشاء تطبيقات الويب الديناميكية والمتطورة، ولكل منها فلسفتها الخاصة ومميزاتها في الأداء. وإليك شرح بسيط لأساسيات Hugo: 1- يمكنك إنشاء مشروع جديد في Hugo بالأمر التالي في محرر الأوامر: hugo new site mysite حيث "mysite" هو اسم المشروع الجديد. 2- إنشاء صفحة جديدة بالأمر التالي: hugo new posts/my-first-post.md حيث "posts" هو مجلد الصفحات و "my-first-post.md" هو اسم الصفحة. 3- يمكنك تنسيق الصفحات باستخدام لغة الترميز Markdown. على سبيل المثال، إذا كنت تريد إضافة عنوان للصفحة، يمكنك استخدام "#" مع النص الذي تريد إضافته، مثل هذا: # هذا هو عنوان الصفحة كما يمكنك إضافة النص بسهولة بدون تنسيق. 4- يمكنك إضافة قوالب إلى مشروعك بسهولة. قالب Hugo يستخدم لإنشاء الصفحات بشكل أوتوماتيكي. يمكنك إضافة قالب بإنشاء ملف HTML جديد في مجلد "layouts". على سبيل المثال، إذا كنت تريد إضافة قالب لصفحة الأرشيف، يمكنك إنشاء ملف HTML جديد بالاسم "archive.html" في مجلد "layouts". 5- باستطاعتك إضافة محتوى ديناميكي باستخدام قوالب Hugo. واستخدام متغيرات Hugo لإضافة محتوى ديناميكي. على سبيل المثال، إذا كنت تريد عرض عنوان الصفحة على الصفحة، يمكنك استخدام المتغير التالي: {{ .Title }} في المثال، يتم استخدام المتغير .Title لعرض عنوان الصفحة. وباستخدام هذه الطريقة يمكن إضافة المزيد من المحتوى الديناميكي، مثل المقالات، الصور، القوائم، والمزيد. 6- إضافة ملفات CSS و JavaScript الخاصة بك في Hugo عن طريق إنشاء مجلد static ووضع الملفات داخله. بعد ذلك، يمكنك استخدام الرمز التالي لربط ملف CSS بصفحات Hugo: <link rel="stylesheet" href="/css/style.css"> في المثال، يتم ربط ملف style.css الموجود في مجلد static/css بالصفحة. 7- إضافة صفحات جديدة إلى Hugo عن طريق إنشاء ملف Markdown جديد في مجلد content. بعد ذلك، يمكن إنشاء قالب جديد لعرض هذه الصفحة وربطها بالقائمة الرئيسية في الموقع.
×
×
  • أضف...