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

محمد عاطف17

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

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

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

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

    29

كل منشورات العضو محمد عاطف17

  1. لقد قمت بتحميل الملف الذى ينتهي بإمتداد xlsx وهو يظهر بشكل جيد ومنظم في صفوف وأعمدة . أما في الفيديو المرفق يظهر أن جميع البيانات موضوعه في عمود واحد ومفصول بينها ب comma . يمكنكي إتباع الحل التالي لفصل العمود إلى عدة أعمدة بناء على الفاصلة comma. أولا قومي بتحديد العمود كاملا . ومن الذهاب إلي خانة Data ثم إختيار Text to Columns . بعد ذلك ستظهر نافذة نختار منها Delimited ثم نظغط next . بعد ذلك نختار نوع الفصل وفي حالتنا تلك نختار comma فقط . وفي هذه الخطوة في الأسفل ستجدين شكل الملف بعد الفصل . اآن نختار next ومن ثم نختار general وبعد ذلك نظغط finish . وهكذا سيتم فصل العمود إلى عدة اعمدة لديكي . ويفضل تحميل الملف بصيغة xlsx أفضل حيث أن الملف مساحته كبيرة يحتوي على بيانات كثيرة والحل السابق من الممكن أن يأخذ وقتا كثيرا في فصل العمود .
  2. وعليكم السلام ورحمة الله وبركاته . أعتقد أن الخطأ هو في عملية ال chach حيث يقوم nextjs بعمل caching عند إستدعاء ال api بإستخدام fetch . ولحل تلك المشكلة نضيف revalidate هكذا : async function fetchProperties() { try { const res = await fetch(`${process.env.NEXT_PUBLIC_API_DOMAIN}/properties`,{ next: { revalidate: 10 } }) if (!res.ok) { throw new Error('Failed to fetch data') } return res.json() } catch (error) { console.log(error) } } وهكذا نقوم بجعل next بحذف ال chache بعد 10 ثواني . ومن المفترض أن هذا يحل تلك المشكلة .
  3. وعليكم السلام ورحمة الله وبركاته . ال Token based authentication هو نهج شائع لحماية تطبيقات الويب حيث يعتمد على استخدام توكن (Token) لتأكيد هوية المستخدم بدلاً من الاعتماد المستمر على تحقق بيانات الدخول مع كل طلب. تساعد هذه التقنية في تحسين أداء التطبيق وتخفيف الحمل على الخادم بالاستفادة من معلومات الهوية الموجودة في التوكن المصادق عليه. الآلية التقليدية لل Token based authentication تعمل بالطريقة التالية: تسجيل الدخول: المستخدم يقوم بإدخال بيانات الاعتماد (اسم المستخدم وكلمة المرور). التحقق من الاعتماد: يتم التحقق من صحة بيانات الدخول. إذا كانت صحيحة، يتم إنشاء وإرجاع توكن (Token). إرسال ال token: token يتم إرساله إلى العميل (المتصفح أو التطبيق). استخدام ال token: العميل يقوم بإرفاق الtokenفي كل طلب يقوم به إلى الخادم. الآن نأتي لسؤالك الأساسى وهو الإكتفاء فقط بالتحقق الأولي بعدها ندع المستخدم يرسل الطلبات بدون التحقق منها مادام أنه لم يقم بتسجيل الخروج . هذا سؤال جيد ولكن يوجد سؤال لك كيف سنعرف أن هذا المستخدم هو من يقوم بإرسال الطلبات في كل مرة ؟؟ كيف سترسل المعلومات ؟ ستقول مثلا أنه يتم وضعها في ال session إذا أى شخص يستطيع وضعها في ال session فمن الممكن أنني أعرف أن الحساب بك هو test@test.com إذا سأقوم بوضعها في ال session وأنتحل شخصيتك ولن يفرق الخادم بيننا . حيث أنه في ال token يتم تشفيره برقم سرى في الخادم وحين يتم إرجاع ال token فك تشفيره بكلمة السر هذه ولو تم تشفير ال token بكلمة سر خاطئة فلن يتم إستكمال الطلب وهذا يجعل مستحيل إنتحال شخصية ال token إلا عن طريقة سرقة ال token نفسه من الشخص ولكن غير ذلك فمن المستحيل إنتحال شخصية شخص عن طريق ال token.
  4. هذا ملف StudentController.php : <?php namespace App\Http\Controllers; use App\Models\student; use Illuminate\Http\Request; class StudentController extends Controller { /** * Display a listing of the resource. */ public function index() { // $students = student::all(); return view('student', compact('students')); } /** * Show the form for creating a new resource. */ public function create() { // } /** * Store a newly created resource in storage. */ public function store(Request $request) { // } /** * Display the specified resource. */ public function show(student $student) { // } /** * Show the form for editing the specified resource. */ public function edit(student $student) { // } /** * Update the specified resource in storage. */ public function update(Request $request, student $student) { // } /** * Remove the specified resource from storage. */ public function destroy(student $student) { // } } وهذا ملف web.php : <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\StudentController; Route::get('/', function () { return view('welcome'); }); Route::get('/student',[StudentController::class, 'index']);
  5. لاحظ أن الخطأ من الأساس في ملف web.php . حيث أنك لم ترسل العنوان إلى StudentController . يجب أن يكون الكود كالتالي : use Illuminate\Support\Facades\Route; use App\Http\Controllers\StudentController; Route::get('/', function () { return view('welcome'); }); Route::get('/student',[StudentController::class, 'index']); وقم بحذف سطر dd الذى قمنا بكتابته في ملف StudentController
  6. إذا هناك مشكلة في ملف web.php حيث يتم توجيه العنوان إلى مكان أخر غير StudentController قم بتنفيذ الأمر التالي : php artisan optimize:clear والمحاولة مرة أخري و إذا ما زالت المشكلة موجودة فيجب إرفاق مجلد المشروع
  7. إذا أعتقد ان الكود لا يدخل في StudentController . قم بإضافة سطر dd في دالة index هكذا : public function index() { // $students = student::all(); dd($students); return view('student.index', compact('students')); } وأخبرني بالنتيجة
  8. هل تم حل الخطأ أ, تغير الخطأ إلى خطأ آخر ؟ وأيضا هل قمت بإستيراد النموذج student أم هذا هو كود ملف ال controller كاملا ؟
  9. الخطأ أنك تقوم بإستخدام نفس المتغير في حلقة foreach وهذا خطأ حيث أن foreach لن تعرف أي متغير تقصده وتريد إستخدامه . ولحل تلك المشكلة نتبع الخطوات التالية : أولا يجب عليك تمرير المتغير من ال controlles بإسم students هكذا : $students = student:all(); return view('student.index',compact('students')); وفي ملف ال blade يكون كالتالي : @foreach ($students as $student)
  10. هل يمكنك إرسال صورة لتنفيذك للملف ؟ إذا كنت قد قمت بتنفيذ الأمر سابقا و بعد ذلك أضفت الأعمدة إلى نفس الملف فلن يتم إضافة أي شئ لأنه قد تم تسجيل أن هذا الملف تم تشغيله . يمكنك إستعمال الأمر التالي ولكن إحذر فهذا الأمر سيقوم بحذف قاعدة البيانات كاملة و إنشاءها من جديد مع حذف جميع البيانات بها . php artisan migrate:fresh أو يمكنك إنشاء ملف جديد وتقوم بوضع الأعمدة فيه وتنفيذ أمر migrate فقط
  11. يمكنك تنفيذ أمر migration كالتالي : php artisan migrate وذلك الأمر لتنفيذ ملفات ال migrations . ومن فضلك يفضل جعل كل سؤال منفصل عن الأخر وذلك لمساعدتك بشكل أفضل وحتي يستفاد الطلاب الأخرون أيضا من الإجابات
  12. يجب أن يكون السطر 10 كالتالي : Route::resource('student', StudentController::class); وتأكد من أن StudentController هو الإسم الصحيح للملف وإذا ما زال الخطأ موجود فأرسل صورة صفحة الخطأ كاملة
  13. الخطأ أنك تحاول إستخدام StudentController وهو غير موجود . وأعتقد أن الخطأ في ملف web.php حيث أنك قمت بتعريف المسار ووضعت له ال StudentController دون أن تقوم بإستدعاءه بواسطة use . من فضلك أرسل صورة المسار في ملف web.php وأيضا صورة صفحة الخطأ كاملة لنري أين المشكلة تحديدا .
  14. ستجد أسفل الدرس صندوق للتعليقات يمكنك التعليق هناك أسفل الدرس حيث هنا هو قسم الأسئلة العامة ولا نقوم بإجابة أسئلة الدورات هنا وذلك لمساعدتك بشكل أفضل
  15. وعليكم السلام ورحمة الله وبركاته . الأمر بسيط يمكنك مباشرة وضع القيمة في الصفحة التي تقوم بعرض ال form بها هكذا : <label for="gender">الجنس:</label> <select id="gender" name="gender"> <option value="10">ذكر</option> <option value="5">أنثى</option> </select> وهنا عند إرسال الطلب للخادم ستجد القيمة مباشرة في حقل gender ويمكنك وضعها مباشرة في قاعدة البيانات $gender = $_POST['gender']; هكذا ستجد أن المتغير gender سيحوي على القيمة 5 إذا إختار أنثي و10 إذا إختار ذكر
  16. ستجد أسفل الدرس صندوق للتعليقات يمكنك كتابة سؤالك هناك حيث هنا هو قسم الأسئلة العامة وذلك لمساعدتك بشكل أفضل.
  17. نحن هنا في موقع الأكاديمية لا نقوم بإجابة أسئلة الإختبارات ولكن يمكننا إعطائك الفكرة العامة ويمكنك تطبيقها وإخبارنا بالنتيجة . أولا يجب عليك إنشاء دالة والتي تقوم بأخذ مصفوفة و عدد العناصر في تلك المصفوفة وترتيب العنصر الحالي . وبداخل الدالة نقوم أولا بالتحقق من ترتيب العنصر الحالي يساوي عدد العناصر -1 حيث نريد أن نتحقق هل العنصر هو أخر رقم في المصفوفة أم لا وهذا هو شرط إيقاف ال recursion وإذا تحقق الشرط نقوم بإرجاع هذا العنصر . وبعد ذلك نستدعي الدالة مرة أخري وهذا هو ال recursion ولكن نقوم الآن بتمرير جميع المعاملات السابقة عدي العنصر الحالي نقوم بزيادته ب 1 حتي ننتقل للعنصر الذى يليه ونضعه في متغير. وأخيرا نقوم بإستدعاء الدالة max ونقارن بين المتغير السابق الذى يتم إرجاعه من ال recursion وبين العنصر الحالي . وهكذا سيتم المقارنة بال recursion وستبدا من العنصر الأخير والذى يسبقه وهكذا حتي نصل إلى بداية المصفوفة وبعد أخر تنفيذ لدالة ال recursion سيكون لدينا اكبر رقم في المصفوفة.
  18. بيانات الصور تعبر عن مجموعة الصور التي يتم استخدامها في سياق معين سواء كانت تحتوي على تسميات labeled لا unlabeled حيث أنه من الممكن أن تكون هناك صورة labeled و اخري لا unlabeled . الصور المسماة (labeled data): تتضمن صورا مع وجود تسميات أو علامات توضح محتوى الصور مثل تسميات لأجسام مختلفة في الصور مثل أشخاص أوحياوانات أو تصنيف لنوع الصورة (مثلاً: صورة لسيارة أو لشخص). بيانات الصور غير المسماة (unlabeled data): تشير إلى صور لا تحتوي على تسميات أو علامات وعادة ما تستخدم لأغراض التدريب على النماذج التي تعتمد على تعلم غير مشرف (unsupervised learning). في هذه الحالة، الهدف غالبا هو اكتشاف النماذج أو الهياكل في البيانات بدون وجود تسميات مسبقة. لذالك عندما نتحدث عن بيانات الصور يمكن أن تكون إما مسماة (labeled) إذا كانت تحتوي على تسميات أو غير مسماة (unlabeled) إذا كانت بدون تسميات.
  19. ستجد أسفل الدرس في نهاية الصفحة صندوق للتعليقات من فضلك قم بوضع سؤالك أسفل الدرس حيث هنا قسم الأسئلة العامة ولا نقوم بطرح الأسئلة الخاصة بالدورة هنا وذلك لمساعدتك بشكل أفضل.
  20. إن دورة علوم الحاسب توفر لك الأساسيات وتبدا معك م أبسط المفاهيم البرمجية إلى المفاهيم المتقدمة وأفضل الأساليب المتبعة في البرمجة. وتوصلك بك إلى مرحلة متقدمة من التعامل مع مختلف التقنيات مثل قواعد البيانات والخوارزميات والبرمجة كائنية التوجه OOP والعديد من الأشياء المهمة ويمكنك قراءة الإجابات التالية لوصف أكثر عن الدورة: أما بالنسبة لسؤالك بخصوص leetcode فإن بالفعل تعلم الخوارزميات المهمة مثل البحث الثنائي (Binary Search) وتقدير الوقت (Big O notation) يعد جزءا أساسيا من الاستعداد لحل مشاكل على منصات مثل LeetCode. هذه الخوارزميات لها تطبيقات واسعة في البرمجة وحل المشاكل الحسابية، وتعتبر أساسية للمطورين والمبرمجين في فهم الكفاءة والأداء الخوارزمي. باستيعابك وفهمك لهذه الخوارزميات، ستكون مؤهلا جيدًا للتحديات التي تقدمها منصات مثل LeetCode حيث يتطلب الأمر فهماً عميقا للمفاهيم الخوارزمية وقدرة على تطبيقها بشكل فعال لحل مشاكل مختلفة وتحسين أدائها و القدرة على حل المشاكل والتفكير الإبداعي.
  21. نعم بالفعل عند شراءك الدورة سيوكن لك وصول مدى الحياة للدروس وبالإضافة لذلك أى تحديثات للدورة سيكون لك الوصول إليها أيضا . وأيضا الدعم بالفعل سيكون مدي الحياة يمكنك السؤال في أى وقت بخصوص الدورة وستجد المدربين جميعا موجودن للإجابة عليك
  22. وعليكم السلام ورحمة الله وبركاته. المشكلة تكمن في كيفية تنظيم تنفيذ الدالة textTypingEffect بشكل غير متزامن. في الوقت الحالي، الدالة textTypingEffect تستخدم setTimeout لتأخير تنفيذ الدورة التالية من الطباعة بالنص، وهذا يسمح لكلا الدالتين بالعمل في نفس الوقت حيث أن setTimeout لا تحتاج إلى الإنتظار حيث يتم تنفيذها فعليا ولكن الدالة التي بداخلها هى التي تتأخر لذلك لا تنتظر الإنتهاء حتي تعمل. لحل هذه المشكلة وجعل الدالة الثانية textTypingEffect على landingParagraph تنفذ بعد الانتهاء من الدالة الأولى textTypingEffect على landingHeader يمكنك استخدام Promises بشكل صحيح للتحكم في تسلسل التنفيذ في الدالة textTypingEffect نعدلها لتعيد Promise بمجرد الانتهاء من الطباعة الكاملة : function textTypingEffect(element, text, i = 0, time) { return new Promise(resolve => { if (i == text.length) { resolve(); return; } element.textContent += text[i]; setTimeout(() => { textTypingEffect(element, text, i + 1, time).then(resolve); }, time); }); } هنا قمنا بإرجاع promise من الدالة textTypingEffect حتي يتم إنتظارها عند كتابة await textTypingEffect . وبداخلها قمنا بكتابة resolve() إذا كان طول النص مثل i حتي يتم إنهاء ال promise عندما يتم طباعة جيمع الحروف. وبدخل ال setTimeout قمنا بوضع textTypingEffect(element, text, i + 1, time).then(resolve); أي في كل مرة نمرر دالة resolve التي سوف تنهي ال promise في جزء ال then . ونعدل الدالة startTyping لتصبح كالتالي : async function startTyping() { await textTypingEffect(landingHeader, landingHeaderText, 0, 35); await textTypingEffect(landingParagraph, landingParagraphText, 0, 5); } بهذه التعديلات الآن startTyping ستنتظر حتى يتم الانتهاء من textTypingEffect على landingHeader بفضل الـ await، ثم بعد ذلك ستبدأ في تنفيذ textTypingEffect على landingParagraph. هذا يضمن أنهما لن يتنافسا على التنفيذ في نفس الوقت وسيعملان بالتتابع كما هو متوقع. وهذا هو الكود كاملا بعد التعديل : const landingHeader = document.querySelector(".landing__header"); const landingParagraph = document.querySelector(".landing__paragraph"); const landingHeaderText = "Iam Mustapha"; const landingParagraphText = "Full Stack Developer"; function textTypingEffect(element, text, i = 0, time) { return new Promise(resolve => { if (i == text.length) { resolve(); return; } element.textContent += text[i]; setTimeout(() => { textTypingEffect(element, text, i + 1, time).then(resolve); }, time); }); } async function startTyping() { await textTypingEffect(landingHeader, landingHeaderText, 0, 35); textTypingEffect(landingParagraph, landingParagraphText, 0, 5); } startTyping()
  23. وعليكم السلام ورحمة الله وبركاته . تقسيم الملفات في متجر OpenCart يتم عادة من خلال هيكلة نظامية تشمل ملفات النواة (core files)، ملفات القالب (theme files)، وملفات الإضافات (extension files). يتم تنظيم الملفات والمجلدات بطريقة تجعل من السهل الوصول إليها وتعديلها. إليك الهيكلية العامة للملفات في OpenCart: ملفات النظام (System Files): admin/: يحتوي على الملفات الخاصة بواجهة الإدارة. catalog/: يحتوي على الملفات الخاصة بواجهة المستخدم. system/: يحتوي على الملفات الأساسية لنظام OpenCart مثل ملفات التكوين (configuration files) وملفات المكتبة (library files). ملفات القالب (Theme Files): catalog/view/theme/: يحتوي على قوالب الواجهة (templates) وملفات الأنماط (CSS) وملفات JavaScript. admin/view/template/: يحتوي على قوالب واجهة الإدارة. ملفات اللغة (Language Files): catalog/language/: يحتوي على ملفات اللغة الخاصة بواجهة المستخدم. admin/language/: يحتوي على ملفات اللغة الخاصة بواجهة الإدارة. ملفات الإضافات (Extension Files): catalog/controller/extension/: يحتوي على ملفات تحكم الإضافات. catalog/model/extension/: يحتوي على ملفات النماذج الخاصة بالإضافات. catalog/view/javascript/: يحتوي على ملفات JavaScript الخاصة بالإضافات. ملفات الصور (Image Files): image/: يحتوي على جميع الصور المستخدمة في المتجر. ملفات التخزين (Storage Files): storage/: يحتوي على ملفات التخزين مثل ملفات الجلسات (session files) والملفات المؤقتة (temporary files) وملفات التعديل (modification files). ويمكنك قراءة المقال التالي والمقالات المرتبطه به لتعرف أكثر عن اوبن كارت وهذا الرابط هو المستند الرسمى لاوبن كارت لتقسيم الملفات
  24. لا أظن أن أنسب شئ هو البحث هكذا على محركات البحث حيث أن ظهور النتائج الخاصة بها ستكون معتمدة على مدي توافق تلك النتائج لمحركات البحث SEO أو ستكون إعلانات ممولة ومن الممكن أن تظهر لك شركات ليست جيده أو من الممكن عدم ظهور شئ سوي مقالات مدفوعة تتحدث عن شركات تمول تلك المقالات . أفضل شئ هو السؤال في محيطك أو في المواقع التقنية مثل linkedin أو مواقع العمل الحر مثل مستقل وغيرها أو حسب المواقع الخاصة بموقعك الجغرافى فمثلا يوجد لدينا هنا في مصر موقع مثل wuzzuf والعديد من المواقع الأخري . أو يمكنك أيضا البحث على منصات التواصل الإجتماعى مثل facebook حيث أن facebook أفضل من حيث أنك ستجد تقيمات للشركة أو الأشخاص . أما إذا كنت تريد كلمات مفتاحية لمحركات البحث فيمكنك إستخدام مثلا أفضل شركة لعمل كذا أو شركات تطوير التطبيقات وهكذا . أما بالنسبة إلى السؤال الثاني فأولا ما سأنظر إليه إذا كنت أهتم بمدي جودة العمل ولا يهمني السعر حاليا فسأبحث عن الشركات التي تلتزم بمواعيد التسليمات والتي تعطيك أيضا دعم فني بعد تسليم المشروع وايضا التي يكون لديها عملاء كثر يشكرون في أعمالها ومن ثم يمكننا التفاوض في السعر. أما إذا كنت تبحث عن أقل سعر فسيتوجب عليك التنازل عن بعض الأمور مثل التسليمات في الموعد أو حتي ان يكون المشروع ليس أفضل شئ ومن الممكن أن تواجه مشاكل بعد التسليم ولكن ما لا يجب التنازل عنه هو وجود دعم فني متاحا بعد التسليم للتأكد من عدمو وجود أى أخطاء أو مشاكل وإلا فيجب على الشركة حلها وإلا فستجد صعوبة في تعين شخص لإصلاحها ومن الممكن أن يكلفك ذلك كثيرا من المال
  25. في العادة يمكن أن يتفاوت دخل المبرمجين الذين يعملون في مجال العمل الحر بشكل كبير بناء على خبرتهم والمهارات التقنية التي يمتلكونها ومستواهم التقني والسوق الذي يعملون فيه وحجم المشاريع التي يعملون عليها، وغيرها من العوامل. وأيضا أريد أن أنبهك أن الحصول على العمل والرواتب هي من الأرزاق فلا تستعجل هذا الرزق فمن الممكن أن يكون مستواك متقدما وشخص أخر ليس بمهارتك ولكنه لديه الكثير من المشاريع التي يعمل عليها فكما أخبرتك هو في النهاية رزق لك من الله. ومع ذلك، إذا أردت أن تحصل على فكرة عامة عن متوسط الدخل، يمكنك أن تلتقط بعض الأرقام التقديرية. على سبيل المثال، في الولايات المتحدة، قد يكون متوسط دخل مبرمجي الويب الحر حوالي 60،000 إلى 100،000 دولار أمريكي سنويا، ولكن هذا يعتمد بشكل كبير على الخبرة والموقع الجغرافي والمجال الذي يعملون فيه. لذا، لتحديد متوسط الدخل بدقة أكبر، يمكنك البحث عن دراسات السوق المحلية أو الاطلاع على مواقع الوظائف المستقلة لرؤية ما يعرضه المبرمجون لنفسك الذين يعملون بنفس مجالك وموقعك الجغرافي وأيضا مواقع العمل الحر تختلف فمثلا المواقع العربية مثل مستقل وخمسات ستجد أن معظم المشاريع أسعارها قليلة وليست كالمواقع الأخري مثل upwork وهكذا . ولكن المنافسة في المواقع العربية مثل مستقل أقل من المواقع الأخري لذلك في حالتك وأنك بالكاد إنتهيت من الدورة فأنصحك أن تبدأ بالمشاريع الصغيرة وهى تبدا من 25 دولار إلى 50 وهذه الذى يجب أن تركز عليها وتعتمد شطارتك في جعل صاحب المشروع يختارك وبناء سمعة جيدة لك . ولكن في البداية من الممكن أن تنهي مشروعين إلي 4 مشاريع في الشهر بميزانية من 25 إلي 50 و كما وضحت لك هذا يعتمد على مهارة التواصل لديك وبناء سمعة جيدة لك فيجب أولا عدم الإهتمام بالسعر كثيرا والإهتمام أكثر ببناء ملف شخصى قوى وسمعة جيدة.
×
×
  • أضف...