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

Mustafa Suleiman

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

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

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

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

    297

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

  1. أولاً، يجب عليك التأكد من أنك قمت بتحميل مكتبة Bootstrap بشكل صحيح وأنها موجودة في المسار الصحيح. يمكنك التحقق من ذلك عن طريق التأكد من وجود الملفات المطلوبة في المسار المحدد للمكتبة. ثانياً، يجب عليك التأكد من أنك تستخدم الروابط الصحيحة في ملف HTML الخاص بك. يجب أن تحتوي هذه الروابط على مسارات الوصول الصحيحة لملفات Bootstrap و Popper. إذا كان لديك مشكلة في العثور على رابط Popper، يمكنك البحث عنها على موقع المكتبة الرسمي. من الممكن أن يتم تضمين Popper مع Bootstrap أو يمكنك تنزيله بشكل منفصل. عند نسخ الروابط، يجب عليك التأكد من أنها تتطابق تمامًا مع مسارات الملفات الموجودة في جهاز الكمبيوتر الخاص بك. إذا كان لديك أي شك في ذلك، يمكنك المحاولة مرة أخرى باستخدام الروابط الصحيحة الموجودة على موقع المكتبة الرسمي. أخيرًا، يمكنك التحقق من وجود أي أخطاء في صفحة HTML الخاصة بك باستخدام أداة تفتيش المتصفح (مثل Chrome DevTools) وإصلاحها بما يتناسب مع متطلبات Bootstrap. هذه هي الخطوات المفصلة لتحميل وتثبيت Bootstrap و Popper على مشروعك: قم بزيارة موقع Bootstrap وتحميل آخر إصدار من Bootstrap: https://getbootstrap.com/docs/5.0/getting-started/download/ قم بفتح الملف المضغوط الذي تم تنزيله. انتقل إلى مجلد "dist" ثم انسخ الملفات bootstrap.min.css و bootstrap.min.js ولصقها في مجلد css و js في مشروعك على التوالي. زر موقع Popper.js على هذا الرابط: https://popper.js.org/ انتقل إلى قسم "Quick Start" وانسخ الرابط الخاص بـ "Popper.js" المتوفر في المكتبة المحلية "Dist" ، وهو "popper.min.js". لصق رابط Popper.js في العلامة الأمامية لصفحة HTML الخاصة بك بعد رابط Bootstrap.js. افتح صفحة HTML الخاصة بك وتحقق من أن bootstrap.min.css و bootstrap.min.js و popper.min.js يتم تحميلها بنجاح ومتاحة للاستخدام. الآن يمكنك استخدام Bootstrap في مشروعك بما في ذلك العديد من العناصر المساعدة والمكونات والأنماط التي توفرها.
  2. لتحويل درجات الحرارة من درجات السيليزية إلى درجات الفهرنهايت والعكس، يمكن اتباع الخطوات التالية: 1- لتحويل درجات السيليزية إلى درجات الفهرنهايت: يجب ضرب درجة الحرارة بـ9/5 ثم إضافة 32. 2- لتحويل درجات الفهرنهايت إلى درجات السيليزية: يجب طرح 32 ثم ضرب الناتج بـ5/9. 3- يمكن إنشاء دالة تستقبل درجة الحرارة ونوع التحويل، وتطبق الصيغة المناسبة وترجع النتيجة. 4- يمكن إنشاء برنامج يستخدم الدالة المنشأة لتحويل درجات الحرارة باستخدام إدخالات المستخدم، ويطبع النتائج على الشاشة. 5- عند استخدام إدخالات المستخدم، يجب التحقق من صحة الإدخالات المدخلة عن طريق فحص نوع التحويل والتأكد من أنه يساوي 'c' أو 'C' لتحويل درجات الفهرنهايت إلى درجات السيليزية، أو 'f' أو 'F' لتحويل درجات السيليزية إلى درجات الفهرنهايت. ويجب أيضاً التحقق من أن درجة الحرارة المدخلة مناسبة وليست سالبة (في حالة التحويل من الفهرنهايت إلى السيليزية) أو أنها لا تتعدى حدود الحرارة القياسية. لكونه سؤال إمتحاني، سأقوم بتزويدك بمزيد من المعلومات حول الفكرة الرئيسية للسؤال فقط. يمكن إنشاء دالة في لغة C باسم "convert" لتحويل الحرارة بين درجتين مختلفتين، ويتم تمرير الدالة اثنين من المعاملات: درجة الحرارة وحرف يحدد الاتجاه الذي يجب فيه تحويل الحرارة. يمكن استخدام الشرطية "if" للتحقق من الحرف المستخدم لتحديد اتجاه التحويل. إذا كان الحرف يشير إلى السيليزيوس (C)، فإننا يمكننا تطبيق الصيغة التالية لتحويل الحرارة إلى فهرنهايت (F): F = (C * 9/5) + 32 وإذا كان الحرف يشير إلى الفهرنهايت (F)، فإنه يمكن تطبيق الصيغة التالية لتحويل الحرارة إلى السيليزيوس (C): C = (F - 32) * 5/9 بعد ذلك، يمكن استخدام دالة "printf" لطباعة النتيجة المحسوبة على الشاشة. أخيرًا، يجب على المستخدم التأكد من صحة الإدخالات، وتحديدًا من حيث الحرف الذي يشير إلى الاتجاه المطلوب للتحويل وأيضًا التأكد من أن قيمة درجة الحرارة في المدخلات صالحة للتحويل. https://academy.hsoub.com/programming/c/
  3. شرح إنتاج أرقام بطاقات الشحن باستخدام تقنيات تعلم الآلة باختصار: أرقام بطاقات الشحن هي مجموعة من الأرقام التي تم إنشاؤها بطريقة عشوائية وتستخدم لإعادة شحن رصيد الهواتف المحمولة. يتم توليد هذه الأرقام بواسطة أنظمة حاسوبية خاصة تستخدم خوارزميات معينة لإنشاء أرقام عشوائية فريدة. يختلف تنسيق أرقام بطاقات الشحن من بلد لآخر ، ولكن عمومًا فإن أرقام بطاقات الشحن تتكون من مجموعة من الأرقام العشوائية التي تم توليدها بطريقة عشوائية وفقًا لمعايير محددة. عادةً ما تتكون أرقام بطاقات الشحن من 12 رقمًا في بعض البلدان، و16 رقمًا في البلدان الأخرى. يمكن استخدام تقنيات الذكاء الاصطناعي لتوقع وتوليد أرقام بطاقات الشحن المحتملة وتحسين الأداء العشوائي لعملية إنشاء الأرقام. ولكن يجب الانتباه إلى أن استخدام التقنيات الذكية يتطلب معالجة كميات كبيرة من البيانات وتحليلها بدقة لإنتاج أرقام بطاقات الشحن صالحة وفعالة. وسأشرح لك المزيد إذا أردت التفصيل: توليد أرقام بطاقات الشحن يتم عادةً باستخدام مولدات أرقام عشوائية. يتم إنشاء هذه المولدات باستخدام خوارزميات عشوائية وتوليد مجموعة من الأرقام العشوائية بشكل مستمر. ومن ثم يتم استخدام هذه الأرقام العشوائية لإنشاء أرقام بطاقات الشحن. لنفترض أنه لدينا خوارزمية تنتج أرقامًا عشوائية من خلال إجراء عمليات حسابية على أرقام معينة. ومن ثم يتم تحويل الأرقام العشوائية إلى أرقام بطاقات الشحن باستخدام معايير محددة. على سبيل المثال، يمكن استخدام القواعد التالية لإنشاء أرقام بطاقات الشحن من الأرقام العشوائية: يجب أن تتكون كل رقم بطاقة شحن من 16 رقمًا. يجب أن تبدأ جميع بطاقات الشحن برقم معين مثل "4" أو "5". يجب أن تتبع الأرقام العشوائية بنمط معين مثل رقم "1" ثم رقم "3" ثم رقم "7" وهكذا. مثال على طريقة إنشاء رقم بطاقة شحن محتمل: 4536 7112 8900 1457 في هذا المثال، يتم استخدام أرقام عشوائية معينة لإنشاء الرقم بطاقة الشحن، وتتبع قواعد محددة لتحويل الأرقام العشوائية إلى رقم بطاقة شحن صالحة. يمكن استخدام تقنيات الذكاء الاصطناعي لتوليد أرقام بطاقات الشحن عن طريق تدريب النماذج على البيانات التاريخية لإنتاج أرقام بطاقات الشحن متوافقة ومتناسقة مع القواعد والمعايير المحددة. ويمكن استخدام هذه التقنيات لتحسين جودة الأرقام التي تنتجها مولدات الأرقام العشوائية وتقليل احتمالية إصدار أرقام غير صالحة أو مكررة. يمكن أيضًا استخدام التقنيات الذكية لمراقبة استخدام بطاقات الشحن وتحديد الأنماط المتكررة والاحتمالات الإحصائية للاستخدام لتحسين عمليات إنتاج الأرقام. ومن المهم الإشارة إلى أنه يجب أن تتم مراعاة الجوانب الأمنية عند إنشاء أرقام بطاقات الشحن، حيث يجب توليد أرقام عشوائية غير متوقعة بحيث لا يمكن تخمينها بسهولة. كما يجب التأكد من أن الأرقام لا يمكن الوصول إليها بسهولة وأن تتبع معايير الأمان اللازمة لحمايتها من الاختراق والاستخدام غير المصرح به. بالإضافة إلى ذلك، يجب مراعاة القوانين والتشريعات المحلية المتعلقة بصدور بطاقات الشحن والتأكد من تطبيقها بشكل صحيح. في بعض الحالات، قد يتم فرض قيود على عدد الأرقام التي يمكن إصدارها أو على صلاحية الأرقام المصدرة. في النهاية، يجب العمل على تحسين جودة إصدار الأرقام العشوائية وتطبيق معايير الأمان المناسبة لحماية بيانات المستخدمين والمعلومات الحساسة المرتبطة بعمليات إصدار بطاقات الشحن. ما هي البرامج أو اللغات المستخدمة في ذلك يمكن استخدام العديد من البرامج واللغات في إنتاج أرقام بطاقات الشحن باستخدام تقنيات الذكاء الاصطناعي، وفيما يلي بعض الأمثلة: 1- لغة برمجة Python: تستخدم عادة لتدريب نماذج التعلم الآلي وإنتاج أرقام بطاقات الشحن. تمتلك Python مكتبات وأدوات متقدمة لتحليل البيانات وتطوير نماذج التعلم الآلي وتدريبها. 2- TensorFlow: إطار عمل تعلم الآلة مفتوح المصدر متوافق مع Python، يسمح بتطوير نماذج التعلم الآلي المتقدمة وتحسين الأداء الخاص بإنتاج الأرقام. 3- Keras: هو إطار عمل تعلم الآلة مفتوح المصدر يتوافق مع Python، يسمح بتصميم وتدريب النماذج العميقة بكفاءة عالية. 4- MATLAB: برنامج لتطوير نماذج التعلم الآلي وتحليل البيانات، يتضمن أدوات متقدمة لتحسين الأداء الخاص بإنتاج الأرقام. 5- R: لغة برمجة مفتوحة المصدر تستخدم في تحليل البيانات وتطوير النماذج الإحصائية، يتضمن مجموعة واسعة من الحزم والمكتبات لتدريب النماذج التعلم الآلي. هناك أيضًا العديد من الأدوات والبرامج الأخرى التي يمكن استخدامها لتطوير نماذج التعلم الآلي وإنتاج أرقام بطاقات الشحن، ويعتمد الاختيار على متطلبات المشروع والميزانية والمعرفة الفنية لفريق العمل. أمثلة للخوارزميات المستخدمة 1- خوارزمية الشبكات العصبونية الاصطناعية (Artificial Neural Networks): تستخدم هذه الخوارزمية في تدريب النماذج العميقة لتوليد الأرقام المتوافقة مع القواعد المحددة، وتعتبر أحد الخوارزميات الأكثر فعالية في تحليل البيانات الكبيرة. 2- خوارزمية الآلة العصبية البيتزو (Pizza Neural Network): يتم استخدام هذه الخوارزمية لتوليد أرقام البطاقات التي تتطلب التحقق منها في الوقت الحقيقي، وتعتمد هذه الخوارزمية على مجموعة من القواعد والمتغيرات لتوليد أرقام متوافقة. 3- خوارزمية العصف الذهني (Brainstorming Algorithm): تستخدم هذه الخوارزمية لإنتاج أرقام بطاقات الشحن بشكل عشوائي بناءً على المعايير المحددة، وتعتمد هذه الخوارزمية على استخدام عدة تقنيات مثل المحاكاة والمدى المرجعي والتحسين التكيفي. 4- خوارزمية الإعداد (Preparation Algorithm): تستخدم هذه الخوارزمية لإعداد البيانات الضرورية لتدريب النماذج التعلم الآلي المستخدمة في إنتاج أرقام بطاقات الشحن، وتتضمن هذه الخوارزمية استخدام مجموعة من التقنيات مثل تصنيف البيانات وتنظيفها وتحويلها. هذه هي بعض الأمثلة للخوارزميات التي يمكن استخدامها في إنتاج أرقام بطاقات الشحن باستخدام تقنيات تعلم الآلة، ويمكن اختيار الخوارزمية المناسبة بناءً على المتطلبات. من الجدير بالذكر أنه يمكن استخدام مجموعة واسعة من الخوارزميات في هذا المجال، وذلك يعتمد على الخصائص الفريدة للمشروع والبيانات المتاحة. على سبيل المثال، يمكن استخدام خوارزميات الشبكات العصبونية العميقة مثل Recurrent Neural Networks (RNN) و Long Short-Term Memory (LSTM) و Generative Adversarial Networks (GAN) لإنتاج أرقام بطاقات الشحن. ويمكن أيضًا استخدام خوارزميات التحليل العاملي Principal Component Analysis (PCA) والتحليل التفاضلي Differential Analysis (DA) لتقليل الأبعاد وتحسين دقة النماذج. وتستخدم خوارزميات تعلم الآلة الإحصائية مثل الانحدار الخطي Linear Regression والتصنيف اللوجستي Logistic Regression و Support Vector Machines (SVM) في هذا المجال أيضًا. ويمكن أيضًا استخدام الأساليب الحديثة مثل Deep Reinforcement Learning لتحسين جودة إنتاج الأرقام. مثال لإنشاء سلسلة أرقام بطاقات الشحن باستخدام لغة Python هذا مثال بسيط لإنشاء سلسلة أرقام بطاقات الشحن باستخدام لغة Python والمكتبة الخاصة بتوليد الأرقام "random": import random def generate_card_number(length): card_num = "" for i in range(length): card_num += str(random.randint(0, 9)) return card_num # تعريف طول رقم البطاقة card_length = 16 # توليد 5 بطاقات عشوائية for i in range(5): card_num = generate_card_number(card_length) print(card_num) هذا المثال ينشئ دالة توليد الأرقام "generate_card_number" وتستخدم مكتبة "random" في Python لإنشاء سلسلة رقمية عشوائية من الأرقام بطول محدد. ثم تستخدم دالة "generate_card_number" لإنشاء عدد معين من الأرقام العشوائية (في هذه الحالة 5 أرقام) وطباعتها في النهاية. يمكن تعديل هذا المثال واستخدام تقنيات تعلم الآلة لإنتاج الأرقام بطريقة أكثر دقة وفعالية.
  4. لإضافة حالة للمقاعد المحجوزة (occupied seats) ، يمكن إضافة خاصية (prop) إلى عنصر Seat وتمرير قيمة مختلفة لكل Seat بناءً على حالة المقعد. يمكن تحديد حالة المقعد (occupied or not) بواسطة الحالة المحلية (local state) داخل عنصر Seat. على سبيل المثال: import React, { useState } from 'react' function Seat(props) { const [isOccupied, setIsOccupied] = useState(false); const handleClick = () => { setIsOccupied(!isOccupied); } return ( <div className={isOccupied ? 'seat occupied' : 'seat'} onClick={handleClick}> <div></div> </div> ) } export default Seat في هذا المثال ، تم إضافة خاصية (prop) إلى عنصر Seat لتمرير قيمة الحالة المحجوزة (occupied) من Row. يتم تحديد حالة المقعد (occupied) عن طريق النقر على المقعد ، ويتم تغيير حالة المقعد (isOccupied) باستخدام الحالة المحلية (useState). ويتم تحديد الفئة (class) المستخدمة لعنصر Seat باستخدام تعبير تفاضلي (ternary expression) بناءً على قيمة الحالة المحجوزة (isOccupied). بعد ذلك ، يمكن تمرير قيمة محددة للحالة المحجوزة لكل Seat في Row باستخدام الخاصية (prop). يمكن تعيين القيمة المحددة للخاصية (prop) لكل Seat في Row بناءً على الحالة الفعلية للمقعد في التطبيق. يمكن تمرير الحالة المحجوزة (occupied) كخاصية (prop) إلى عنصر Seat في Row كما يلي: import React from 'react' import Seat from './Seat' function Row() { return ( <div className='row'> <Seat occupied={true} /> <Seat occupied={false} /> <Seat occupied={false} /> <Seat occupied={true} /> <Seat occupied={false} /> <Seat occupied={true} /> <Seat occupied={false} /> <Seat occupied={false} /> </div> ) } export default Row في هذا المثال ، يتم استخدام القيمة الممررة للخاصية (prop) occupied لتحديد الفئة (class) المناسبة لعنصر Seat. إذا كانت القيمة الممررة لـ (prop) occupied هي true ، فإن العنصر Seat يحصل على الفئة (class) occupied ، وإلا فإنه يحصل على الفئة (class) الافتراضية (not-occupied). يمكن تمرير الحالة الفعلية للمقاعد (occupied seats) إلى Row كخصائص (props) من المكون الأب (parent component) الذي يحتوي على Rows component. على سبيل المثال: import React from 'react' import Rows from './Rows' function App() { const occupiedSeats = [2, 5, 6, 7]; // assuming seat numbers start from 1 return ( <div> <Rows occupiedSeats={occupiedSeats} /> </div> ) } export default App
  5. بالنسبة لأول سؤال. يمكن لموسوعة حسوب أن توفر لك معلومات كافية ومفصلة عن العديد من المفاهيم البرمجية، ولكنها لا تغني عن الاطلاع على مصادر أخرى واستخدام مختلف الأدوات والمصادر لتعلم هذه المفاهيم. من الأدوات التي يمكن استخدامها لتعلم المفاهيم البرمجية والحصول على معلومات موثوقة هو محرك البحث جوجل. يمكنك البحث عن المفاهيم التي تريد تعلمها باستخدام كلمات مفتاحية مثل "JavaScript Prototype"، "JavaScript Inheritance" أو "JavaScript Promise Object" والتعرف على مصادر متعددة مثل مقالات، دروس فيديو، كتب، وأكثر. فمن خلال عملية البحث من عدة مصادر ستتعلم الكثير من الأشياء في الطريق مقارنًة بالإعتماد على مصدر واحد، لكن دائمًا اعتمد في تعلم الدورات على مصدر واحد أي لا تتنقل بين الكورسات دون الإنتهاء منها فذلك سيضرك جدًا عند تعلم البرمجة، كفى بالمرء تشتيتًا في أيامنا هذه! بالنسبة للسؤال الثاني. فإن مهارة البحث الاحترافي هي مهارة مهمة جداً في مجال التقنية، ويمكنك القول أنها مسألة حياة أو موت بالنسبة للمبرمج!، حيث تمكنك من الوصول إلى المعلومات والحلول بشكل أسرع وأكثر دقة. ولتعلم هذه المهارة، يمكنك اتباع الخطوات التالية: تحديد المصادر الموثوقة: عند البحث عن معلومات تقنية، يجب عليك الاعتماد على مصادر موثوقة ومعتمدة مثل المواقع الرسمية للشركات والمؤسسات التقنية، والمنتديات الخاصة بالمجال التقني، والمواقع العلمية والأكاديمية. استخدام الأدوات الصحيحة: يجب عليك الاستفادة من الأدوات المتاحة للبحث مثل محركات البحث، وقواعد البيانات، والمكتبات الرقمية، وتعلم كيفية استخدامها بشكل فعال. مثال عن اختيار الموقع المناسب عمومًا: يمكن استخدام مواقع مختلفة حسب الغرض من البحث، مثل اليوتيوب للحصول على إجابات سريعة، و Reddit للبحث عن روابط التحميل وغيرها من المعلومات فهو كنز يغفل عن الكثير وبه مجتمعات نشطة جدًا أيضًا في البرمجة، و Goodreads للكتب والمراجعات. البحث عن الكلمات المفتاحية: يجب عليك تحديد الكلمات المفتاحية المناسبة لموضوع البحث الخاص بك، والتي تساعدك على الوصول إلى المعلومات المناسبة. تحليل النتائج: يجب عليك تحليل النتائج التي تحصل عليها من البحث، والتأكد من صحتها وموثوقيتها. استخدام اختصارات البحث: استخدم العلامات المفيدة أثناء البحث، مثل and و or وعلامات التنصيص. وإليك أمثلة: عند البحث عن كلمتين متتاليتين لهما علاقة ببعض يمكن استخدام العلامة (+) أو الكلمة (AND). عند البحث عن كلمة معينة مرتبطة بكلمة أخرى مع الرغبة في البحث عن الكلمة الأولى فقط يمكن استخدام العلامة (-)، وفي هذه الحالة سيقوم بإستثناء الكلمة الثانية. إذا كنت تريد البحث عن كلمة معينة مرتبطة بكلمة أخرى ولكنك تريد البحث عن الكلمة الأولى فقط، يمكنك استخدام العلامة (-)، وفي هذه الحالة سيقوم بإستثناء الكلمة الثانية. عند البحث عن كلمتين أو جملتين ليستا مرتبطتين ببعضهما يمكن استخدام (OR). عند البحث عن موضوع معين داخل موقع معين، يمكن استخدام الكلمة (:site). في حالة عدم تذكر كلمة من الكلمات التي نبحث عنها، يمكن استخدام العلامة (*). عندما نريد معرفة التوقيت المحلي الخاص بكل دولة، يمكن استخدام (+time). عند البحث عن شئ بصيغة معينة على هيئة ملفات pdf أو برامج word، يمكن استخدام كلمة (filetype). عند البحث عن مقالات وأبحاث علمية بحتة ومصادر مختلفة، يمكن استخدام (Google scholar). التدريب والممارسة: تعتبر مهارة البحث الاحترافي مهارة تتطلب تدريبا وممارسة مستمرة. عندما تبدأ في البحث عن أي مفهوم جديد، يجب عليك أن تكون على دراية بالمصادر التي يمكنك الاعتماد عليها، وتشمل ذلك المواقع والمنتديات والمدونات التي تحتوي على المعلومات المفيدة. يمكنك الاعتماد على مواقع مثل Stack Overflow وMDN Web Docs وW3Schools وغيرها من المصادر الموثوقة لتعلم البرمجة والويب. بالإضافة إلى ذلك، يمكنك الانضمام إلى مجتمعات المطورين والبرمجيات عبر الإنترنت والتواصل مع الخبراء في مجال البرمجة وتبادل الأفكار والخبرات معهم. يمكنك أيضًا حضور الندوات والمؤتمرات المتعلقة بالبرمجة والتعلم من الخبراء الموجودين فيها. بالنسبة للتدريب الفعلي يمكنك إنشاء مشاريع برمجية صغيرة وتطبيق ما تعلمته عليها، وذلك لتحسين مهاراتك البرمجية وتطوير خبرتك. كما يمكنك الانضمام إلى مشاريع مفتوحة المصدر والمساهمة فيها، والتعرف على أساليب العمل والأدوات التي تستخدمها مجتمعات المطورين الأخرى. بشكل عام، يجب أن تكون البحث والتعلم والتدريب والممارسة مستمرين في عالم البرمجة، ويجب أن تسعى دائمًا إلى تحسين مهاراتك وزيادة خبرتك في هذا المجال. بالنسبة للمفاهيم البرمجية التي تريد استيعابها Prototype: Prototype هو عبارة عن خاصية في جافاسكريبت تُستخدم لإضافة خصائص جديدة إلى كائن موجود. وعندما يتم إضافة خاصية جديدة إلى الـ prototype ، فإنها تصبح متاحة لجميع الكائنات المشتقة من نفس الكائن الأصلي. مثال: function Animal(name) { this.name = name; } Animal.prototype.getName = function() { return this.name; }; let dog = new Animal('Rex'); console.log(dog.getName()); // الإخراج: 'Rex' سأشرح لك المزيد لأهمية ذلك المفهوم في جافا سكريبت. في جافاسكريبت، كل شيء هو Object، ويمكننا إنشاء Object جديدة باستخدام الكلمة الرئيسية "new". وعند إنشاء Object جديدة، فإنه يتم إنشاء سلسلة من الـPrototype objects التي تتشارك فيما بينها بالمعلومات. ببساطة، Prototype هو عبارة عن Object template يتم استخدامه لإنشاء Object جديدة. ويحتوي Prototype على خصائص وأساليب (methods) يتم مشاركتها بين جميع الObjects التي تم إنشاؤها باستخدام الـPrototype نفسه. على سبيل المثال، لنفترض أن لدينا Object template يسمى "Person" يحتوي على الخصائص name و age و methods تستخدم لطباعة البيانات الخاصة بـ Person. يمكننا إنشاء Object جديدة باستخدام الـPrototype "Person" كالتالي: // إنشاء Prototype let Person = function(name, age) { this.name = name; this.age = age; } Person.prototype.printInfo = function() { console.log("My name is " + this.name + " and I am " + this.age + " years old."); } // إنشاء Object جديدة باستخدام الـPrototype "Person" let person1 = new Person("Ahmed", 25); person1.printInfo(); // "My name is Ahmed and I am 25 years old." هنا، تم إنشاء Prototype جديد "Person" يحتوي على خصائص name و age، بالإضافة إلى method "printInfo" الذي يقوم بطباعة بيانات الـPerson. وتم إنشاء Object جديد باستخدام الـPrototype "Person" باستخدام الكلمة الرئيسية "new"، وتم استخدام method "printInfo" الموجود في الـPrototype لطباعة بيانات Object الجديدة. Inheritance: Inheritance هو مفهوم برمجي يسمح لك بإنشاء كائنات جديدة من خلال استخدام كائنات موجودة. وعند استخدام inheritance، يتم تمرير خصائص وأساليب الكائن الأصلي إلى الكائن الجديد المشتق. مثال: function Animal(name) { this.name = name; } Animal.prototype.getName = function() { return this.name; }; function Dog(name, breed) { Animal.call(this, name); this.breed = breed; } Dog.prototype = Object.create(Animal.prototype); Dog.prototype.constructor = Dog; Dog.prototype.getBreed = function() { return this.breed; }; let dog = new Dog('Rex', 'German Shepherd'); console.log(dog.getName()); // الإخراج: 'Rex' console.log(dog.getBreed()); // الإخراج: 'German Shepherd' Promise object: Promise object هو عبارة عن كائن في جافاسكريبت يتم استخدامه لإجراء أنشطة غير متزامنة (asynchronous)، مثل الاستدعاءات الخادم والعمليات الطويلة الأخرى. ويعد Promise object واحدًا من أساليب تحسين أداء التطبيقات في جافاسكريبت. مثال: function getData() { return new Promise(function(resolve, reject) { setTimeout(function() { resolve('Data is fetched!'); }, 2000); }); } getData() .then(function(data) { console.log(data); // الإخراج: 'Data is fetched!' }) .catch(function(error) { console.error(error); });
  6. يعتبر Windows Hosting و Web Hosting اثنين من خيارات استضافة المواقع على منصة GoDaddy، ولكل منهما ميزاته وعيوبه. Windows Hosting: تتميز بدعم تقنيات Microsoft وتشغيل اللغات التي تعتمد على منصة Windows مثل ASP.NET و .NET Core و SQL Server وغيرها. يتم استخدام لوحة التحكم Plesk لإدارة الاستضافة على Windows Hosting. Web Hosting: يستخدم نظام تشغيل Linux ولوحة تحكم cPanel لإدارة الاستضافة. وتعمل على دعم لغات البرمجة المختلفة مثل PHP و Python و Ruby وغيرها. بالنسبة لمشروع Next.js الخاص بك، يمكنك استخدام Economy Linux Hosting with cPanel لاستضافة الموقع بدلاً من Windows Hosting. فعادةً ما يتم تشغيل مشاريع Next.js على Linux بدلاً من Windows. ومع ذلك، يجب التأكد من أن إصدار Node.js الذي تستخدمه متوافق مع Economy Linux Hosting with cPanel. أيضًا، يجب الانتباه إلى أن استخدام Economy Linux Hosting with cPanel يعني أنه سيتم استخدام نظام تشغيل Linux، وبالتالي قد تحتاج إلى تعلم بعض المفاهيم الأساسية لنظام التشغيل Linux ولوحة تحكم cPanel إذا لم تكن لديك الخبرة الكافية في ذلك. وأرجو مراجعة التعليقات على سؤالك السابق للمزيد حول Economy Linux Hosting with cPanel. وللمزيد عن الاستضافات https://io.hsoub.com/hosting/87775-ما-الفرق-بين-استضافة-cloud-hosting-و-استضافة-web-hosting
  7. نعم، يمكنك رفع تطبيق Next.js على منصة GoDaddy باستخدام خدمة Economy Linux Hosting with cPanel. يمكنك استخدام cPanel لإدارة الخادم وتثبيت Node.js وnpm لتنزيل وتثبيت التبعيات اللازمة لتشغيل تطبيقك. بعد ذلك يمكنك تحميل ملفات التطبيق وإعداد الاعدادات اللازمة لتشغيل التطبيق. يرجى ملاحظة أنه يجب عليك التأكد من أن الخادم الذي تختاره يلبي متطلبات تشغيل تطبيق Next.js. يمكنك اتباع الخطوات التالية: اشترِ خطة استضافة من GoDaddy وقم بتسجيل الدخول إلى لوحة التحكم الخاصة بك (cPanel). قم بإعداد نطاق الويب الخاص بك واتصل به إذا لزم الأمر. قم بإنشاء قاعدة بيانات MySQL ومستخدم بمسؤولية كاملة لهذه القاعدة. حمِّل تطبيق Next.js الخاص بك إلى مجلد على الخادم (يمكنك استخدام FTP لهذا الغرض). قم بتثبيت Node.js و NPM على الخادم باستخدام SSH. قم بتنزيل وتثبيت جميع الحزم اللازمة التي يتطلبها تطبيق Next.js. قم بتكوين ملفات الإعدادات الخاصة بتطبيق Next.js الخاص بك (مثل المتغيرات البيئية ومعلومات الاتصال بقاعدة البيانات). قم بتشغيل تطبيق Next.js باستخدام SSH وأمر NPM. يمكنك البحث عن دليل خطوة بخطوة على الإنترنت لمساعدتك في تطبيق هذه الخطوات بشكل أفضل. كما يمكنك البحث عن أدوات وحلول متاحة لتحميل تطبيق Next.js الخاص بك ونشره على GoDaddy. سأوضح لك كل خطوة بالتفصيل: 1- شراء حزمة استضافة Linux على GoDaddy: أولاً، يجب عليك شراء حزمة استضافة Linux على GoDaddy. يمكنك ذلك عن طريق الدخول إلى موقع GoDaddy واختيار خيار الاستضافة، ثم تحديد حزمة Linux الاقتصادية مع لوحة التحكم cPanel. 2- إعدادات الدومين ونقل الملفات: بمجرد شراء الحزمة، يمكنك إعداد اسم النطاق الخاص بك ونقل ملفات Next.js إلى الخادم الخاص بك باستخدام FTP أو SFTP. 3- تثبيت Node.js و npm: يجب تثبيت Node.js و npm على الخادم الخاص بك. يمكنك فعل ذلك باستخدام الأمر التالي: sudo apt-get install nodejs npm 4- تثبيت PM2: يمكن استخدام PM2 لإدارة تطبيق Next.js وتشغيله باستمرار. لتثبيت PM2، استخدم الأمر التالي: npm install pm2 -g 5- تنزيل متطلبات المشروع: تحتاج إلى تحميل متطلبات المشروع الخاص بك باستخدام npm. يمكنك فعل ذلك باستخدام الأمر التالي: npm install 6- بناء التطبيق: يجب بناء تطبيق Next.js الخاص بك بواسطة npm. يمكنك فعل ذلك باستخدام الأمر التالي: npm run build 7- تشغيل تطبيق Next.js: يمكنك تشغيل تطبيق Next.js الخاص بك باستخدام PM2. يمكنك استخدام الأمر التالي: pm2 start npm --name "app-name" -- start 8- تكوين ملفات Nginx: يمكنك تكوين ملفات Nginx للتوجيه إلى تطبيق Next.js الخاص بك. يمكنك فعل ذلك باستخدام الأمر التالي: server { listen 80; server_name example.com; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set _header Host $host; proxy_cache_bypass $http_upgrade; } } بعد إعداد ملف الـ Nginx، يجب تشغيله باستخدام الأمر التالي: sudo systemctl start nginx ويمكنك التحقق من حالة الـ Nginx باستخدام الأمر التالي: sudo systemctl status nginx ستظهر لك حالة الـ Nginx ويجب أن تكون "active (running)". أخيراً، يجب عليك فتح منفذ 80 في جدار الحماية الخاص بالخادم إذا كان مفتوحاً على منفذ آخر، باستخدام الأمر التالي: sudo ufw allow 80/tcp بهذا، تم إعداد خادم Nginx لتشغيل تطبيق Next.js على خادم Ubuntu 20.04.
  8. نعم ، الخطأ يحدث لأن طريقة الوصول إلى اسم المركز غير صحيحة في عرض الجدول. لأن الخاصية "center" لا تنتمي مباشرة إلى نموذج المستخدم "User". بدلاً من ذلك ، يجب عليك استخدام خاصية "center" الموجودة في نموذج حساب المستخدم "accounts.Center". يمكنك الوصول إليها باستخدام العلاقة الموجودة في نموذج المستخدم. يجب عليك تغيير السطر "center_name = request.user.center.name" إلى "center_name = request.user.account.center.name". وبالتالي ستتمكن من الحصول على اسم المركز الصحيح الذي ينتمي إليه المستخدم الحالي. يمكنك تحسين رمز عرض الجدول عن طريق حذف الكود المتكرر واستخدام كائن الاستعلام الواحد الذي يتم استخدامه لعرض الجدول: 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.account.center.name tablebooking = Appointment.objects.filter(center__name=center_name) return render(request, 'user/tablebooking.html', { 'tablebooking' : tablebooking }) يستخدم الكود request.user.account.center.name للوصول إلى اسم المركز المرتبط بحساب المستخدم. إذا كان اسم المجال لهذا الحقل مختلفًا عن account، يجب استبداله في الكود.
  9. لتصفية نتائج البحث بحسب اسم المركز، يمكن استخدام 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 إلى الطريقة التي تحصلي بها على اسم المركز الذي تريدي تصفيته.
  10. يمكن تحويل الشيفرة المعطاة إلى شيفرة 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 إلى العناصر لتحسين الأداء عند إعادة رسم المكون.
  11. يجب أولاً الرجوع إلى البنك والتأكد من الحد الأقصى للدفع عبر الإنترنت بالدولار للبطاقة الخاصة بك، ثانيًا يجب التأكد من أن البطاقة تدعم الشراء من خارج مصر بالدولار، بعد ذلك يمكنك قراءة التعليقات على السؤال الأصلي لك هنا، لمعرفة كيفية الشراء من خلال باي بال. https://io.hsoub.com/webdev/143704-كيف-ادفع-مبلغ-الدورة-بواسطة-حسابي-البنكي-المصري وسأخبرك بذلك هنا: تفعيل حساب باي بال مصر حتى تتمكن من استلام وسحب الأموال، من خلال الآتي: التأكد من أن الحساب مفعل من خلال رفع صورة للهوية (بطاقة الرقم القومي) وإنتظار فترة 24 ساعة لتفعيل الحساب. الآن ستحتاج إلى فيزا البريد المصري easy pay أو فيزا Yalla في حالة عدم توفر easy pay والتي يمكنك استخراجها من أي مكتب بريد رئيسي والأفضل من العتبة وشحنها بمبلغ 100 جنيه. يجب التأكد من أن الفيزا مفعلة من خلال التحدث إلى خدمة العملاء وأنها جاهزة للسحب من باي بال. بعد ذلك قم بإضافتها لحسابك على باي بال من خلال الخطوات التالية: قم بتسجيل الدخول إلى حسابك على موقع باي بال المصري. اضغط على "إدارة المحفظة" من القائمة الرئيسية. اختر "إضافة بطاقة ائتمان أو بطاقة خصم" من القائمة. أدخل تفاصيل بطاقتك، بما في ذلك رقم البطاقة وتاريخ انتهاء الصلاحية والرمز الأمني. اختر موافق. سيتم إضافة البطاقة إلى حساب باي بال المصري الخاص بك بعد التحقق من البطاقة بإرسال كود تفعيل يمكنك الحصول عليه من خدمة عملاء البريد المصري. في حالة فشل البطاقة السابقةيمكنك استخراج بطاقة inspire من نوع visa من بنك اسكندرية وستحتاج إلى: نموذج طلب بطاقة الخصم المباشر صورة بطاقة رقم قومي سارية وهي الأفضل في رأي، ولكن هي بحاجة إلى مفردات دخل إذا كان سنك أكبر من 25 سنة، ويتم استخراجها من خلال فتح حساب توفير بمبلغ 1200 جنيه في حالة وجود وظيفة، أو 300 جنيه في حالة كان سنك 25 أو أقل. وإذا كان سنك من 16 إلى 18 فأنت بحاجة إلى أحد والديك لفتح الحساب لك. لمعرفة طرق الدفع الأخرى على منصة حسوب، كشراء بطاقة هدية والدفع من خلالها حيث يمكنك الدفع لشخص آخر لشرائها لك.
  12. يتم استخدام العناصر الدلالية(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
  13. نعم، يمكنك إقلاع نظام 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 إذا كنت ترغب في العودة إلى الإقلاع من الهارد داخلي. ومن الأفضل أيضًا إنشاء نسخة احتياطية من بياناتك الهامة على كل من الهارد الداخلي والخارجي قبل القيام بأي تغييرات على ترتيب الإقلاع. كما ينصح بإجراء عملية فحص للهارد الداخلي بواسطة برنامج مضاد للفيروسات للتأكد من عدم وجود أي مشكلات أو تهديدات قبل إجراء أي تغييرات عليه. وأخيرًا، قد يختلف الإجراء الدقيق لترتيب الإقلاع حسب نوع جهاز الكمبيوتر الخاص بك، لذلك ينصح بالتحقق من دليل المستخدم أو البحث على الإنترنت لمزيد من المعلومات حول كيفية تغيير ترتيب الإقلاع في جهاز الكمبيوتر الخاص بك.
  14. لإستقبال الـ 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. يمكنك استخدام هذه الأمثلة كنقطة انطلاق وتعديلها وفقًا لاحتياجاتك.
  15. 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.
  16. لتحقيق هذا الهدف، يمكنك استخدام خاصية "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" في ملفات الإنتاج النهائية.
  17. يمكنك تحقيق هذا الأمر باستخدام 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 إذا كنت تريد تغيير موضع الصورة. هذا الكود سيجعل الخلفية تملأ الصفحة بالكامل بما فيها الجانب الأيمن.
  18. الخطأ الموجود في ملف 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 باستخدام خيارات التكوين المختلفة. للمزيد:
  19. الدالة 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 مرات، وهو يحدث فيه تكرارات فردية.
  20. نعم، هناك عدة أشياء يمكنك التحقق منها قبل شراء استضافة من شركة 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.
  21. يصعب الجزم أي الطرق أفضل إلا بعد تحديد ما الهدف من تلك الأزرار وكيف سيتم عرضها وأحجام الشاشات التي يتطلب دعمها. الكود الذي تم توفيره هو لسطح المكتب فقط ولحل المشكلة المعروضة.
  22. يبدو أن هناك مشكلة في إنشاء ملف التوقيع الخاص بتطبيقك. يمكنك محاولة تشغيل التطبيق باستخدام إعدادات التوقيع الافتراضية المؤقتة لحل المشكلة مؤقتًا وتمكينك من تشغيل التطبيق على الأجهزة المحلية. 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 لعرض المزيد من المعلومات عن المشكلة. وأيضًا قم بالرجوع إلى الإجابات على السؤال التالي وتجربة الحلول المطروحة في حال استمرار المشكلة.
  23. لتصميم تطبيقات الجوال، هناك العديد من اللغات والأطر البرمجية (Frameworks) المختلفة التي يمكن استخدامها، ولكن الخيار المناسب يعتمد على الاحتياجات والمتطلبات الخاصة بالتطبيق. تعلم لغة Java وتصميم التطبيقات بها يمكن أن يساعدك على فهم مفاهيم البرمجة والتصميم بشكل عام، حيث أن Java تستخدم على نطاق واسع في تطوير تطبيقات الجوال وتطبيقات الويب، ولها مجموعة قوية من المكتبات والأطر البرمجية المتاحة للمطورين. بالنسبة لتعلم لغة Dart واستخدام إطار العمل Flutter، فهو خيار آخر جيد. فFlutter هو إطار عمل قوي وشامل لتطوير تطبيقات الجوال، ويتميز بواجهات المستخدم المرنة والجميلة والأداء العالي، كما يتيح Flutter تطوير تطبيقات تعمل على نظامي التشغيل iOS و Android، بحيث يمكنك إنشاء تطبيق واحد يعمل على كلا المنصتين. يمكنك البدء بتعلم أيٍ من هاتين اللغتين وإطار العمل الخاص بها والتعرف على المكتبات والأدوات المتاحة لكل منهما. وبالتالي يمكنك اختيار الخيار الأنسب بناءً على الاحتياجات الخاصة بالتطبيق الذي تريد تطويره، ومدى قدرتك على التعامل مع المكتبات والأدوات المختلفة، وبالتالي تحديد الخيار الذي يناسبك أفضل من حيث الإنتاجية والجودة. وإذا كنت في البداية وتريد تعلم البرمجة فيجب عليك قراءة المقالات التالية فسترشدك إلى الطريق السليم. ويمكنك الرجوع إلى الإجابات على السؤال التالي: وهناك دورة في حسوب لتطوير التطبيقات، ستتعلم منها ما تريد. https://academy.hsoub.com/learn/javascript-application-development/
  24. في حالة وجود 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;
  25. المشكلة في إعدادات 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".
×
×
  • أضف...