-
المساهمات
13206 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
365
إجابات الأسئلة
-
إجابة Mustafa Suleiman سؤال في تفسير مصطلح 'Business Logic' في تطوير المنتجات البرمجية كانت الإجابة المقبولة
الـ business logic المقصود به مجموعة من القواعد والإجراءات التي تحدد كيفية عمل التطبيق من الناحية التجارية، ويتمثل دورها في تحويل البيانات الواردة من المستخدمين أو مصادر البيانات الأخرى إلى نتائج مفيدة.
بمعنى أنه لو كنتِ تقومين ببناء تطبيق مصرفي، فإن الـ "business logic" سيتعلق بكيفية إجراء عمليات الإيداع والسحب، وكيفية التحقق من صحة المعاملات، وتنظيم كيفية عرض المعلومات المالية للمستخدمين، وغيرها من الجوانب الأساسية لأنشطة البنك.
وينقسم business logic التطبيقات إلى عدة أجزاء رئيسية، وهي:
التحقق من صحة البيانات: يتحقق هذا الجزء من أن البيانات الواردة من المستخدمين أو مصادر البيانات الأخرى صالحة ومتوافقة مع متطلبات التطبيق. المعالجة: يعالج هذا الجزء البيانات الواردة ويحولها إلى نتائج مفيدة. عرض النتائج: يعرض هذا الجزء النتائج للمستخدمين أو يرسلها إلى مصادر البيانات الأخرى. وإليك بعض الأمثلة على business logic التطبيقات:
في تطبيق مبيعات، قد يشمل business logic قواعد لحساب الضريبة وتحديد الخصومات. في تطبيق ويب، يشمل business logic قواعد للتحقق من أن المستخدمين مسجلين ومسؤولين عن المحتوى الذي ينشئونه. في تطبيق ألعاب الفيديو، قد business logic قواعد لتحديد كيفية تحرك الشخصيات والتفاعل مع البيئة. -
إجابة Mustafa Suleiman سؤال في أجد صعوبة في استيعاب مفهوم Callback Functions في JavaScript كانت الإجابة المقبولة
باختصار، الدالة callback هي دالة يتم تمريرها كوسيطة إلى دالة أخرى، ويتم استدعاؤها من قبل الدالة الخارجية بعد اكتمال المهمة التي تم تعيينها لها، والدالة نفسها ليس غير متزامنة بل هي دالة متزامنة، لكن الدالة الخارجية المسؤولة عن استدعاء الدالة أي عمل callback لها هي الدالة الغير متزامنة.
وفي جافاسكريبت، يتم تنفيذ الدوال بشكل متزامن بشكل افتراضي، مما يعني أن الدالة يتم تنفيذها من البداية إلى النهاية قبل الانتقال إلى الدالة التالية، ولكن هناك بعض المهام التي قد تستغرق وقتًا طويلاً للتنفيذ، مثل تحميل ملف أو الاتصال بقاعدة بيانات، وفي تلك الحالات Asynchronous Execution، لا نريد أن تتوقف البرامج الأخرى عن العمل حتى تكتمل تلك المهام.
وبالتالي تُستخدم الدوال callback لحل تك بدلاً من انتظار انتهاء المهمة، نقوم بتمرير الدالة callback إلى الدالة الخارجية، وبعد اكتمال المهمة تقوم الدالة الخارجية باستدعاء الدالة callback، والتي يمكنها بعد ذلك التعامل مع النتيجة.
مثال بسيط
لنفترض أننا نريد تحميل ملف من الإنترنت، يمكننا استخدام الدالة fetch() للقيام بذلك، ولكن تلك الدالة ترجع قيمة غير معرفة حتى يكتمل تحميل الملف، أي أنها دالة غير متزامنة.
const file = fetch("http://example.com/quran"); بدلاً من ذلك، يمكننا استخدام الدالة fetch() مع دالة callback، بحيث سيتم استدعاء الدالة callback بعد اكتمال تحميل الملف، وسيكون لها الوصول إلى نتيجة fetch()، كالتالي:
fetch('http://example.com/quran') .then(response => response.json()) .then(data => console.log(data)) .catch(err => console.error(err)); بمعنى أن then(response => response.json()) هو callback function يتم تمرير الوعد (Promise) المُرجع من fetch إليها ويتم تنفيذها عندما يتم حل الوعد بنجاح، وهي تقوم بتحويل الاستجابة إلى شكل JSON، ونفس الأمر بالنسبة لباقي الدوال.
أمثلة أخرى:
استخدام setTimeout:
function sayHello() { console.log("Hello!"); } setTimeout(sayHello, 2000); // سيتم استدعاء الدالة sayHello بعد 2 ثانية تمرير دالة كمعامل لدالة أخرى:
let numbers = [1, 2, 3, 4, 5]; function printNumber(num) { console.log(num); } numbers.forEach(printNumber); // سيتم استدعاء الدالة printNumber لكل عنصر في المصفوفة كدوال مستجيبة للأحداث (Event Handlers):
// تعريف دالة callback function handleClick() { console.log("Button Clicked!"); } // تعيين الدالة callback كمعالج لحدث النقر const buttonElement = document.getElementById("myButton"); buttonElement.addEventListener("click", handleClick); وبخصوص:
صحيح، فنحن نريد استخدامها لتنفيذ أمرًا ما في وقت معين وليس استدعائها على الفور، ولكن يجب العلم أنها دوال مستقلة أي نقوم بتعريفها كما بالمثال السابق ثم نقوم بتمريرها بدون كتابة القوسين () الخاصين بتنفيذ الدالة حتى يتم استدعائها من قبل الدالة الخارجية.
وستجد هنا تفاصيل أخرى:
-
إجابة Mustafa Suleiman سؤال في مسار RESTFul API كانت الإجابة المقبولة
سأقوم بإخبار فريق إعداد الدورات في أكاديمية حسوب بذلك، وعامًة يتم تحديث أي جزء قديم في الدورات كل فترة ولكن هناك أولويات يتم العمل عليها، وفي حال وجود جزء لم يعد صالحًا في أحد الدورات ومر عليه فترة يتم تحديثه أو شرح كيفية التعامل مع المستجدات الجديدة من أجل تحقيق استفادة من الشرح.
وفي حال واجهت مشكلة في أحد الدروس، يمكنك التعليق أسفل الدرس وسيتم مساعدتك وتوجيهك وتوفير مصادر أيضًا.
وتستطيع تفقد التحديثات التي تتم كل فترة في الأكاديمية من خلال صفحة آخر التحديثات.
-
إجابة Mustafa Suleiman سؤال في متى يكون استخدام Cloudinary مناسبًا؟ كانت الإجابة المقبولة
يفضل استعمال Cloudinary:
كنت بحاجة إلى تخزين الصور ومقاطع الفيديو وإدارتها بكفاءة دون الحاجة إلى بناء بنية تخزين خاصة بك، واستخدام Cloudinary لتخزين هذه الوسائط وإدارتها بسهولة. تساعد Cloudinary على تحسين أداء موقع الويب من خلال تقديم الصور بأحجام وجودات مختلفة تلائم الأجهزة وسرعة الاتصال بالإنترنت للمستخدمين، أي تحتاج إلى ميزات متقدمة لمعالجة الصور وتحسينها، مثل التحويل إلى أحجام مختلفة أو إضافة مؤثرات. تعمل على توفير توصيل سريع للوسائط من خوادم موزعة على مستوى العالم، مما يقلل من وقت تحميل الوسائط ويحسن تجربة المستخدم. تحسين تجربة المستخدم من خلال تقديم صور محسنة ومقاطع فيديو بجودة عالية وبسرعة. يمكنك توفير التكاليف المرتبطة بتخزين وتسليم الوسائط الرقمية عبر الإنترنت بشكل مستقل. بينما يكون استعمال Cloudinary عبء على المشروع في حال:
لديك مشروع صغير ولا يتضمن الكثير من الوسائط، وبالتالي استخدام Cloudinary زيادة غير ضرورية. لا تحتاج إلى ميزات متقدمة لمعالجة الصور.
لديك ميزانية محدودة وعندها تعتبر تكلفة استخدام Cloudinary باهظة بالنسبة لمشروعك. السيطرة الكاملة على تخزين وتوصيل الوسائط الخاصة بك دون الاعتماد على خدمة خارجية، وهنا لا يعتبر Cloudinary الخيار المناسب.
-
إجابة Mustafa Suleiman سؤال في كيف يتم انشاء فيديوهات تيك توك مثل المرفق وما هو البرنامج المستخدم في ذلك كانت الإجابة المقبولة
الفيديو تم إنشائه بواسطة تطبيق keynote (تطبيق إنشاء عروض خاص بآبل) وأيضًا هناك إمكانية أنه تم إنشاء الرسومات من خلال فيجما ثم تحريكها من خلال keynote، ويمكنك محاولة إنشاء نفس الفيديوهات من خلال برامج المونتاج مثل أدوبي بريمير وغيرها على الويندوز.
-
إجابة Mustafa Suleiman سؤال في مشكلة في تخزين التوكن بعد تسجيل الدخول في مشروع Laravel وReact كانت الإجابة المقبولة
ما يجب أن يكون هو أن الباك اند مسؤول عن إصدار وتخزين التوكن لمراجعته عند إرسال الطلبات، حيث أنه هو المسؤول عن المصادقة وإصدار التوكنات، يجب أن يرسل الباك اند التوكن إلى الفرونت اند في استجابة لطلب تسجيل الدخول الناجح، ثم يمكن للفرونت اند بعد ذلك تخزين التوكن في ملفات تعريف الارتباط أو التخزين المحلي.
ولكن إن تم تخزين التوكن في الفرونت اند، فسيتم فقده إذا قام المستخدم بحذف ملفات تعريف الارتباط أو التخزين المحلي.
وبخصوص اختيار استخدام Breeze API أو الطريقة العادية في بناء الـ Backend، يعتمد ذلك على ما تريده، حيث Breeze API هو إطار عمل يساعد في تسهيل تطوير التطبيقات بلغة PHP باستخدام Laravel ولا مشكلة في استخدامه إن كنت تفضل بساطة التطوير واستخدام أفضل الممارسات الموصى بها من قبل Laravel، ولكن عند الحاجة إلى مزيد من التحكم في بنية وعمل باك اند، فمن الأفضل بناء الباك اند بالطريقة العادية.
وبخصوص مشكلة تخزين التوكن:
تأكد من أن الباك اند يقوم بإصدار التوكن بشكل صحيح عن طريق اختبار طلب تسجيل الدخول باستخدام أداة مثل Postman. ثم التحقق من أن الباك اند يرسل التوكن إلى الفرونت اند في استجابة لطلب تسجيل الدخول الناجح من خلال تسجيل استجابة الباك اند. ثم تفقد هل الفرونت اند يقوم بتخزين التوكن بشكل صحيح عن طريق فحص الكود الخاص بذلك. -
إجابة Mustafa Suleiman سؤال في الفرق بين web app و web site كانت الإجابة المقبولة
السؤال متعلق بدورة علوم الحاسب أرجو التعليق أسفل فيديو الدورة في المرة القادمة لمساعدتك بشكل أفضل.
وإن كنت قد فهمت سؤالك بشكل صحيح، فالفرق الرئيسي بين تطبيق الويب (web app) وموقع الويب (web site) هو أن تطبيق الويب يوفر تفاعل أكثر مع المستخدم، بينما موقع الويب هو مجموعة من الصفحات التي يمكن عرضها من خلال مستعرض الويب.
وكأمثلة، موقع فيسبوك هو تطبيق ويب وليس موقع ويب، بينما المواقع الإخبارية أو Wikipedia مثلاً هي مواقع ويب،
بمعنى أن تطبيقات الويب المحتوى بها متغير بناءًا على تفاعل المستخدم معها، وهي مواقع ديناميكية، أي محتواها يتغير بدون تدخل من مديري الموقع، فمثلاً أنتِ في أكاديمية حسوب تقومين بإنشاء حساب وتغيير صورتك ونشر سؤال والتعليق ورفع ملفات وصور وخلافه.
لكن الفرق بين أكاديمية حسوب وموقع فيسبوك هو أن فيسبوك عبارة SPA أي تطبيق من صفحة واحدة، بمعنى أنه يتم إنشاء محتوى الصفحة بالكامل في وقت واحد باستخدام لغة برمجة جافا سكريبت، وبالتالي المستخدم لا يحتاج إلى تحميل صفحة جديدة كلما قام بإجراء تغيير، مثل التفاعل مع منشور أو مشاركة صورة.
وذلك النوع من تطبيقات الويب الديناميكية له مزايا فريدة مثل تحديث المحتوى بدون الحاجة إلى إعادة تحديث الصفحة وأيضًا القدرة على التنقل السريع ومزايا أخرى.
-
إجابة Mustafa Suleiman سؤال في هل يجب ان ان يكون امتحان الحصول على الشهاده بعد 6 اشهر ام هو مفتوح المده كانت الإجابة المقبولة
الدورة متاحة لك مدى الحياة، وتستطيع التقدم للإمتحان في أي وقت وأيضًا أكثر من مرة في حال لم تجتازه من المرة الأولىولكن من الأفضل الاستعداد جيدًا، وكنصيحة قم بتحديدجدول زمني واقعي بالنسبة للوقت المتاح لك والتزم به ولا تترك الأمر بدون تخطيط.
-
إجابة Mustafa Suleiman سؤال في لماذا لا تعمل أكواد بايثون الموجودة في فيديوهات يوتيوب كانت الإجابة المقبولة
هل قمت بتثبيت الحزم المطلوبة للمشروع، وهل تعلم الطريقة الصحيحة للتعديل على الكود ليتناسب مع مسارات الملفات في جهازك؟ فمثلاً لو قمت بكتابة نفس الكود في الفيديو فستجد به بعض المسارات الخاص بالملفات عليك تعديلها بما يتناسب مع الملفات الموجودة على حاسوبك والتي تريد العمل عليها.
ولا يمكن تحديد سبب المشكلة بدون رؤية الخطأ الذي يظهر لك، ومن الأفضل تعلم أساسيات بايثون حتى تتمكن من استيعاب ما يتم شرحه.
-
إجابة Mustafa Suleiman سؤال في هل ما زال يتم توفير متابعة وتوجيه بعد الحصول على الشهادة كانت الإجابة المقبولة
بالطبع فذلك مذكور في وصف كل دورة، وهو الآتي:
حينما تحصل على الشهادة سنقدم لك خدمة كتابة السيرة الذاتية مجانًا، ثم سنتابع معك لإعداد حساباتك على مواقع العمل، وحينها إن لم تحصل على عمل يغطي قيمة الدورة التي دفعتها خلال 6 أشهر من حصولك على الشهادة فسنعيد لك ما دفعت، بكل بساطة.
-
إجابة Mustafa Suleiman سؤال في ما هو دور الفاصلة المنقوطة (semicolon) في جافا سكريبت؟ كانت الإجابة المقبولة
هل تقصد مثل التالي؟
const x = 5; const y = 10; عامًة الحروف المنقوطة (semicolon) تُستخدم لإنهاء التعبيرات أو الأوامر، أي إن وجودها يشير إلى نهاية تعليمة معينة في الكود.
وذلك يساعد المترجم (interpreter) أو المتصفح على فهم هذا الجزء من الكود وتنفيذه بشكل صحيح.
وعلى الرغم من أن الحروف المنقوطة تُستخدم عمومًا لهذا الغرض في جافا سكريبت، إلا أنها اختياري ويمكن تركها في الأكواد البسيطة، ولكن، عند كتابة أكواد أكبر وأكثر تعقيدًا، يصبح استخدام الحروف المنقوطة ضروريًا لتجنب الأخطاء والسماح بفهم أفضل للكود.
-
إجابة Mustafa Suleiman سؤال في رفع الصور على databse كانت الإجابة المقبولة
هل قمت بطباعة الرد من الخادم لرؤية الروابط التي يتم استلامها في الواجهة الأمامية؟ حاول طباعة ذلك وتفقد هل الرابط صحيح أم لا وأيضًا تفقد مسار الصور من خلال عمل inspect لمكان الصورة ورؤية قيمة خاصية src، فقد تحتاج إلى تعديل المسارات أو ما شابه.
-
إجابة Mustafa Suleiman سؤال في كيفية رفع مشروع react على vercel والإتصال بقاعدة بيانات MongoDB كانت الإجابة المقبولة
عليك إنشاء قاعدة البيانات على MongoDB Atlas وبناء Cluster وتعيين اسم مستخدم وكلمة مرور ستحصل على رابط للإتصال، وعليك أن تضع ذلك في ملف .env في مشروع وكافة متغيرات البيئة اللازمة.
والآن أثناء نشر مشروعك على Vercel عليك تحديد متغيرات البيئة كما كتبتها في ملف .env أي كتابة مثلاً MONGODB_URL كالتالي:
أي وضع الاسم ثم القيمة الخاصة بذلك المتغير.
وبعد الإنتهاء من إضافة كافة المتغيرات عليك الضغط على deploy، وفي حال كان هناك مشروع منشور بالفعل، تستطيع الوصول لمتغيرات البيئة من خلال إعدادات المشروع settings ثم environment variables ثم إضافة المتغيرات وتأكد من تفعيل Automatically expose system environment variables.
-
إجابة Mustafa Suleiman سؤال في اضافة بوت واتس اب كانت الإجابة المقبولة
ما أنت بحاجة إليه هو الحصول على WhatsApp Business API، ويمكنك الحصول على ذلك بسهولة من خلال إنشاء حساب Twilio.
أيضًا عليك استخدام إصدار بايثون 3.9 أو أعلى، وأيضًا استخدام flask من أجل إنشاء واجهة خلفية للرد على الرسائل القادمة.
عليك البحث على جوجل أو يوتيوب عن Building WhatsApp bot with Python أو Create WhatsApp Bot with Twilio Using Python.
وهنا شرح لذلك أيضًا:
-
إجابة Mustafa Suleiman سؤال في تغيير كلمة المرور في حسابي mongo db atlas كانت الإجابة المقبولة
من الإعدادات ستجد خيار باسم Database Access اضغط عليه
وسيتم عرض الـ users لقاعدة البيانات، يمكنك الضغط على edit من أجل تغيير كلمة المرور أو إضافة user جديد من خلال الضغط على add new database user وتعيين كلمة مرور لذلك المستخدم.
-
إجابة Mustafa Suleiman سؤال في معالجة خطأ في إرسال البيانات إلى الخادم كانت الإجابة المقبولة
رسالة "401 Unauthorized" تعني أن الطلب لم يتم تصديقه بنجاح عند إرساله إلى الخادم، أي أن الـ JWT (JSON Web Token) الذي تم إرساله مع الطلب غير صالح أو غير موجود.
عليك بالتالي:
تأكد من أنك قمت بتسجيل الدخول بنجاح وحصلت على JWT الصحيح عند تسجيل الدخول.
التأكد من أنك تقوم بإرسال الـ JWT الصحيح مع الطلب، وأنت تقوم بذلك بالفعل في كود العميل باستخدام:
"x-auth-token": user?.data?.token وتحقق من أن خادمك يستخدم نفس (JWT_SECRET) الذي تم استخدامه عند إنشاء الـ JWT ويجب أن يكون متطابقًا على الجانبين (الخادم والعميل) حتى يمكن التحقق من الـ JWT بنجاح.
وقم بتضمين وسيط الحماية (protect) في مسار الطلب /api/auth/change_password للتحقق من الـ JWT قبل تنفيذ العملية وتأكد من أن الوسيط موجود في سلسلة وسائط التوجيه التي تتعامل مع هذا المسار.
أيضًا تحقق من الجزء التالي في الكود:
await current_user.save() res.send(res.json({ success: true, data: current_user })) عليك أيضًا إزالة res.json() حيث أن res.send() بالفعل يقوم بإرسال الجواب بصيغة JSON.
-
إجابة Mustafa Suleiman سؤال في الـ Background في جهة HTML أو CSS كانت الإجابة المقبولة
نستخدم عنصر background في صفحة HTML لتحديد خلفية للعنصر نفسه، أو للصفحة ككلل، عن طريق تحديد قيمة للخاصية background-color.
ومثلاً لإضافة خلفية زرقاء إلى الصفحة ككل، علينا إضافة الكود التالي إلى عنصر body:
<body style="background-color: blue;"> ... </body> ولكن استخدام عنصر background في HTML له بعض القيود حيث لا يمكن استخدامه لتحديد صورة كخلفية، أو لتحديد كيفية تكرار الصورة.
أما استخدام عنصر background في صفحة CSS، فهو أكثر مرونة، ونستطيع استخدامه لتحديد خلفية للعنصر نفسه، أو للصفحة ككل، أيضًا لاستخدامه لتحديد صورة كخلفية، أو لتحديد كيفية تكرار الصورة.
ولإضافة خلفية زرقاء إلى الصفحة ككل، نقوم بإضافة الكود التالي إلى ملف CSS:
body { background-color: blue; } ولاستخدام صورة كخلفية، نكتب الكود كالتالي:
body { background-image: url("image.png"); } ولتكرار الصورة نكتب الآتي:
body { background-repeat: repeat; } أي من الأفضل كتابة تنسيقات CSS بشكل منفصل وخاصًة عنصر background وذلك لأنه أكثر مرونة وقابلية للتخصيص، وبالطبع تستطيع استخدام عنصر background في HTML إذا كنت بحاجة إلى تحديد خلفية بسيطة للعنصر نفسه أو للصفحة ككل.
-
إجابة Mustafa Suleiman سؤال في افضل الكتب عن php كانت الإجابة المقبولة
بخصوص الكتب الخاصة بلغة PHP فقد تم شرح الأمر هنا وعليك بالبدء من خلال كتاب
PHP & MySQL: Server-side Web Development by Jon Duckett في حال كنت ستتعلم من الصفر:
وبخصوص الكتب الخاصة بهياكل البيانات والخوارزميات وأيضًا جافاسكريبت وقواعد البيانات وأفضل الممارسات لكتابة كود نظيف وتحسين التفكير المنطقي أثناء التطوير، ستجد ترشيحات ممتازة هنا:
وتستطيع الإختيار من بين الكتب السابقة ما شئت لكن إذا أردت الأهم فهم:
Grokking Algorithms Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin Head first OOAD Good code, bad code Head First design patterns -
إجابة Mustafa Suleiman سؤال في مشكله مع مكتبة virtualenv كانت الإجابة المقبولة
من المفترض في حال تفعيل البيئة الإفتراضية أن يعرض الأمر pip freeze المكتبات المثبتة في البيئة فقط.
وعلي أي حال لعرض المكتبات المثبتة فقط في البيئة الافتراضية الحاليةفقط استخدم الأمر :
pip freeze --local تستطيع أيضًا استخدام الأمر pip list لعرض قائمة بالمكتبات المثبتة في البيئة الافتراضية الحالية.
ولكن هناك أمر هام تغفل عنه أنت هناك فرق بين virtualenv وvenv التي قمت بتفعيلها أنت، حيث أن virtualenv هي حزمة خارجية لإنشاء بيئة إفتراضية بينما venv هي وحدة نمطية قياسية في بايثون.
وأنت قمت بإنشاء بيئة venv عن طريق الأمر التالي:
python -m venv venv ثم تفعيلها عن طريق الأمر التالي:
venv\Scripts\activate أما virtualenv فعليك تثبيتها من خلال الأمر التالي:
pip install virtualenv ولإنشاء بيئة إفتراضية عليك بالتالي:
virtualenv my_env ثم تفعيل البيئة الافتراضية بالأمر التالي:
source my_env/bin/activate ولعرض المكتبات المثبتة في البيئة الافتراضية my_env، فسيؤدي الأمر التالي إلى ذلك:
pip freeze
-
إجابة Mustafa Suleiman سؤال في اي المسارات هذه الافضل للفرونت إند كانت الإجابة المقبولة
من الأفضل تعلم أساسيات البرمجة من خلال لغة شائعة الاستخدام مثل بايثون، والأفضل من ذلك هو تعلم الأساسيات من خلال C++ لكن أصعب بالطبع ولا مشكلة في التعلم من خلال بايثون.
أما Dart فهي تستخدم بشكل أساسي في إطار Flutter الخاص بتطوير تطبيقات الهاتف، فإذا كنت مهتمًا بتطوير تطبيقات الجوال أو التطبيقات متعددة المنصات، فستكون Dart وFlutter خيارات جيدة.
وعلي أي حال تستطيع تعلم أساسيات البرمجة من خلال أي لغة برمجة مشهورة، ولكن ذكرت لك الأفضل والأصح، حتى لا تضيع وقتك وأيضًا تستفاد بما تعلمته.
حيث أن بايثون شائعة الاستخدام وستتعرض لها عاجلاً أم آجلاً خلال رحلة تعلم البرمجة، وC++ مستخدمة بكثرة أيضًا وستعمل على تأسيسك بشكل أفضل من بايثون.
ولا يشترط تعلم بايثون أو أي لغة قبل دخول مجال الويب لكن تلك هي الطريقة الصحيحة لدخول مجال البرمجة، والبعض يتجه مباشرًة إلى تعلم HTML, CSS, JS ولا مشكلة في ذلك لكن المستوى لن يكون واحد بالطبع.
وعليك بالتركيز على اللغات الأساسيات للويب السابقة الذكر، وعدم التسرع في تعلم مكتبات أو إطارات مثل React وAngular فستصاب بالإحباط أو سيكون مستواك ضعيفًا بدون داعي، واللغات الأساسية هي ما تؤهلك لتعلم أي شيء بعد ذلك.
-
إجابة Mustafa Suleiman سؤال في لماذا يتم تنفيذ الكود مرتين في رياكت كانت الإجابة المقبولة
تقصد في المرة الأولى عند فتح التطبيق بدون أي تحديث للحالة state أو الإعتماديات الخاصة بالخطاف useEffect؟
في حال كان الأمر كذلك، فهو بسبب وضع StrictMode وما يفعله هو 3 أشياء أثناء تطوير المشروع:
يعيد عرض مكوناتك مرة أخرى Re-renders للعثور على الأخطاء الناتجة عن إعادة العرض غير النقي (التأثيرات الجانبية). يعيد تشغيل تأثيرات مكوناتك مرة أخرى للعثور على الأخطاء الناجمة عن عدم وجود دالة تنظيف مناسبة. يتحقق من مكوناتك مما إذا كان يتم استخدام واجهات برمجة التطبيقات القديمة deprecated APIs. وبالتالي يتم طباعة الرسالة مرتين في الكونسول، ومن المفترض أن تجد ذلك الوضوع مفعل في مشروعك في ملف index.js أو app.js كالتالي:
const root = ReactDOM.createRoot( document.getElementById('root'), ); root.render( <React.StrictMode> <App /> </React.StrictMode>, ); وفي حال تعطيله قم بإزالة StrictMode ليصبح الكود كالتالي:
const root = ReactDOM.createRoot( document.getElementById('root'), ); root.render( <App />, );
-
إجابة Mustafa Suleiman سؤال في حمايه الفيديوهات والصور في الموقع كانت الإجابة المقبولة
تم الحديث عن ذلك بشكل مفصل في النقاش التالي:
وبإختصار قم بتخزين الفيديوهات والصور على خوادم آمنة ومحمية مثل Vimeo ويمكنك استخدام خدمات التخزين السحابي مثل Amazon S3 أو Google Cloud Storage وضبط الصلاحيات بحيث يكون الوصول إلى الملفات مقيدًا.
وتستطيع تشفير ملفات الفيديو باستخدام تقنيات التشفير المتاحة في خوادم الوسائط الخاصة بك أو استخدام DRM (إدارة الحقوق الرقمية) للفيديوهات إذا كان ذلك ضروريًا.
-
إجابة Mustafa Suleiman سؤال في كيفية جعل وظيفة دورية في Node.js أسرع وأفضل كانت الإجابة المقبولة
بدلاً من تخزين رقم الأيام للاشتراك في متغير، تستطيع تخزينه في قاعدة بيانات، وسيسمح لك ذلك بإجراء عمليات بحث أكثر كفاءة على بيانات الاشتراك.
وذلك باستخدام نموذج بيانات بسيط يحتوي على حقل واحد لتاريخ انتهاء الاشتراك، ثم، استخدام تعبيرات SQL لتحديد العملاء الذين انتهت صلاحية اشتراكهم.
وكمثال استخدم العبارة التالية لتحديد العملاء الذين انتهت صلاحية اشتراكهم قبل يوم واحد:
SELECT * FROM subscriptions WHERE expiration_date < NOW() - INTERVAL 1 DAY وهناك طريقة أخرى وهي بدلاً من استخدام مكتبة node-cron، استخدم مؤقتات Node.js لتشغيل الوظيفة الدورية الخاصة بك، مما سيوفر لك تشغيل الوظيفة في الوقت المحدد بدقة أكبر.
استخدم وظيفة setTimeout() أو setInterval()، لتشغيل الوظيفة الدورية الخاصة بك كل يوم في الساعة 12 منتصف الليل:
const subscriptionChecker = () => { // Do something }; setTimeout(subscriptionChecker, 1000 * 60 * 60 * 24, 0); // Run the function every day at midnight
-
إجابة Mustafa Suleiman سؤال في أواجه مشكلة في عدم حفظ البيانات كانت الإجابة المقبولة
هل تواجه مشكلة في دورة معينة؟
من الأفضل التعليق أسفل فيديو الدورة لمساعدتك بشكل أفضل، أو توضيح المشكلة في حال كانت غير متعلقة بالدورة في أكاديمية حسوب.
وفي حال كانت مشكلتك تتعلق بقواعد البيانات، فتأكد من أن الخادم يعمل وبيانات الإتصال الخاصة بقاعدة البيانات صحيحة وأنه لا يظهر لك أية أخطاء في منفذ الأوامر Terminal أو في الكونسول في الواجهة الأمامية.
-
إجابة Mustafa Suleiman سؤال في مشكلة remote branch already exist أثناء رفع المشروع كانت الإجابة المقبولة
لأنك تستخدم Powershell والأمر الخاص بالحذف مختلف هنا وهو:
Remove-Item -Recurse -Force -Path ".git" أو بإمكانك استخدام الأمر التالي في أي منفذ أوامر:
git rm -r -f .git