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

Adnane Kadri

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

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

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

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

    52

كل منشورات العضو Adnane Kadri

  1. هل تظهر اي رسالة خطأ ؟
  2. أفترض أنك تمتلك مكون فرعي يتم به عرض مجموعة من الأعمال ولنقل انه يتم تخزينها في مصفوفة كائنات projects. وتريد بشكل ما حساب عدد هاته الأعمال وحقنها الى المكون العام الذي يعبر عن الصفحة الرئيسية. يمكنك كفكرة التقاطها كعائد عن تابع للمكون معرفا كمرجع كـ: <template> <div id="app"> <h2> {{ projectsCount }} </h2> <ProjectsComponent ref="ProjectsComponent" /> </div> </template> <script> import ProjectsComponent from './ProjectsComponent' export default { data:{ projectsCount: 0, } components: { ProjectsComponent }, mounted () { this.projectsCount = this.$refs.ProjectsComponent.getProjectsCount(); } } </script> قم في داخل المكون الفرعي نعرف التابع getProjectsCount الذي يعيد عدد المشاريع: <template> <div id="projects"> projects </div> </template> <script> export default { data(){ return { projects:[ {id: 1, name: 'Web development'}, {id: 1, name: 'Web design'} ] } }, methods:{ getProjectsCount(){ return this.projects.length } } } </script>
  3. الأمر في النهاية هو واحد، فكل اللغات قادرة على تلبية احتياجات أي مشروع ويب مطروح وتبقى هاته اللغة مجرد آداة لهندسة تصميم معين أو وصف نظام ليعمل وفق طريقة ما. ان كنت تحس أنك تائه في اختيار لغة ما ففيما يلي بعض الخطوات التي قد تساعدك في ذلك: قم بعمل نظرة تحليلة شاملة لسوق العمل الذي تريد أن تعمل فيه مستقبلا واستخلص الأكثر طلبا. قم بالبحث عن حجم مجتمع لغة معينة وعدد العاملين بها في العالم (قد تساعدك استفتاءات مطوري stackoverflow). فاللغة الأكثر شيوعا لها الأفضلية طبعا. خذ نظرة عامة عن أقوى أطر العمل في كل لغة ومدى شيوعها. اسأل أو قم بتقدير سهولة تعلم كل لغة وقارن بينها (learning curves). وفي الأخير قم بالإختيار وابدأ التعلم مباشرة وفقط. وفي مرحلة ما، ستجد أن كلها يتشابه بنسبة كبيرة وسيمكنك التبديل بينها بسهولة تامة. ولكن الأهم أولا هو اختيار أحدها واتقانه والتركيز عليه.
  4. لا حاجة للحذف اذن، قم بتعديل تعليقك وازل الصورة ان كانت عن مشروع خاص. وفي حالة اقتباس تعليقك من قبل مدرب معين، جرب التواصل معه وطلب ذلك منه.
  5. مرحبا احمد وعليكم السلام، أظن أنه لا يمكن ذلك في الأكاديمية. الأعضاء المشرفون فقط من يمتلكون صلاحية اخفاء تعليق عن عامة المستخدمين الآخرين. التعليقات السابقة في الدورات هي الأخرى مرجع ومادة علمية يستفيد منها الطلبة الآخرون. لما تريد حذفها؟
  6. هلا قمت بالتقاط صورة كاملة لرسالة الخطأ التي تظهر؟ هل الموضع الذي تقوم بتعليقه هو ما ان ينتج المشكلة ام انك تقوم بتصريح المتغير facebook_login_url في مكان آخر؟
  7. أظن أن الموضوع نسبي وذاتي جدا، فاستيعابك وتطبيقك العملي على ما تتعلمه يؤثران بشكل كبير على الموضوع، هذا بجانب احتمالية أن تكون هنالك بعض الدروس التي تمتد الى مدة اطول من الأخرى، وبالتالي فإن المادة العلمية المقدمة ستكون أكثر. بدل ذلك، يمكنك تخصيص ساعتين او ثلاث او ما يناسبك بشكل يومي، على أن تجعلها كحد أقصى للدراسة والممارسة. وبما أن الدورة منظمة ومهيكلة وفق دروس ومسارات فسيخدمك ذلك كثيرا. التركيز على موضوع الوقت غير مجدي كثيرا، في مقابل ان التركيز في فعاليتك وانتاجيتك هو ما يهم فعلا. فأن تتعلم شيء ما جديد كل يوم مؤشر جيد. وبالتالي فإن الحد الذي تتوقف فيه عن استيعاب الدرس والتعلم هو ما يعتبر نهاية مدة دراستك لليوم او الفترة. سواء بسبب التعب او الملل او ما الى ذلك. قم بجعل العملية مرنة وواصل التعلم وفقط.
  8. مرحبا أحمد، الاحساس بالغموض تجاه الأكواد شيء طبيعي وخصوصا في بداية مسيرتك، ولذلك فإنه لا يجب عليك القلق كثيرا بشأن هذا الموضوع. وفي حال التباس شيء ما عليك تذكر ان هنالك فريقا كاملا من المدربين والمتخصيين يتابعون الدورات اذ يمكنك طرح سؤالك او تعليقك او طلب توضيح اسفل الدرس المعني وسيتم المتابعة معك حتى تتضح الفكرة معك بشكل كامل.
  9. الفكرة كلها تتمحور حول شرط: اعجاب المستخدم بالمنشور او لا. والذي يترجم الى: امتلاك المستخدم المعني لسطر في جدول likes بـ post_id المنشور المعني. يمثل بالاستعلام: $currentUserId = ..; $targetPostId = ..; $sql = "SELECT * FROM likes WHERE user_id = ${currentUserId} AND post_id = ${targetPostId}"; الآن لن تحتاج الا للتحقق من اعادة هذا الاستعلام لنتائج او لا: $conn = new mysqli("host", "username", "password", "database"); $currentUserId = ..; $targetPostId = ..; $sql = "SELECT * FROM likes WHERE user_id = ${currentUserId} AND post_id = ${targetPostId}"; $result = $conn->query($sql); if (mysqli_num_rows($result) > 0) { echo "المستخدم معجب"; } else { echo "المستخدم غير معجب"; } الآن سيمكن استعمال هذا الشرط لعرض وتصيير زر الاعجاب.
  10. هاته الطريقة لم تعد متوفرة منذ الاصدار السابع، في اصدارات لارافيل الأخيرة ابتداءا من النسخة الثامنة ستحتاجين تعريف المسار واسناده ذات الاسم كـ: use Illuminate\Foundation\Auth\EmailVerificationRequest; Route::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) { $request->fulfill(); return redirect('/home'); })->middleware(['auth', 'signed'])->name('verification.verify'); هذا المسار سيتعامل مع الطلبات التي تم إنشاؤها عندما ينقر المستخدم على رابط التحقق من البريد الإلكتروني الذي تم إرساله إليه عبر البريد الإلكتروني.
  11. انتبه الى ان الصور تعمل الآن بعض اضافة القاعدة السابقة. جرب طلب مسار صورة: https://arabiauniform.areyada.com/assets/images/hook/1654601323باركود-05.png او طلب مسار صورة غير موجود: https://arabiauniform.areyada.com/assets/images/hook/لتبس-05.png لم تعد ذات الرسالة السابقة تظهر.
  12. نعم يمكن ذلك ان كنت تحاول فقط تشغيل المشروع، سيكفيك التأكد من توافق متطلبات التشغيل مع بيئة العمل وفقط.
  13. سؤالك يفتقر الى مزيد من التفاصيل، هل يمكنك التوضيح اكثر؟
  14. يذكر ان هنالك الكثير من النسخ ما بين النسخة التاسعة والخامسة للارافيل، ولذلك فإنك قد تضطر للعمل على الكثير من التحديثات التي تمتلك تأثيرات عالية الخطورة High likelhood of impact. والتي يجب مراعاتها ما بين النسخة والأخرى، أي ان كنت ستقوم بالأمر بشكل يدوي فستحتاج: تحديث التطبيق من 5 الى 6 تبعا لدليل التحديث واعتبارا لأي تحديثات عالية الخطورة // // من 6 الى 7 ثم من 7 الى 8 ومن 8 الى 9 وهو الأمر الذي لا يعد عمليا ولا سهلا. مقاربة أخرى يمكن الاعتماد عليها هي إنشاء تطبيق لارافيل جديد تماما وليكن بالنسخة 9 ثم قم بنقل ملفات المتحكمات، النماذج والعروض والمسارات وملفات البذر وما الى ذلك من تطبيقك القديم الى هذا الجديد، ثم سيكون من السهل تشخيص الاخطاء والعمل عليها. على الأقل لن تهتم آنذاك بتحديثات الاعتماديات وسيمكنك الاهتمام مباشرة بالتحديثات التي تختص بسياق الكتابة فقط. ان شئت اختصار الطريق، فستحتاج بشكل ما الى أتمتمة العملية والاعتماد على خدمات مدفوعة من مثل Laravel shift.
  15. دورة تطوير التطبيقات باستخدام لغة Python لا تشترط أي خبرة مسبقة، اذ سيتم في هاته الدورة الانطلاق من ابسط مفاهيم واساسيات لغة بايثون الى كيفية بناء تطبيقات حقيقية نحو اطار عمل Django و Flask وغيرها الكثير. تتكون الدورة من المسارات: أساسيات البرمجة بلغة بايثون تطبيقات برمجية بلغة بايثون أساسيات إطار العمل جانغو Django تطوير متجر إلكتروني باستخدام جانغو Django تطوير واجهة برمجية API باستخدام فلاسك Flask تطوير تطبيقات أودو Odoo أساسيات تحليل البيانات أساسيات تعلم الآلة ولا تتطلب أي خبرة مسبقة أبدا.
  16. تأكد من استعمال استعلام الوسائط الصحيح للتعامل مع طريقة العرض في الطباعة تحديدا، يذكر ان استعلامات الوسائط media@ تحدد مجموعة من التنسيقات من مثل: عرض وارتفاع اطار العرض viewport عرض وارتفاع الجهاز orientation او وضع العرض الكثافة او resolution على نوع معين من الوسائط، فقد يكون جميع الوسائط فنحدد: @media all او جهاز طباعة مثلا: @media print او شاشة حسوب: @media screen يحتمل ان تحدث المشكلة بسبب ان مجموعة التنسيقات تطبق على نمط دون الآخر، جرب وضع مجموعة تنسيقات محددة بجهاز الطباعة: @media print { *{ background-color: red; } } وتحقق ما ان كان ذلك هو سبب المشكلة. في حالة ما كان ذلك، تأكد من تعميم التنسيقات المرادة على كامل اجهزة العرض: @media all{ // ضع كل تنسيقاتك هنا }
  17. بغض النظر عن صعوبة التعامل مع مثل هكذا كم من البيانات من ناحية الواجهة الخلفية إلا ان العملية التي تصفها غير صديقة لتجربة الاستخدام. أظنك تريد بشكل ما اضافة خيار لاضافة اكثر من مالك في نفس الاستمارة. وفي مثل هذا ستحتاج في الغالب هيكلة هاته البيانات على شكل JSON لتنظيم طريقة التعامل معها من طرف الواجهة الامامية او الخلفية. اذ تكون قائمة الملاك هاته كمصفوفة داخل كائن الجيسون لدينا بالشكل التالي: { .. "owners":[ { "name" : "owner 1", "identity": "545789" }, { "name" : "owner 2", "identity": "978798" } ] } ثم ما ان اردنا اضافة مالك جديد الى قائمة الملاك اضفنا كائنا جديدا الى مصفوفة الكائنات. اذ سيكون من السهل آنذاك قراءة مصفوفة الكائنات والمرور على كل مالك من قبل الواجهة الخلفية وانشاء ملاك نقوم بنسبهم الى ذات العنصر. طبعا الفكرة نظرية بحتة، يمكنك تقويمها بحسب حاجتك او استعمالها وفق مثالك.
  18. مثلما اشار المدربون فإن طريقة اضافة تعليق في PHP تختلف، نعني بـ Doc comment النوع الاخير الذي يبدوا كـ: /** * */ التعليق الذي يحتويه هذا النوع يسمى DocBlock وهو نوع من التعليقات التي يمكن أن توفر معلومات مطولة حول عنصر او جزئية ما في التعليمات البرمجية الخاصة بك. وذلك اما للمطورين الذين سيشتغلون مستقبلا على هاته الشيفرة او حتى لبيئات التطوير المتكاملة IDEs من مثل VS code التي تستعمل قواعد كتابة هذا التعليق في توثيق الشيفرة وفي توثيق الواجهات البرمجية. وعموما، يتكون هذا التعليق من: الملخص Summary وهو شرح موجز لما ستقوم به الجزئية المراد توضيحها. التوصيف Description وهو شرح اكثر تفصيلا لما ستقوم به الجزئية. الوسوم Tags وهي سلسلة من التوصيفات الاخرى التي تسبق برمز @ وتعبر عن معلومات من مثل عائد الدالة او نوع المعاملات او غيرها. لاحظ المثال: /** * .حساب العمر انطلاقا من تاريخ الميلاد * * تستعمل هاته الدالة الكائن كذا وكذا في حساب * الفارق الزمني بين كذا وكذا * * @see path/to/resource.php * @param {string} $date_of_birth * @return integer */ function getAge($date_of_birth){ }
  19. بشكل عام، يوجد مجموعة من الثغرات التي يهتم مطورو الواجهات الخلفية بتغطيتها لضمان سلامة البيانات او سلامة التطبيق ككل، نذكر منها: ثغرات الحقن injections وتكون باستغلال حقول الادخال في تقديم شيفرات واكواد الى واجهة التطبيق الخلفية، قد تكون الشيفرات هاته استعلامات قواعد بيانات فتسمى SQL injection او تعليمات نظام تشغيل او طلبيات HTTP يوجد ايضا ثغرات اخرى من مثل: تزوير الطلبات عبر المواقع cross site request forgery البرمجة عبر الموقع cross site scripting او XSS ضعف ادارة جلسات الاتصال Broken session management التوجيه غير المحقق Invalid redirects and forwards وتلافي مشكلة استغلال هاته الثغرات يكون بتعلم اسس الامان في اللغة البرمجية التي تتعامل معها، فكل منها تقوم بتغطية او التخفيف من احتمالية الاصابة بهاته الثغرات بطريقته. ابتداءا من فحص الادخالات او فرض نوع معين من البيانات او تعريف المستخدم برمز مميز او ما الى ذلك.
  20. جرب الاستعانة بمواقع الاستلهام للحصول على قوالب مجانية بالكامل، قد يحتاج بعضها بعض التخصيص او التعديل وفق حاجة المشروع. نذكر من بينها: موقع FreeCss لقوالب ال CSS والمكونات المجانية تصنيف وردبرس في موقع colorlib موقع templatemo موقع nicepage استعمل الكلمة المفتاحية التي تريد القالب حولها واختر من بين الناتج.
  21. مرحبا @Rasmi Rasmi ارفاق ملفات مشروعك في مسار ما بغرض مراجعته يكون عند محاولة الامتحان والحصول على الشهادة، وبالطبع بعد استيفاء شروط الامتحان الأخرى من مثل: اتمام اربعة مسارات تعليمية على الاقل رفع مشاريعك على github اعرفر اكثر من هنا. بعد هذا سيكون عليك القيام بذلك عبر التواصل مع فريق الدعم من خلال مركز مساعدة أكاديمية حسوب اما ان كنت تقصد ارفاق ملفات مشروعك بغرض معاينة مشكلة معينة من قبل المدربين فيمكنك استعمال محرر التعليقات في قسم تعليقات الطلبة اسفل كل فيديو من الدورة.
  22. يمكنك تحقيق ذلك عن طريق: اخفاء النص واعطاءه التنسيق visibility: hidden تحديد النص عند تمرير مؤشر الفأرة على العنصر الأب واظهاره. مثال: <div> <img src="" alt="img"> <h2>Title</h2> </div> div h2{ visibility: hidden; } div:hover h2{ visibility: visible; } يمكنك اختبار ذلك على المتصفح لديك.
  23. يحتمل انه يتم تعطيل الوصول الى مثل هاته الملفات عن طريق ملف اعداد الخادم htaccess. او ان عملية الوصول اليها مقيدة بشكل من الاشكال. لاحظ أيضا ان اي مسار يحمل اسما عربيا لا يتم اعادته وسيتم اظهار نفس المشكلة، وهذا ما لا يزال يشير الى ذات الاحتمال السابق: مشكلة بتكوين ملف htacccess. يمكن مثلا اضافة هذا المسار لقبول المسارات التي هي مكتوبة باللغة العربية: RewriteRule ^([^/]*)$ /index.php?path=$1 [L] في حالة التعذر، يرجى ارفاق محتوى ملف htaccess الخاص بك للنظر فيه.
  24. تصنيف VueJS في مقالات أكاديمية حسوب يحتوي على مجموعة من الدروس المكتوبة المعتبرة في اطار عمل VueJS، قد تكون مهتما بالاطلاع عليها هنا. يوجد ايضا مجموعة من الدروس المتفرقة على قناة أكاديمية حسوب على اليوتيوب من مثل فيديو إنشاء تطبيق بسيط من خلال Vue.js.
  25. من الطبيعي ان يكون التحميل بطيئا اذ يفترض انك تقوم برفع ملف فيديو فيلم عادة ما يكون بأحجام كبيرة وتقديمه الى الخادم ضمن استمارة سيأخذ وقتا. ولكن اعتبارا لتجربة الاستخدام حاول عمل طلبية AJAX لرفع الفيديو المعني الى واجهة التطبيق الخلفية المعنية. قد تحتاج بشكل ما لفصل جدول الفيديوهات عن جدول الأفلام للتعامل مع ادخال سجل فيديو جديد بشكل منفصل عن عملية انشاء فيلم. بهاته الطريقة سيكون من العملي تقديم تفاصيل الفيلم ومن ثم رفع الفيديو نفسه. حاول القيام بذلك افضل.
×
×
  • أضف...