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

Mustafa Suleiman

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

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

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

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

    365

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

  1. المشكلة التي في الصورة تحدث بسبب وجود علامة تنصيص خاطئة في الكود الموجود في الملف app\Http\Controllers\ProjectController.php، والتي أدت إلى إعطاء رسالة خطأ بأنه تم توقع فاصلة منقوطة ";" بدلاً من علامة "}". حاول التحقق من السطر الذي يأتي بعد السطر 16، لمعرفة ما إذا كانت هناك أي أخطاء في الـ Syntax، وعليك التأكد من أن العلامات التنصيصية والفواصل المستخدمة في الأسطر السابقة تم وضعها بشكل صحيح، وخاصة في السطر 16 الذي يحتوي على دالة compact(). ويجب معرفة أنه يمكن أن يتسبب تفريط بعلامات التنصيص أو الفواصل في حدوث أخطاء في لغة PHP، لذا عليك التحقق من أن جميع العلامات التنصيصية والفواصل تم وضعها بشكل صحيح في الأماكن الصحيحة في الكود. وأنصحك بقراءة الأخطاء التي تظهر لك ثم البحث برسالة الخطأ على جوجل لمعرفة السبب، وأيضًا تفقد الأسطر التي يتم الإشارة لك بها في الخطأ مثل السطر 16 في الصورة، وإذا واجهت مشكلة لا تتردد في السؤال هنا.
  2. الأفضل النقاش هنا لتحقيق استفادة للجميع، وبخصوص سؤالك، لتتمكن من الوصول إلى قاعدة البيانات الموجودة على جهازك المحلي، يجب أن يكون لديك خادم 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'); });
  3. لا مشكلة عزيزي، بخصوص جافاسكريبت، فإذا كان المقصود قسم المقدمة، فنعم هو قسم نظري للغة ومن المفيد مشاهدته بالطبع ولا يوجد تطبيق عملي به. أما بدايًة من قم أساسيات جافاسكريبت فيبدأ التطبيق العملي وكتابة الأكواد وأنصحك بالكتابة وراء المدرب، ولا تترك فيديو إلا قد قمت بكتابة الكود الخاص به، وبذلك ستتخلص من الكثير من المشاكل مستقبلاً بسبب المشاهدة السلبية وعدم كتابة الكود بنفسك، وحاول التغيير في الكود وتنفيذ أفكارك والبحث عن حلول للمشاكل أو طريقة لتنفيذ ما تريده. فستتعلم الكثير من خلال فعل ذلك، وليس بالمشاهدة والتطبيق بالحرف فقط، أي كل 5 فيديوهات مثلاُ قم بتعمل تحدي لنفسك بتنفيذ فكرة مختلفة أو إضافة شيء جديد أو خاصية جديدة في الكود.
  4. المشكلة تحدث بسبب عدم وجود مسار النطاق الافتراضي للتطبيق في الملف الذي تعمل عليه، ويمكن حل هذه المشكلة بإضافة الأمر use في بداية الملف، لتحديد مسار المجال الذي تعمل عليه النماذج: use App\Models\User; وفي هذه الحالة، يجب استخدام Models بدلاً من Model بسبب تغيير في الاسم في إصدارات Laravel الحديثة. وبعد ذلك، يمكنك استخدام الأمر التالي لاستدعاء النموذج User وجلب سجل واحد من قاعدة البيانات: $user = User::find(1); ويجب التأكد من أن الملف الذي تعمل عليه موجود في المجال المناسب لتطبيق Laravel وأنه يتم تشغيله من داخل مجلد التطبيق. كما يجب التأكد من أنه تم تشغيل الأمر من داخل مجلد التطبيق Laravel باستخدام منفذ الأوامر CMD.
  5. أهلا بك روجيه، إذا كان السؤال خاص بأحد دورات أكاديمية حسوب، أرجو منك طرح السؤال في المرة القادمة أسفل فيديو الدورة المتعلق بالسؤال. وبالنسبة لسؤالك، ما هي الفيديوهات التي شاهدتها؟ فإذا كانت مجرد شرح نظري ولا يوجد تطبيق عليه فلا مشكلة أبدًا، حيث يجب فهم الأمور النظرية لتنفيذ الأمور العملية على دراية وعلم وليس كتابة أكواد أو تنفيذ خطوات تم حفظها فقط. ويمكنك الاستزادة من خلال البحث عن الموضوع الذي تعلمته أو الأمور التي بحاجة إلى توضيح أو المزيد من الشرح بالنسبة لك، وأيضًا ربما تجد تطبيقات عملية على ما تعلمته.
  6. الإجابة التي تم ذكرها من قبل قيس مشكورًا، تحتوي على فكرة جيدة، وهي استخدام دالة 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()، وعرض الخطأ على الحقل المرتبط بهذا العنصر الإضافي.
  7. الخطأ في الصورة يشير إلى أنّ الدالة resources() في لارافيل تتطلّب مصفوفة كمدخل، ولكنها تستلم سلسلة نصية. ويمكن أن يحدث هذا الخطأ عندما تكتب الكود بشكل خاطئ أو عند إعطاء المتغير الخاص بالمصفوفة قيمة نصية بدلاً من مصفوفة. لذلك، يجب التحقق من كود routes/web.php للتأكد من أن الدالة resources() تتلقى مصفوفة كمدخل بدلاً من سلسلة نصية، كما يجب التأكد من أنّ المتغير الذي يحوي المصفوفة يتم تمريره بشكل صحيح إلى الدالة. على سبيل المثال، إذا كان كودك كالتالي: Route::resources('/projects', 'App\Http\Controllers\ProjectController'); يجب تغييره إلى: Route::resource('/projects', 'App\Http\Controllers\ProjectController'); ويتم استخدام الدالة resource() بدلاً من resources() لأنها تستلم مصفوفة واحدة بدلاً من مصفوفة متعددة كما هو الحال في resources().
  8. باستطاعتك إضافة خدمة الدفع 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.
  9. كما ذكر عدنان الأمر طبيعي، ولكن لا أنصحك إطلاقًا بالتقدم إلى React دون القيام بمشروع أو إثنان باستخدام جافاسكريبت ويجب أن تكون المشاريع ذات حجم كبير وليس نماذج صغيرة. فأنا لا أريد لك أن تصبح مستخدم لإطار عمل بدلاً من أن تصبح متقن للغة جافاسكريبت، ففهم وإتقان اللغة بنسبة معينة، سيتيح لك التنقل بحرية بين إطارات العمل وستصبح مبرمج محترف يعتمد عليه وستزول من أمامك الكثير من العقبات. فالغالبية يقوم باستخدام الإطار ويصعب عليه الإنتقال إلى إطار عمل آخر فهو غير متقن للغة الأساسية للإطار وهي جافاسكريبت، فمثلاً لديك إطارات Vue.js و Angular.js وغيرها من إطارات JS. لذلك عليك بالبحث عن مشاريع برمجية على اليوتيوب باستخدام جافاسكريبت وقم بتنفيذها، والأفضل تنفيذ المشروع مرتين، مرة بالتنفيذ مع الشرح، ومرة أخرى بمفردك، فصدقني ستذهل من كم الأشياء التي أنت بحاجة إلى مراجعتها وتثبيتها في ذهنك. وهناك مثل قائل "تعب شهر ولا تعب سنة!" فقم بالإجتهاد في البداية وسترتاح فعلاً بعد ذلك، وستنسى أشياء لا مشكلة في ذلك ولا يوجد مبرمج يحفظ أو يتذكر كل شيء بل يعلم أنه يمكنه تنفيذ الأمر بخاصية ما في اللغة ويبحث عنها ليتذكر طريقة تنفيذها.
  10. أنصحك باستخدام 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 ستتمكن من تشغيل مشروعك دون أية مشكلة.
  11. ماذكره لك عمر صحيح بالنسبة للاستخدام المباشر لقاعدة البيانات على الجهاز الخاص بك دون استخدام خادم backend، فعادة ما يتطلب الأمر الاتصال بقاعدة البيانات من خلال خادم backend الذي يستطيع الوصول إلى الجهاز والبيانات المحفوظة فيه. وبالفعل، يمكن استخدام خدمات الـ third-party مثل Firebase وغيرها لإنشاء قاعدة بيانات وتطبيقات backend بسرعة وسهولة، والتي يمكن الوصول إليها مباشرةً من الـ client. ولكن هذا يتطلب التعامل مع خدمات الـ third-party وفهم كيفية استخدامها، بالإضافة إلى الاعتماد عليها في تشغيل تطبيقك. وهناك حلول أخرى: 1- استخدام برامج إدارة قواعد البيانات المحلية مثل MySQL Workbench أو phpMyAdmin لإدارة قاعدة البيانات المحلية. 2- استخدام Node.js ومكتبة مثل SQLite للتواصل مع قاعدة البيانات الموجودة على جهازك وإجراء التعديلات اللازمة عليها. وبالطبع أنت بحاجة إلى خادم (server) مثبت على الجهاز الخاص بك لكي تتمكن من الاتصال بهذه القاعدة. ويمكنك استخدام خوادم مثل Apache أو Nginx لتنفيذ الخادم الخاص بك، ثم استخدام لغات السيرفرات الشائعة مثل PHP أو Node.js للاتصال بقاعدة البيانات. وبعد ذلك، باستطاعتك استخدام لغة البرمجة الخاصة بالواجهة الأمامية مثل JavaScript للوصول إلى هذه البيانات واستخدامها في تطبيقك.
  12. تسمح بتمرير الدوال كمعاملات للدوال الأخرى، ويتم استخدامها بشكل شائع في البرمجة الوظيفية والبرمجة الشيئية، وتمكنك من كتابة الأكواد بشكل أكثر جودة وإنتاجية. على سبيل المثال، يمكن استخدام الدوال كمعاملات لدوال أخرى لتحسين الكود وجعله أكثر قابلية للصيانة وإعادة الاستخدام، كما يمكن إنشاء الوظائف واستخدامها كقيم لمتغيرات أو خصائص، مما يتيح للمطورين إنشاء برامج أكثر مرونة وقابلية للتوسع. هذا مثال بسيط لإنشاء واستخدام وظيفة من الدرجة الأولى في جافاسكريبت: // إنشاء دالة من الدرجة الأولى 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"، وسيتم طباعة رسالة تحيا بها الشخص الذي يحمل هذا الاسم.
  13. الأسئلة الإمتحانية لا يتم الإجابة عليها ولكن يمكن إرشادك لطريقة الحل. لحل السؤال الخاص بك، يمكن اتباع الخطوات التالية: إنشاء مكدس (Stack) خاص بالأقواس. تمرير النص الذي يحتوي على الأقواس إلى البرنامج. البحث عن الأقواس الافتتاحية " ( [ { " في النص وإضافتها إلى المكدس. البحث عن الأقواس الختامية " ) ] } " في النص ومقارنتها بالأقواس في أعلى المكدس. إذا كانت الأقواس الموجودة في النص متوازنة، سيتم إخراج جملة تفيد بأن الأقواس صحيحة، في حين إذا كانت غير متوازنة، فسيتم إخراج جملة تفيد بأن الأقواس غير صحيحة. الخطوات يمكن تنفيذها باستخدام كود جافا، باستخدام أساليب تضمن أن المكدس يتم التعامل معها بشكل صحيح، مثل دالة push() و pop()، حيث تتم إضافة الأقواس إلى المكدس عند العثور عليها في النص، وإزالة الأقواس من المكدس عند العثور على أقواس ختامية. في النهاية، يمكن فحص المكدس إذا كان فارغاً ليتم تحديد ما إذا كانت الأقواس متوازنة أم لا.
  14. لا يتم الإجابة على الأسئلة الإمتحانية ولكن يمكن إرشادك لطريقة الحل. العناصر المختلفة للمخطط الانسيابي هي: بداية البرنامج (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، فسيتم عرضه على الشاشة. ثم يتم إنهاء البرنامج.
  15. تتوافر الدالة 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]); // طباعة العدد بشكل سالب }
  16. الأسئلة الإمتحانية لا يتم الإجابة عليها ولكن يمكن إرشادك لطريقة الحل. بالنسبة لسؤالك، يمكنك اتباع الخطوات التالية: الحصول على النص المراد عكسه من المستخدم باستخدام مثلاً prompt() في JavaScript. تقسيم النص إلى مصفوفة من الأحرف باستخدام split()، وهذه الدالة تأخذ المحتوى الذي تم الحصول عليه في الخطوة السابقة وتحويله إلى مصفوفة. إنشاء مكدس stack باستخدام push() و pop()، يتم استخدام push() لوضع العناصر في المكدس، و pop() لإزالتها. يتم وضع الأحرف واحدة تلو الأخرى في المكدس باستخدام حلقة for أو while. يتم إزالة الأحرف من المكدس ووضعها في مصفوفة جديدة لعكس النص. يتم عرض المصفوفة الجديدة باستخدام دالة alert() أو console.log() في JavaScript. هذه هي الخطوات الأساسية لحل السؤال، ولكن يجب الانتباه إلى تفاصيل الكود والتأكد من اتباع معايير البرمجة المناسبة ومراعاة الأخطاء الشائعة مثل تجنب الحروف الكبيرة والصغيرة والتحقق من الأسماء المستخدمة للمتغيرات والدوال ومراجعة الحل بعد الانتهاء منه.
  17. يمكن إنشاء مصفوفة وملؤها باستخدام حلقة 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]); // طباعة العدد في وحدة التحكم // يمكن استخدام العدد في عمليات أخرى هنا }
  18. أهلا بك فاطمة، هل سؤالك بخصوص دورات حسوب، إذا كان كذلك، فالإجابةهي لا يوجد فترة محددة للإنتهاء من الكورس لكن الأفضل وضع جدول زمني والإلتزام به. وإذا كنت تتسائلين عن مدة تعلم البرمجة فقد تم الإجابة على ذلك هنا في النقاش التالي وأيضًا بخصوص دورات حسوب. كم من الوقت احتجت لتعلم أساسيات برمجة المواقع ؟
  19. سأحاول توضيح بعض الأمور لك. إطار العمل 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. بعد ذلك، يمكن إنشاء قالب جديد لعرض هذه الصفحة وربطها بالقائمة الرئيسية في الموقع.
  20. يمكنك القيام بذلك عن طريق استخدام AJAX في Laravel، حيث يتيح لك AJAX تحميل وإرسال البيانات بطريقة ديناميكية دون الحاجة إلى إعادة تحميل الصفحة بأكملها. وعند النقر على الزر لإضافة مدخلات، باستطاعتك استخدام جافا سكربت لإرسال طلب AJAX إلى الخادم الذي يستخدم Laravel. وبمجرد استلام الطلب، سيقوم Laravel بجلب البيانات المطلوبة من قاعدة البيانات باستخدام controller، ومن ثم سيرسل البيانات المستلمة إلى الصفحة بشكل JSON. وباستخدام جافا سكربت بالإمكان تحليل البيانات المستلمة من Laravel وإنشاء صف جديد للمدخلات المضافة بناءً على هذه البيانات. بعد ذلك، يمكنك استخدام الجافا سكربت لتحديث الصفحة وعرض المدخلات الجديدة. إليك بعض الخطوات الأساسية التي يمكن اتباعها لتحقيق ذلك: إنشاء زر لإضافة مدخلات وتعيين معرفًا له. إنشاء ملف JavaScript للقيام بمهام إضافة المدخلات. إضافة كود JavaScript الذي يستخدم AJAX لإرسال طلب إلى controller في Laravel. في controller Laravel، استخدمي الطريقة المناسبة لجلب البيانات من قاعدة البيانات. استخدمي JSON لإرسال البيانات المطلوبة إلى ملف JavaScript. في ملف JavaScript، استخدمي البيانات المستلمة لإنشاء صف جديد للمدخلات. تحديث الصفحة لعرض المدخلات الجديدة. وكنصيحة الأفضل استخدام مكتبات مثل Axios لتسهيل استخدام AJAX وإرسال الطلبات إلى controller في Laravel. وإليك مثال باستخدام Axios. 1- بعد تثبيت المكتبة من الأمر التالي: npm install axios 2- سيتعين عليك إنشاء زر HTML على الصفحة الخاصة بك باستخدام معرف فريد له، وهذا الزر سيقوم بتنفيذ الطلب AJAX عند النقر عليه. 3- إنشاء ملف JavaScript جديد وتعيينه للزر HTML الخاص بك. 4- استدعِ مكتبة axios داخل ملف JavaScript الخاص بك. import axios from 'axios'; 5- استخدمي axios لإرسال الطلب AJAX إلى controller في Laravel، ويمكنك استخدام المثال التالي لإرسال طلب GET لجلب البيانات من controller: axios.get('/get-data') .then(function (response) { // استخدم البيانات المستلمة لإنشاء صف جديد للمدخلات. }) .catch(function (error) { console.log(error); }); حيث /get-data هو عنوان URL للطلب AJAX الذي يمكن تغييره بما يناسب متطلباتك. 6- في controller Laravel، استخدمي الطريقة المناسبة لجلب البيانات من قاعدة البيانات وإرجاعها كـ JSON. public function getData() { $data = // جلب البيانات من قاعدة البيانات return response()->json($data); } عند استلام البيانات من controller، يمكنك استخدامها داخل دالة .then() للتحكم في عرض الصفحة وإضافة المدخلات الجديدة. 7- تحديث الصفحة لعرض المدخلات الجديدة، ويمكن استخدام Vue أو React لإنشاء تطبيق أكثر ديناميكية.
  21. بالإضافة إلى ما ذكره عبد الباسط، يجب أن تأخذ في الاعتبار أنه إذا كانت لديك خلفية في تطوير تطبيقات Windows Forms، فقد يكون لديك فهم أفضل لبعض المفاهيم الأساسية التي يشترك فيها إطار عمل .NET Framework بأكمله، والتي يمكن أن تفيدك في تطوير تطبيقات ASP.NET MVC و Entity Framework و Xamarin. ومع ذلك، فإن الخبرة السابقة في تطوير تطبيقات Windows Forms ليست شرطًا لتعلم هذه الإطارات الأخرى. لذلك، يمكنك البدء في تعلم أي إطار عمل من إطارات عمل .NET Framework بدون الحاجة إلى تعلم Windows Forms Applications مسبقًا. وإليك بعض النصائح: يجب أن يكون لديك معرفة جيدة بلغة C# ومكتبات .NET Framework قبل البدء في تعلم إطارات عمل مثل ASP.NET وEntity Framework وXamarin وغيرها. لذلك، من المهم بدء العمل على تعلم لغة C# ومكتبات .NET Framework المشتركة مثل ADO.NET وLINQ وغيرها. يتطلب العمل مع إطارات عمل مثل ASP.NET وXamarin وغيرها القدرة على تصميم وإنشاء صفحات واجهة المستخدم الخاصة بتطبيقاتك. لذلك، يجب أن تكون لديك فهم جيد لأساسيات HTML وCSS وكيفية استخدامها في تصميم صفحات الويب. يعد استخدام قواعد البيانات جزءًا أساسيًا من تطوير تطبيقات الويب والجوال، ويتطلب ذلك فهم قواعد البيانات وكيفية التعامل معها. لذلك، ينبغي عليك تعلم مفاهيم قواعد البيانات ولغة الاستعلام المنطقي SQL ومكتبات ADO.NET للاتصال بقواعد البيانات. يوجد العديد من الموارد المتاحة على الإنترنت التي يمكن استخدامها لتعلم إطارات عمل .NET Framework، مثل المواقع التعليمية والمنتديات والدورات التدريبية والمقاطع التعليمية. يجب استغلال هذه الموارد بشكل جيد لتسريع عملية التعلم وتحسين المهارات. ينبغي أن تعمل على مشاريع عملية أثناء تعلم إطارات عمل .NET Framework،
  22. إليك بعض النصائح التي من شأنها تحسين جودة المحتوى والذي بدوره سيزيد من عدد الزيارات لموقعك: إختيار موضوع يهم الجمهور المستهدف، ويمكن البحث عن المواضيع باستخدام أدوات البحث عن الكلمات الرئيسية. إجراء بحث عن الكلمات الرئيسية التي تصف الموضوع وتساعد في زيادة ظهور المقال في محركات البحث. كتابة المقال باستخدام أسلوب معين، مثل "طريقة الهرم المقلوب"، والتي تساعد على كتابة مقال يحوي معلومات قيمة ومنظمة بشكل مناسب، أي ذكر المعلومات القيمة في البداية والتي من شأنها أن تجذب إنتباه الزوار. تحسين المحتوى بشكل داخلي من خلال استخدام أفضل الممارسات لتحسين محتوى الصفحة، مثل إضافة عناوين تحتوي على الكلمات الرئيسية وتصميم صفحة جذابة. إضافة وسائط متنوعة، مثل الفيديو والصور والرسوم البيانية والأدوات الرقمية لجعل المقال أكثر جاذبية وإثارة للاهتمام. تطوير استراتيجية لمشاركة المقال عبر مختلف القنوات الممكنة، مثل مواقع التواصل الاجتماعي والبريد الإلكتروني والمدونات وغيرها. تضمين محتوى يمكن وصله بروابط إلى موقعك، وذلك لزيادة مصداقية الموقع في محركات البحث، حيث يمكن استخدام أنواع مختلفة من المحتوى الذي يمكن ربطه بروابط، مثل الفيديو والرسوم البيانية والأدوات الرقمية والمزيد. ركّز على إنشاء محتوى طويل لمدوّنتك حيث تشير الدراسات إلى أن المحتوى الطويل يؤدي إلى أداء أفضل في نتائج البحث من المشاركات القصيرة أو الضعيفة، ولكن هناك شرطًا مهمًا وهو أن يكون المحتوى الطويل جيدًا ومناسبًا للقارئ. فالمحتوى الطويل هو المحتوى الذي يتميّز بعدد كبير من الكلمات ويعرض أفكارًا ومعلومات عميقة حول موضوع معيّن. يمكن أن يساعد المحتوى الطويل في تحسين مراكز البحث بسبب زيادة عدد الكلمات الرئيسية المستخدمة في المحتوى وأيضًا بسبب قدرته على إرضاء القارئ وتلبية استفساراته، مما يزيد من فرص المشاركة في وسائل التواصل الاجتماعي أو الربط بمواقع أخرى ويؤدي إلى زيادة حركة المرور. كما أن المحتوى الطويل يزيد من وقت الإقامة لدى الزائر، وهو الوقت اللازم بين لحظة النقر على نتائج البحث ولحظة العودة إلى نتائج محرك البحث، وهناك دراسات تشير إلى وجود علاقة بين وقت الإقامة الطويل وترتيبات البحث الأعلى. أيضًا حافظ على تحديث محتوى الموجود، فإنشاء محتوى "جديد" أمرًا حيويًا لتحقيق نتائج بحث جيدة وزيادة حركة المرور إلى موقعك، ولكن ينبغي أن تركز على جودة المحتوى بدلاً من الكمية. يمكنك الاستثمار في وقتك لتحسين المحتوى الحالي وجعله أفضل عن طريق مراجعة المشاركات السابقة باستمرار وتحديثها باستخدام أحدث المعلومات المتاحة. وهذا ينطبق بشكل خاص على مراجعات المنتجات، ولكن حتى "المحتوى الأخضر" (المحتوى الدائم الذي يتضمن حقائق لا تتغير كثيرًا، إن كانت تتغير على الإطلاق) يمكن أن يستفيد من إعادة النظر فيه وتحسينه من وقت لآخر. ويتميز تحديث المحتوى القديم بإرسال إشارات "التحديث" إلى جوجل، مما يعطي إشارات إيجابية للخوارزميات التي تستخدمها جوجل، بالإضافة إلى زيادة طول المنشورات وتوفير المحتوى "الطويل" الذي غالبًا ما يعمل بشكل أفضل في نتائج البحث. ولكن، يجب أن نذكر أن هناك قيمة مهمة في إنشاء محتوى جديد بشكل دوري، لأن كلما زاد عدد المحتوى على موقعك، كلما كان لديك المزيد من الكلمات الرئيسية التي يمكنك تصنيفها في نتائج البحث، ولكن هذا يتحقق فقط إذا كان المحتوى قويًا ومفيدًا للقارئ.
  23. أقصر طريق للقبول بسرعة في جوجل أدسنس هو إنشاء محتوى عالي الجودة وأن يضمن موقعك تجربة جيدة للزائرين من حيث السرعة المقبولة وقالب الموقع المناسب للهاتف. وسألخص لك الشروط: 1- محتوى الموقع: يجب أن يكون المحتوى الذي تريد وضع الإعلانات فيه محتوى ذو جودة عالية ومفيد للمستخدمين. ويجب أن يكون المحتوى مكتوبًا بلغة صحيحة وواضحة ويتوافق مع سياسة AdSense. كما يجب أن لا يحتوي على محتوى مخل بالآداب العامة أو ينتهك القوانين الدولية. 2- عدد الزيارات: يجب أن يكون لديك عدد كافٍ من الزيارات اليومية للموقع. لا يوجد رقم محدد للزيارات المطلوبة، ولكن عادة ما يعتبر موقعك مؤهلاً للتقديم عندما يكون لديك عدد كبير من الزيارات الفريدة كل شهر. 3- تصميم الموقع: يجب أن يكون تصميم الموقع جذابًا وسهل الاستخدام، ويجب أن يكون متوافقًا مع متطلبات AdSense. يجب أن يتضمن محتوى الموقع صفحات مثل "الاتصال بنا" و "سياسة الخصوصية" و "الشروط والأحكام" وغيرها. 4- العمر: يجب أن يكون عمر موقعك على الأقل 6 أشهر، وذلك للتأكد من أن الموقع يتمتع بالاستقرار والنمو. 5- الدول المؤهلة: يتم قبول التسجيل في برنامج AdSense في بعض الدول فقط، لذلك تحتاج إلى التحقق من ما إذا كانت دولتك مؤهلة للتقديم. وأهم نصيحة أقدمها لك هي الصبر والاستمرارية حيث يمكن أن تستغرق عملية الحصول على الموافقة من Google AdSense بعض الوقت، ولا ينبغي الاستسلام في حالة الرفض الأولي، ويمكن تحسين الموقع والمحتوى وإعادة تقديم الطلب، وكذلك الاستمرار في إنشاء محتوى عالي الجودة فالأمر يتطلب وقت لتحقيق عائد.
  24. قبل أي شيء يجب معرفة المهارات المطلوبة في سوق العمل الذي تطمح في العمل فيه سواء سوق العمل المحلي أو موقع العمل الحر مثل مستقل وبعيد، فأنت في النهاية تريد تعلم البرمجة من أجل العمل وليس لمجرد التعلم لنكن واقعيين. لذلك تفقد الوظائف الخاصة بمستوى Junior أو Entry Level وقم بكتابة المهارات المطلوبة في ملف نصي وتعلم تلك المهارات، ولكن تأكد من كتابة المهارات الأكثر طلبًا. فمثلاً في أغلب البلدان العربية ستجد المطلوب هو PHP ولارافيل ثم Angular و ASP.NET. وبالطبع بالنسبة لمسار Front-End فأنت بحاجة إلى تعلم HTML,CSS,JS بدون أدنى شك، بعد ذلك ستختار ما تتعلمه مما سبق أو المهارات التي تناسب سوق العمل لديك، فمثلاً البعض يطلب React والبعض بحاجة إلى لارافيل و Vue.js. لذلك ركز على الأساسيات أولاً وخصوصًا أساسيات جافاسكريبت لا تهملها أبدًا، طالما أنك ستعمل كـ Front-End. وبخصوص المدة الواقعية لتعلم أحد مسارات البرمجة فقد قمت بالإجابة على ذلك سابقًا. وإليك بعض النقاشات التي أنصحك بشدة بقرائتها.
  25. بخصوص سؤالك، فمن المستحيل إنشاء خوارزمية واحدة تصف جميع الأكواد في مشروع الويب. ومن الأفضل فهم الخوارزميات كأدوات تستخدم لحل مشكلات محددة، بدلاً من كونها وصفًا شاملًا للكود. في الواقع، يمكن استخدام الخوارزميات في مشاريع الويب في العديد من الأمور، مثل تصميم نظام تصنيف، أو توجيه المستخدمين إلى المحتوى الذي يناسبهم بناءً على تفضيلاتهم، أو تحسين سرعة الاستجابة للمستخدمين، وغيرها الكثير. وبالتالي، يمكن للمبرمج البحث عن الخوارزميات المناسبة لحل مشكلات محددة في مشروع الويب، وتطبيقها على الأكواد الخاصة بالمشروع. ويمكن أيضاً تصميم خوارزميات مخصصة لحل مشاكل فريدة في المشروع، على سبيل المثال، العثور على الكلمات المميزة في مدونة أو تصميم نظام توصية فريد لمتجر إلكتروني. وأنصحك بإنشاء flow chart أفضل لأنه يمثل رسماً توضيحياً لخطوات الخوارزمية ويسهل فهمها وتنفيذها. وبالتالي، يمكن استخدام ال flow chart كدليل لكتابة الكود اللازم لتنفيذ الخوارزمية. كما أنه يساعد على تفادي بعض الأخطاء الشائعة في كتابة الخوارزميات مثل الدوال التكرارية (loops) اللامنتهية والتكرارات الزائدة (redundant iterations) وغيرها. على الرغم من ذلك، فإنه من المهم أن يتعلم المبرمج الكتابة المباشرة للخوارزميات بمجرد تحسين مهاراته في البرمجة، حتى يمكنه تحسين كفاءة وسرعة كتابة الأكواد والتحكم بها بشكل أكبر. وعند إنشاء خوارزمية لمشروع كامل، يتم البدء بتحليل المشروع وتقسيمه إلى أجزاء صغيرة قابلة للإدارة. على سبيل المثال، يمكن تقسيم المشروع إلى الجزء الخاص بال Front-End والجزء الخاص بال Back-End. بعد ذلك، يمكن تحليل كل جزء وتحديد الخوارزميات المناسبة لكل جزء. يمكن أيضًا تحديد العمليات والوظائف الرئيسية لكل جزء وتصميم الخوارزميات المناسبة لتحقيق هذه العمليات والوظائف. ويمكن أن تشمل الخوارزميات المستخدمة في مشروع ويب عدة مجالات مثل: التواصل مع قاعدة البيانات: يمكن تصميم خوارزميات لتحليل البيانات وتخزينها واسترجاعها من قاعدة البيانات. التحقق من الصحة والأمان: يمكن تصميم خوارزميات للتحقق من صحة البيانات المدخلة والمرسلة بين ال Front-End وال Back-End وتطبيق الأمان المناسب لحماية المعلومات. العمليات الحسابية والرياضية: يمكن تصميم خوارزميات للقيام بالعمليات الحسابية والرياضية المختلفة التي يحتاج إليها المشروع. التعامل مع الرسائل والإشعارات: يمكن تصميم خوارزميات لإدارة الرسائل والإشعارات وإرسالها واستقبالها بين ال Front-End وال Back-End. تحسين أداء الموقع: يمكن تصميم خوارزميات لتحسين أداء الموقع وتقليل وقت الاستجابة وزيادة سرعة تحميل الصفحات.
×
×
  • أضف...