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

Mustafa Suleiman

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

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

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

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

    299

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

  1. لتصفية نتائج البحث بحسب اسم المركز، يمكن استخدام filter وتمرير معامل البحث كمعامل center في ملف views.py. def tablebooking(request): if request.method == "POST": statform = statusform() if statform.is_valid(): statform.save() messages.success(request, ('Your websit was successfully added!')) else: HttpResponse(request, 'Error saving form') return render(request, 'user/tablebooking.html',{ 'statform':statform, }) center_name = request.user.center.name # افترض هنا أن اسم المركز مخزن في حساب المستخدم tablebooking = Appointment.objects.filter(center__name=center_name) return render(request, 'user/tablebooking.html', { 'tablebooking' : tablebooking }) يتم استخدام request.user.center.name للوصول إلى اسم المركز المخزن في حساب المستخدم. إذا كنتي تستخدمي ميزة تسجيل الدخول المدمجة في Django، فسيتم تعيين request.user لكائن User المعني بالمستخدم الحالي. وإذا كان لديك تطبيق خاص بتسجيل الدخول، فيجب عليك تغيير request.user.center.name إلى الطريقة التي تحصلي بها على اسم المركز الذي تريدي تصفيته.
  2. يمكن تحويل الشيفرة المعطاة إلى شيفرة JSX في React عن طريق استخدام عناصر الـ JSX والمكونات. لتحويل الشيفرة إلى JSX، يمكن القيام بالتالي: 1- يجب إنشاء ملف جديد بامتداد .jsx 2- يمكن إنشاء مكون جديد باستخدام function component في React ويمكن إسمه SeatMap مثلاً، ويمكن إرجاع العناصر المطلوبة. 3- يمكن إنشاء مكون آخر للصفحة بإسم Screen ويمكن أن يتم إرجاع عنصر div وتخصيصه الفئة container. 4- يمكن إنشاء مكون آخر لعناصر الصف بإسم Row واستخدام عناصر div لتمثيل الأماكن. 5- يمكن إنشاء مكون آخر بإسم Seat وتخصيص الفئات اللازمة وتمثيل الأماكن الشاغرة والمحجوزة بحسب المتغيرات المعطاة في الـ CSS. 6- يمكن استدعاء كل من المكونات المناسبة داخل المكون الأساسي الذي يتم تصوره كشجرة ويمكن تقسيم الكود بحسب الأقسام المناسبة. بالتالي، يمكن الحصول على الشيفرة JSX على النحو التالي: import React from 'react'; function Seat() { return <div className="seat"></div>; } function Row() { return ( <div className="row"> <Seat /> <Seat /> <Seat /> <Seat className="occupied" /> <Seat className="occupied" /> <Seat /> <Seat /> <Seat /> </div> ); } function Screen() { return ( <div className="container"> <div className="screen"></div> <Row /> <Row /> <Row /> <Row /> <Row /> </div> ); } export default Screen; ملاحظة: يتم استدعاء المكون الأساسي Screen في ملف JavaScript لإظهار الكود في الصفحة، ويجب تمريره عبر ReactDOM.render() في الـ index.js لعرضه في الصفحة. هل هناك طريقة افضل لتحسين الكود؟ نعم، هناك طريقة أفضل لتحسين هذا الكود. يمكننا استخدام حلقتين متداخلتين لإنشاء مصفوفة من العناصر التي تشكل الجلوسات، ثم استخدام دالة map لإنشاء عناصر JSX من هذه المصفوفة، وفي نهاية المطاف يمكننا إدراج هذه العناصر في العنصر الرئيسي الذي يحتوي على الجدول. import React from 'react'; function App() { const rows = [...Array(6)].map((_, index) => { const seats = [...Array(8)].map((_, index) => ( <div className="seat" key={index}></div> )); return <div className="row" key={index}>{seats}</div>; }); return ( <div className="container"> <div className="screen"></div> {rows} </div> ); } export default App; يستخدم هذا الكود مصفوفتين متداخلتين: المصفوفة الأولى تنشئ الصفوف، والمصفوفة الثانية تنشئ الجلوسات داخل كل صف. يتم تمرير المصفوفة الثانية إلى map داخل المصفوفة الأولى لإنشاء العناصر JSX. تم إضافة key إلى العناصر لتحسين الأداء عند إعادة رسم المكون.
  3. يجب أولاً الرجوع إلى البنك والتأكد من الحد الأقصى للدفع عبر الإنترنت بالدولار للبطاقة الخاصة بك، ثانيًا يجب التأكد من أن البطاقة تدعم الشراء من خارج مصر بالدولار، بعد ذلك يمكنك قراءة التعليقات على السؤال الأصلي لك هنا، لمعرفة كيفية الشراء من خلال باي بال. https://io.hsoub.com/webdev/143704-كيف-ادفع-مبلغ-الدورة-بواسطة-حسابي-البنكي-المصري وسأخبرك بذلك هنا: تفعيل حساب باي بال مصر حتى تتمكن من استلام وسحب الأموال، من خلال الآتي: التأكد من أن الحساب مفعل من خلال رفع صورة للهوية (بطاقة الرقم القومي) وإنتظار فترة 24 ساعة لتفعيل الحساب. الآن ستحتاج إلى فيزا البريد المصري easy pay أو فيزا Yalla في حالة عدم توفر easy pay والتي يمكنك استخراجها من أي مكتب بريد رئيسي والأفضل من العتبة وشحنها بمبلغ 100 جنيه. يجب التأكد من أن الفيزا مفعلة من خلال التحدث إلى خدمة العملاء وأنها جاهزة للسحب من باي بال. بعد ذلك قم بإضافتها لحسابك على باي بال من خلال الخطوات التالية: قم بتسجيل الدخول إلى حسابك على موقع باي بال المصري. اضغط على "إدارة المحفظة" من القائمة الرئيسية. اختر "إضافة بطاقة ائتمان أو بطاقة خصم" من القائمة. أدخل تفاصيل بطاقتك، بما في ذلك رقم البطاقة وتاريخ انتهاء الصلاحية والرمز الأمني. اختر موافق. سيتم إضافة البطاقة إلى حساب باي بال المصري الخاص بك بعد التحقق من البطاقة بإرسال كود تفعيل يمكنك الحصول عليه من خدمة عملاء البريد المصري. في حالة فشل البطاقة السابقةيمكنك استخراج بطاقة inspire من نوع visa من بنك اسكندرية وستحتاج إلى: نموذج طلب بطاقة الخصم المباشر صورة بطاقة رقم قومي سارية وهي الأفضل في رأي، ولكن هي بحاجة إلى مفردات دخل إذا كان سنك أكبر من 25 سنة، ويتم استخراجها من خلال فتح حساب توفير بمبلغ 1200 جنيه في حالة وجود وظيفة، أو 300 جنيه في حالة كان سنك 25 أو أقل. وإذا كان سنك من 16 إلى 18 فأنت بحاجة إلى أحد والديك لفتح الحساب لك. لمعرفة طرق الدفع الأخرى على منصة حسوب، كشراء بطاقة هدية والدفع من خلالها حيث يمكنك الدفع لشخص آخر لشرائها لك.
  4. يتم استخدام العناصر الدلالية(Semantic HTML elements) بشكل عام لأسباب عدة، من أهمها: تحسين تجربة المستخدم: تساعد العناصر الدلالية في تحسين تجربة المستخدم من خلال توضيح المحتوى والأهداف والهيكلية لصفحة الويب، مما يجعلها أسهل للمستخدمين فهم المحتوى وتصفحه بشكل فعال. تحسين تجربة الوصول: تساعد العناصر الدلالية في تحسين تجربة الوصول عن طريق توفير معلومات إضافية لمتصفحات الويب وتقنيات الوصول، مما يمكنها من تحسين تجربة الوصول للأشخاص الذين يعانون من إعاقات أو صعوبات في الوصول. تحسين تجربة محركات البحث: تساعد العناصر الدلالية في تحسين تجربة محركات البحث من خلال توضيح الهيكلية والمعنى للمحتوى، مما يمكن المحركات من فهم المحتوى وعرضه بشكل أفضل في نتائج البحث. التصميم والتطوير: تساعد العناصر الدلالية في تبسيط عملية التصميم والتطوير عن طريق توفير بنية أساسية للصفحة الويب وتسهيل التعامل مع الأسلوب والتنسيق والتصميم الخاص بالصفحة. عنصر section يستخدم عادةً لتمييز جزء محدد من صفحة الويب، مثل جزء من مقال أو فصل من كتاب، بينما يستخدم عنصر div لتقسيم الصفحة إلى أقسام وتنظيم عناصر HTML داخلها. على الرغم من أنه يمكن استخدام العنصر div بشكل عام لتقسيم الصفحة، إلا أن استخدام العنصر section يعزز دلالة المحتوى، وبالتالي يجعل الصفحة أكثر فهمًا للمستخدمين والمتصفحين وحتى محركات البحث. علاوة على ذلك، فإن استخدام عناصر HTML بشكل مناسب يساعد في تحسين تجربة المستخدم وتحسين تصنيف محركات البحث، مما يزيد من احتمالية زيارة الموقع واستخدامه. لذلك، من المستحسن استخدام العنصر section بدلاً من العنصر div عندما يتعلق الأمر بتقسيم المحتوى الرئيسي للصفحة. يمكن استخدام العنصر section في العديد من المواقف. فيما يلي بعض الأمثلة على كيفية استخدامه: 1- في صفحة ويب تحتوي على مقالة طويلة، يمكن استخدام العنصر section لتقسيم المقالة إلى أجزاء مختلفة مثل المقدمة والفصول والخاتمة. <section> <h2>المقدمة</h2> <p>هنا يتم وضع نص المقدمة</p> </section> <section> <h2>فصل 1</h2> <p>هنا يتم وضع نص الفصل الأول</p> </section> <section> <h2>فصل 2</h2> <p>هنا يتم وضع نص الفصل الثاني</p> </section> <section> <h2>الخاتمة</h2> <p>هنا يتم وضع نص الخاتمة</p> </section> 2- في صفحة تحتوي على منتجات مختلفة، يمكن استخدام العنصر section لتقسيم الصفحة إلى قسم يحتوي على المنتجات وآخر يحتوي على تقييمات العملاء. <section> <h2>المنتجات</h2> <ul> <li>منتج 1</li> <li>منتج 2</li> <li>منتج 3</li> </ul> </section> <section> <h2>تقييمات العملاء</h2> <ul> <li>تقييم 1</li> <li>تقييم 2</li> <li>تقييم 3</li> </ul> </section> 3- في صفحة ويب تحتوي على قائمة طويلة من الروابط، يمكن استخدام العنصر section لتقسيم القائمة إلى أقسام مختلفة. <section> <h2>روابط المواقع الاجتماعية</h2> <ul> <li><a href="#">رابط 1</a></li> <li><a href="#">رابط 2</a></li> <li><a href="#">رابط 3</a></li> </ul> </section> <section> <h2>روابط المواقع الإخبارية</h2> <ul> <li><a href="#">رابط 1</a></li
  5. نعم، يمكنك إقلاع نظام Ubuntu من الهارد الخارجي دون أي ضرر على نظام Windows 10 المثبت على الهارد الداخلي. يجب عليك فقط التأكد من أن إعدادات الإقلاع في جهاز الكمبيوتر الخاص بك مُعدَّة للسماح بالإقلاع من وسائط التخزين الخارجية، وذلك من خلال تغيير ترتيب الإقلاع في BIOS أو UEFI. عند البدء في عملية الإقلاع، سيظهر لك شاشة تحتوي على قائمة بخيارات الإقلاع المتاحة، ومن هناك يمكنك اختيار الهارد الخارجي لتشغيل نظام Ubuntu. وبعد الانتهاء من استخدام Ubuntu، يمكنك إعادة تشغيل الكمبيوتر واختيار الهارد الداخلي للعودة إلى نظام Windows 10 الذي تم تثبيته على الهارد الداخلي. حسنًا، هنا خطوات مفصلة لإقلاع نظام Ubuntu من الهارد الخارجي بأمان: قم بتوصيل الهارد الخارجي بجهاز الكمبيوتر الذي يحتوي على نظام Windows 10 المثبت على الهارد الداخلي. قم بتشغيل الكمبيوتر واضغط مرارًا على مفتاح الوصول للبيوس أو UEFI (مثل Delete أو F2 أو F10 أو F12 أو Esc) حتى يتم فتح واجهة BIOS أو UEFI. يمكنك العثور على الزر الصحيح لجهاز الكمبيوتر الخاص بك عبر الإنترنت أو في دليل المستخدم الخاص به. بمجرد الدخول إلى واجهة BIOS أو UEFI، قم بالتنقل إلى القائمة المسؤولة عن ترتيب الإقلاع. قد يكون اسم القائمة مختلفًا اعتمادًا على نوع جهاز الكمبيوتر الخاص بك. اختر الهارد الخارجي من بين القائمة المتاحة للإقلاع. قم بتحريكه إلى الأعلى حتى يتم تحديده كخيار إقلاع أولي. تأكد من حفظ الإعدادات الجديدة. قم بإعادة تشغيل الكمبيوتر. سيعمل الكمبيوتر على الآن من الهارد الخارجي. ستحتاج إلى إدخال اسم المستخدم وكلمة المرور الخاصة بك لتسجيل الدخول إلى نظام Ubuntu. بعد الدخول، يمكنك البدء في استخدام Ubuntu كما تشاء. عند الانتهاء من استخدام Ubuntu، قم بإيقاف التشغيل الكمبيوتر وفصل الهارد الخارجي. يمكنك الآن تشغيل الكمبيوتر واختيار الهارد الداخلي للعودة إلى نظام Windows 10. لا تنسَ حفظ الإعدادات الجديدة للترتيب في BIOS أو UEFI إذا كنت ترغب في العودة إلى الإقلاع من الهارد داخلي. ومن الأفضل أيضًا إنشاء نسخة احتياطية من بياناتك الهامة على كل من الهارد الداخلي والخارجي قبل القيام بأي تغييرات على ترتيب الإقلاع. كما ينصح بإجراء عملية فحص للهارد الداخلي بواسطة برنامج مضاد للفيروسات للتأكد من عدم وجود أي مشكلات أو تهديدات قبل إجراء أي تغييرات عليه. وأخيرًا، قد يختلف الإجراء الدقيق لترتيب الإقلاع حسب نوع جهاز الكمبيوتر الخاص بك، لذلك ينصح بالتحقق من دليل المستخدم أو البحث على الإنترنت لمزيد من المعلومات حول كيفية تغيير ترتيب الإقلاع في جهاز الكمبيوتر الخاص بك.
  6. لإستقبال الـ input من المستخدم في Node.js وإرساله إلى قاعدة البيانات SQLite ، يمكنك إتباع الخطوات التالية: 1- تثبيت SQLite: يجب أولاً تثبيت مكتبة SQLite على جهاز الحاسوب الخاص بك. يمكنك فعل ذلك بإستخدام أحد مديري الحزم في النظام الخاص بك. على سبيل المثال، إذا كنت تستخدم npm ، فيمكنك تنفيذ الأمر التالي: npm install sqlite3 2- فتح قاعدة البيانات: يمكنك فتح قاعدة البيانات باستخدام دالة Database الموجودة في مكتبة SQLite. يمكنك استخدام الأمر التالي لفتح قاعدة البيانات: const sqlite3 = require('sqlite3').verbose(); const db = new sqlite3.Database(':memory:'); // يمكن تعيين المسار واسم ملف قاعدة البيانات هنا بدلاً من ':memory:' 3- إنشاء جدول: يمكنك إنشاء جدول باستخدام دالة run() المتاحة في مكتبة SQLite. يمكنك استخدام الأمر التالي لإنشاء جدول: db.run('CREATE TABLE users (id INT, name TEXT, email TEXT)'); 4- إدخال البيانات: يمكن إدخال البيانات باستخدام دالة run() مرة أخرى. يمكنك استخدام الأمر التالي لإدخال بيانات مستخدم: const id = 1; const name = 'John Doe'; const email = 'john.doe@example.com'; db.run(`INSERT INTO users(id, name, email) VALUES(?, ?, ?)`, [id, name, email], function(err) { if (err) { return console.log(err.message); } console.log(`A row has been inserted with rowid ${this.lastID}`); }); يمكن تغيير id و name و email إلى المدخلات المستلمة من المستخدم. بهذا الشكل، يمكنك استقبال input من المستخدم من Node.js وإرساله إلى قاعدة البيانات SQLite. يمكنك استخدام هذه الأمثلة كنقطة انطلاق وتعديلها وفقًا لاحتياجاتك.
  7. MathType هو برنامج يسمح لك بإنشاء وتحرير الصيغ الرياضية في مستندات الوورد والويب. يمكنك استخدام MathType مع PHP عن طريق استخدام البرمجة المباشرة للاتصال بالبرنامج وتوليد الصيغ الرياضية. لربط برنامج MathType بموقع مكتوب باستخدام PHP، يجب تنفيذ الخطوات التالية: 1- تأكد من أن برنامج MathType مثبت على جهاز الخادم الخاص بك. تنزيل إضافة mbstring: هي إضافة PHP مهمة تتيح العمل مع النصوص المتعددة البايت. يمكن تنزيلها عن طريق مدير حزم PHP أو بتثبيتها يدويًا. نسخ المجلد generic_wiris: هو المجلد الذي يحتوي على ملفات MathType الأساسية. يمكن العثور عليها في مجلدات الإضافة المثبتة لـ MathType. يجب نسخ هذا المجلد ووضعه في ال root الخاص بالخادم. تهيئة الملف configuration.ini: يحتوي هذا الملف على الإعدادات الأساسية لنظام MathType. يجب فتحه وضبط الإعدادات التي تريدها، مثل نوع الرسومات وحجم الخط ولغة العرض وغيرها. تهيئة صلاحيات المستخدم: يجب أن يكون للمستخدم صلاحيات تنفيذ لمحتويات المجلد generic_wiris/integration. هذا يمكن تحقيقه عن طريق تعيين الصلاحيات الصحيحة للملفات والمجلدات. 2- قم بإنشاء نموذج HTML يحتوي على مربع نص يحتوي على صيغة رياضية تريد إدراجها باستخدام MathType. في هذا المثال، نحن سنستخدم مكتبة jQuery للوصول إلى مربع النص وإرسال النص إلى برنامج MathType. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>MathType Demo</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script type="text/javascript" src="http://localhost/mathtype/MathType.js"></script> </head> <body> <input type="text" id="mathInput" name="mathInput" /> <button onclick="sendToMathType()">Insert MathType Formula</button> <script> function sendToMathType() { var mathText = $('#mathInput').val(); if (mathText !== '') { var mathML = MathType.ConvertEquation(mathText, "MathML"); window.opener.InsertMathML(mathML); window.close(); } } </script> </body> </html> 3- تنفيذ الاتصال مع برنامج MathType باستخدام PHP. في هذه المرحلة، يتم إرسال النص من النموذج إلى PHP ومن ثم يتم إرساله إلى MathType للتحويل إلى صيغة MathML. <?php // تأكد من أن $mathInput هو اسم حقل نص الرياضيات في النموذج الخاص بك. $mathInput = $_POST['mathInput']; // قم بإرسال نص الرياضيات إلى MathType لتحويله إلى MathML. $url = 'http://localhost/mathtype/MTScript.php?equation=' . urlencode($mathInput) . '&format=MathML'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); // يجب عرض نتيجة MathML على صفحة الويب باستخدام العلامة <math> المدعومة بالمتصفح. // يمكن استخدام النص المنتج لإنشاء العلامة <math> المطلوبة باستخدام PHP DOMDocument. $dom = new DOMDocument(); $dom->loadXML($result); $mathml = $dom->saveXML($dom->getElementsByTagName('math')->item(0)); // ثم قم بعرض النتيجة على صفحة الويب باستخدام علامة <math> في النموذج الخاص بك. echo '<div>' . $mathml . '</div>'; ?> يرجى ملاحظة أن الكود يستخدم cURL للاتصال بـ MathType على localhost. قم بتعديل عنوان URL في حال كان يتم استضافة MathType على مضيف آخر. بعد ذلك، يمكننا استخدام دالة urlencode لترميز الصيغة ليتم إرسالها بشكل صحيح في الطلب الذي سيتم إرساله لموقع مكتوب. وبعد ذلك، يمكن استخدام دالة file_get_contents لجلب النتيجة من موقع مكتوب، وفك ترميز النتيجة باستخدام دالة urldecode. وفيما يلي الكود الذي يقوم بإجراء كل هذه الخطوات: // تعريف الصيغة $formula = 'x^2 + y^2 = z^2'; // ترميز الصيغة $encoded_formula = urlencode($formula); // جلب النتيجة من موقع مكتوب $url = 'http://www.sitename.com/cgi-bin/mathtype.cgi?eq=' . $encoded_formula; $result = file_get_contents($url); // فك ترميز النتيجة $decoded_result = urldecode($result); // طباعة النتيجة echo $decoded_result; يمكن تغيير قيمة المتغير $formula إلى أي صيغة رياضية أخرى، وستتم معالجتها بنفس الطريقة. ويمكن أيضًا تعديل قيمة المتغير $url ليشير إلى الموقع الذي يتم فيه استضافة برنامج MathType.
  8. لتحقيق هذا الهدف، يمكنك استخدام خاصية "exclude" في webpack لإخراج هذه الملفات من عملية التجميع. يمكنك تعديل قواعد Webpack الخاصة بك كما يلي: module: { rules: [ { test: /\.(ts|json)$/i, exclude: /src\/api\/mock/, use: [ // add your loader(s) here ], }, ], }, في هذا المثال، سيتم استبعاد أي ملف ينتهي بامتداد .ts أو .json من المجلد "src/api/mock" من عملية التجميع. يرجى ملاحظة أن خاصية "exclude" تستخدم الآن مع تعبيرات العادات النمطية (regular expressions) بدلاً من السلسلة النصية التي تم استخدامها في السؤال الأصلي. بمجرد استخدام هذه القاعدة، يجب أن تلاحظ أن Webpack لن يتضمن أيًا من ملفات ts أو JSON في مجلد "src/api/mock" في ملفات الإنتاج النهائية.
  9. يمكنك تحقيق هذا الأمر باستخدام CSS. يمكنك استخدام خاصية background-size لتحديد حجم الخلفية وتعديلها حتى تملأ الجانب الأيمن من الصفحة. يمكنك استخدام القيمة "cover" لتعديل حجم الخلفية حتى تملأ الصفحة بالكامل بما فيها الجانب الأيمن. على سبيل المثال، يمكنك استخدام الكود التالي في CSS: body { background-image: url("your-background-image.jpg"); background-size: cover; background-position: center; } حيث "your-background-image.jpg" هو اسم ملف الصورة الخاص بالخلفية الذي تريد استخدامه. تعديل قيمة background-position إذا كنت تريد تغيير موضع الصورة. هذا الكود سيجعل الخلفية تملأ الصفحة بالكامل بما فيها الجانب الأيمن.
  10. الخطأ الموجود في ملف upload.js يحدث بسبب عدم العثور على الكائن Dropzone، وهو غالبًا يعني عدم تحميل المكتبة المطلوبة بشكل صحيح. يجب التأكد من أن تم تضمين مكتبة Dropzone بشكل صحيح قبل استخدامها. يمكن حل هذا الخطأ بتأكد من تضمين مكتبة Dropzone بشكل صحيح في صفحة HTML الخاصة بالتطبيق. يمكنك استخدام CDN لتحميل مكتبة Dropzone من الإنترنت أو تضمين الملفات المطلوبة محليًا إذا كانت موجودة بالفعل في المشروع. وإليك مثال. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>My Upload Page</title> <!-- قم بتضمين Dropzone CSS --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.9.3/dropzone.min.css" /> </head> <body> <h1>Upload Your Files Here</h1> <form action="/upload" class="dropzone"></form> <!-- قم بتضمين Dropzone JS --> <script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.9.3/min/dropzone.min.js"></script> <script src="./upload.js"></script> </body> </html> في هذا المثال، يتم تضمين مكتبة Dropzone باستخدام CDN عن طريق وضع روابط CSS و JS في الصفحة HTML. Dropzone.autoDiscover = false; const myDropzone = new Dropzone('.dropzone', { url: '/upload', success: function(file, response) { console.log('Upload success', response); }, error: function(file, response) { console.error('Upload error', response); } }); يتم استخدام الأمر Dropzone.autoDiscover = false; لمنع Dropzone من البحث عن عناصر HTML التي يمكن تحويلها إلى مناطق إسقاط، ويتم إنشاء منطقة الإسقاط باستخدام الفئة .dropzone في عنصر النموذج. يتم تعيين مسار العمل المطلوب للإرسال إلى الخادم في خاصية url. يمكن تحديد مزيد من الإعدادات والخيارات لـ Dropzone باستخدام خيارات التكوين المختلفة. للمزيد:
  11. الدالة findOdd تستقبل مصفوفة (Array) A وتقوم بإرجاع العدد الذي يحدث فيه تكرارات فردية. مثلاً إذا كانت المصفوفة A هي [1, 2, 3, 2, 3, 1, 3]، فإن الدالة ستعيد القيمة 3، لأن العدد 3 هو الوحيد الذي يتكرر في المصفوفة بتكرار فردي. الكود يبدأ بتعريف دالة جديدة تسمى count والتي تستقبل مصفوفة (Array) arr وقيمة val، وتقوم بإرجاع عدد مرات تكرار val في المصفوفة arr. وتستخدم الدالة filter لتصفية القيم التي تساوي val ومن ثم حساب طول المصفوفة الناتجة. بعد ذلك، يتم تعريف متغير target وتعيينه بقيمة الصفر. تمر الدالة forEach على كل عنصر في المصفوفة A، وتستخدم دالة count لحساب عدد مرات تكرار العنصر في المصفوفة A. ثم يتم فحص ما إذا كان هذا العدد فرديًا أم لا، وذلك باستخدام العملية الرياضية % للتحقق مما إذا كان العدد الذي يمثل تكرارات العنصر في المصفوفة زوجيًا أم لا. إذا كان عدد التكرارات فرديًا، يتم تعيين قيمة العنصر الموجود حاليًا في الدورة الحالية إلى المتغير target. أخيراً، تعيد الدالة قيمة المتغير target الذي يمثل العدد الذي يحدث فيه تكرارات فردية في المصفوفة. المثال السابق: في الدورة الأولى، سيتم حساب عدد مرات تكرار الرقم 1، الذي يساوي 2، لأن الرقم 1 يتكرر مرتين في المصفوفة A. في الدورة الثانية، سيتم حساب عدد مرات تكرار الرقم 2، الذي يساوي 2، لأن الرقم 2 يتكرر مرتين في المصفوفة A. في الدورة الثالثة، سيتم حساب عدد مرات تكرار الرقم 3، الذي يساوي 3، لأن الرقم 3 يتكرر ثلاث مرات في المصفوفة A. في الدورة الرابعة، سيتم حساب عدد مرات تكرار الرقم 2 مرة أخرى، الذي يساوي 2، لأن الرقم 2 يتكرر مرتين في المصفوفة A. في الدورة الخامسة، سيتم حساب عدد مرات تكرار الرقم 3 مرة أخرى، الذي يساوي 3، لأن الرقم 3 يتكرر ثلاث مرات في المصفوفة A. في الدورة السادسة، سيتم حساب عدد مرات تكرار الرقم 1 مرة أخرى، الذي يساوي 2، لأن الرقم 1 يتكرر مرتين في المصفوفة A. في الدورة السابعة، سيتم حساب عدد مرات تكرار الرقم 3 مرة أخرى، الذي يساوي 3، لأن الرقم 3 يتكرر ثلاث مرات في المصفوفة A. بعد ذلك، سيتم فحص ما إذا كان العدد الذي تم حساب تكراراته فرديًا أم لا باستخدام الشرط count(A, arrnum) % 2 !== 0، وإذا كانت الشرط صحيحة، فإن قيمة العدد الذي يمثل تكراراته ستتم تعيينها إلى المتغير target. أخيرًا، يتم إرجاع قيمة المتغير target الذي يمثل العدد الذي يحدث فيه تكرارات فردية في المصفوفة A. إذا قمت بتنفيذ الدالة findOdd([1, 2, 3, 2, 3, 1, 3])، فستعيد الدالة القيمة 3، لأن العدد 3 هو العدد الذي يتكرر في المصفوفة 3 مرات، وهو يحدث فيه تكرارات فردية.
  12. نعم، هناك عدة أشياء يمكنك التحقق منها قبل شراء استضافة من شركة GoDaddy لضمان أنها تلبي احتياجات مشروع Next.js الخاص بك، وتشمل هذه الأشياء: دعم Node.js: تأكد من أن GoDaddy تدعم Node.js على الخوادم الخاصة بها، وأن الإصدار المدعوم هو الإصدار الذي يدعمه مشروع Next.js الخاص بك. السعر والتكلفة: تأكد من أن تكلفة الاستضافة من GoDaddy تتناسب مع ميزانيتك، وأنه لا توجد تكاليف مخفية أو رسوم إضافية غير متوقعة. الأمان: تحقق من أن GoDaddy توفر خدمات أمنية مثل الحماية من الاختراق والنسخ الاحتياطي المنتظم للبيانات الخاصة بك. الدعم الفني: تحقق من أن GoDaddy توفر دعمًا فنيًا على مدار الساعة، ويفضل أن يكون هذا الدعم عبر الهاتف أو الدردشة المباشرة. سمعة الشركة: تحقق من سمعة GoDaddy في السوق والمراجعات التي تم نشرها على الإنترنت، والتي يمكن أن تساعدك في تقييم جودة الخدمات التي تقدمها الشركة. بعد التحقق من هذه الأمور وتأكد من أن GoDaddy تلبي احتياجات مشروع Next.js الخاص بك، يمكنك شراء خطة استضافة منها ورفع مشروع Next.js الخاص بك على الخوادم الخاصة بها. و النقاط التي ذكرتها متوفرة في منصة GoDaddy حيث تدعم Node.js، وتوفر خيارات استضافة بتكلفة معقولة، وتوفر خدمات أمنية ودعم فني على مدار الساعة، ولديها سمعة جيدة في السوق. لذلك، يمكنك الاعتماد على GoDaddy لرفع مشروع Next.js الخاص بك على الإنترنت. ومع ذلك، يمكنك البحث عن مزودي خدمات استضافة أخرى ومقارنة الميزات والأسعار لضمان اختيار الخيار الأفضل لمشروعك. يمكنك رفع مشروع Next.js على GoDaddy باستخدام الخطوات التالية: قم بتسجيل الدخول إلى حساب GoDaddy الخاص بك. اختر خيار "استضافة المواقع" من القائمة الرئيسية. انتقل إلى صفحة "الملفات" وانقر على زر "إنشاء مجلد جديد" لإنشاء مجلد جديد لمشروعك. ارفع ملفات مشروع Next.js الخاص بك إلى المجلد الجديد باستخدام خيار "رفع الملفات". انتقل إلى صفحة "تكوينات node" وانقر على زر "إضافة تكوين جديد" لإنشاء تكوين جديد لمشروعك. قم بتحديد مجلد الرئيسي لمشروعك وأدخل الإصدار المناسب من Node.js في الحقل المخصص. احفظ التكوين الجديد وانتظر قليلاً حتى يتم تنشيطه. انتقل إلى صفحة "DNS" وانقر على زر "إضافة سجل" لإضافة سجل CNAME جديد. أدخل اسم المضيف المطلوب (على سبيل المثال، اسم مجلد مشروعك) وقم بإدخال "القيمة" باستخدام عنوان IP الخاص بموقع GoDaddy الخاص بك. احفظ الإعدادات وانتظر قليلاً حتى تتم مزامنة التغييرات. انتقل إلى متصفح الويب الخاص بك وأدخل عنوان المضيف الجديد الذي أنشأته في الخطوة 9. بهذه الطريقة، يمكنك رفع مشروع Next.js الخاص بك على GoDaddy وجعله متاحاً عبر الإنترنت. يرجى ملاحظة أنه قد تختلف الخطوات المحددة قليلاً اعتمادًا على نوع الاشتراك الذي اشتريته من GoDaddy.
  13. يصعب الجزم أي الطرق أفضل إلا بعد تحديد ما الهدف من تلك الأزرار وكيف سيتم عرضها وأحجام الشاشات التي يتطلب دعمها. الكود الذي تم توفيره هو لسطح المكتب فقط ولحل المشكلة المعروضة.
  14. يبدو أن هناك مشكلة في إنشاء ملف التوقيع الخاص بتطبيقك. يمكنك محاولة تشغيل التطبيق باستخدام إعدادات التوقيع الافتراضية المؤقتة لحل المشكلة مؤقتًا وتمكينك من تشغيل التطبيق على الأجهزة المحلية. 1. لفعل ذلك، يمكنك تنفيذ الخطوات التالية: 2. انتقل إلى مجلد المشروع على جهاز الكمبيوتر الخاص بك. 3. في مجلد المشروع، ابحث عن ملف build.gradle وافتحه باستخدام محرر النصوص المفضل لديك. 4. ابحث عن القسم signingConfigs وتأكد من أن جميع القيم المطلوبة معبأة بشكل صحيح. أضف الكود التالي في ملف build.gradle داخل القسم android: signingConfigs { debug { storeFile file('debug.keystore') storePassword 'android' keyAlias 'androiddebugkey' keyPassword 'android' v1SigningEnabled true v2SigningEnabled true } } buildTypes { debug { signingConfig signingConfigs.debug } } 5. حفظ الملف. 6. في نافذة Android Studio، قم بالنقر فوق Build من القائمة العلوية ، ثم Clean Project. 7. قم بالنقر فوق Build ، ثم Rebuild Project. 8. قم بتشغيل التطبيق مرة أخرى. إذا استمرت المشكلة، فيمكنك تشغيل الأمر --stacktrace لعرض المزيد من المعلومات عن المشكلة. وأيضًا قم بالرجوع إلى الإجابات على السؤال التالي وتجربة الحلول المطروحة في حال استمرار المشكلة.
  15. لتصميم تطبيقات الجوال، هناك العديد من اللغات والأطر البرمجية (Frameworks) المختلفة التي يمكن استخدامها، ولكن الخيار المناسب يعتمد على الاحتياجات والمتطلبات الخاصة بالتطبيق. تعلم لغة Java وتصميم التطبيقات بها يمكن أن يساعدك على فهم مفاهيم البرمجة والتصميم بشكل عام، حيث أن Java تستخدم على نطاق واسع في تطوير تطبيقات الجوال وتطبيقات الويب، ولها مجموعة قوية من المكتبات والأطر البرمجية المتاحة للمطورين. بالنسبة لتعلم لغة Dart واستخدام إطار العمل Flutter، فهو خيار آخر جيد. فFlutter هو إطار عمل قوي وشامل لتطوير تطبيقات الجوال، ويتميز بواجهات المستخدم المرنة والجميلة والأداء العالي، كما يتيح Flutter تطوير تطبيقات تعمل على نظامي التشغيل iOS و Android، بحيث يمكنك إنشاء تطبيق واحد يعمل على كلا المنصتين. يمكنك البدء بتعلم أيٍ من هاتين اللغتين وإطار العمل الخاص بها والتعرف على المكتبات والأدوات المتاحة لكل منهما. وبالتالي يمكنك اختيار الخيار الأنسب بناءً على الاحتياجات الخاصة بالتطبيق الذي تريد تطويره، ومدى قدرتك على التعامل مع المكتبات والأدوات المختلفة، وبالتالي تحديد الخيار الذي يناسبك أفضل من حيث الإنتاجية والجودة. وإذا كنت في البداية وتريد تعلم البرمجة فيجب عليك قراءة المقالات التالية فسترشدك إلى الطريق السليم. ويمكنك الرجوع إلى الإجابات على السؤال التالي: وهناك دورة في حسوب لتطوير التطبيقات، ستتعلم منها ما تريد. https://academy.hsoub.com/learn/javascript-application-development/
  16. في حالة وجود margin-bottom سيوجد مسافة في النهاية خاصة بعنصر a الأخير وهو ما لا نريده، ففي الصورة المطلوبة يريد حذف المسافات بالكامل، الكود سليم ويمكن إصلاحه من خلال تعديل كود css بإضافة: .qlink:not(:last-child){ margin-bottom: 7px; } ويصبح كود CSS كالتالي: .box{ border-style:solid; display: inline-block ; } .qlink { display:block; text-align:center; color: white; width: 150px; padding:16px 0; text-decoration:none; font-size: 12px; font-weight: bold; background-color: #1F70C4; } .qlink:not(:last-child){ margin-bottom: 7px; } .qlink:hover {background: #2484E9;} .qlink:active {background: #155292;} وفي حال أراد السائل إبقاء الكود الخاص به كما هو، فيجب تعديله ليصبح بالشكل التالي: HTML <div class='container'> <a href="https://google.com/1"> <button class="qlink">Awards</button> </a> <a href="https://google.com/2"> <button class="qlink">Directory</button> </a> <a href="https://google.com/3"> <button class="qlink">Patent</button> </a> <a href="https://google.com/4"> <button class="qlink">Calendar</button> </a> <a href="https://google.com/5"> <button class="qlink">Leave Request Tool</button> </a> <a href="https://google.com/6"> <button class="qlink">Publications</button> </a> </div> CSS div { width: max-content; text-align: center; border-style:solid; margin: auto; } .qlink { border: none; background-color: #1F70C4; color: white; height: 35px; width: 150px; font-size: 12px; display: inline-block; font-weight: bold; } .qlink:hover {background: #2484E9;} .qlink:active {background: #155292;} فالمشكلة كانت في إزالة الـ margin الخاصة بالأزرار ثم ضبط عرض الـ div الأب الذي يحوي كافة العناصر ليصبح عرضه هو نفس عرض المحتوى بداخله من خلال width: max-content;
  17. المشكلة في إعدادات Webpack. يجب أن تكون إعدادات الإخراج في Webpack تطابق المسار الذي يتم استخدامه في ملف الخادم (server) Express. عندما تحاول الوصول إلى ملف "index_bundle.js" من ملف Express، يجب أن تكون الإعدادات الخاصة بمسار الإخراج في Webpack مطابقة للمسار الذي يتم استخدامه في الصفحة HTML. في هذه الحالة، يجب على Webpack إخراج الملف إلى المسار "public/index" ويجب أن يتم الوصول إليه عبر المسار "/public/index/index_bundle.js". لحل المشكلة، يجب تغيير إعدادات الإخراج في Webpack كما يلي: module.exports = { entry: './app/index/index.js', output: { path: path.resolve(__dirname, 'public/index'), publicPath: '/public/index/', // تغيير المسار إلى "/public/index/" filename: 'index_bundle.js' }, // ... }; ومن ثم يجب استخدام هذا المسار في Express: app.use("/public/index", express.static(__dirname + "/public/index")); // استخدام "/public/index" بدلاً من "/" وبذلك يجب أن يكون بإمكانك الآن الوصول إلى "index_bundle.js" عبر المسار "http://localhost:3000/public/index/index_bundle.js".
  18. لتمكين التحديث التلقائي (hot reloading) في webpack-dev-server ، يجب إضافة خيار --hot إلى أمر البدء (start script) في package.json كما يلي: "scripts": { "start": "webpack-dev-server --mode development --inline --progress --hot", "build": "webpack --mode production" }, بمجرد إضافة --hot ، سيتم تشغيل خادم التطوير بشكل تلقائي ويقوم بالتحديث التلقائي للملفات بمجرد حفظ التغييرات. إذا كنت ترغب في تشغيل التحديث التلقائي لـ webpack-dev-server عند استخدام VSCode، يمكنك استخدام ميزة "Tasks" الخاصة بـ VSCode. يمكنك إنشاء مهمة تشغيل webpack-dev-server في ملف tasks.json في مجلد .vscode في مشروعك. يمكنك إنشاء الملف بنفسك من خلال القائمة المنسدلة Terminal في القائمة الرئيسية، ثم اختيار Configure Tasks وإنشاء ملف جديد. يجب أن تكون هذه هي المهمة التي يجب تضمينها في tasks.json: { "version": "2.0.0", "tasks": [ { "label": "start", "type": "npm", "script": "start", "group": { "kind": "build", "isDefault": true }, "problemMatcher": "$tsc" } ] } في هذه الحالة، ستعمل هذه المهمة على تشغيل الأمر npm start والذي يشغل webpack-dev-server. عند الانتهاء من إنشاء الملف، يمكنك تشغيل المهمة من خلال الضغط على Ctrl+Shift+B في VSCode، واختيار المهمة start، مما سيقوم بتشغيل webpack-dev-server والسماح لك بالتحديث التلقائي.
  19. لا يمكن استخدام "mailto:" في عنوان الإجراء (action) في النموذج لإرسال البريد الإلكتروني من خلال الجانب العميل (المتصفح)، بل يستخدم فقط لفتح برنامج البريد الإلكتروني على الكمبيوتر المحلي. لا يمكن استخدام JavaScript وحده لإرسال رسائل بريد إلكتروني من المستخدم مباشرةً، لأن JavaScript لغة برمجة تعمل على الجانب العميل (المتصفح) وليست على الخادم. ومع ذلك، يمكن استخدام JavaScript لإرسال طلب إلى الخادم ليتم معالجتها هناك. يمكن تنفيذ نموذج البريد الإلكتروني باستخدام HTML و CSS و JavaScript بالشكل التالي، لكن سيتطلب معالجة البيانات المرسلة بواسطة php او node.js في الخلفية: HTML: <form id="email-form" method="POST"> <label for="email">البريد الإلكتروني:</label> <input type="email" id="email" name="email" placeholder="ادخل بريدك الإلكتروني" required> <button type="submit" id="submit-btn">اشتراك</button> </form> <div id="success-msg" class="hidden">تم إرسال البريد الإلكتروني بنجاح.</div> <div id="error-msg" class="hidden">حدث خطأ أثناء إرسال البريد الإلكتروني، يرجى المحاولة مرة أخرى.</div> CSS: .hidden { display: none; } JavaScript: const form = document.querySelector('#email-form'); const submitBtn = document.querySelector('#submit-btn'); const successMsg = document.querySelector('#success-msg'); const errorMsg = document.querySelector('#error-msg'); form.addEventListener('submit', function(event) { event.preventDefault(); const emailInput = document.querySelector('#email'); const emailValue = emailInput.value; fetch('path/to/email/handler.php', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: `email=${emailValue}` }) .then(response => { if (response.ok) { // إخفاء زر الإرسال وعرض رسالة النجاح submitBtn.classList.add('hidden'); successMsg.classList.remove('hidden'); } else { // إخفاء زر الإرسال وعرض رسالة الخطأ submitBtn.classList.add('hidden'); errorMsg.classList.remove('hidden'); } }) .catch(error => { console.error(error); // إخفاء زر الإرسال وعرض رسالة الخطأ submitBtn.classList.add('hidden'); errorMsg.classList.remove('hidden'); }); }); يستخدم fetch() لإرسال طلب POST إلى ملف المعالجة handler.php، مع إرفاق رأس Content-Type والجسم المحتوي على بيانات البريد الإلكتروني. يتم التعامل مع الاستجابة باستخدام then()، حيث يتم التحقق من معلومة الحالة للاستجابة وإظهار رسالة النجاح أو الخطأ وفقًا لذلك. يتم التعامل مع أي أخطاء باستخدام catch()، حيث يتم عرض رسالة الخطأ في هذه الحالة. يمكن تغيير الملف المعالج و Content-Type حسب حاجتك وتكوين الخادم الذي تستخدمه. هناك العديد من خدمات ومواقع البريد الإلكتروني الذي يمكن استخدامها لإضافة نماذج الاشتراك على موقعك بدون الحاجة إلى كتابة الكود بنفسك. هذه الخدمات عادةً ما تتيح إنشاء نماذج الاشتراك بسهولة وبشكل سريع، ويتم تضمينها في موقعك باستخدام قطعة من الكود الذي توفره الخدمة. ومن بين الخدمات المشهورة لذلك: Mailchimp: يتيح Mailchimp إنشاء نماذج الاشتراك المخصصة التي يمكن تضمينها في موقعك باستخدام كود HTML الذي توفره الخدمة. Constant Contact: هذه الخدمة تتيح إنشاء نماذج الاشتراك بشكل سهل وبدون الحاجة إلى كتابة الكود بنفسك. AWeber: هذه الخدمة تتيح إنشاء نماذج الاشتراك المخصصة بسهولة وتضمنها في موقعك باستخدام الكود HTML الذي توفره الخدمة. GetResponse: يتيح GetResponse إنشاء نماذج الاشتراك المخصصة التي يمكن تضمينها في موقعك باستخدام كود HTML الذي توفره الخدمة. هذه الخدمات لها تكاليف، وتختلف الأسعار والميزات المتاحة في كل منها. يمكنك البحث عن خدمة مناسبة لاحتياجاتك وميزانيتك.
  20. عندما تستورد الصورة باستخدام import كما فعلت في Img ، فإن Webpack يأخذ الملف المحدد ويقوم بتضمينه في ملف الإخراج (bundle.js) كما هو مفصل في الخيار type: 'asset/resource' الموجود في ملف webpack.config.js الخاص بك. عند استخدام مسار نسبي للصورة كما هو موضح في option-2 ، فإن Webpack لا يستطيع العثور على الملف لأنه يحاول البحث عنه في مجلد الإخراج (dist) وليس في مجلد الصور الخاص بالتطبيق (images). لتجنب هذا الخطأ، يمكنك استخدام مسارات نسبية مع webpack باستخدام publicPath في output، والذي يتم تعيينه إلى './' لجعل الملفات الموجودة في مجلد الصور الخاص بك متاحة للتطبيق. يمكنك أيضًا إضافة publicPath في file-loader كما يلي: { test: /\.(png|svg|jpg|jpeg|gif)$/i, type: 'asset/resource', generator: { filename: 'static/images/[hash][ext][query]' }, publicPath: './' }, عند الانتهاء من ذلك ، يجب أن يعمل الأمر عند استخدام المسار النسبي: <img src='./images/test.jpg' alt="test-2" /> وتأكد من تأكيد وجود مجلد static/images في مجلد الإخراج (dist).
  21. في البداية إذا أردت التحكم في جهازك عن بعد فقط، فيمكنك استخدام برامج مثل TeamViewer وتركها تعمل على الجهاز والدخول عليه بواسطة الـ IP وباستطاعتك تعيين كلمة سر. أما تحويل جهازك إلى سيرفر عام يمكن أن يتم باستخدام بعض البرامج المجانية التي تمكنك من إعداد خادم على جهازك الخاص وجعله متاحًا للوصول من أي جهاز آخر على شبكة الإنترنت. سأشرح لك الخطوات الأساسية اللازمة لتحقيق ذلك: 1- تثبيت برنامج خادم الويب: يمكن استخدام أي برنامج خادم ويب مثل XAMPP أو WAMP أو Apache أو laragon لإنشاء خادم ويب. يوفر هذا البرنامج خادم ويب وقاعدة بيانات و PHP. يمكنك تنزيل البرنامج من موقع الويب الرسمي وتثبيته على جهازك. 2- اختبار الويب سيرفر: يجب التأكد من أن الويب سيرفر يعمل بشكل صحيح على جهازك. يمكن القيام بذلك عن طريق فتح متصفح وزيارة localhost. 3- تعيين عنوان IP ثابت لجهازك: تعيين عنوان IP الثابت يعني تحديد عنوان الإنترنت الخاص بجهاز الكمبيوتر الخاص بك بشكل دائم، والذي يتم تعيينه يدويًا. يختلف هذا عن العنوان الديناميكي الذي يتم تعيينه تلقائيًا عند الاتصال بالإنترنت. بعد تثبيت برنامج الخادم الخاص بك، سيكون من الضروري تعيين عنوان IP الثابت لجهاز الكمبيوتر الخاص بك، حيث يمكن استخدام هذا العنوان للوصول إلى جهاز الكمبيوتر الخاص بك عبر الشبكة. ومن أجل ذلك يمكنك العثور على إعداد تعيين العنوان الثابت في قسم الشبكة في إعدادات جهاز الكمبيوتر الخاص بك. 4- إعداد المنافذ اللازمة: يجب فتح المنافذ الخاصة بالويب سيرفر على جدار الحماية الخاص بالجهاز، للسماح لأي شخص في الشبكة بالوصول إلى الويب سيرفر. يجب فتح المنافذ 80 لبرتوكول HTTP و 443 لبروتوكول HTTPS. سأشرح الخطوات اللازمة لفتح المنافذ على راوتر من نوع TP-Link Archer C7. تسجيل الدخول إلى لوحة التحكم الخاصة بالراوتر: افتح متصفح الويب الخاص بك واكتب عنوان IP الافتراضي الخاص بالراوتر في شريط العنوان (عادةً ما يكون 192.168.0.1 أو 192.168.1.1). سيطلب منك إدخال اسم مستخدم وكلمة مرور لتسجيل الدخول إلى لوحة التحكم. الوصول إلى قسم إعدادات المنافذ: بمجرد تسجيل الدخول إلى لوحة التحكم، انتقل إلى قسم "Advanced" (متقدم) ثم اختر "Port Forwarding" (توجيه المنافذ). إضافة إعدادات التوجيه: اختر "Add New" (إضافة جديدة) لإنشاء إعدادات التوجيه الجديدة. سيطلب منك تحديد اسم الجهاز (عادةً ما يكون اسم الخادم) وعنوان IP الخاص بالجهاز (عنوان IP الثابت الذي قمت بتعيينه سابقًا) ورقم المنفذ الداخلي والخارجي. حفظ الإعدادات: بعد إدخال جميع التفاصيل اللازمة، انقر على "Save" (حفظ) لحفظ الإعدادات الجديدة. ستحتاج إلى تكرار هذه الخطوات لإضافة إعدادات توجيه منفذ إضافية. التأكد من البورتات التي تم فتحها من خلال التوجه لموقع https://portchecker.co/checking وستجد أنه تعرف على الـ public IP الخاص بجهازك ما عليك سوى كتابة بورت 80 ثم اضغط على check وكرر نفس الأمر مع بورت 443 وتأكد من ظهور كلمة port x is open. من المهم ملاحظة أن إعدادات توجيه المنافذ يمكن أن تختلف قليلاً بين الراوترات المختلفة، ومن المهم أيضًا إتباع الإرشادات الخاصة بالراوتر الخاص بك للتأكد من تمكين توجيه المنافذ بطريقة صحيحة. 5- تفعيل خدمة DNS: بعد الانتهاء من إعداد إعدادات الراوتر وتحديد عنوان IP الخاص بالجهاز الخادم، يمكنك استخدام DNS لتسهيل عملية الوصول إلى الخادم. يمكنك استخدام خدمات DNS المجانية مثل No-IP أو DynDNS لتسجيل عنوان IP الخاص بالخادم الخاص بك وربطه بعنوان URL سهل الاستخدام. وسبب القيام بتلك الخطوة هو ربط الـ public IP باسم دومين أو عنوان URL يمكنك كتابته والدخول على جهازك عن بعد، فربما بعد إعادة تشغيل الراوتر قد يتغير الـ public IP، ويمكنك الحصول من مزود الخدمة على static IP. الخطوات لاستخدام DNS هي كالتالي: قم بإنشاء حساب على موقع خدمة DNS المختارة والأفضل No-IP لكونها مجانية. أدخل اسم النطاق الذي تريد استخدامه واتبع التعليمات لربط عنوان IP الخاص بالخادم بالاسم المستخدم في النطاق. تأكد من تحديث إعدادات الراوتر الخاص بك للسماح بمرور حركة المرور المرتبطة بـ DNS من الخارج إلى الجهاز الخادم. قم بتنزيل برنامج العميل الذي يقدمه موقع خدمة DNS المختارة وتثبيته على الجهاز الخادم. سيتم تشغيل هذا البرنامج في الخلفية وسيقوم بتحديث عنوان IP الخاص بالخادم بشكل دوري. يمكنك الآن الوصول إلى الخادم باستخدام عنوان URL المحدد لخدمة DNS المستخدمة.
  22. هناك العديد من الخيارات المتاحة لاستضافة تطبيقات Next.js على الإنترنت، ويمكن الاختيار بين خيارات مثل: Vercel: هي منصة استضافة خاصة بـ Next.js وتوفر دعمًا متميزًا لهذه التقنية وتقدم خدمة الاستضافة بشكل مجاني ومدفوع، وتسمح لإضافة عدد غير محدود من النطاقات. namecheap: تدعم شركة Namecheap استضافة تطبيقات Next.js وتوفر خيارات متعددة للخوادم المشتركة والخوادم الخاصة بأسعار مناسبة. يمكنك اختيار خطة استضافة تناسب احتياجاتك وميزانيتك، مع توفير خيارات متعددة للدفع ودعم فني متاح على مدار الساعة. Heroku: هي خدمة استضافة تدعم تقنية Node.js وتتميز بأنها سهلة الاستخدام وتوفر خدمة مدفوعة ومجانية. DigitalOcean: هي خدمة استضافة توفر خيارات متعددة للاستضافة بدءًا من الخوادم الافتراضية حتى الخوادم الخاصة والاستضافة المدارة، وتوفر دعمًا لتقنية Node.js و Next.js، ويمكن إضافة عدد غير محدود من النطاقات. AWS Elastic Beanstalk: هي خدمة استضافة توفر دعمًا لتقنية Node.js و Next.js، وتسمح بإضافة عدد غير محدود من النطاقات، وتعتمد على سحابة Amazon Web Services (AWS)، وتوفر خيارات متعددة للتكوين والتوسع. Google Cloud Platform: هي خدمة استضافة توفر دعمًا لتقنية Node.js و Next.js، وتسمح بإضافة عدد غير محدود من النطاقات، وتتميز بأنها سهلة الاستخدام وتقدم خدمة مجانية ومدفوعة. Cloudflare Pages: يمكن لـ Cloudflare Pages دعم عدة نطاقات لتطبيق واحد، وتوفر خدمة CDN مدمجة لتحسين أداء التطبيقات، بالإضافة إلى أنها توفر عمليات نشر بسيطة وسهلة الاستخدام. وتوفر Cloudflare Pages خيارات دفع مختلفة مثل الاشتراك الشهري أو الدفع مقابل الاستخدام بأسعار تنافسية بالمقارنة مع خدمات الاستضافة الأخرى. Netlify: تعتبر Netlify مثالية للاستضافة السريعة والبسيطة لتطبيقات Next.js. توفر خططًا مجانية ومدفوعة ، ولكن يمكن أن تكون الخطط المدفوعة أكثر تكلفة. Linode: توفر Linode خدمة VPS مع خطط متعددة بأسعار مختلفة. تدعم Node.js ويمكن استخدامها لتشغيل تطبيقات Next.js. توجد العديد من الخيارات المتاحة لاستضافة تطبيقات Next.js، والخيار الأفضل يعتمد على ميزانيتك واحتياجاتك الفردية. من بين الخيارات التي تم ذكرها، Vercel هي الخيار الأكثر تخصصاً لاستضافة تطبيقات Next.js، وتقدم خدمة استضافة مدفوعة ومجانية مع دعم لإضافة عدد غير محدود من النطاقات.
  23. ممتاز، تعلم HTML و CSS هو الخطوة الأولى لتصميم وتطوير صفحات الويب، ولكن هناك الكثير من التقنيات والأدوات المختلفة التي يجب أن تتعلمها لتكون مطور ويب محترف. HTML و CSS ليستا لغات برمجة، إنما هما لغتان تستخدمان لتطوير صفحات الويب. HTML هي لغة ترميز النصوص التي تستخدم لتحديد هيكل صفحات الويب، بينما تستخدم CSS لتحديد التنسيقات والأساليب الجمالية لعرض محتوى الصفحة. بينما لغة JavaScript تعتبر لغة برمجة مستخدمة بشكل شائع في تطوير صفحات الويب وتطبيقات الويب. يمكن استخدام JavaScript لتوفير العديد من المزايا لصفحات الويب، بما في ذلك تحديث المحتوى ديناميكيًا وتفعيل العناصر التفاعلية. لذلك، إذا كان الشخص يرغب في تطوير صفحات الويب التفاعلية والديناميكية، فسيحتاج بالتأكيد إلى تعلم JavaScript. ولكن إذا أردت أن تأسيس نفسك بشكل قوي في البرمجة ولديك وقتٍ كافي لذلك، فأنصحك بفعل ذلك وبشدة والإتجاه نحو تعلم لغة C++ قبل تعلم JavaScript. وإذا أردت تعلم مجال الويب، إليك مسارًا كاملاً لتصبح مطور Full-stack لتتمكن من إنشاء مشروع كاملاً بمفردك: JavaScript: هي لغة برمجة تستخدم عادة لتطوير وظائف تفاعلية في صفحات الويب، مثل التحقق من الإدخالات وإضافة تأثيرات متحركة. لتعلم JavaScript. Bootstrap: هي إطار عمل لتصميم صفحات الويب تستخدمه العديد من المواقع الكبيرة، والذي يسهل عليك عملية تصميم الصفحات وجعلها تستجيب بشكل جيد على جميع الأجهزة المختلفة. tailwindcss: يمكنك تعلم tailwindcss بدلاً من Bootstrap فهى توفر مرونة أكبر في تخصيص التصميم وإعادة استخدام الأكواد في العديد من المشاريع المختلفة، حيث يمكن للمطورين تعريف مخصصاتهم الخاصة واستخدامها في أي مكان داخل التطبيق. Sass: هي لغة تعتمد على CSS، وتستخدم لتبسيط عملية كتابة الأنماط والتنسيقات في CSS، وتحسين إمكانية إعادة استخدام الشفرة. Git: هو نظام للتحكم في الإصدارات يستخدم لتتبع التغييرات في الشفرة المصدرية وإدارة تعاون فريق العمل على المشاريع. تعلم إطارات العمل (Frameworks): تعتبر إطارات العمل مجموعة من الأدوات والمكتبات التي تساعد المطورين في إنشاء تطبيقات الويب بسهولة وسرعة. بعض الإطارات الشائعة هي React.js و Angular و Vue.js. إطارات العمل الخاصة بالـ Back-End: يمكن استخدام إطارات العمل الخاصة بالـ Back-End مثل Node.js وإطار العمل الخاص بها Express.js لبناء تطبيقات ويب ديناميكية وقابلة للتوسع. تتيح هذه الإطارات العديد من المزايا مثل: القدرة على التعامل مع البيانات وقواعد البيانات باستخدام لغة جافاسكريبت على الجانب الخادم. القدرة على بناء API للتفاعل مع التطبيقات الأخرى وتوفير خدمات ويب. 8 - قواعد البيانات: يجب تعلم قواعد البيانات الحديثة والشائعة مثل MySQL أو MongoDB أو PostgreSQL. لتعلم العمل مع إطارات العمل الخاصة بالـ Back-End، يمكن البدء بتعلم الأساسيات في لغة جافاسكريبت ومفاهيم البرمجة الأساسية. بعد ذلك يمكن التحول إلى تعلم إطار العمل Node.js و Express.js، والتعلم عن كيفية التعامل مع البيانات والاتصال بقاعدة البيانات. من المهم أيضًا التعلم عن كيفية بناء API وتصميمها بشكل صحيح لتوفير خدمات ويب عالية الجودة وآمنة. يجب أيضًا تعلم الأمان والحماية وكيفية التعامل مع الأخطاء والأخطار المحتملة في تطوير تطبيقات الويب.
  24. إذا فهمت سؤالك بشكل صحيح، سأقوم بتقسيم الإجابة إلى جزئين على أي حال. الجزء الأول (الجانب البرمجي) التطبيقات مثل Apple Pay و STC Pay تسمى Fintech، وإليك الطريقة التي يتم إنشاء تلك التطبيقات بها بشكل مختصر: يتضمن الجانب الخاص بالبرمجة في إنشاء تطبيق مثل Apple Pay العديد من العناصر التقنية المهمة، ومن أهمها: لغات البرمجة: يجب اختيار اللغات البرمجية المناسبة لبناء تطبيق Apple Pay. يمكن استخدام Objective-C أو Swift لبرمجة تطبيقات iOS، بينما يمكن استخدام Java أو Kotlin لبرمجة تطبيقات Android. البرمجة النظيفة: يجب كتابة الكود بشكل نظيف ومنظم ومناسب للصيانة والتحسين فيما بعد، مما يسهل على المطورين العمل على المشروع بشكل أفضل في المستقبل. الواجهة البرمجية للتطبيق (API): يجب إنشاء واجهة برمجية تتيح للمستخدمين التفاعل مع التطبيق بشكل مريح وبسيط، وتوفير أدوات ووظائف تجعل استخدام التطبيق سهلاً وفعالاً. دمج الدفع: يتطلب إنشاء تطبيق مثل Apple Pay دمج وظيفة الدفع الآمن والموثوق به، وذلك من خلال استخدام البوابات الدفع الشهيرة مثل Stripe و PayPal وغيرها. الامتثال للمعايير الأمنية: يجب على المطورين الالتزام بالمعايير الأمنية الصارمة، مثل PCI DSS و GDPR، لتأمين المعلومات الحساسة وحماية البيانات الشخصية للمستخدمين. اختبار التطبيق: يجب إجراء اختبارات شاملة لتحقيق الجودة والموثوقية والأداء المطلوب للتطبيق، وذلك من خلال استخدام أدوات الاختبار المختلفة مثل Xcode و Android Studio. التطوير المستمر: يجب العمل على تطوير التطبيق باستمرار، وتحديثه وتطويره لتلبية متطلبات المستخدمين وتحسين الأداء والأمان و الاستجابة للتغييرات في البيئة التقنية والتحديثات الجديدة في الأجهزة والأنظمة الأساسية. يمكن تحقيق ذلك من خلال استخدام أساليب التطوير الحديثة مثل Agile وDevOps والعمل على تطبيق أفضل الممارسات في هذا المجال. بناء الخادم وقاعدة البيانات: يجب أن يتم تخزين معلومات العملاء بشكل آمن في قاعدة البيانات. يتطلب هذا إنشاء خادم واستضافة البيانات وضمان أمانها وحمايتها. بناء تطبيق الهاتف الجوال: يجب أن يتم برمجة تطبيق للهواتف الذكية يعمل بنظام iOS و Android. يجب أن يكون التطبيق متوافقًا مع مختلف أنواع الهواتف المحمولة. تكنولوجيا الاتصال اللاسلكي (NFC): يستخدم Apple Pay تقنية NFC لنقل المعلومات بين الهاتف الذكي وجهاز الدفع عند السداد. يجب عليك إضافة هذه التقنية إلى تطبيقك إذا كنت تريد إنشاء تطبيق مشابه. يجب الانتباه إلى أن إنشاء تطبيق مثل Apple Pay يحتاج إلى خبرة ومهارات تطويرية عالية، وموارد كبيرة للتطوير والتسويق والصيانة والدعم. الجزء الثاني (طريقة شحن الرصيد) تعتمد محافظ الكترونية مثل Apple Pay و STC Pay على تقنية الدفع الرقمي التي تستخدمها، والتي تتيح للمستخدمين إجراء المدفوعات الإلكترونية بشكل سهل وآمن. ولشحن رصيد المحافظ الإلكترونية، يمكن القيام بذلك من خلال الخطوات التالية لجميع المحافظ الإلكترونية بشكل عام: قم بتحميل تطبيق المحفظة الإلكترونية المناسبة على هاتفك الذكي. اختر الخيار "شحن الرصيد" أو "إضافة الأموال" في التطبيق. حدد المبلغ الذي ترغب في شحنه إلى محفظتك الإلكترونية. اختر طريقة الدفع المناسبة، والتي قد تشمل الدفع باستخدام بطاقة الائتمان أو الخصم المباشر أو خيارات أخرى مثل PayPal أو Apple Pay إذا كانت متاحة، وفي بعض البلاد العربية يمكن شحن المحافظ الإلكترونية نقدًا عن طريق فروع مزود الخدمة. قم بإدخال معلومات الدفع وتأكيد العملية. بالنسبة لمحفظة Apple Pay تستطيع شحن رصيدك في Apple Pay بسهولة باستخدام بطاقات الائتمان أو الخصم الخاصة بك التي تم تخزينها في محفظتك الرقمية. وفيما يلي خطوات شحن الرصيد في Apple Pay: قم بفتح تطبيق المحفظة على جهاز iPhone أو iPad الخاص بك. اختر بطاقة الائتمان أو الخصم التي ترغب في استخدامها لشحن الرصيد. انتقل إلى قسم "بطاقات" من التطبيق ، وانقر على "إضافة المال". اختر المبلغ الذي ترغب في إضافته إلى رصيد Apple Pay الخاص بك. انقر على "Apple Pay" باعتبارها طريقة دفع. أدخل معلومات الدفع وتأكد من صحتها، مثل رمز الأمان الثلاثي أو رمز التحقق المكون من 4 أرقام. انقر على "إضافة المال" وانتظر حتى تكتمل العملية. هناك طرق أخرى للشحن أيضًا مثل: الحوالة البنكية: يمكنك استخدام الحوالة البنكية لشحن رصيد في Apple Pay، وذلك عن طريق إضافة حساب البنك إلى التطبيق ومن ثم تحويل المبلغ المراد شحنه إلى حساب Apple Pay. تطبيقات الدفع الإلكتروني الأخرى: توجد العديد من التطبيقات الأخرى التي تتيح شحن رصيد في Apple Pay، مثل PayPal وVenmo وCash App وغيرها، ويمكن استخدامها لنقل الأموال من حسابها إلى حساب Apple Pay. ستظهر الأموال المضافة إلى رصيد Apple Pay الخاص بك على الفور بعد اكتمال العملية. يمكنك استخدام هذه الأموال في التطبيقات والخدمات التي تقبل Apple Pay كطريقة دفع. بالنسبة لمحفظة STC Pay يمكنك شحن المحفظة من خلال تطبيق STC Pay عن طريق الطرق الآتية: 1- عن طريق Apple Pay: اضغط على "إضافة الأموال" اضغط خيار Apple Pay أدخل المبلغ الذي تريد إضافته اختر بطاقة من بطاقاتك الموجودة في Apple Wallet لإضافة الأموال منها أكّد العملية لإضافة الأموال بثوانٍ. 2- عن طريق البطاقة الائتمانية أو بطاقة مدى: اضغط على "إضافة الأموال" اضغط خيار البطاقة الائتمانية أو بطاقة مدى أدخل المبلغ الذي تريد إضافته، ثم استمرار أدخل تفاصيل البطاقة أكّد العملية لشحن حسابك بثوانٍ. 3- عن طريق التحويل المحلي إلى STC Pay: اضغط على "إضافة الأموال" اضغط خيار التحويل البنكي إلى STC Pay اختر من البنوك المتعاونة وانسخ رقم الحساب أو الآيبان حوّل محلياً من حسابك البنكي إلى حسابك في STC Pay من خلال لصق رقم الحساب أو الآيبان ستصل الحوالة خلال ساعات عمل بنكك الرسمي. 4- عن طريق سداد: اضغط على "إضافة الأموال" اضغط خيار سداد انسخ رقم سداد المكون من 10 أرقام في STC Pay اختر دفع فاتورة سداد من حسابك البنكي وإضافة فاتورة جديدة باسم المفوتر.
  25. ستجد هنا شرح كامل لطريقة الإشتراك وطرق الدفع وهما باي بال و البطاقة الإئتمانية. وهناك طريقة أخرى وهي بطاقة الهدية: تُوفّر أكاديمية حسوب لزوارها إمكانية شراء بطاقة هدية ومشاركتها، ليتمكن متلقّي الهدية من استخدامها في التسجيل بالدورات المتوفرة في الأكاديمية. وفي حال عدم إمكانية الدفع بالطرق السابقة: يمكن الدفع للدورات التدريبية المختلفة بواسطة أي بطاقة بنكية أو حساب بايبال، ولا يشترط أن يقوم الشخص الذي يدرس الدورة بدفع سعرها، فإذا كان لديك أقارب أو أصدقاء في الخارج يمكنهم مساعدتك في دفع تكلفة الدورة. يجب الإشارة إلى أنه بعد اجتياز الامتحان النهائي للدورة والتأكد من هوية المتدرب، يتم منح الشهادة الخاصة بالدورة للشخص الذي اجتاز الامتحان بنجاح، بغض النظر عن هوية الشخص الذي دفع ثمن الدورة. عند اشتراكك بإحدى دورات حسوب، ستحصل تلقائيًا على وصول لأول مسار من بقية الدورات بشكل مجاني لتتعرف على محتواها، وبعد ذلك يمكنك الاشتراك بدورة ثانية في حال أردتِ إكمال المسارات في هذه الدورة الجديدة.
×
×
  • أضف...