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

Hikmat Jaafer

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

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

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

كل منشورات العضو Hikmat Jaafer

  1. مرحباً أحمد , من الجيد أنك تقوم ببناء موقع متجر إلكتروني والمتابعة في البحث عن الاخطاء والحلول , لكن نحن نريد نقوم بكسبك الخبرة اللازمة للدخول في سوق العمل إن كان في الشركات أو من خلال العمل freelancer , لذلك من الأفضل أن تجد الأخطاء وتقوم بطرحها واحد تلو الأخر ( أو كل مجموعة أخطاء ) بعد محاولتك في حلها , وسوف يقوم فريق المدربين أو أحد الأعضاء بالإجابة عليك والمساعدة قدر الإمكان لكسبك الخبرة اللازمة . قمت بالإطلاع على الكود لديك , وواجهة أول مشكلة في الدخول الى صفحة المنتج , ما لاحظته أنك تقوم ببناء الموقع وفق بنية جيدة جداً وبتقسيم الكود إلى عدة أجزاء و Components وهذا مرغوب جداً لدى الشركات وأصحاب العمل وفي عالم البرمجة ككل , لكن يوجد بعض الأخطاء يجب عليك معرفة كيف تقوم باكتشافها وحلها , فمعرفة كيف كشف هذه الأخطاء مهم جداً لدى شركات البرمجة وأصحاب المشاريع , سوف أقوم بتوضيح أول ما واجهته في صفحة المنتجات : أولاً , يمكنك فتح inspect في المتصفح ورؤية ما يسمى ب console , وفيها يتم عرض جميع الأخطاء التي تحصل في الموقع , ويمكنك أيضاً طباعة متغيرات في الكود لديك ورؤيتها قبل حدوث أي خطأ . عندما نقوم بفتح inspect , يوجد عدة أخطاء , بعضها في التصميم وبعضها في backend , سوف نبدأ بأخطاء خاصة ب frontend . إذا قمنا بعمل scroll في inspect سوف نشاهد الخطاً التالي Uncaught TypeError: oneProducts is undefined هذا الخطأ يشير إلى أن المتغير oneProducts غير معرف , أي أنك تقوم باستخدامه وهو غير معرف بعد أو قيمته undefined , وهذه الحالة تحصل عندما يقوم المبرمج باستخدام متغير ولم يقم بتعريفه , أو أنه يتوقع أن متغيراً ما سوف يكون به قيمة ( مثلاً سوف ترجع هذه القيمة من api من قاعدة البيانات ) ولكنه لم يعالج في حال لم يوجد به قيمة , وهذا ما حصل معك بالفعل لنفترض أنك لا تعلم أين هذا المتغير قمت بتعريفه وأين يحصل وتريد معرفة مكان تعريف هذا المتغير , سوف تجد أسفل الخطأ رقم السطر واسم الملف الذي حدث به الخطأ ( أو إن لم تظهر هذه المعلومات مباشرةً , قم بالضغط على السهم في بداية الخطأ وسوف يفتح مجموعة أسطر في اسفل الخطأ , يمكنك الوصول إلي الخطأ من خلال أول سطر , وهذا يتم في أغلب الأخطاء وليس جميعها ) , وفي مثالنا سوف تجد هذه السطر كما الصورة المرفقة لاحظ أن الخطأ يحصل في ملف view-products-details-hook.js , ضمن component يسمى ViewProductsDetailsHook , في السطر رقم 26 ( رقم السطر مرتبط في نسخة تشغيل المشروع وليس كود المشروع , أي ربما ستجد بعض الاختلاف في رقم السطر , ويمكنك مشاهدته في inspect من خلال الضغط عليه , لكن لن تتمكن من تعديله هنا , سوف يتوجب عليك تعديله في الكود ) . عند الذهاب إلى هذا الملف , سوف نجد الكود التالي : const oneProducts = useSelector((state) => state.allproducts.oneProduct) const oneCategory = useSelector((state) => state.allCategory.oneCategory) const oneBrand = useSelector((state) => state.allBrand.oneBrand) const productLike = useSelector((state) => state.allproducts.productLike) //to show products item let item = []; if (oneProducts.data) لاحظ أنك تقوم باستخدام حقل data من oneProducts مباشرةً من غير أن قوم بالفحص من وجود oneProducts ( أي أن قيمتها موجودة ولا ومعرفة ) , لذلك سوف نقوم بإضافة هذا التحقق لكي تعمل الصفحة حتى ولو كان لم يرجع api بيانات لأي سبب كان , ويمكنك تعديل الكود ليصبح كالتالي : const oneProducts = useSelector((state) => state.allproducts.oneProduct) const oneCategory = useSelector((state) => state.allCategory.oneCategory) const oneBrand = useSelector((state) => state.allBrand.oneBrand) const productLike = useSelector((state) => state.allproducts.productLike) //to show products item let item = []; if (oneProducts?.data) item = oneProducts.data; else item = [] useEffect(() => { if (item?.category) dispatch(getOneCategory(item.category)) if (item?.brand) dispatch(getOneBrand(item.brand)) if (item?.category) dispatch(getProductLike(item.category)) }, [item]) لاحظ أنني قمت بإضافة بإضافة إشارة الاستفهام بعد oneProducts و item , والتي تعني : أنه في حال كان المتغير oneProducts معرف , فقم بالوصول إلى الحقل data , وفي حال كان oneProducts.data موجود , فقم بالتالية : item = oneProducts.data; ويتم التحقق من item بنفس الطريقة. بعد تطبيق هذا التحقق لن يظهر الخطاً الخاص ب oneProducts , لكن سوف تجد أخطاء أخرى تتعلق ب oneCategory وغيرها , أغلبها نفس الخطأ , قم بإصلاح الأخطاء وتابع inspect , وعندما تواجهك أي سؤال يمكنك طرحه هنا .
  2. مرحباً , يمكنك استخدام extension خاصة بكل لغة ( حسب اللغة التي تريدها ) , مثلاً اكستنشن خاصة ب Bootstrap , او في react , او python . و يمكنك أيضاً استخدام ذكاء اصطناعي داخل VS Code , أحدهم يسمى BITO , هو يقدم عدة ميزات , منها المساعدة في الإكمال التلقائي للكتابة . ويمكنك أيضاً استخدام هذه extension لمساعدتك في توليد الأكواد أو فهم أي كود من خلال المحادثة كما في الصورة المرفقة
  3. مرحباً , إن كنت تقصد كيف يمكن كتابة كود لعملية حسابية في SQL Server من خلال حقلين من جدول , فهذا مثال بسيط كيف يمكنك فعل ذلك : SELECT Number1, Number2, (Number1 + Number2) AS Sum FROM TableName; هذا الاستعلام يختار الأعداد من الجدول، ثم يقوم بإجراء الجمع بين العددين ويظهر الناتج في عمود يسمى Sum . مثال أخر أكثر تعقيداً : SELECT Product, SUM(Quantity) AS TotalQuantity, SUM(UnitPrice * Quantity) AS TotalSalesAmount, CASE WHEN SUM(Quantity) > 200 THEN SUM(UnitPrice * Quantity) * 0.9 ELSE SUM(UnitPrice * Quantity) END AS TotalSalesWithDiscount FROM Sales GROUP BY Product HAVING SUM(Quantity) > 100; أفترضت وجود جدول يسمى Sales ويحتوي على الأعمدة التالية: Product و Quantity و UnitPrice , و نريد حساب إجمالي مبلغ المبيعات لكل منتج حيث تكون الكمية المباعة أكبر من 100، ونريد أيضا تضمين خصم بنسبة 10٪ للمنتجات التي تزيد كميتها المباعة عن 200. فلاحظ أنه في البداية قمت باختيار اسم المنتج و إجمالي الكمية المباعة (TotalQuantity) وإجمالي مبلغ المبيعات (TotalSalesAmount) وإجمالي مبلغ المبيعات مع تطبيق الخصم (TotalSalesWithDiscount). أيضاً لاحظ أنني قمت باستخدام دالة SUM لحساب الكمية الإجمالية المباعة وإجمالي مبلغ المبيعات لكل منتج. واستخدمت CASE لتطبيق خصم بنسبة 10٪ على إجمالي مبلغ المبيعات للمنتجات التي يزيد مجموع الكميات المباعة من 200. وأقوم بتجميع النتائج حسب عمود Product. كما استخدمت الشرط HAVING لتصفية المنتجات التي تكون كميتها المباعة أقل من 100.
  4. مرحباً, أنت تقوم ببعض العمليات على profile slice , ولكن ما تواجهه أنه البيانات تزول عندما تقوم بتحديث الصفحة أو إعادة تحميلها بأي شكل , هذا بالطبع سيحدث كون redux toolkit بشكل إفتراضي لا تقوم بحفظ البيانات بشكل دائم في المتصفح ( local storage او اي شكل اخر ) , وإنما تقوم بحفظها بشكل مؤقت في المتصفح وعند إعادة تحميل الصفحة سوف تزول جميع العمليات التي قمت بها . لحل هذه المشكلة ( او ما تبحث عنه ) يمكنك فعلها بطريقتين: إما باستخدام localStorage , وتقوم بحفظ وتعديل البيانات في localStorage كلما قمت بتعديل redux toolkit slice , وفي كل مرة تقوم بتشغيل التطبيق تفحص إذا كان هناك بيانات مخزنة في localStorage فتقوم بإستردادها ل profile slice , يمكنك تعديل الكود لديك كالشكل التالي : أولاً قم بتحديث create profile action لتتضمن تخزين البيانات في local storage : export function createProfile(newProfile) { return async(dispatch, getState) => { try { dispatch(profileActions.setLoading()) const { data } = await axios.post(PROFILE_URL, newProfile, { headers: { 'x-auth-token': getState().auth.user.token } }) dispatch(profileActions.setProfile(data)) dispatch(profileActions.setIsProfileCreated()) localStorage.setItem('profileData', JSON.stringify(data)); setTimeout( () => dispatch(profileActions.clearIsProfileCreated()), 2000 ); } catch (error) { const err = error.response?.data.msg if (err) { dispatch(alertActions.createAlert(err)); dispatch(alertActions.clearAlert(err)); } const errors = error.response.data.errors errors?.forEach((err) => { dispatch(alertActions.createAlert(err.msg)); dispatch(alertActions.clearAlert(err.id)); }); dispatch(profileActions.clearLoading()) } } } ثانياً ، عند بدء التطبيق، يمكنك التحقق مما إذا كانت هناك بيانات مخزنة واستخدامها , يمكنك وضع الكود التالي في layout او component الصفحة الاساسية . useEffect(() => { const storedData = localStorage.getItem('profileData'); if (storedData) { dispatch(profileActions.setProfile(JSON.parse(storedData))); } }, []); الطريقة الثانية , تسمى هذه التقنية redux persist , هي مكتبة تساعد في حفظ حالة التطبيق في تطبيقات React Redux عبر عملية التخزين المحلي. تسمح هذه المكتبة بالاحتفاظ بحالة Redux الحالية حتى بعد إعادة تحميل الصفحة أو إعادة فتح التطبيق عن طريق استخدام localStorage أو AsyncStorage في React Native.
  5. وعليكم السلام , أرجو طرح الأسئلة الخاصة بالدورات ضمن التعليقات تحت فيديو الدورة , وطرح الأسئلة العامة هنا , بالنسبة لسؤالك , عندما قمت بطباعة getModel بدلاً من setModel ، فقد قمت بطباعة قيمة النموذج المخزنة في الكائن $vehicle. هذا يعني أنك تحصل على قيمة النموذج المحددة للسيارة، وليس قيمة مختلفة تم تعيينها. ودوال set تستخدم لتعيين قيمة جديدة لخاصية في الكائن، بينما تستخدم دوال get لاسترجاع القيمة الموجودة. بالنسبة لماذا قام المدرب باستخدام الشرط if في دالة setYear , فهنا قمنا باستخدامها للتحقق مما إذا كان العام المراد تعيينه هو قيمة صحيحة (integer) أم لا , وفي حال إذا كان العام ليس صحيحًا، سيتم توليد (Exception) يشير إلى أن العام غير صالح. بالنسبة لسؤالك حول تعقيد التعامل مع التطبيقات, يعتمد تعقيد التعامل مع التطبيقات على العديد من العوامل، بما في ذلك حجم التطبيق وتعقيده . ففي التطبيقات الكبيرة والمعقدة، قد تتطلب عمليات الإدخال والإخراج والتحقق من البيانات والتعامل مع الأخطاء والاستثناءات الكثير من الشفافية والتحكم الدقيق. ويمكن أن تكون التطبيقات المعقدة أكثر تعقيدًا في تصميمها وتطويرها، ولكن يمكن التعامل مع هذا الأمر من خلال تنظيم الشيفرة واستخدام مفاهيم البرمجة المناسبة مثل الإنكابسوليشن والتحقق من الأخطاء والاستثناءات. لا تقلق , مع التقدم في التعلم سوف تجدي هذه الخطوات سهلة جداً بالتوفيق
  6. وعليكم السلام , يجب عليك وضع كلاس acc-title كالتالي : .acc-title { display: flex; align-items: center; justify-content: center; } ليتم وضع جميع العناصر بداخله على سوية واحدة , مثلاً ممكن أن يكون الكود كاملاً كالتالي ( يمكنك إرفاق كامل الكود مع styles الخاصة به للتوضيح أكثر ) : <!DOCTYPE html> <html> <head> <title></title> <style> .acc-tool1 { background-color: red; text-align: center; } .acc-title { display: flex; align-items: center; justify-content: center; } .author-img2 { margin-right: 10px; border-radius: 100px; } .acc-title i { margin-left: 10px; padding: 40px } </style> </head> <body> <div class="acc-tool1"> <div class="acc-item"> <div onclick="window.open('https://youtube.com/@khatar_official');"> <div class="acc-title"> <div class="author-img2 radius100px"><img height="40" width="40" src="https://blogger.googleusercontent.com/img/a/AVvXsEjcnncOCeoSzijTrJkMRofEAfTbPHxMi4YRNkhAP8PUuNIvaoKioud-tHURilzjXIi6heOrfmVKMhJ71oqD5p3hPsKq9kwmuHsoyxS1B9dequ8talfFmNV62QMWbLHtpF2b45moj_hB1EOAf1RMqtx2zzXRWGbMeQC5EXsFAtRmi76Uv55cxGazBhhoKDaI=s1600" /> </div> اشترك في قناتي علي اليوتيوب <i class="fab fa-download" style="color: white; font-size: 18px; font-weight: 400;"></i> </div> </div> </div> </div> </body> </html>
  7. وعليكم السلام , دورة حياة أي مشروع برمجي تكون تحت مسمى SDLC وهي مجموعة مراحل يجب تنفيذها لبناء المشروع البرمجي بشكل صحيح ( كما تم شرحه من قبل المدرب عدنان ) , أما عن تنفيذ هذه المراحل فيكمن من خلال نماذج دورة حياة تطوير المشروع البرمجي SDLC Models ويوجد عدة نماذج لدورة حياة تطوير البرمجيات , كل نموذج له مزاياه وعيوبه ويناسب أنواع مختلفة من المشاريع والظروف : نموذج الشلال (Waterfall Model) هذا النموذج يتبع نهجا خطيا حيث تتقدم المراحل بتتابع وتباعد ثابت. تبدأ المراحل بالتحليل والتصميم وتنتهي بالتطوير والاختبار ثم التشغيل. يناسب المشاريع ذات المتطلبات الثابتة والمعروفة بوضوح. نموذج التطوير التسلسلي (Sequential Development Model) يشبه نموذج الشلال إلى حد كبير ولكن يسمح بتكرار المراحل إذا لزم الأمر. يمكن تكرار مرحلة معينة بعد اكتشاف العيوب في المراحل اللاحقة. يمكن أن يكون أكثر مرونة من نموذج الشلال ولكن قد يزيد من تكاليف التطوير النموذج التكراري (Iterative Model) ينشئ التطبيق في سلسلة من الدورات القصيرة المتكررة. كل دورة تنتهي بتسليم تطبيق يضيف ميزات جديدة أو يصحح العيوب ( أي يتم تسليم version ثم version اخر ). يسمح بتغيير المتطلبات والتحسين المستمر. النموذج التكراري التكيفي (Adaptive Iterative Model) يجمع بين النموذج التكراري والتحديد التكيفي. يتم تحديد الخطوات القادمة بناءً على الاستجابة للتغييرات التي تطرأ خلال التطوير. النموذج الرشيق (Agile Model) يركز على التعاون بين فريق التطوير والعملاء. يسمح بالتطوير التدريجي والتحسين المستمر عبر الدورات القصيرة والمرنة. يناسب المشاريع التي تتطلب استجابة سريعة للتغييرات والتكيف مع المتطلبات المتغيرة. يوجد عدة نماذج أخرى , لكن هذه أشهرها ولا أظن أنك ستحتاج إلى غيرها إلا في بعض الحالات النادرة. أيضاً غالب المشاريع في الشركات تعتمد على Agile Model , فهي مناسبة لمشاريع كبيرة وربما تكون متطلباتها غير واضحة بشكل كامل في البداية. وتعتبر الأكثر شهرة ( هذا لا يعني أنه لا يوجد مشاريع تعتمد على النماذج الأخرى ).
  8. لا يمكن استخدام ChatGPT 4 مجاناً من خلال مواقع معينة أو تطبيقات. في الوقت الحالي، تعتمد استخدامات تقنية models مثل ChatGPT على خدمات " المعالجة السحابية أو البنية التحتية المدارة بمقابل " من قبل شركات مثل Open AI وهي غالبا ما تكون مدفوعة. لذلك يمكن الوصول إلى ChatGPT 4 واستخدامه عن طريق منصات Open AI المدفوعة التي تقدمها الشركة. قد تكون هناك بعض النسخ التجريبية المجانية المتاحة للتجربة، ولكن الاستخدام المستمر والشامل يتطلب عادة الاشتراك أو دفع رسوم مقابل الخدمة. بالنسبة لي , أستخدم في بعض الأحيان ChatGPT 3.5 , هو نوعا ما مساعد في بعض الأمور ,كما أجد كثير من الأحيان إجابات خاطئة منه ( وبشكل كبير ) , يمكنك الاعتماد عليه فقط في بعض الأحيان للحصول على سرعة اجابة , اما كمعلومات دقيقة وربما يكون من الصعب إيجادها عبر الانترنت , فستجد بعض الاخطاء من إجاباته.
  9. وعليكم السلام, أهلاً أيمن, بالطبع في بداية الطريق ستجد صعوبة في إيجاد أول عمل , أو أول فريق عمل , أو أول شركة توظيف . فهذا حال دخول أي مجال عمل في الحياة . لكن إليك بعض النصائح أو الطرق ستساعدك جيداً في الحصول على أول عمل : أولاً أنت طالب في أكاديمية حسوب , وبالتالي لك الحق أن تتواصل مع مركز المساعدة ليقومون بمساعدتك بشكل شخصي من قبل فريق بعيد لبناء سيرتك الذاتية وفي الحصول على أول عمل خلال مدة أقل من 6 أشهر , وفي حال عدم حصولك على عمل خلال 6 أشهر لك الحق بطلب إرجاع كامل المبلغ . أما عن نصيحة شخصية وعملية من قبلي , فيجب عليك فهم السوق بشكل جيد لتتمكن من الحصول على اول عمل من خلال مواقع العمل الحرة ( مثل مستقل ) . مثلاً صحيح أنه أغلب أصحاب المشاريع يقومون بطلب الخبرة من المستقل , لكن ربما يكون بإمكانك أنت القيام بنفس العمل لكن بسعر أقل , وبالتأكيد سيقبل ذلك بعض أصحاب العمل ( تذكر أن جميع المستقلين قاموا أبضاً بالبدء من الصفر ) . قمت بتوضيح كيف يمكنك العمل في مستقل في هذا التعليق , يمكنك قراءته والاستفادة منه : بالنسبة للعمل ضمن فريق , ما أجده هو أنه يمكنك التقديم ( ربما برسائل خاصة ) إلى بعض الشركات ك junior او كتدريب , وهذا سيمنحك معرفة كاملة كيف يكون العمل ضمن الشركات وفرق العمل , وبالتأكيد ستحصل على خبرة عالية من العمل ضمن فريق .
  10. يمكنك استخدام مفهوم (List Comprehension) في بايثون لاستخراج الأرقام الزوجية أو الفردية. وهي طريقة بسيطة وشائعة في بايثون, مثلاً : لاستخراج الأرقام الزوجية: numbers = [1, 4, 2, 3, 7, 12, 16, 23, 24] even_numbers = [num for num in numbers if num % 2 == 0] print(even_numbers) فتكون النتيجة : [4, 2, 12, 16, 24] ولاستخراج الأرقام الفردية: numbers = [1, 4, 2, 3, 7, 12, 16, 23, 24] odd_numbers = [num for num in numbers if num % 2 != 0] print(odd_numbers) النتيجة: [1, 3, 7, 23] لاحظ في الامثلة السابقة قمت باستخدام التعبير [num for num in numbers if condition] حيث تكون num هي المتغير المؤقت لكل عنصر في القائمة numbers، وتكون condition هي الشرط الذي يحدد ما إذا كان يتم استبعاد العنصر أم لا. في حالتنا، يتم فحص العنصر إذا كان يمثل رقما زوجيا أو فرديا باستخدام عملية باقي القسمة %، ثم يتم إضافته إلى القائمة الجديدة (even_numbers أو odd_numbers) حسب الشرط المحدد.
  11. رسالة التعطيل التي تلقيتها تشير إلى أن حسابك لا يزال معطلاً بسبب عدم احتواء موقع الويب المدرج في ملفك الشخصي على المعلومات اللازمة لتحديد ما إذا كان نشاطك التجاري يتوافق مع سياسة الأعمال لـ WhatsApp. لذلك يجب عليك التأكد من أن ملفك الشخصي في منصة WhatsApp Business يحتوي على المعلومات الكاملة والدقيقة لنشاطك التجاري، بما في ذلك موقع الويب الخاص بك. يجب أن يتضمن الموقع معلومات الاتصال بك ووصفاً واضحاً للخدمات أو المنتجات التي تقدمها. بعد تحديث بيانات ملفك الشخصي, قد تحتاج إلى الاتصال بفريق دعم WhatsApp Business لإبلاغهم بمشكلتك وتوضيح المعلومات اللازمة وأنك قمت بتعديلها. أيضاً بعدها ربما يقوم فريق الدعم بطلب منك تقديم معلومات إضافية أو إجراء خطوات محددة لتفعيل الحساب مجدداً .
  12. وعليكم السلام , يوجد عدة أمور يمكن من خلالها جعل الفيديو سريع التشغيل , ربما التطبيق يستخدم تقنية تسمى تسريع السرعة (Speed Acceleration)، والتي تزيد من سرعة تشغيل المقاطع بمعدل أسرع من السرعة الأصلية للفيديو. هذا يعني أن الإطارات (frames) تعرض بشكل أسرع، مما يؤدي إلى سرعة عرض أعلى. أو ربما يقوم التطبيق بإعادة ترميز المقاطع بتنسيق مختلف أو باستخدام تقنيات ضغط أكثر فعالية، مما يقلل من حجم الملفات ويسمح بتشغيلها بسرعة أكبر. ولكن قد يؤدي ذلك أيضاً إلى تأثير على جودة الصورة. أو ربما يقوم التطبيق باستخدام تقنيات PreLoading , والتي يقوم بتحميل مقاطع الفيديو مسبقاً في الذاكرة مما يجعل يمكن تشغيلها بسلاسة وبسرعة عالية دون تقطيع .
  13. تظهر هذه المشكلة عندما يتم قفل ال navigation في تطبيق Flutter أثناء تحميل صفحة جديدة. يتم فحص هذا الشرط بواسطة الإصدارات الأحدث من Flutter للتحقق من عدم قفل ال navigation بشكل خاطئ. لذلك يجب عليك استخدام أحدث إصدار من Flutter والمكتبات المرتبطة به.يمكنك تحديث Flutter باستخدام الأمر التالي flutter upgrade او ربما تحتاج لمسح مجلد ("pubspec.lock") وإعادة تشغيل محاكي Flutter. يمكنك استخدام الأمر التالي : flutter clean إن لم تنجح أي من الحلول السابقة , فربما يوجد أخطاء في الكود الخاص بك , تحديداً ربما تقوم بقفل navigation او أنك تقوم بتحميل صفحة جديدة بشكل غير صحيح .
  14. وعليكم السلام, تأكيد أنك قمت بمحاولة حذف الأرقام وطرق الدفع بالطريقة الصحيحة وفقاً لإرشادات ميتا. إرشادات ميتا تختلف قليلا من تطبيق لأخر من ميتا ( facebook , whatsapp bussniess , whatsapp )و إذا كنت متأكدًا من أنك قمت بذلك ومع ذلك لا يزال الخطأ مستمراً، يمكنك محاولة الاتصال بدعم ميتا للحصول على المساعدة. للتواصل مع دعم ميتا, هناك طريقتين إما من التطبيق الذي تستخدمه أو من الموقع مباشرة . الطريقة الأولى من خلال التطبيق الذي تستخدمه , قد تختلف حسب التطبيق، لكن اتبع الخطوات التالية في التطبيق : افتح التطبيق أو الموقع الخاص بـتطبيق ميتا الذي تستخدمه لإدارة حافظتك الإعلانية. ابحث عن قائمة "المساعدة" أو "الدعم" داخل التطبيق أو الموقع. الطريقة الثانية , من الموقع الخاص بالتطبيق , ل whatsapp يكون هذا الرابط : https://faq.whatsapp.com/481188387305001
  15. وعليكم السلام , هذا كود بسيط بمناسبة عيد الفطر : <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>تهنئة بمناسبة عيد الفطر السعيد</title> <style> body { font-family: Arial, sans-serif; text-align: center; background-color: #f8f9fa; } .greeting { margin-top: 100px; padding: 20px; background-color: #ffffff; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); max-width: 500px; margin-left: auto; margin-right: auto; } h1 { color: #2E5DD0; } </style> </head> <body> <div class="greeting"> <h1>تهانينا بمناسبة عيد الفطر السعيد!</h1> <p>كل عام وأنتم بخير، نتمنى لكم ولأحبائكم عيداً سعيداً وأوقاتاً مليئة بالفرح والسرور.</p> <p>عيد فطر مبارك!</p> </div> </body> </html>
  16. عليك أن تقوم بتطبيق بجميع الأفكار التي تعلمتها خلال المسار لكي تستطيع اجتياز الامتحان بسهولة . فإذا كنت قد تابعت مع المدرب و نفذت الأمثلة و المشاريع التي قدمها المدرب فهذا يكفي. و المشاريع التي قمت بإرفاقها أظنها كافية, فهي تحتوي على قواعد البيانات بالإضافة إلى مشاريع الخوارزميات و بنى المعطيات التي قمت بها و مشاريع الويب. و لكن عليك أن تكون متأكد من أنك طبقت جميع الأفكار ضمنها و لاتحتوي على أخطاء. و لكن عليك أن تقوم برفع مشاريعك على حسابك على github ليستطيع فريق الاختبار رؤيتها و تقييمها. و من الأفضل أن تقوم بتنظيم المستودع الخاص بك على github فتضع مشاريع الخوارزميات و بنى المعطيات معا لوحدها و المشاريع الخاصة بأساسيات الويب لوحدها و هكذا ...
  17. مرحباً أوبي , يمكنك التقدم للامتحان من خلال مراسلة مركز المساعدة ويمكنك التواصل معهم من هنا ، وإذا كنت قد تواصلت بالفعل فقم باعادة التواصل مرة ثانية واستعجالهم ومن الطبيعي ان يأخذ الامر حوال (24 - 72) ساعة حتى يتم الامر. كذلك الامر فعليك الانتباه لكون شروط التقدم للامتحان النهائي هي : إتمام أربعة مسارات تعليمية على الأقل التطبيق العملي مع المدرب، والاحتفاظ بالمشاريع العملية الناتجة لإرسالها للمراجعة رفع المشاريع على حسابك على GitHub أولًا بأول لمشاركتها معنا اعرف اكثر عن الامتحان النهائي من هنا بالتوفيق ان شاء الله
  18. مرحباً محمد , يرجى طرح أسئلة الدورات في قسم التعليقات أسفل الفيديو الخاص بالسؤال كما أشار إليك المدرب مصطفى لنتمكن من مساعدتك بشكل أفضل في المرات القادمة , ويمكنك طرح هنا الأسئلة البرمجية العامة الغير متعلقة بمحتوى الدورة . بالنسبة لسؤالك : في هذا السياق، الـ "f" في بداية دالة الطباعة تشير إلى استخدام الـ f-string أو formatted string في Python. يتيح استخدام الـ f-string إدراج قيم متغيرة داخل السلاسل (strings) بطريقة مريحة. عند كتابة المعاملات في أقواس معقوفة داخل دالة الطباعة بجانب النص المراد طباعته، يتم استخدامها لتعبئة قيم المتغيرات في تلك المواقع. في الدالة المذكورة، يتم تعبئة القيمة الأولى في المتغير "name"، القيمة الثانية في المتغير "age"، والقيمة الثالثة في المتغير "weight". بعد ذلك، يتم طباعة النص مع القيم المعبأة في الأماكن المناسبة. في هذه الحالة، ليس من الضروري استخدام الأقواس المعقوفة لكونها اختيارية. إذا تم تجاهل استخدام الأقواس المعقوفة، يمكن استخدام العلامات التنصيص العادية للسلاسل (مثل علامتي التنصيص المزدوجة "" أو علامتي التنصيص الفردي '') لتحيط بالنص المراد طباعته، ويمكن استخدام "{}" لتعبئة القيم المتغيرة داخل النص. مثال بديل للدالة print_info بدون استخدام الأقواس المعقوفة: def print_info(name, age, weight): print('Name: {}, Age: {}, Weight: {} kg'.format(name, age, weight)) باستخدام الأقواس المعقوفة، يصبح الكود أكثر قراءةً وفهمًا ويسهل تعديله عندما يتطلب الأمر إضافة مزيد من المتغيرات أو تغيير ترتيبها. بالتوفيق.
  19. مرحباً , رجى توضيح السؤال بشكل أفضل لنتمكن من تقديم المساعدة , لكن إن كان قصدك هو إنشاء برنامج بسيط في node js لالتقاط المحتوى الذي يتم طباعته من الحاسوب من خلال استخدام ()console.log , فسوف أقوم بتوضيح الأمر في المثال التالي : const fs = require('fs'); const path = require('path'); // الدالة التي تقوم بتوجيه النص المطبوع إلى ملف نصي function redirectConsoleOutputToFile(filePath) { const { log } = console; const outputStream = fs.createWriteStream(filePath, { flags: 'a' }); console.log = function (message) { log.apply(console, arguments); outputStream.write(util.format(message) + '\n'); }; } // استخدام الدالة لتوجيه الطباعة إلى ملف نصي const logFilePath = path.join(__dirname, 'output.txt'); redirectConsoleOutputToFile(logFilePath); console.log('anything'); console.log('anything...'); // قراءة محتوى الملف النصي fs.readFile(logFilePath, 'utf8', (err, data) => { if (err) { console.error('error', err); return; } console.log('محتوى الملف:'); console.log(data); }); قمت باستخدام redirectConsoleOutputToFile لتوجيه النص المطبوع من خلال console.log إلى ملف نصي باستخدام fs.createWriteStream. يتم تحديد مسار الملف النصي الناتج باستخدام path.join مع اسم الملف المطلوب. بعد توجيه الطباعة إلى الملف، يتم قراءة محتوى الملف باستخدام fs.readFile ويتم طباعته باستخدام console.log.
  20. مرحباً , يرجى طرح السؤال أسفل الفيديو من الدورة لنتمكن من مساعدتك بشكل أفضل في المرات القادمة. في بيئة سطر الأوامر أو الطرفية، يمكنك كتابة التعليمات مباشرة دون الحاجة إلى استخدام دوال طباعة مثل ()print في لغات برمجة مثل Python. عندما تكتب تعليمة مثل 2 + 2 , النظام يفهم أنك تريد حساب النتيجة مباشرة وعرضها لك دون الحاجة إلى استخدام دوال طباعة. لذلك، يمكنك ببساطة كتابة 2 + 2 في سطر الأوامر والنظام سيقوم بحساب النتيجة وعرضها مباشرة لك.
  21. IDE و IDLE هما اثنان من الأدوات المستخدمة في تطوير البرمجيات، ولكنهما يختلفان في الطريقة التي يستخدمانها والوظائف التي يقدمونها. الفرق بينهم هو كالتالي: IDE (بيئة تطوير متكاملة): IDE هي بيئة تطوير متكاملة توفر مجموعة شاملة من الأدوات والميزات لتطوير البرمجيات في لغة معينة. يحتوي IDE عادة على محرر source code متقدم مع تعليقات الألوان وإكمال التعليمات البرمجية والتنسيق التلقائي. ويقدم أيضاً أدوات لإدارة مشاريع البرمجة وتصحيح الأخطاء وتصحيح البرمجيات وتنفيذ واختبار البرامج. أمثلة على IDE تشمل PyCharm وVisual Studio وEclipse وXcode. على سبيل المثال، يستخدم PyCharm لتطوير تطبيقات Python ويوفر واجهة مستخدم متكاملة للكتابة وتشغيل البرامج وتصحيح الأخطاء. IDLE (بيئة تطوير متكاملة لـ Python): IDLE هو IDE خفيف الوزن يستخدم لتطوير تطبيقات Python فقط. كما يوفر محرر نصوص بسيط للبرمجة بلغة Python مع بعض الميزات الأساسية مثل تعليقات الألوان وإكمال التعليمات البرمجية. ويوجد أيضاً واجهة تفاعلية لتشغيل سطر الأوامر للتجريب واختبار شفرة Python بسرعة. إذا كنت مبتدأ في بايثون , فهو خياراً جيداً للمبتدئين في برمجة Python أو للأغراض التعليمية البسيطة. على سبيل المثال، يمكنك استخدام IDLE لكتابة برنامج Python بسيط يقوم بطباعة "Hello, World!" على الشاشة وتشغيله من خلال واجهة IDLE. بشكل عام، IDE هي بيئة تطوير شاملة وقوية تستخدم لتطوير تطبيقات في لغات متعددة، بينما IDLE هو بيئة تطوير بسيطة ومحدودة تستخدم فقط لتطوير تطبيقات Python. يتوقف اختيار استخدام IDE أو IDLE على احتياجاتك ومستوى خبرتك في البرمجة وحجم المشروع الذي تعمل عليه.
  22. مرحباً @kayo, بالنسبة للشرط الموجود في الدورة " الحصول على عمل خلال 6 أشهر " , بعض الشركات يقومون بطلب توظيف شخص يمتلك الاساسيات وليس مختص متقدم , حتى في بعض الاحيان يوجد مثل هذه الاعلانات في مواقع العمل الحرة , لكن بالطبع فرصتها ليس كمختص في اختصاص مطور مواقع كامل أو ما شابه ذلك . أيضاً دخولك في هذه الدورة سيمكنك بالتعلم أي إختصاص ( حتى خارج الأكاديمية ) بشكل متقدم وبسهولة مقارنة بدخول الاختصاص مباشرةً . هذه الدورة تتعلم فيها اساسيات وكل ما تحتاجه لبدء إختصاص فعلي , فهي بالفعل تؤهلك لدخول سوق العمل من خلال تعلمك لكافة الاساسيات . وتعطيك معرفة بكافة الاختصاصات مما تؤهلك للتوظيف بشكل أكبر في شركات تحتاج لشخص يمتلك الأساسيات وليس خبرة متقدمة في اختصاص معين . شرط " استرجاع أموالك في حال لم تحصل على عمل خلال 6 اشهر" من حقك , يمكنك التواصل مع مركز الدعم للمساعدة وفي حال لم تحصل سيقومون بإرجاع أموالك كاملةً . تحياتي
  23. إذا كنت تريد أن تعمل بالتجارة تستطيع بناء متجر إلكتروني لتعرض فيه منتجاتك, و لكن بناء المتجر يتطلب كثير من الخبرات فإذا لم تكن مبرمجا فستحتاج إلى كثير من الوقت حتى تتعلم البرمجة و تستطيع بناء المتجر, ولكن يمكنك أن تتعامل مع مستقلين ليطورو لك المتجر, يوجد الكثير من المستقلين على مواقع العمل الحر يستطيعون تقديم تلك الخدمة لك. أو يمكنك بيع المنتجات كبائع مستقل على المنصات التجارية عبر الإنترنت مثل Amazon وeBay وEtsy. و توفر هذه المنصات خدمات مميزة منها: يمكنك إنشاء متجرك الخاص على المنصة و عرض منتجاتك, و يتيح ذلك لك الوصول إلى كثير من العملاء. الدفع الأمن مثل بطاقات الإئتمان أو خدمات الدفع الإلكتروني. توفير الوقت و الجهد فالمنصة جاهزة و يمكنك استخدامها مباشرة و هنا لست بحاجة لتعلم البرمجة, ماعليك سوى البحث و التعمق أكثر عن كيفية الاستفادة منها و معرفة الخدمات و الميزات التي توفرها كل منصة.
  24. مرحباً , تظهر رسالة الخطأ "ERR_PACKAGE_PATH_NOT_EXPORTED" عادة عندما يكون هناك مشكلة في ملف package.json لمشروعك أو في المسارات المحددة فيه. فيما يلي بعض الخطوات التي يمكنك اتخاذها لتشخيص وحل هذه المشكلة : تأكد من أن ملف package.json معرف ومهيأ بشكل صحيح , أيضاً تحقق من التبعيات dependencies. قم بحذف node modules و package-lock.json ثم قم بتنفيذ التعليمة التالية : npm install تأكد من استخدام أحدث إصدارات npm و Node.js. يمكنك تحديث npm بتشغيل الأمر `npm install -g npm@latest`، ويمكنك تنزيل أحدث إصدار من Node.js من موقع Node.js الرسمي. تأكد من أن التبعيات dependencies في مشروعك متوافقة مع إصدار nodejs , في بعض الأحيان تكون غير متوافقة فيظهر هذا الخطأ.
  25. مرحباً , يوجد عدة أنواع , كل منها يستخدم في مرحلة من مراحل تطوير المنتج , بعضها في مراحل التصميمية , وبعضها في مراحل التطوير والبرمجة , وبعضها في مراحل الصيانة أيضاً , يمكننا تقسيم أنواع الاختبارات إلى الأنواع التالية : اختبارات الاستخدام الفعلية (Real-World Task Testing): حيث يُطلب من المشاركين إكمال مهام محددة في المنتج وتقديم ملاحظاتهم وتعليقاتهم أثناء العملية. اختبارات التفاعل (Usability Testing): تركز على تقييم مدى سهولة استخدام المنتج وتفاعل المستخدمين مع واجهته. اختبارات التوجيه (Guided Exploration Testing): حيث يُطلب من المشاركين استكشاف مواقع محددة داخل المنتج وتقديم تعليقاتهم وملاحظاتهم. اختبارات التصفح (Navigation Testing): تركز على تقييم سلاسة وسهولة التنقل داخل الموقع أو التطبيق. اختبارات التوافق (Compatibility Testing): تحديد مدى توافق المنتج مع مختلف الأجهزة والمتصفحات والمنصات. اختبارات الأداء (Performance Testing): قياس أداء المنتج فيما يتعلق بسرعة التحميل واستجابة الأداء. اختبارات الاستجابة (Response Testing): تحديد مدى استجابة المستخدمين لمحتوى معين أو ميزة في المنتج. بالنسبة للمنصات العربية المشهورة, يوجد منصة تسمى "أفكار"، هي تقدم خدمات لتصميم وتطوير التطبيقات والمواقع ويمكن أن تشمل خدمات اختبار المستخدم كجزء من هذا العمل. ومن الممكن أيضًا أن تجد منصات عربية متخصصة في اختبارات المستخدم، ولكن قد تكون الخدمات الخاصة بها محدودة مقارنة بالمنصات العالمية المتخصصة في هذا المجال.
×
×
  • أضف...