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

Mustafa Suleiman

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

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

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

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

    340

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

  1. ستجد أن الكثيرين يتجهون لتعلم React مباشرًة فور الإنتهاء من جافاسكريبت، لكن تلك وصفة سريعة لتصبح مستخدم للتقنية وليس ملم باللغة أي ستتمكن من بناء واجهة أمامية بالفعل لكن مستواك في اللغة نفسه لن يخدمك عندما تحدث لك مشاكل أو عندما تريد تحسين الكود أو استخدام مزايا في جافاسكريبت نفسها، وربما لن تتمكن من التفرقة بين كود React وكود جافاسكريبت أي هل تلك ميزة في جافاسكريبت أم React؟ وستجد تفصيل هنا ذكرته من قبل:
  2. الأمر لا يسير بتلك الطريقة عند تطوير مشروع ويب، فالأمر يعتمد على البيانات التي تريد عرضها على الموقع، بمعنى لا فرق إذا قمت بتطوير الواجهة الخلفية أو الأمامية، أي يتم تطوير المشروع بناءًا على البيانات التي سيتم استخدامها، سواء صور أو نص أو فيديو أو البيانات والأمر يعرف باسم Data-driven design. أي نقوم بتصميم المشروع بناءًا على البيانات التي لدينا وليس العكس، فهناك غلطة شائعة وهي الإهتمام بتصميم موقع بشكل جذاب لكن بدون فائدة عملية لأن التصميم غير متوافق مع البيانات، لذلك أي عليك التصميم حول البيانات المعروضة، وأيضًا عدم الإهتمام بالشكل بشكل أكبر من الفاعلية أي تقديم راحة المستخدم وتسهيل الأمر وعدم تشتيته على جمالية التصميم. والقرار حول ما إذا كنت تبدأ بتطوير الواجهة الأمامية أم الجزء الخلفي من الموقع يعتمد على عدة عوامل، ويختلف وفق الأسلوب الذي تفضله أو تجده أكثر فعالية، وهناك نهجان رئيسيان: التطوير التسلسلي (Sequential Development) في هذا النهج، يتم تطوير الموقع بشكل تدريجي من الجزء الأمامي إلى الجزء الخلفي، ويبدأ المطور بتصميم وتطوير واجهة المستخدم الأمامية وتجربتها، ثم يقوم بتكامل الجزء الخلفي والخوادم. التطوير التزامني (Concurrent Development) هنا يتم العمل على تطوير الواجهة الأمامية والجزء الخلفي في نفس الوقت، بمعنى أن المطور يعمل على كلا الجانبين في المرحلة الأولى من التطوير. وبالطبع في حال كان المشروع معقد، فمن الأفضل البدء بالواجهة الخلفية، حتى يتم الاستقرار على البيانات التي سيتم إرسالها للواجهة الأمامية أو البيانات التي سيتم استقبالها.
  3. أنت تقوم بفحص إذا كان المستخدم قد قام بالإعجاب بالصورة أم لا، وتقوم بتحديث اللون بناءًا على ذلك، لذا هناك بعض الأمور من الأفضل القيام بها لتحسين الكود كالتالي: 1- إضافة متغير محلي لتتبع حالة اللون بدلاً من استخدام likedColor كحالة عامة، وسيساعد ذلك في تجنب المشاكل المحتملة مع تحديث حالة اللون بشكل صحيح. // داخل الكومبوننت const [buttonColor, setButtonColor] = useState(false); // ... const handleLikedColor = () => { const isLiked = likes.filter((item) => item.user === userId); setButtonColor(isLiked.length > 0); }; useEffect(() => { handleLikedColor(); }, [likes, userId]); 2- حاول تحديث لون الزر في مكان واحد فقط، في داخل handleLikeImage بدلاً من استدعاء handleLikedColor بشكل منفصل. const handleLikeImage = async (id) => { // ... await axios .put(`/api/images/like/${id}`, like, { headers: { "Content-Type": "application/json", "x-auth-token": user.data.token, }, }) .then((res) => { setLike(res.data); setNumLikes(res.data.likes.length); setButtonColor(res.data.likes.some((item) => item.user === userId)); }) .catch((err) => { // ... }); }; 3- استخدم الحالة المحلية (buttonColor) مباشرة في الرندر بدلاً من likedColor. <div className="menu-like"> <div className={buttonColor ? "like isLike" : "like"} onClick={() => { handleLikeImage(imageId); }} > <i className="fa-regular fa-thumbs-up"></i> </div> {numLikes === 0 ? "" : <div className="dislike">{numLikes}</div>} </div>
  4. استخدم EXISTS لفحص وجود تخصص آخر يحتوي على نفس المواد، أي تحديث الاستعلام كالتالي: <?php $host="localhost"; $user="root"; $pass=""; $db="res"; $con=mysqli_connect($host,$user,$pass,$db); ?> <div align='center'> <form action='' method='post'> <input type='text' name='search'><br> <input type='text' name='search1'><br> <input type='text' name='search2'><br> <input type='text' name='search3'><br> <input type='text' name='search_specialty'><br> <input type='submit' name='btn_search' value='Search'> </form> <?php if (isset($_POST["btn_search"])) { ?> <table border='5'> <tr> <th>رقم المتدرب </th> <th>اسم المتدرب</th> <th>التخصص </th> <th>المعدل </th> <th>رمز المقرر </th> <th>اسم المقرر </th> <th>الواحدات المعتمدة </th> </tr> <?php $str = $_POST["search"]; $str1 = $_POST["search1"]; $str2 = $_POST["search2"]; $str3 = $_POST["search3"]; $str_specialty = $_POST["search_specialty"]; $sh=mysqli_query($con, "SELECT t1.id_trainee, t1.name, t1.specialty, t1.gpa, t1.ramz, t1.name_mogrr, t1.credit FROM `tr1` t1 WHERE t1.id_trainee LIKE '%$str%' AND t1.ramz IN ('$str', '$str1', '$str2', '$str3') AND EXISTS ( SELECT 1 FROM `tr1` t2 WHERE t2.id_trainee = t1.id_trainee AND t2.name_mogrr = '$str_specialty' AND t2.ramz IN ('$str', '$str1', '$str2', '$str3') ) GROUP BY t1.id_trainee HAVING COUNT(DISTINCT t1.ramz) = 4"); while($row = mysqli_fetch_array($sh)){ ?> <tr> <td> <?php echo $row['id_trainee']?></td> <td> <?php echo $row['name']?></td> <td> <?php echo $row['specialty']?></td> <td> <?php echo $row['gpa']?></td> <td> <?php echo $row['ramz']?></td> <td> <?php echo $row['name_mogrr']?></td> <td> <?php echo $row['credit']?></td> </tr> <?php } } ?> </table> </div> تم إضافة متغير search_specialty لاستيفاء اسم التخصص الإضافي الذي تريد البحث عنه، ثم استخدام EXISTS في الاستعلام للتحقق مما إذا كان هناك تخصص آخر يحتوي على نفس المواد.
  5. الأمر يتطلب فهمًا عميقًا للعديد من المفاهيم، بما في ذلك البرمجة، والهندسة الكهربائية، والهندسة الميكانيكية، ونظم التحكم، وإليك الخطوات: اختر لغة برمجة، مثل Python أو C++ وتعلم الأساسيات ومفاهيم البرمجة. اكتساب فهم جيد حول هياكل البيانات والخوارزميات. دراسة الدوائر الكهربائية ومكونات الإلكترونيات. فهم كيفية عمل المتحكمات المدمجة (Microcontrollers)، والاستشعارات (Sensors). دراسة هياكل الطائرات بدون طيار وكيفية تصميمها. التعرف على مفاهيم الديناميكا والاستاتيكا والمواد الهندسية. دراسة نظم التحكم والتحكم الأوتوماتيكي. تعلم حول PID controllers وغيرها من تقنيات التحكم. دراسة أساسيات الاتصالات اللاسلكية وبروتوكولات الاتصال. فهم كيفية التحكم ونقل البيانات بين الطائرة والأجهزة الأخرى. اختيار منصة تطوير مثل Arduino أو Raspberry Pi لبدء تجربة البرمجة والتحكم. استخدام برامج محاكاة لتجربة واختبار البرمجيات بدون تحليق فعلي. دراسة اللوائح المحلية والدولية المتعلقة بطيران الطائرات بدون طيار. بالطبع الخطوات السابقة على إفتراض أنك ستقوم بالأمر بمفردك، لكن بالطبع في الشركات المطورة للطيارات بدون طيار هناك فريق عمل ويتم تقسيم المهام بشكل متخصص. ما العلوم (و التخصصات) التي يحتاجها فريق معين لتطوير طائرة بدون طيار ؟
  6. أنت تقوم بتحديث الرصيد في جدول account باستخدام الاستعلام التالي: UPDATE account SET debit = debit + $total WHERE name = '$name'; وذلك الاستعلام سيضيف قيمة الفاتورة المعدلة إلى الرصيد السابق، فلو كانت الفاتورة الأصلية بقيمة 100 دولار، والفاتورة المعدلة بقيمة 200 دولار، فسيؤدي الاستعلام إلى تحديث الرصيد إلى 300 دولار. لذا، تحتاج إلى تحديث الرصيد باستخدام الفارق بين قيمة الفاتورة الأصلية وقيمة الفاتورة المعدلة، باستخدام الاستعلام التالي: UPDATE account SET debit = debit + ($total - $old_total) WHERE name = '$name'; حيث $total هي قيمة الفاتورة المعدلة، و$old_total هي قيمة الفاتورة الأصلية، ففي حال الفاتورة الأصلية بقيمة 100 دولار، والفاتورة المعدلة بقيمة 200 دولار، فسيعمل الاستعلام على تحديث الرصيد إلى 100 دولار. أي نقوم بتحديث الكود كالتالي: // التحقق من وجود العناصر المحدثة if (isset($_POST['item_name']) && isset($_POST['item_quantity'])) { $item_names = $_POST['item_name']; $item_quantities = $_POST['item_quantity']; // حلقة لتحديث الكمية لكل صنف foreach ($item_names as $index => $item_name) { $item_quantity = $item_quantities[$index]; // استعلام لتحديث الكمية في المخزن $sql = "UPDATE inventory SET quantity = quantity - $item_quantity WHERE name = '$item_name'"; $conn->query($sql); } } // الحصول على قيمة الفاتورة الأصلية $sql = "SELECT total FROM sales WHERE sales_number = '$sales_number'"; $result = $conn->query($sql); if ($result->num_rows > 0) { $row = $result->fetch_assoc(); $old_total = $row['total']; } else { $old_total = 0; } // تحديث الرصيد $name = $account_name; $sql = "UPDATE account SET debit = debit + ($total - $old_total) WHERE name = '$name'"; $conn->query($sql); // تحديث القيد المحاسبي المرتبط بالفاتورة // تحديث القيد المحاسبي المرتبط بالفاتورة $sql = "UPDATE journal_entries SET credit = 0, debit = $total WHERE name = '$customer' AND debit > 0"; $conn->query($sql); $sql2 = "UPDATE journal_entries SET credit = $total, debit = 0 WHERE name = 'حساب المبيعات' AND credit > 0"; $conn->query($sql2); echo "تم تحديث القيد المحاسبي بنجاح."; // إغلاق الاتصال بقاعدة البيانات $conn->close(); // إعادة توجيه المستخدم إلى الصفحة الرئيسية header("Location: index.php");
  7. أرجو التعليق أسفل فيديو الدرس في التعليقات لمساعدتك بشكل أفضل، وطرح الأسئلة العامة هنا.
  8. صحيح تقريبًا، لكن هناك مشكلة، فلو قام المستخدم بإدخال 10 سيتم جمع الأرقام من 0 إلى 9 فقط حيث أن تلك طبيعة عمل الدالة range، والسؤال يريد جمع 10 أرقام، وأيضًا من الأفضل طباعة القيمة النهائية مباشرًة بدلاً من طباعتها في كل تكرار، ليصبح الكود كالتالي كالتالي: sum = 0 for m in range(int(input('Enter number: ')) + 1): sum = sum + m print(sum) لاحظي قمت بإضافة +1 للقيمة التي سيدخلها المستخدم. وبالنسبة للسؤال إذا أردتي كتابة التكرار 10 مرات فقط بدون سؤال المستخدم عن التكرار فسنكتب الكود كالتالي: sum = 0 for m in range(1, 11): sum = sum + m print(sum)
  9. أنت تقصد التخصص في مجال UI/UX وهو تصميم واجهة المستخدم أم تقصد مجال تطوير الواجهة الأمامية frontend أي كتابة الكود؟ عامًة إن كنت تقصد تصميم واجهة المستخدم أي أن تصبح مصمم UI/UX بدون كتابة الكود فستحتاج إل دراسة التالي: Grid Systems (أنظمة الشبكات) لتنظيم وتوجيه العناصر على الواجهة. Typography (الخطوط) لإختيار واستخدام الخطوط بشكل صحيح وجذاب. Color Theory (نظرية الألوان) لفهم كيفية استخدام الألوان بشكل فعال وجذاب. تعلم استخدام برامج تصميم مثل Adobe XD أو Sketch وFigms وهي الأداة الأفضل والأشهر. Contrast (التباين) لجعل العناصر الهامة تبرز. Hierarchy (تسلسل) لتنظيم العناصر بحيث يكون هناك تسلسل واضح في الرؤية. Microinteractions تفاصيل صغيرة تضيف قيمة وتعزز تجربة المستخدم. Feedback Systems (أنظمة التغذية الراجعة) إشارات تظهر للمستخدمين لتأكيد الأفعال أو تقديم معلومات حية. Wireframing لرسم هياكل بسيطة للواجهة لتحديد توزيع العناصر. Prototyping Tools (أدوات النماذج) استخدام أدوات مثل Figma أو Adobe XD لإنشاء نماذج تفاعلية. Personas (شخصيات المستخدمين) من أجل تعريف شخصيات المستخدمين المحتملين لفهم احتياجاتهم وأهدافهم. Customer Journey (رحلة العميل) لفهم تفاعل المستخدم مع المنتج منذ بداية استخدامه حتى الانتهاء. أنصحك بالإطلاع على المقالات التالية: ويمكنك التعلم من خلال القنوات التالية: Ahmad Sekmani Anas Rafaat | أنس رأفت
  10. @محمود سعداوي2 لم يحدث مشكلة في عملية رفع الصورة عند الضغط على share image وإختيار الصورة وكتابة العنوان والوصف، تم الإرسال وظهرت الصورة في الصفحة الرئيسية كالتالي: حاول حذف أي بيانات في local storage ثم تسجيل الخروج وتسجيل الدخول مرة أخرى، وحاول رفع الصورة. بعد ذلك قمت بتعديل الصورة من المف الشخصي وتم تعديل العنوان كالتالي:
  11. الاستضافات السحابية المناسبة هي: odoo.sh (الأفضل من حيث التكامل والتوافق مع odoo) DigitalOcean Vultr ( باقة Vultr High Performance من أفضل الخيارات من ناحية الأداء ومن ناحية السعر) Linode وبالطبع هي ليست مجانية. ويمكنك تفقد المستند الرسمي الخاص بعملية الـ deploy: https://www.odoo.com/documentation/15.0/administration/install/deploy.html وتستطيع البحث على اليوتيوب عن "odoo deployment" وستجد شرح بالعربية والإنجليزية.
  12. أرجو أن ترفق مجلد المشروع لتفقد المشكلة.
  13. لم يتم العثور على ملف القالب "login.html"، والقالب موجود بالفعل، لكن قمت بكتابة المسار بشكل غير صحيح في السطر التالي في ملف urls.py في مجلد project: path('',TemplateView.as_view(template_name='login.html'),name='login'), بينما عليك كتابة المسار الصحيح لأن القالب يقع داخل مجلد registration في مجلد templates، لذلك المسار هو: path('', TemplateView.as_view( template_name='registration/login.html'), name='login'),
  14. الخطأ يعني أن مهمة compileFlutterBuildDebug فشلت عند محاولة بناء تطبيق Flutter، ولتفقد المشكلة حاول القيام بالتالي: 1- التحقق من عدم وجود أخطاء في كود Dart، مثل أخطاء الـ syntax أو أخطاء النوع، وذلك عن طريق تشغيل الأمر: flutter analyze 2- تأكد من استخدام أحدث إصدار من SDK Flutter، وتستطيع تفقد التحديثات عن طريق تشغيل الأمر: flutter doctor 3- قم بحذف ملف pubspec.lock ثم أعد تحميل مكتبات المشروع: flutter pub get ثم تحقق من التوافق بين التبعيات dependencies في مشروعك باستخدام الأمر: dart pub outdated وفي حال استمرار المشكلة حاول استخدام الأمر التالي: flutter pub upgrade --major-versions 4- تفقد ملف pubsec.yaml فربما هناك assets لم يتم إيجادها مثل الصور أو ربما قمت بكتابة بعض أسماء الملفات بشكل غير صحيح مثل أسماء الصور. 5- في حال استمرار المشكلة حاول تعطيل برنامج الحماية من الفيروسات لديك ثم تحميل الحزم flutter pub get وبناء المشروع. وربما يفيديك النقاش التالي:
  15. المسألة هي إيجاد أطول substring متكرر في سلسلة، حيث أن الsubstring المتكرر هو substring يظهر مرتين أو أكثر في السلسلة. وفي المثال "abcabcbb"، فإن الsubstring المتكرر الأطول هو "abc"، حيث أنه يظهر مرتين في السلسلة. وفي المثال "bbbbb"، فإن الsubstring المتكرر الأطول هو "b"، حيث أنه يظهر مرتين في السلسلة. بينما في "wpwwkew"، فإن الsubstring المتكرر الأطول هو "wke"، حيث أنه يظهر مرتين في السلسلة. والطريقة التي تعمل بها المسألة هي كما يلي: نقوم بإنشاء مصفوفة لحفظ عدد مرات ظهور كل حرف في السلسلة. نقوم بإنشاء قائمة تحتوي على جميع الsubstrings المتكررة في السلسلة. نقوم بفحص كل substring في القائمة، ونقارن طوله مع طول أطول substring متكرر تم العثور عليه حتى الآن. إذا كان طول الsubstring أكبر من طول أطول substring متكرر تم العثور عليه حتى الآن، فإننا نقوم بتعيينه كأطول substring متكرر. في المثال "wpwwkew"، فإن الـ substrings المتكررة هي: "w" "ww" "wke" من بين تلك الـ substrings، فإن "wke" هو الأطول، حيث أنه بطول 3 أحرف.
  16. السبب هو أن الدالة array لا تقوم بإرجاع قيمة، وعندما لا تكون هناك عبارة return في دالة، فإن قيمة العودة الافتراضية هي undefined. قم بإضافة عبارة return لتعيد القيمة المناسبة من داخل الدالة، وأنت تريد أن تعيد النتيجة myarr: let array = (l1, l2) => { l11 = Number(l1.join('')); l22 = Number(l2.join('')); ar = l11 + l22; myarr = String(ar).split("").reverse().map((ar) => { return Number(ar); }); return myarr; } console.log(array([5, 6, 4], [2, 4, 3]));
  17. الأسئلة الإختبارية لا يتم الإجابة عليها بشكل مباشر، ويمكن مساعدتك في حال تم توفير كود، وبالنسبة لخطوات الحل فهى: المطلوب هو طباعة الأرقام من اليمين إلى اليسار بالوصف التالي، بمعنى لو كان العدد هو 123456، فإن البرنامج سيطبع الناتج التالي: 6 5 4 3 2 1 المدخلات: عدد T (1<=T<=10) يمثل عدد الحالات الاختبارية. T عدد صحيح N (0<=N<=10^9) تمثل عدد الحالات الاختبارية. المخرجات: بالنسبة لكل حالة اختبارية، اطبع سطرًا واحدًا يحتوي على أرقام العدد مفصولة بمسافة. مثال: المدخلات: 4 121 39 123456 1200 المخرجات: 1 2 1 9 3 6 5 4 3 2 1 0 0 2 1 مع العلم أن: حد وقت التنفيذ للكود هو ثانية واحدة حد استهلاك الذاكرة هو 256 ميغا بايت. بالنسبة لخطوات الحل: اقرأ المدخلات. احفظ المدخلات في متغير. احصل على عدد أرقام العدد المدخل. ابدأ حلقة من اليسار إلى اليمين. اقسم العدد على 10. احصل على الرقم المتبقي من القسمة. اطبع الرقم.
  18. هل تعلمت أساسيات بايثون وقمت بالتطبيق عليها، خاصًة الجزء المتعلق بالمعاملات الرياضية؟ بعد ذلك، عند محاولة الحل بنفسك، عليك تعلم التفكير المنطقي، فلا تحاول التفكير في كتابة الكود فور رؤية المسألة، فالكود هو أخر خطوة تقوم بها، وفي البداية عليك تقسيم المطلوب إلى أجزاء وليس التفكير في المسألة ككل، ثم التفكير في كل جزء وفي الأدوات المتاحة التي يمكن تنفيذ ذلك الجزء بها بالنسبة لحدود معرفتك بالطبع، ويمكنك البحث أيضًا عن كيفية تنفيذ أمر معين والقراءة والمشاهدة لتتعلم لكن بعد التفكير أولاً. وقم بتنفيذ نفس الأمر لباقي الأجزاء، ومن الممكن تقسيم كل جزء إلى أجزاء صغيرة للعمل عليها أيضًا، أي كتابة الكود للجزء الصغير ثم إضافة الجزء الذي يليه وستحصل على كود يقوم بالمطلوب. ولا تشغل بالك بجودة الكود أو أفضل طريقة للتنفيذ، بل عليك تنفيذ المطلوب فقط في بداية تعلمك وسيتحسن مستواك بالتدريج. وإذا كان هناك مسألة تتطلب فهم قانون رياضي معين، فعليك تعلم أساسيات الرياضيات من على اليوتيوب أو رؤية شرح للقانون الخاص بالمسألة وهكذا، وهو أمر هام جدًا حيث سيساعدك ذلك في كتابة المنطق البرمجي بشكل صحيح، أي ابحث عن اساسيات الرياضيات على اليوتيوب. روبما تجد هنا ما يفيدك:
  19. ستواجه مشاكل أخرى حتى لو أخبرتك بطريقة تنفيذ الأمر، لذلك عليك التحلي ببعض الصبر على تعلم Git وGitHub، حيث ستجد شرح وافي هنا: ثم عليك تفقد الأوامر هنا للمراجعة وأيضًا استيعاب فائدة كل أمر: وفي حال واجهت أية مشكلة بعد ذلك أخبرني.
  20. الـ business logic المقصود به مجموعة من القواعد والإجراءات التي تحدد كيفية عمل التطبيق من الناحية التجارية، ويتمثل دورها في تحويل البيانات الواردة من المستخدمين أو مصادر البيانات الأخرى إلى نتائج مفيدة. بمعنى أنه لو كنتِ تقومين ببناء تطبيق مصرفي، فإن الـ "business logic" سيتعلق بكيفية إجراء عمليات الإيداع والسحب، وكيفية التحقق من صحة المعاملات، وتنظيم كيفية عرض المعلومات المالية للمستخدمين، وغيرها من الجوانب الأساسية لأنشطة البنك. وينقسم business logic التطبيقات إلى عدة أجزاء رئيسية، وهي: التحقق من صحة البيانات: يتحقق هذا الجزء من أن البيانات الواردة من المستخدمين أو مصادر البيانات الأخرى صالحة ومتوافقة مع متطلبات التطبيق. المعالجة: يعالج هذا الجزء البيانات الواردة ويحولها إلى نتائج مفيدة. عرض النتائج: يعرض هذا الجزء النتائج للمستخدمين أو يرسلها إلى مصادر البيانات الأخرى. وإليك بعض الأمثلة على business logic التطبيقات: في تطبيق مبيعات، قد يشمل business logic قواعد لحساب الضريبة وتحديد الخصومات. في تطبيق ويب، يشمل business logic قواعد للتحقق من أن المستخدمين مسجلين ومسؤولين عن المحتوى الذي ينشئونه. في تطبيق ألعاب الفيديو، قد business logic قواعد لتحديد كيفية تحرك الشخصيات والتفاعل مع البيئة.
  21. لا فائدة من تجربة Atom الآن، حيث تم إيقاف الدعم عنه في 15 ديسمبر من عام 2022، وذلك بعد أن استحوذت شركة Microsoft على شركة GitHub، التي كانت تمتلك Atom ، وأعلنت Microsoft أنها ستركز بدلاً من ذلك على دعم محرر Visual Studio Code (VS Code). لذلك يعتبر محرر vscode الأفضل حاليًا وهو مجاني تمامًا وتستطيع تخصيصه كيفما تريد وبإمكانك تحميل theme من المتجر وأرشح لك ثيم SynthWave '84: https://marketplace.visualstudio.com/items?itemName=RobbOwen.synthwave-vscode
  22. الأمر راجع لوجود مجلد في اسه حروف عربية أي مكتوب اسمه بالعربية داخل مجلد OneDrive لديك. وفي منفذ الأوامر في vscode أي عند فتحه من خلال vscode لا يوجد دعم للغة العربية، لذلك عليك تجنب استخدامها عند التعامل معه، أي عليك إعادة تسمية المجلد ليصبح بالإنجليزية وستختفي المشكلة. لكن لو قمت بفتح مسار المجلد في منفذ الأوامر لكن خارج vscode ستجد أن المسار يظهر بشكل طبيعي. لاحظ هنا:
  23. "Next build" و"Next export" هما أمرين في نستخدمهم في إطار Next.js، وإليك شرح لكل منهما: أمر Next Build: يستخدم لبناء تطبيق Next.js. عند تشغيل next build، يتم إنشاء نسخة مجمعة ومحسنة من تطبيق Next.js. يقوم بتحسين وتجميع الملفات والمكتبات وتحسين أداء التطبيق. الهدف هو إعداد تطبيق جاهز للإنتاج. أمر Next Export: يستخدم لتصدير تطبيق Next.js كـ "تطبيق ثابت" (Static Application). عند تشغيل next export، يتم إنشاء مجلد يحتوي على ملفات HTML و CSS و JavaScript التي يمكن نشرها كمجلد ثابت. يتيح لك استضافة التطبيق كموقع ويب ثابت دون الحاجة إلى خوادم خاصة بـ Next.js. يفيد في تقديم تجربة تفاعلية سريعة للمستخدمين بفضل الصفحات الثابتة.
  24. عليك الحصول على الـ API's الخاصة بالدفع للشركات المقدمة لخدمات المرافق في بلدك، والحصول على ذلك يختلف من بلد لآخر، لذلك عليك تفقد ما هي الإجراءات. بعد ذلك تستطيع ربط السيرفرات باستخدام بروتوكول HTTP أو HTTPS، مع استخدام تقنيات مثل WebSockets أو RESTful APIs لتسهيل تبادل البيانات بين السيرفرات. أي بعض الخطوات اللازمة لعمل نظام لشحن كروت الكهرباء واصدار كروت شركات الاتصالات ودفع الفواتير وشحن الانترنت الارضي وغيرها، هي: إنشاء قاعدة بيانات لتخزين البيانات المتعلقة بالنظام، مثل بيانات العملاء، وبيانات الفواتير، وبيانات الحسابات المصرفية، وغيرها. إنشاء تطبيقات ويب لتوفير واجهات للمستخدمين للتفاعل مع النظام. إنشاء تطبيقات برمجية لمعالجة العمليات المالية، مثل الشحن والدفع. ربط السيرفرات باستخدام بروتوكول HTTP أو HTTPS. دمج APIs المالية مع النظام. وبالطبع هناك إجراءات أمنية يمكن تنفيذ بعضها أو كلها مثل: استخدام التشفير لتأمين البيانات الحساسة، مثل بيانات الحسابات المصرفية. استخدام المصادقة الثنائية (2FA) لزيادة أمان تسجيل الدخول. استخدام أنظمة الإنذار الأمني لاكتشاف محاولات الاختراق. وبالطبع تحتاج إلى تأسيس شركة للتطبيق الخاص بك.
  25. لا يتم ربطه سواء بمستقل أو خمسات، بل عندما يكون لديك رصيد في حسابك بدءًا من 25 دولار، تستطيع سحب الرصيد أو الأرباح إلى باي بال أو حسابك البنكي. أي تقوم بالضغط على سحب الرصيد، ثم تختار باي بال ثم تضع الإيميل الخاص بحساب باي بال وسيتم تحويل الأموال إليه في غضون 12 ساعة تقريبًا أو أقل.
×
×
  • أضف...