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

Mustafa Suleiman

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

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

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

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

    495

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

  1. يوجد خطأ في الكود الخاص بك، يتمثل في وضع تحديد القيمة "None" في كل مرة يتم فيها تكرار الحلقة، لذا يجب وضع تحديد القيمة خارج الحلقة. وبالإضافة إلى ذلك، يجب تحديد القيمة "None" عند البدء ، حتى لا يتم إرجاع رسالة "الرقم غير موجود" في كل مرة يتم فيها تكرار الحلقة. يمكن استخدام شرط "else" بدلاً من تحديد القيمة "None" ، حيث يتم تنفيذ الأمر الذي يلي "else" إذا لم يتم العثور على الرقم المدخل. باستطاعتك استخدام الكود التالي: phone_book = { "Amal" : 111 , "Mohammed" : 222 , "Khadijah" : 333 , "Abdullah" : 444 , "Rawan" : 555 , "Faisal" : 666 , "Layla" : 777 } xx = int(input("Enter a number: ")) phone_book_to = None for key, value in phone_book.items(): if xx == value: print("This phone number", value, "belongs to:", key) phone_book_to = key break else: print("The input number is not found!")
  2. دعني أقدم لك بعض النصائح، في البداية يجب عرض المشروع الخاص بك على مستقل وثم كتابة وصف المشروع بشكل دقيق، وتحديد ما تريده من المبرمج باالتفصيل، مع وضع شروط للمتقدمين يجب توافرها وإلا سيتم التغاضي عن أي عرض لا يتوافر فيه تلك الشروط. قم أيضًا بوضع تفصيلة أو معلومة أو سؤال داخل تفاصيل المشروع لترى من قام بقراءة التفاصيل والمطلوب بالضبط، حيث سيتم الرد عليك في العرض الخاص به. إذا كانت الميزانية الخاصة بك منخفضة والمشروع كبير ويتطلب ميزانية أكبر، فقد ترى عزوف من المبرمجين الجيدين أو المحترفين من تقديم عرض على مشروعك، لذلك يمكنك رفع تكلفة المشروع بالشكل المناسب لحجم مشروعك. وإذا كنت تريد العمل مع شخص ذو خبرة أقل أو مبتدأ فلا مشكلة أبدًا، لكن يجب -وضع 100 خط تحت كلمة يجب- أن يتوافر معرض أعمال سابقة بجودة إحترافية مناسبة مشابهة للمشروع الخاص بك. وهناك أمر هام يجب القيام وهو التحدث مع المستقل عن تفاصيل المشروع وسؤال عن الكيفية التي سينفذ بها المشروع وما هي أسهل طريقة أو أفضل طريقة أو يمكنك تكلفته بتنفيذ جزء بسيط من المشروع كإختبار، كل تلك الأمور تحدد لك إحترافية المبرمج قبل بدء العمل معه. وقد تم النقاش حول سؤال مماثل من قبل أنصحك بقرائته، وأيضًا هناك مقالات على مدونة مستقل تتحدث عن هذا الأمر، وإليك الروابط: كيف اختار المبرمج للعمل على مشروعي افضل طريقة للتعامل مع المبرمجين كيف تجذب المستقلين المحترفين لتقديم عروضهم على مشاريعك؟ كيف توظف أفضل مطور ويب مستقل؟ نصيحة أخرى وهي إمكانية الإعتماد على منصة بعيد التابعة لشركة حسوب، حيث ستجد عليها مطورين محترفين بلا شك.
  3. المشكلة تحدث بسبب استخدام useState بطريقة خاطئة. في هذا الكود ، تم استخدام حالة qty المحلية لجميع العناصر في cartItems. لذلك ، عند تحديث qty لأي من العناصر ، ستتأثر جميع العناصر الأخرى بقيمة qty الجديدة. لحل هذه المشكلة ، يمكنك استخدام حالة qty المحلية لكل عنصر على حدة. يمكنك تحقيق ذلك عن طريق تحويل qty إلى مصفوفة من القيم في حالة useState وتخزين القيم بناءً على معرف العنصر. إليك الكود المعدل: import React, { useState } from 'react' function calculateTotal(cartItems) { let total = 0; for (let i = 0; i < cartItems.length; i++) { const price = parseInt(cartItems[i].price); const qty = cartItems[i].qty; if (!isNaN(price)) { total += price * qty; } } return total; } function Cart({ cartItems, setModal, removeFromCart, addToCart }) { const [qtyArray, setQtyArray] = useState( cartItems.map((cartItem) => ({ id: cartItem.id, qty: 1 })) ) const handlePlus = (index) => { setQtyArray((prevState) => prevState.map((item, idx) => idx === index ? { ...item, qty: item.qty + 1 } : item ) ) } const handleMinus = (index) => { setQtyArray((prevState) => prevState.map((item, idx) => idx === index ? { ...item, qty: item.qty - 1 } : item ) ) } return ( <div className='cart-modal'> {cartItems.length === 0 ? ( <h1 className='empty-cart'>Your Cart Is Empty</h1> ) : ( cartItems.map((cartItem, index) => { const qtyIndex = qtyArray.findIndex( (item) => item.id === cartItem.id ) const qty = qtyArray[qtyIndex].qty return ( <div className='cart-product' key={index}> <img src={cartItem.image} alt='' /> <div className='cart-product-info'> <h3 className='cart-price'>{cartItem.price}$</h3> <div className='quantity'> <button type='button' className='plus' onClick={() => handlePlus(qtyIndex)} > + </button> <h4 className='qty'>{qty}</h4> <button type='button' className='minus' disabled={cartItem.qty <= 1} onClick={() => handleMinus(qtyIndex)} > - </button> <button type='button' className='remove'> <i className='fa-solid fa-trash' onClick={() => removeFromCart(cartItem.id)} ></i> </button> </div> <h2 className='total'>{cartItem.price * qty}</h2> </div> </div> ) }) )} <div className='cart-summary'> <h2className='cart-summary-title'>Total: {calculateTotal(cartItems)}$</h2> <button type='button' onClick={()=>setModal(false)}>CLOSE</button> </div> </div> ) } export default Cart
  4. في البداية يجب توضيح بعض الأمور. ما هي الكتابة الإعلانية؟ ما هو الكاتب الإعلاني؟ تعتبر الكتابة الإعلانية من المجالات التي تحتاج لتعريف واضح ودقيق، ولكن هناك مجموعة متنوعة من التعاريف والمفاهيم حول هذا المجال. كانت أكثر التعريفات شيوعًا في السابق هي "بيع السلعة في الكتابة" ولكن مع ظهور الفيديو والإنترنت تغيرت هذه النظرة واصبح الكاتب الإعلاني يعمل على جميع وسائط الإعلان. ويقوم الكاتب الإعلاني بكتابة مواد تسويقية تؤثر على العميل المحتمل بطريقة تدفعه إلى شراء المنتج. بمعنى آخر، فإن الرسالة التي تتلقاها في البريد، أو الإعلان الذي تشاهده على التلفزيون، أو الرسالة الصوتية التي تتلقاها من أحد المبيعات، أو البريد الإلكتروني التسويقي للمشتركين، أو صفحة الهبوط بدعوة للعمل على المنتج، أو الفيديو على YouTube حول المنتج، أو الإعلان الصحفي، أو إشعار الدفع، والندوة على الإنترنت هي جميعاً أمثلة على الكتابة الإعلانية. أنواع الكتابة الإعلانية هناك أنواع عديدة جدًا مثل: كتابة البريد المباشر، كتابة البريد الإلكتروني، كتابة المنشورات على الفيس بوك والمنصات الأخرى، كتابة خطابات البيع، مقالات المدونات، وصف المنتج، الصفحات الرئيسية للتطبيقات، الورقات البيضاء، ونسخ المغناطيسية الرصاصية. الكتابة الإعلانية تنقسم إلى قسمين الرد المباشر والتسويق العلامي، حيث تركز الرد المباشر للكتابة التي تحث على الاستجابة الفورية للعملاء، وغالبًا ما تستخدم في الحملات الإعلانية التي تستهدف المبيعات المباشرة، مثل البريد المباشر والإعلانات التلفزيونية والإنترنت. ومن ناحية أخرى، تهدف الكتابة الإعلانية للتسويق العلامي إلى تعزيز العلامة التجارية وتعريف المستهلكين بالشركة ومنتجاتها أو خدماتها، وتستخدم عادةً في الإعلانات التلفزيونية والإعلانات المطبوعة. يعتمد نجاح الكتابة الإعلانية على القدرة على جذب الانتباه والتركيز وإثارة الرغبة في المستهلكين للشراء أو استخدام المنتج أو الخدمة. لذلك، يجب على الكاتب الإعلاني أن يفهم الجمهور المستهدف وأن يصاغ الإعلان بطريقة تتماشى مع احتياجاتهم ومتطلباتهم. كما يجب أن يكون الإعلان مبتكرًا ومميزًا بما يكفي للتميز عن منافسيه وجذب العملاء المحتملين. في النهاية، يمكن القول إن الكتابة الإعلانية هي جزء أساسي من حملات التسويق والإعلان، وتعتبر أداة قوية في جذب العملاء وتعزيز العلامة التجارية. كيفية الحصول على وظيفة؟ أولاً يجب إنشاء معرض أعمال. و العمل ككاتب نصوص إعلانية حر لا يتطلب خبرة سنوات أو سيرة ذاتية لتحقيق النجاح، حيث يهتم عملاؤك بفعالية كتابتك فقط. والعمل لا يحتاج إلا عينة أو اثنين من النصوص الإعلانية ومعرض أعمال عمل يظهر للعملاء أنك قادر على إنشاء عمل جيد لهم. بعد ذلك يمكنك التقدم للوظائف المطروحة على مواقع العمل الحر المختلفة، وأيضًا يمكنك التقدم للوظائف على مواقع مثل LinkedIn ولكنها تطلب بعض الخبرة. وأنصحك بقراءة المقالات الخاصة بالتسويق بالمحتوى في مدونة مستقل
  5. هناك عدة أخطاء في الكود، فهناك سطران يحتويان على خطأ إملائي، وكذلك هناك عدم تعريف المتغير Elemint. هناك أيضًا استخدام لـ $.post دون استيراد مكتبة jQuery. لذلك يجب عليك تصحيح الأخطاء كما يلي: 1- يجب استيراد مكتبة jQuery أولاً، يمكن فعل ذلك عن طريق إضافة السطر التالي في الجزء العلوي من ملف الـ HTML الخاص بك: <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> 2- يجب عليك تصحيح الخطأ الإملائي في هذا السطر: clas_name_parent = parent.parentNode.className; يجب تغييره إلى: var class_name_parent = parent.parentNode.className; 3- أيضًا يجب تصحيح هذا السطر: Elemint.innerHTML = "<p> style='color:green'>Выберите ячейку №" + sender_cheker(1, 5) + "</p>"; يجب تغييره إلى: Elem.innerHTML = "<p style='color:green'>Выберите ячейку №" + sender_cheker(1, 5) + "</p>"; بعد تصحيح هذه الأخطاء، يجب أن يعمل الكود بشكل صحيح.
  6. يجب أن تعرف أولاً ان ملف package-lock.json يستخدم في مشروع Node.js لتأكيد إصدارات الحزم التي يتم استخدامها وتثبيتها بشكل دقيق ومنظم. يتم إنشاؤه تلقائيًا عند تثبيت حزم Node.js باستخدام أداة npm. يحتوي هذا الملف على قائمة بالحزم المثبتة وإصداراتها وتوابعها المعتمدة، بما في ذلك التبعيات التي يعتمد عليها كل حزمة. ويساعد هذا الملف على ضمان تثبيت الحزم بشكل متسق وتجنب حدوث أخطاء بسبب تباين الإصدارات. الفرق بين pacakge.json و package-lock.json package.json: هو ملف يحتوي على معلومات عامة عن المشروع مثل اسم المشروع ووصفه ومؤلفه وإصداره وغيرها. كما يحتوي على قائمة بالحزم التي يعتمد عليها المشروع وإصداراتها، بالإضافة إلى أية أوامر مخصصة لتشغيل البرنامج أو الاختبارات أو أي أدوات أخرى. package-lock.json: هو ملف يحتوي على قائمة بالحزم المثبتة وإصداراتها وتوابعها المعتمدة dependencies، بما في ذلك التبعيات التي يعتمد عليها كل حزمة. يتم إنشاؤه تلقائيًا عند تثبيت الحزم باستخدام أداة npm عبر ملف package.json. يهدف هذا الملف إلى تأكيد تثبيت الحزم بشكل دقيق ومنظم بناءً على إصداراتها المحددة. بمعنى أبسط، في ملف package.json، يتم تحديد إصدارات الحزم التي يجب تثبيتها، ولكن يمكن لـ npm اختيار تثبيت أحدث إصدار متوافق تلقائيًا إذا كان متاحًا. وهذا يعني أن إصدارات الحزم التي تم تثبيتها يمكن أن تختلف بين المطورين المختلفين أو بين بيئات التشغيل المختلفة. أما في ملف package-lock.json، فإنه يحتوي على إصدارات الحزم التي تم تثبيتها بشكل دقيق وتوابعها المعتمدة، وهو يضمن أن يتم تثبيت الحزم بنفس الإصدارات عند تحميل المشروع على بيئات تشغيل مختلفة أو عند تعاون المطورين على نفس المشروع. بالنسبة للسؤال الخاص بك، فإنه من الأفضل تضمين ملف package-lock.json في مشروعك على GitHub، بجانب ملف package.json. فعندما يقوم أحد المستخدمين بتحميل مشروعك من GitHub، سيحصلون على نسخة من ملف package-lock.json الخاص بك. وبالتالي، سيتم تأكيد تثبيت الحزم بشكل دقيق بناءً على إصداراتها المحددة في هذا الملف. يمكنك الاستفاذة من سلسلة المقالات المنشورة حول git.
  7. هناك عدة طرق يمكن استخدامها لجعل حجم الخطوط متجاوبًا مع الصفحة بطريقة تلقائية وأكثر دقة. لكن أفضلها في رأي استخدام rem ولكن بطريقة مختلفة حيث يجب القيام بالتالي: يتم تعيين حجم الخط الأساسي (الخط الجذري) إلى 62.5% بدلاً من 100%. html { /* 62.5% of 16px browser font size is 10px */ font-size: 62.5%; } .some-element { /* 1.2 * 10px = 12px */ font-size: 1.2rem; } يعني ذلك أن حجم الخط الأساسي يكون يساوي 10 بدلاً من 16 بكسل (الحجم الافتراضي لحجم الخط على متصفحات الويب). وذلك لأن 16 يقسم على 2.5 يساوي 6.4، و 6.4 بدلاً من 10 سيعني أن الأحجام المستخدمة بعد ذلك ستكون أسهل للتحكم بها بشكل نسبي، حيث ستستخدم نسبة بين الحجم الجديد والحجم الأساسي بنسبة نسبية سهلة الاستخدام مثل rem أو em أو بالنسبة المئوية. ويتيح ذلك أيضًا تعديل حجم الخط بشكل سريع وسهل. أمثلة: body { font-size: 1.6rem; } h1 { font-size: 4.8rem; } وهكذا بالنسبة لبقية التصميم، وستجد أن الأمر أصبح أسهل من ذي قبل في إنشاء التصاميم المتجاوبة.
  8. مشكلة الخروج من الموقع بعد مرور ثانيتين فقط قد يكون سببها أن البرنامج ينهي تشغيل المتصفح فورًا بعد فتح الموقع. لحل هذه المشكلة، يمكنك إضافة كود لجعل البرنامج ينتظر قليلًا بعد فتح الموقع. باستخدام الأمر time.sleep() لتعليق عملية البرنامج لعدد معين من الثواني. في المثال التالي، تم إضافة كود لينتظر البرنامج 5 ثوانٍ قبل الانتقال للخطوة التالية: import time from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager # تثبيت محرك التشغيل brws=webdriver.Chrome(ChromeDriverManager().install()) # تكبير النافذة brws.maximize_window() # فتح الموقع brws.get("https://elzero.org") # انتظار 5 ثوانٍ time.sleep(5) # الخطوة التالية # ... ويمكن تعديل العدد الذي يتم فيه الانتظار للحصول على نتائج أفضل حسب حاجتك.
  9. لا يتم الإجابة على الأسئلة الخاصة بالإختبارات، ولكن يمكن إرشادك لطريقة الحل. لحل هذا السؤال، يمكن استخدام مصفوفة لتخزين معلومات الصداقة بين الأصدقاء. باستخدام القيم الواردة في السطر الثاني من الإدخال لملء المصفوفة بحيث يتم تعيين قيمة مصفوفة friends[i-1] بالرقم pi، حيث i هو رقم الصديق. وبمجرد ملء المصفوفة، يمكن الحصول على الجواب لكل صديق بطباعة رقم الصديق الذي قدم له الهدية، والذي يمكن الوصول إليه من خلال قراءة قيمة المصفوفة friends[i-1]، حيث i هو رقم الصديق الحالي. وبالتالي، يتم طباعة الرقم الخاص بالصديق الذي قدم الهدية لكل صديق في النهاية. يمكن تطبيق هذا الحل بسهولة باستخدام لغة البرمجة المفضلة لديك مثل Python أو Java أو C++ أو غيرها. وإذا واجهتي مشكلة أثناء الحل يمكنك السؤال وسيتم إرشادك.
  10. بالطبع أنت قادر على فعل ذلك من خلال C++، ولكن الأفضل والأسهل استخدام جافاسكريبت وتقنيات الويب لتحقيق ما تريده. باستخدام HTML و CSS لتصميم واجهة المستخدم الخاصة بك واستخدام جافاسكريبت لإضافة المنطق والتفاعل في الصفحة. والأسهل استخدام مكتبات مثل React أو Vue.js لإنشاء واجهة المستخدم بشكل أسرع وأسهل وأكثر تنظيمًا. بالإضافة إلى ذلك، يمكن استخدام أدوات تحويل HTML إلى PDF مثل jsPDF لتصدير الصفحة كملف PDF.
  11. يعتمد الخيار الأنسب على حجم ونوع الملفات التي تريد حفظها وتحميلها، وحجم قاعدة البيانات الخاصة بك، ومدى قوة الاتصال بالشبكة. إذا كانت الصورة تتميز بحجم كبير، فإن استخدام التشفير base64 لتخزينها في قاعدة البيانات قد يتسبب في بطء أداء النظام. وعلى الجانب الآخر، إذا كان حجم الصورة صغيراً، فيمكن استخدام التشفير base64 وتخزينها مباشرة في قاعدة البيانات دون الحاجة إلى الاتصال بخادم API. ومن جهة أخرى، إذا كنت تستخدم خوادم API، فإن استخدام رابط الملف المباشر قد يعزز أداء نظامك عند تحميل الصورة، حيث أن الخادم الخارجي سيكون مسؤولاً عن إرسال الصورة إلى المستخدم مباشرة، وسيساعد في تقليل حجم قاعدة البيانات الخاصة بك. فإذا كانت الصورة كبيرة الحجم أو تستخدم بشكل متكرر، فمن المستحسن تخزينها كملف مباشر على خادم API. وإذا كانت الصورة صغيرة الحجم، فإن تشفيرها باستخدام base64 وحفظها مباشرة في قاعدة البيانات هو الخيار الأفضل.
  12. دعني أتحدث معك بصراحة، كلمة مبرمج محترف ليست بالهينة، فعند الإنتهاء من دراسة أحد المسارات أنت الآن أصبحت مبرمج مبتدأ، ولتصبح مبرمج محترف يجب من البداية أن تكون قد فهمت الأساسيات بشكل جيد وعملت بجد وإجتهاد على التطبيق عليها منذ بداية دراستك للدورة، أو يمكنك الرجوع لمراجعة الأساسيات مرة أخرى. وفي أكاديمية حسوب، يتم إرشادك للطريق الصحيح من خلال الدورات المعدة من خلال خبراء في مجالهم، وتعطيك دفعة كبيرة مقارًنة بشخص لم يقم بالدراسة من خلال مسار تعليمي وقام بالتطبيق على مشاريع كبيرة من أرض الواقع. وبعد التطبيق على أكثر من مشروع ومواجهة وحل المشاكل البرمجية لفترة بعد الإنتهاء من الدورة ستصبح مبرمج محترف، فالبعض يختلط عليه الأمر وهو أنه يقوم بحساب زمن فترة الدراسة على أنها خبرة، والأمر ليس كذلك، بل أصبح مؤهل لسوق العمل وبحاجة إلى الخبرة الآن. فالجميع أثناء دراسته هو طالب وبعد الإنتهاء من مسار الدورة، أصبح عند نقطة البداية في طريق إحتراف البرمجة، مثل المهندس عند تخرجه من الجامعة فهو قادر على تنفيذ مشروع لقد ليس بالحجم الكبير و غير قادر على حل المشكلات التي تطلب خبرة عملية. وكنصيحة، يجب التدرب على المشاريع الحقيقية والتي يتم تنفيذ مثلها على أرض الواقع في الشركات، لا التطبيق على نماذج مصغرة أو لعبة بسيطة، ولا تسيء فهمي فالأمر جيد في البداية لا مشكلة إطلاقًا الجميع بدأ من تلك النقطة. لكن لتصبح مبرمج يحترف يجب العمل على المشاريع الحقيقية والمعقدة وزيادة درجة تعقيدها مع مرور الوقت بعد الإنتهاء من المشاريع البسيطة.
  13. جميع الشهادات التي تصدرها أكاديميّة حسوب تصدر فقط بعد اجتياز الامتحان بنجاح. هذه ليست "شهادات إكمال" أو "شهادات حضور"، ولا يمكن الحصول عليها بالانضمام للدورة فقط، بل يجب على الطالب التطبيق عمليًا أثناء الدورة، إجراء المقابلة وإثبات قدراته. وجميع شهادات أكاديمية حسوب متاحة برابط مباشر على موقع الأكاديمية مما يتيح التحقق من صحتها بأي وقت. أي أنك قادر على تحميلها على حاسوبك ومن ثم طباعتها في أي مكان لديك في بلدك. أيضًا أرجو منك الإنتباه إلى أنّ هناك شروط للتقدم للإمتحان وإجتيازه، ستجد تفاصيل عنها في النقاش التالي، منعًا للتكرار. وأرجو لك التوفيق ولكل أهل فلسطين العزيز.
  14. في البداية أنصحك بإنشاء المواقع بالطريقة الطبيعية وباللغة الإنجليزية، إلا في حال كنت تتابع إحدى الدورات مثل دورات حسوب. وذلك لسبب معين، وهو تجنب بعض المشاكل الخاصة بتحويل الإتجاه من LTR إلى RTL، فأنت بحاجة إلى تعلم كيف يتم ذلك وهو أمر أجده مشتت لك في بداية تعلمك إلا إذا كنت تتابع مع دورة معينة ومدرب جيد، لذلك بعد إنشاء موقعك الأول بنجاح، يمكنك تحويله إلى اللغة العربية أو بناء موقع آخر وتطبيق ما تريده. وأنصحك بشدة بقراءة الدليل التالي: RTL Styling 101 دليل مكثف لكيفية كتابة CSS للمواقع من اليمين إلى اليسار. أو يمكنك استخدام Bootstrap وبخصوص التصميمات والاستلهام أنصحك بقراءة الإجابات على السؤال التالي:
  15. لا داعي للقلق فهذا أمر طبيعي جدًا، وأنت في الطريق الصحيح طالما مازلت تحاول وتضع الوقت والجهد، في بداية تعلم البرمجة قد تقضي وقت أطول من ذلك في تطبيق محاولاً حل المشاكل التي تواجهك وتعلم أشياء جديدة أثناء البحث هنا وهناك. ولا يوجد إجابة صحيحة واحدة لهذا السؤال، فالوقت الذي تقضيه في تطبيق الدروس يعتمد على مستوى مهاراتك وخبرتك في البرمجة. إذا كنت مبتدئًا في البرمجة، فمن الأفضل لك أن تستمر في قضاء الوقت الذي تقضيه حاليًا في محاولة تطبيق الدروس وحل المشاكل التي تواجهك. وبمرور الوقت وزيادة مستوى خبرتك، قد تجد أنك تحتاج إلى وقت أقل لتطبيق الدروس. كل من ترك طريق البرمجة، لم يتمكن من تخطي تلك المرحلة الصعبة في البداية، لذلك ضع لنفسك خطة عمل لمدة 6 شهور إلى سنة والعمل بشكل يومي وشاهد النتيجة في النهاية. بالنسبة لأفضل طريقة لتعلم البرمجة، فستجد هنا في النقاش التالي إجابة على سؤالك: وأنصحك بقراءة الإجابات على الأسئلة التالية، فهى خاصة بك ومن المفيد قرائتها مرة أخرى: ومهما كانت الطريقة التي تناسبك، فمن المهم أن تتذكر أن التعلم يتطلب الصبر والمثابرة، وأنه من الممكن أن يستغرق الأمر وقتًا قبل أن تصبح ملمًا بالمفاهيم البرمجية وتتمكن من تطبيقها بسهولة.
  16. هناك عدة أسباب محتملة لعدم عمل الدالة count بشكل صحيح، منها: 1- قد يكون المتغير $data_to_go ليس من النوع الصحيح للعمل مع الدالة count، فهي تعمل فقط مع المصفوفات (arrays). 2- قد يكون الفهرس المستخدم في المصفوفة غير صحيح، وبالتالي يتم إرجاع قيمة غير صحيحة. 3- قد يكون هناك خطأ في الكود الذي يسبب تعطل عمل الدالة count. لذلك، يجب التأكد من أن المتغير $data_to_go هو من النوع الصحيح (مصفوفة) وأن الفهرس المستخدم في المصفوفة صحيح، كما يجب فحص الكود بشكل دقيق للتأكد من عدم وجود أخطاء. قد يساعد استخدام دالة var_dump لفحص قيمة المتغير والتأكد من صحتها. في حالة استمرار المشكلة يمكنك استخدام sizeof() بدلاً من ذلك للحصول على عدد العناصر في المصفوفة. على سبيل المثال: $s = $data_to_go[$obj->fk_employe]['totaldayspresent']; echo sizeof($s); إذا لم تعمل sizeof() أيضًا، فربما يتعين عليك فحص محتوى المتغير $s لتحديد السبب في ذلك. و استخدام sizeof() سيعيد حجم المصفوفة بشكل عام وليس القيمة التي تحتويها المصفوفة. لذلك، إذا كنت تريد الحصول على قيمة محددة في المصفوفة، يجب استخدام الفهرس الصحيح لتحديد تلك القيمة. يمكن أيضًا استخدام دالة end() للحصول على آخر قيمة في المصفوفة. على النحو التالي: $s = $data_to_go[$obj->fk_employe]['totaldayspresent']; echo end($s); ستعيد الدالة قيمة آخر عنصر في المصفوفة $s، وفي هذه الحالة ستعيد القيمة 21.
  17. من خلال النظر للكود الخاص بك فالمتغير $s يحتوي على مصفوفة أو قائمة وأن القيم المطبوعة هي عناصر هذه القائمة. للحصول على عدد العناصر في هذه القائمة، يمكن استخدام الدالة count() وتطبيقها على القائمة الموجودة في $s. ولتحديد القيمة الأخيرة في القائمة، يمكن استخدام دالة end() للحصول على القيمة الأخيرة في القائمة. لذلك، يمكن استخدام الكود التالي للحصول على عدد العناصر في القائمة والقيمة الأخيرة في القائمة: $count = count($s); // للحصول على عدد العناصر في القائمة $last_value = end($s); // للحصول على القيمة الأخيرة في القائمة echo $last_value; // سيتم طباعة القيمة الأخيرة في القائمة (في هذه الحالة هي 21)
  18. يمكنك حساب تكلفة الصفحة الواحدة بسعر 50 دولار، ولكن ذلك يتوقف على محتوى كل صفحة، فربما هناك صفحات ذات محتوى بسيط، فسعرها منخفض في تلك الحالة، والأمر يتوقف على ميزانية العميل وجودة العمل المطلوب ومتطلبات المشروع أيضًا.
  19. ،يجب عليك تثبيت ملحقات (extensions) لدعم اللغة التي تستخدمها. يمكنك البحث عن الملحقات المناسبة لـ C# في قسم Extensions من القائمة الجانبية في VS Code أو عن طريق زيارة موقع marketplace.visualstudio.com. يمكنك تثبيت الملحق المسمى C# من خلال النقر على زر الإضافات في الزاوية اليسرى السفلية من VS Code ، ثم البحث عن C# في شريط البحث. ستظهر قائمة بالملحقات المتاحة ، ويجب عليك اختيار الملحق الذي تريد تثبيته ، والضغط على زر "تثبيت". بعد تثبيت الملحقات ، يجب أن يظهر VS Code اقتراحات للكود المكتوب بلغة C# وسيساعدك على الانتهاء من مهمتك بسهولة. وأنصحك بتحميل الإضافة التالية: https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp تأكد أيضًا من تثبيت .NET Core SDK على جهاز الكمبيوتر الخاص بك. يمكنك القيام بذلك عن طريق زيارة موقع Microsoft وتنزيله من هناك. والخاصية التي تتحدث عنها بخصوص الإقتراحات، تدعى IntelliSense. ويمكن تفعيل ميزة IntelliSense في VS Code عن طريق التأكد من وجود الملحق المناسب للغة البرمجة التي تستخدمها. باستطاعتك تشغيل ميزة "IntelliSense" في أي نافذة محرر عن طريق الضغط على Ctrl+Space. وبالنسبة لمشكلة رسائل الخطأ التي تظهر لك، تحدث في ملفات المشروع (project files)، حيث أن OmniSharp يحاول تحديث ملفات المشروع التي لم تتم تحميلها (not loaded)، وهذا قد يكون بسبب عدم تعرف Visual Studio Code على ملفات المشروع بشكل صحيح. لحل المشكلة يمكنك المحاولة بالخطوات الآتية: التأكد من أن ملفات المشروع تم إضافتها بشكل صحيح في المجلد الصحيح. التأكد من تحميل وتثبيت المكونات اللازمة لـ Visual Studio Code لدعم لغة C# و Unity. تجربة إعادة بناء ملفات المشروع من الصفر باستخدام الأدوات المناسبة. ويمكنك البحث بنسخ رسالة الخطأ التي تظهر ورؤية الحلول المتاحة إن توافرت.
  20. الكود المذكور لا يسبب أي مشكلة، حيث أنه يقوم بجلب البيانات من API وتحديث قيمة الحالة (state) باستخدام الدالة setProducts. ولكن قد يكون هناك بعض العوامل الخارجة عن الكود التي تؤثر على أداء تطبيقك، مثل: 1- حجم البيانات المسترجعة: إذا كانت هناك كمية كبيرة من البيانات المسترجعة، فقد يؤدي ذلك إلى بطء في عرض الصفحة. 2- ضعف سرعة الاتصال بالإنترنت: إذا كانت سرعة الاتصال بالإنترنت ضعيفة، فسيتأخر تحميل البيانات وعرضها على الصفحة. 3- الحمل الزائد على المعالج: إذا كان هناك حمل كبير على المعالج بسبب عدد كبير من العمليات التي يقوم بها المستخدم، فقد يتأخر تحميل الصفحة ويمكنك تجربة إعادة تشغيل الحاسوب الخاص بك. 4- مشكلة من جانب سيرفر الـ API: ربما السبب في بطيء الاستجابة من السيرفر الخاص بالـ API، حاول استخدام API آخر لتفقد سبب المشكلة. ويمكن تحسين أداء الصفحة عن طريق استخدام تقنيات التحميل التدفقي Streaming أو Lazy Loading، حيث يتم تحميل البيانات تدريجياً بدلاً من جلبها كلها مرة واحدة. أيضًا استخدام أدوات تحسين الأداء Performance Optimization مثل تحسين الصور والملفات وتحسين سرعة الاتصال بالإنترنت وتقليل عدد الطلبات الصادرة للخادم. وكنصيحة قم باستخدام Vite وليس Webpack فستلاحظ فرق كبير في الأداء.
  21. الأفضل هو حساب تكلفة المشروع بشكل Fixed وليس تبعًا لعدد ساعات العمل، فربما مشروع يتطلب نصف ساعة فقط لإنجازه، ولكن الخبرة المطلوبة لإنجازه كبيرة أو أنت لديك خبرة وقمت بإنجازه بشكل سريع جدًا. وإذا تطلب الأمر إلى العمل بالساعة فيمكنك حساب تكلفة المشروع بشكل Fixed ثم تقسيمه على سعر عدد الساعات وليكن تكلفة المشروع 100 دولار وسعر الساعة 10 إذن المشروع يتطلب 10 ساعات. بالنسبة لحساب تكلفة المشروع، فالأمر عائد لنوع العميل والبلد الخاصة به فسعر العملة في بلده يشكل عامل كبير، وأيضًا هناك عوامل أخرى مثل سنوات الخبرة لديك وهل العروض كثيرة على المشروع وهل جودة العمل الخاص بك أعلى من العروض المقدمة او أعلى من الغالبية على الأقل. أضف إلى ذلك حجم المشروع أو التعديل المطلوب. وأيضًا ما هي القيمة أو الفائدة التي ستعود على العميل من وراء تنفيذك للمشروع، كل تلك عوامل تحدد تكلفة المشروع. فمثلاً تكلفة مشروع عبارة عن موقع من صفحة هبوط واحدة، قد يتراوح ما بين 50 إلى 300 دولار تبعًا لجودة العمل المطلوب وجودة العمل الخاص بك أيضًا. لذلك عند العمل على مواقع العمل الحر يمكنك رؤية متوسط السعر والعمل به تجنبًا لفرض مبلغ كبير يضيع منك الفرص، بالإضافة إلى ضرورة البحث عن كيفية تسعير خدماتك فستجد الكثير من المقالات العربية والأجنبية.
  22. عليك بالآتي: 1- قم بفتح ملف key.properties باستخدام أي محرر نصوص. 2- تحقق من وجود بيانات التسجيل (اسم المستخدم وكلمة المرور) بالشكل التالي: storePassword=<password from key store> keyPassword=<password from key store> keyAlias=key storeFile=<path to key store> 3- تحقق من صحة بيانات التسجيل (اسم المستخدم وكلمة المرور) وتأكد من أن المسار المحدد لملف متجر المفاتيح صحيح ويحتوي على الملف. 4- إذا لم تكن تعرف ماهي بيانات التسجيل، فيجب أن تقوم بإنشاء مفتاح للتوقيع باستخدام Android Studio، ومن ثم قم بتعيين بيانات التسجيل (اسم المستخدم وكلمة المرور) في ملف key.properties. يمكن إنشاء مفتاح للتوقيع باستخدام Android Studio عن طريق القيام بالخطوات التالية: انتقل إلى قائمة "Build" في شريط القوائم في Android Studio واختر "Generate Signed Bundle / APK". في نافذة "Generate Signed Bundle or APK", اختر "APK" واضغط على "Next". قم بتحديد "Create New" إذا لم تقم بإنشاء مفتاح توقيع سابقًا أو اختر "Choose Existing" إذا كان لديك مفتاح توقيع سابقًا واضغط على "Next". قم بملء المعلومات المطلوبة مثل اسم المفتاح وكلمة مروره وتاريخ انتهاء الصلاحية واسم الشركة واسم المشروع وحزمة التطبيق. بمجرد إدخال جميع المعلومات المطلوبة، اضغط على "Next" واختر المستوى الأمني الذي تريد استخدامه لمفتاح التوقيع. بعد ذلك، ستظهر لك ملخصًا للمعلومات التي أدخلتها. قم بالتحقق من صحة هذه المعلومات واضغط على "Finish". بعد ذلك، ستظهر لك نافذة حفظ الملف الذي يحتوي على المفتاح الخاص بك. حدد مسارًا لحفظ الملف واضغط على "Save". بعد إتمام هذه الخطوات، سيتم إنشاء مفتاح التوقيع ويمكن استخدامه لتوقيع التطبيقات المبنية باستخدام Android Studio. أيضًا تأكد من قراءة النقاش على السؤال التالي:
  23. رسالة الخطأ توضح أن هناك مشكلة في توليد مفتاح التوقيع لتطبيقك في Flutter. يرجى التحقق من النقاط التالية: التأكد من وجود JDK مثبت على جهاز الكمبيوتر الخاص بك. يمكنك التحقق من ذلك باستخدام الأمر java -version في موجه الأوامر. التأكد من وجود بيانات تسجيل صحيحة (اسم المستخدم وكلمة المرور) في ملف key.properties الذي يتم إنشاؤه في المسار <project-root>/android/key.properties بمجرد إنشاء مشروع جديد في Flutter. التأكد من أن مسار التخزين لملفات الـ keystore يتضمن مسارًا صالحًا ويمكن الوصول إليه من جهاز الكمبيوتر الخاص بك. حاول حذف ملفات الـ keystore الحالية وإعادة إنشائها من جديد باستخدام الأمر flutter create --org com.example my_app مع استبدال my_app بالاسم الذي تريد استخدامه لمشروع Flutter الجديد الخاص بك. تشغيل أمر flutter clean وإعادة بناء التطبيق من جديد. إذا لم تتمكن من حل المشكلة بعد التحقق من هذه النقاط، يرجى تشغيل الأمر flutter doctor -v ومشاركة النتائج هنا حتى يتمكن الآخرون من مساعدتك بشكل أفضل. وأيضًا أنصحك بقراءة الحلول التالية في حال استمرت المشكلة:
  24. يوجد دليل كامل في مستندات Laravel عن كيفية استخدام Vite، وإليك الخطوات: 1- تثبيت Vite يجب الإنتباه إلى أنه في الإصدارات الأخيرة يأتي Vite مدمج في إطار لارافيل وكل ما تحتاجه هو تشغيل الأمر npm run dev فقط. ولكن إذا كان غير موجود فإليك طريقة تثبيته. يمكنك تثبيت Vite باستخدام npm باستخدام الأمر التالي: npm install -D vite laravel-vite-plugin 2- تحرير ملف package.json عليك تحديث ملف package.json وإضافة مجموعة من الأوامر لتسمح لك بتشغيل Vite. بدلاً من استخدام Laravel Mix، تحتاج إلى إضافة أوامر Vite إلى ملف scripts، على النحو التالي: "scripts": { "dev": "vite", "build": "vite build" }, 3- حذف ملف webpack.mix.js يجب أن تحذف ملف webpack.mix.js فلم نعد بحاجة إليه. 4- يجب إنشاء ملف vite.config.js ووضع الإعدادات التالية بداخله، ويمكنك قراءة المزيد عن الإعدادات في رابط المستند الذي أشرت إليه. import { defineConfig } from 'vite'; import laravel from 'laravel-vite-plugin'; export default defineConfig({ plugins: [ laravel({ input: ['resources/css/app.css', 'resources/js/app.js'], refresh: true, }), ], }); 4- تحديث ملف العرض الرئيسي ستحتاج إلى تحديث ملف العرض الرئيسي الخاص بك وهو app.blade.php الموجود في المسار resources/views/layouts/ لتحويل الاستدعاءات الخاصة بـ Laravel Mix إلى استدعاءات Vite. يجب أن يكون شكل الاستدعاءات على هذا النحو: <head> <!-- Scripts --> @vite(['resources/css/app.css', 'resources/js/app.js']) </head> والآن يمكنك تشغيل المشروع من خلال الأمر npm run dev. الطريقة الأسهل لتثبيت Vite في مشروع لارافيل باستخدام Laragon قم بالضغط بزر الفأرة الأيمن داخل نافذة البرنامج وستظهر لك قائمة، اختر منها التالي: Quick app ثم اختر Laravel وبذلك سيتم إنشاء مشروع لارافيل مع Vite في ملف Root الخاص بـ Laragon، بعد ذلك يمكنك نقل ملفات مشروع إلى المجلد لكن بعد حذف ملفات Mix.
  25. الأسهل لك استخدام Font Awesome عن طريق CDN، وإليك الطريقة. يمكن تضمينها في مشروعك عن طريق إضافة الرابط الذي يشير إلى ملف CSS الخاص بـ Font Awesome في نطاق الرأس (header) في صفحات HTML الخاصة بك. وللحصول على الرابط الذي يشير إلى ملف CSS الخاص بـ Font Awesome أنصحك بالحصول عليه من موقع cdnjs، وباستطاعتك إختيار إصدار المكتبة الذي تريده وكمثال هذا رابط الإصدار 6.3.0 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css" integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ==" crossorigin="anonymous" referrerpolicy="no-referrer" /> بعد ذلك، يمكنك إضافة الرابط المذكور أعلاه في نطاق الرأس (header) في صفحات HTML الخاصة بمشروعك. <head> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css" integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ==" crossorigin="anonymous" referrerpolicy="no-referrer" /> </head> والآن يمكنك استخدام الرموز (icons) الخاصة بـ Font Awesome في صفحات HTML الخاصة بك عن طريق استخدام العنصر <i> وإضافة الفئة المطلوبة لهذا العنصر. ويمكن العثور على الرموز والفئات المتاحة من موقع Font Awesome الرسمي، ويجب إختيار الأيقونات المجانية بتحديد خيار free أثناء البحث في موقع Font Awesome. على سبيل المثال، إذا كنت ترغب في استخدام الرمز الخاص بزر الإرسال (send)، فيمكنك استخدام الكود التالي: <i class="fas fa-paper-plane"></i>
×
×
  • أضف...