-
المساهمات
2028 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
1
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو عبد الوهاب بومعراف
-
يمكنك إيجاد شروحات أكثر من خلال التوثيق الرسمي للغة جافا سكريبت على موسوعة ويكي حسوب من هنا: debugger في JavaScript وليس فقط debugger بل مختلف الوسوم والعناصر والدوال وغيرها كلها مشروحة هناك بشكل مبسط مرفقة بأمثلة عملية. بالنسبة ل debugger فهو عبارة عن تعبير برمجي يقوم بتفعيل وضعية التنقيح من خلال إيقاف تشغيل الكود مؤقتا عندما تصل إليها، حتى يتمكن المبرمج من فحص المتغيرات ومعرفة ما يحدث في تلك اللحظة وهذا مفيد عند تتبع الأخطاء لكن لن تعمل إلا إذا كنت تستخدم أداة تنقيح مثل أدوات المطور في المتصفح وإذا لم تكن هناك أداة تنقيح تعمل، فلن يحدث أي شيء عند وصول الكود إلى debugger. وببساطة debugger هو عبارة عن نقطة توقف للمبرمج ليفحص الكود لاحظ هذا المثال: let x = 5; let y = 10; debugger; // هنا سيتوقف الكود لتفحص القيم let z = x + y; console.log(z); هنا يمكنك عندها مشاهدة قيمة x وy قبل أن يحسب z ونستعملها هنا لمعرفة إن كانت المتغيرات فعلا تحمل القيم الصحيحة المتوقعة أم لا وتختلف الاستعمالات حسب الكود الذي ترغب في استخدام المنقّح عليه.
-
حسبما فهمته منك فأنت تريد أن تعرف كيف تنشئ بيانات خاصة بك مثل الاسم أو العمر داخل كود JavaScript ثم ترسل هذه البيانات إلى سيرفر باستخدام دالة fetch وهذا ما يسمى بإرسال طلب HTTP يحتوي على body فيه بيانات تكون من اختيارك إن كان كذلك فسأفترض أنك تريد إرسال تقييم وتعليق حول فيلم معين أولا نبدأ بإنشاء كائن (Object) يحتوي على البيانات الخاصة بهذا التقييم: const review = { movieId: 101, rating: 4.8, comment: "الفيلم جيد." }; الآن نريد إرسال هذه البيانات إلى الخادم عبر fetch نستخدم الطريقة POST، ونحدد أن نوع المحتوى هو JSON، ثم نضع البيانات داخل الخاصية body بعد تحويلها إلى نص باستخدام JSON.stringify: fetch("https://example.com/api/reviews", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(review) }) .then(response => response.json()) .then(result => { console.log("تم إرسال التقييم بنجاح:", result); }) .catch(error => { console.error("حدث خطأ أثناء إرسال التقييم:", error); }); لاحظ هنا أنّ: movieId يحدد معرف الفيلم الذي يتم تقييمه. rating هو التقييم الرقمي مثلا من 5. comment هو تعليق المستخدم على الفيلم.
-
المهارات الحقيقية المطلوبة الآن في الذكاء الاصطناعي تشمل بشكل أكبر بناء أنظمة ال LLM من الصفر وليس مجرد استخدام APIs، وتطوير نماذج multimodal، وهندسة ال MLOps للإنتاج الفعلي، والأهم هو فهم الرياضيات وراء النماذج وليس مجرد استخدام مكتبات جاهزة. أما في علوم البيانات نجد الإحصاء المتقدم والتجريب A/B testing، وبناء data pipelines معقدة، والأهم هنا هو القدرة على حل مشاكل الأعمال الحقيقية وليس مجرد عمل dashboards جميلة. والمطلوب حقا هو خبرة في مجال صناعي محدد مع مهارات تقنية عميقة، لأن السوق مشبع بالأفراد الذين يعرفون Python وpandas فقط، لكن النادر هو الذي يفهم البرمجة ويطبق ال AI بشكل عملي ومربح.
-
السلام عليكم خاصية تحميل الفيديو لم يتم إضافتها من قبل الأكاديمية لعدة أسباب أهمها لضمان عدم نشر مقاطع الدورات في مواقع مختلفة غير منصة الأكاديمية ولتفادي تعريضها للقرصنة والسرقة لذا فهذا الأمر حاليا غير متوفر ففي حالة انتشار المقاطع وسرقتها يكون فيه ظلم وإجحاف في حق الطلاب. في حال كان لديك بطئ في تشغيل المقاطع يمكنك ضبط جودة الفيديو لجودة مناسبة لك وإيقافه بعض الوقت إلى حين تحميله ثم المشاهدة بعد ذلك بأريحية يمكنك الاطلاع أكثر على الأمر من هنا:
-
هذه الدوال يطلق عليها تسمية دوال دورة حياة المكونات فمثلا beforeCreate تعتبر أول دالة تُستدعى قبل إنشاء المكون تماماً، حيث لا تكون البيانات أو الطرق متاحة بعد، وتُستخدم لإعداد plugins خارجية أو HTTP interceptors أما created تُستدعى بعد تهيئة البيانات لكن قبل إدراج المكون في DOM، وهي المكان المثالي لاستدعاء APIs وجلب البيانات الأولية. في حين beforeMount تحدث قبل إدراج المكون في DOM مباشرة ونادراً ما تُستخدم. بخصوص mounted تُستدعى بعد إدراج المكون في DOM وهي النقطة المثالية للتفاعل مع عناصر DOM وتهيئة المكتبات الخارجية وبدء المؤقتات بينما beforeUpdate تحدث عند تغيير البيانات وقبل إعادة رسم DOM، مفيدة لحفظ حالة العناصر مثل scroll position وأما updated فتُستدعى بعد تحديث DOM ويجب تجنب تعديل البيانات فيها لمنع الحلقات اللانهائية. beforeUnmount (أو beforeDestroy في نسخة Vue 2) هي الفرصة الأخيرة لتنظيف الموارد قبل إزالة المكون، حيث تُستخدم لإلغاء المؤقتات وإزالة event listeners وإغلاق WebSocket connections. unmounted أو destroyed في Vue 2 كما تُستدعى بعد إزالة المكون تماماً وتُستخدم للتنظيف النهائي وإرسال analytics events.
-
يمكننا توضيح الفرق بين Vue.js و Nuxt.js بشكل مبسط أكثر تخيل معي أن Vue هو محرك سيارة قوي ومرن للغاية، بينما Nuxt هو السيارة الكاملة والجاهزة للقيادة، والمصممة بأفضل شكل ممكن حول هذا المحرك. Vue.js في جوهره هو "مكتبة برمجية" أو "إطار عمل" أساسي لبناء واجهات المستخدم، فهو يمنحنا الأدوات الأساسية لرسم المكونات على الشاشة وتحديثها بناء على البيانات، ولكنه غير ملزم بهيكل معين. لاحظ هنا أن هذا يعني أنك عندما تبدأ مشروع Vue خالص، عليك أن تقرر بنفسك وتعدّ كل شيء يدويا من كيفية تنظيم الملفات، وكيفية التعامل مع التوجيه (routing) باستخدام مكتبة مثل Vue Router، وكيفية إدارة الحالة العامة للتطبيق (state management) باستخدام Pinia أو Vuex، وكيفية تحسين الأداء ومحركات البحث (SEO). هذه المرونة الكاملة تجعله ممتازًا للمشاريع الصغيرة أو لإضافة أجزاء تفاعلية داخل تطبيق موجود بالفعل. أما Nuxt.js فهو ليس بديلا ل Vue، بل هو "إطار عمل فوق إطار عمل آخر" (Meta-framework) مبني على Vue. لأنه يأتي بهيكل جاهز ومنظّم ومجموعة هائلة من الميزات القوية المدمجة مسبقا والتي تحل معظم المشاكل المعقدة التي تواجه المطورين. أهم هذه الميزات هي "التصيير من جانب الخادم" (Server-Side Rendering - SSR) و"توليد المواقع الثابتة" (Static Site Generation - SSG)، وهما ميزتان ضروريتان لتحسين أداء التحميل الأولي وتحسين ظهور الموقع في محركات البحث (SEO)، وهو أمر صعب تحقيقه في Vue وحده. كما يوفر Nuxt نظام توجيه (routing) تلقائي يعتمد على أسماء الملفات، ونظام استيراد تلقائي للمكونات، وأدوات مدمجة لجلب البيانات من الخوادم، وبنية ملفات موحدة تسهل العمل على المشاريع الكبيرة والتعاون بين الفرق. إذا للإجابة على سؤال من الأفضل فهذا يعتمد كليا على مشروعك ففي حال كنت تبني مشروعا صغيرا جدا، أو أداة بسيطة، أو تحتاج إلى أقصى درجات المرونة لتصميم بنية مخصصة بالكامل، فإن Vue وحده قد يكون كافيا لتحقيق ذلك لكن بالنسبة لـ 95% من المشاريع الحديثة والكاملة مثل المواقع التجارية، المدونات، لوحات التحكم، والمتاجر الإلكترونية فإن Nuxt هو الخيار الأفضل والأكثر احترافية. لكونه يسرّع عملية التطوير بشكل هائل، ويفرض أفضل الممارسات، ويحل مشاكل SEO والأداء المعقدة بشكل تلقائي، ويمنح تجربة تطوير متكاملة وممتعة.
-
بداية فلاجتياز الامتحان يجب تحقيق هذه الشروط: إتمام أربعة مسارات تعليمية على الأقل التطبيق العملي مع المدرب، والاحتفاظ بالمشاريع العملية الناتجة لإرسالها للمراجعة رفع المشاريع على حسابك على GitHub أولا بأول لمشاركتها معنا بعد تحقيقك لها سيتعين عليك التواصل مع مركز المساعدة لإخبارهم برغبتك في إجراء الامتحان مع تزويدهم بروابط مشاريعك التي طبقتها أثناء الدورة ويجب أن تكون قد طبقت المشاريع مع المدرب أثناء الدورة، ولا يمكن اجراء امتحان بمشاهدة المحتوى فقط. بعد ذلك سيحددون لك موعد لاجراء محادثة صوتية لمدة 30 دقيقة يطرح المدرب فيها أسئلة متعلقة بالدورة ويناقش معك ما نفذته خلالها. وبالنسبة لمشروع التخرج سيحدد لك المدرب مشروعًا مرتبطًا بما تعلمته أثناء الدورة لتنفيذه خلال فترة محددة تتراوح بين أسبوع الى أسبوعين. ثم سيراجع المدرب المشروع الذي أنجزته، وإن سارت جميع الخطوات السابقة بشكل صحيح، ستتخرجين وتحصلين على الشهادة أو يرشدك المدرّب لأماكن القصور ويطلب منك تداركها ثم التواصل مع مركز المساعدة من جديد.
-
مكتبة mpdf هي مكتبة لا تنتمي رسميا إلى Laravel لكنها تعمل معه دون مشاكل. ومن مميزاتها الرئيسية أنها تدعم الكتابة بالعربية بشكل صحيح، بما في ذلك الحروف المتصلة والاتجاه من اليمين إلى اليسار (RTL) لذا لا تحتاج إلى إعدادات معقدة، فقط اختر خطا يدعم العربية مثل Amiri أو Cairo وأضفه داخل الكود بالنسبة لتثبيت المكتبة فهو يتم عبر Composer كالتالي: composer require mpdf/mpdf ثم في كودك: $mpdf = new \Mpdf\Mpdf(['mode' => 'utf-8', 'default_font' => 'Amiri']); $mpdf->WriteHTML('<div style="direction: rtl; font-family: Amiri;">هذا نص عربي</div>'); $mpdf->Output(); والمميز هنا أنك لا تحتاج إلى باقات Laravel إضافية، فقط تحتاج لاستدعاء الكلاس مباشرة وهذا ما سيمنحك الأداء السريع والدعم لل CSS جيد، والمخرجات تكون نظيفة ومرتبة حتى في الجداول والقوائم. فهذه المكتبة مناسبة أيضا للتقارير وحتى لإعداد الفواتير، أو أي مستند رسمي باللغة العربية بعكس مكتبات أخرى مثل dompdf التي قد تواجهك مشاكل في فصل الحروف أو المحاذاة.
-
ليس بالضرورة تحميله أو تثبيته فليس له علاقة بإلغاء أو توقيف الإضافات. بالنسبة لهذه الإضافة فهي عبارة عن أداة لتنسيق الكود تلقائيا تستخدم في محررات النصوص مثل VS Code، وتقوم بترتيب الكود وتنظيمه وفق قواعد موحدة لتجعله أكثر وضوحا وسهولة في القراءة. وتعمل مع لغات عديدة مثل JavaScript، TypeScript، HTML، CSS، وغيرها. يمكنك العمل من خلالها حتى ب Vue فهي تدعمها وعند تثبيتها وتفعيلها ستقوم تلقائيا بتعديل الكود عند الحفظ، مثل إزالة الفراغات الزائدة وضبط الأقواس والأسطر الطويلة. لتثبيتها في VS Code يمكنك البحث عنها في قسم الإضافات باسم "Prettier - Code formatter"، ثم فعّل خيار التنسيق التلقائي عند الحفظ من الإعدادات. أما لإلغاء التثبيت يمكنك البحث عن اسم الإضافة التي ترغب في إلغائها ثم اضغط غلى Uninstall ثم سيتم حذفها وتعطيلها.
-
وعليكم السلام ورحمة الله، البرمجة كائنية التوجه (OOP - Object Oriented Programming) وتصميم البرمجيات (Software Design) مفهومان مختلفان ولكنهما مترابطان في علم هندسة البرمجيات. فالبرمجة كائنية التوجه هي نمط برمجي يعتمد على مفهوم "الكائنات" حيث ينظر إلى البرنامج على أنه مجموعة من الكائنات التي تتفاعل فيما بينها من خلال خصائص (Attributes) وسلوكيات (Methods). هذا النمط يركز على الكائن كوحدة أساسية لبناء البرمجيات، ويعزز مفاهيم مثل التغليف (Encapsulation)، الوراثة (Inheritance)، والتعددية الشكلية (Polymorphism)، مما يسمح بإعادة استخدام الكود وتنظيمه بطريقة تسهل الصيانة والتطوير. أما تصميم البرمجيات فهو مرحلة أوسع وأشمل وتتعلق بكيفية بناء النظام البرمجي ككل بطريقة منظمة وقابلة للتوسع والتعديل. يشمل تصميم البرمجيات وضع الهياكل المعمارية للنظام، مثل كيفية توزيع المهام بين الوحدات المختلفة، وكيفية تفاعل هذه الوحدات مع بعضها، واختيار أنماط التصميم (Design Patterns) المناسبة لحل مشاكل متكررة في تطوير البرمجيات. تصميم البرمجيات لا يقتصر على OOP فقط، بل يشمل أي نمط برمجي، سواء كان إجرائيا وظيفيا أو كائني التوجه. الفرق الجوهري يكمن في أن OOP هو أسلوب من أساليب البرمجة يستخدم خلال مرحلة التنفيذ، بينما تصميم البرمجيات هو نشاط سابق للتنفيذ يهدف إلى وضع خطة وهيكل عام للنظام. OOP يمكن أن يستخدم كأداة ضمن عملية تصميم البرمجيات إذا كان التصميم يتطلب بناء النظام حول كائنات ولكن التصميم يتعامل مع مسائل أكبر، مثل مبدأ الفصل بين المهام (Separation of Concerns)، وتعريف الواجهات، وإدارة التعقيد، وضمان القابلية للاختبار، والأداء، والأمان. أما تصميم البرمجيات يشبه وضع المخطط المعماري لبناء منزل، بينما OOP يشبه اختيار نوع الطوب والطريقة التي يتم بها تركيب الجدران قد يحتوي تصميم البرمجيات على استخدام OOP كأحد المكونات، ولكنه لا يتوقف عليه.
- 6 اجابة
-
- 1
-
-
بالنسبة لاحتراف البرمجة فإنّه أساسا هذا المجال مصنّف ضمن المجالات طويلة الأمد، أي أنّ تعلمها قد يستغرق أشهرا وحتى سنوات. والسر وراء تحقيق الاحتراف فيها ليس سرعة التعلم بل جودة التعلم، وليس في من ينهي الدورات أولا بل من يستفيد منها أقصى استفادة وبما أنك طلبت ذلك سنساعدك لتحصيل ما يجب تحصيله. الاجتهاد والاستمرارية مطلوبان فأرجو منك عدم الانقطاع أكثر من أسبوعين متواصلين خلال مسيرتك التعليمية كي لا يحدث هناك فجوة كبيرة، وإن حدثت لك ظروف فلا بأس فلا يكلف الله نفسا إلا وسعها، يمكنك عمل مراجعة خفيفة ثم المواصلة من حيث توقفت. الأمر الثاني هو التطبيق العملي، فلا يمكن أن تكون مبرمجا من خلال الدروس النظرية بمفردها، لذا فالتطبيق العملي على ما تدرس أهم عامل سيساعدك لتستفيد من الدروس. كذلك الكثيرون يتجاهلون التوثيقات الرسمية للغة البرمجة أو التقنية التي يتعلمونها وهذا الأمر سيجعلك لا تعرف آخر التحديثات والتطورات الحاصلة. من الأفضل أن تبقى مواكبا لما يتمّ طرحه كي تستطيع المنافسة في السوق، ولكن ذلك لا يجب أن يكون قبل دراسة الأساسيات والتمكن منها جيدا.
-
تعلم البرمجة كائنية التوجه (OOP) لا يعني أنك ستستخدمها دائما في كل مشروع، خصوصا في بدايات مشاريع تعلم الآلة وعلم البيانات ففي هذه المجالات يفضل في العادة الكتابة الإجرائية لأن التجريب السريع مطلوب، والكود يكون بسيطا ومؤقتا لكن عندما يتطور المشروع، وتظهر الحاجة إلى التنظيم وإعادة الاستخدام، يبدأ دور OOP في الظهور استخدام OOP يكون منطقيا عندما يصبح المشروع معقدا أو طويل الأمد، أو عندما يتم العمل ضمن فريق مثلا في مشروع فيه عدة مراحل مثل التحميل، المعالجة، التدريب، التقييم، والحفظ، يمكن وضع كل مرحلة في كلاس خاص وهذا يسهل تعديل أي جزء دون التأثير على بقية الكود. كذلك إن كان لديك أكثر من نموذج أو أكثر من نوع بيانات، فالبرمجة الكائنية توفر طريقة ممتازة للتعامل مع هذا التنوع، مكتبات مثل scikit-learn تعتمد على OOP أيضا وكل نموذج يتم تمثيله بكائن له وظائف محددةيمكنك إنشاء كلاس ModelHandler يحتوي على الوظائف الخاصة بالنماذج التي تستخدمها وهكذا ستتجنب تكرار الكود وتجعل مشروعك أكثر وضوحا. ال OOP مفيدة جدا في بناء APIs، أو في ربط النموذج مع الواجهة، أو في نشره على السحابة لكن لا يشترط أن تبدأ بها منذ السطر الأول.
- 6 اجابة
-
- 1
-
-
في JavaScript الكلمة المفتاحية this تشير إلى السياق الذي يتم فيه استدعاء الدالة وهي عنصر مهم في البرمجة الكائنية أين تأخذ this قيمة مختلفة حسب طريقة استدعاء الدالة، وليس حسب مكان تعريفها. فمثلا إذا تم استدعاء دالة من داخل كائن باستخدام object.method()، فإن this تشير إلى ذلك الكائن كالتالي: const user = { name: "Hsoub", greet() { console.log(this.name); } }; لاحظ هنا أن this تشير إلى user. أما إذا استدعيت الدالة في الوضع العام (global) فإن this تشير إلى window في المتصفح مثل الذي هنا: function show() { console.log(this); } أي أن الكلمة المفتاحية this تستخدم للإشارة إلى السياق الذي تنفذ فيه الدالة، أي إلى الكائن الذي يملك الدالة أثناء وقت التنفيذ. وقيمة this لا تتحدد عند تعريف الدالة بل عند استدعائها، وهذا ما يجعل فهمها دقيقا وحساسا للسياق. فعندما يتم استدعاء دالة كجزء من كائن، فإن this تشير لذلك الكائن كما في المثال الأول، أما إذا تم استدعاء الدالة بشكل مستقل خارج كائن، فإن this في الوضع العادي تشير إلى الكائن العام مثل window في المتصفح أما في الوضع الصارم فستكون undefined. وفي الأصناف (classes) أو عند بناء كائنات جديدة، تشير this إلى النسخة الجديدة التي يتم إنشاؤها وكذلك عند استخدام this داخل أحداث في DOM، فإنها تشير إلى العنصر الذي وقع عليه الحدث. يوجد هناك نوع خاص من الدوال في JavaScript يسمى الدوال السهمية (arrow functions) وهذه لا تمتلك قيمة this خاصة بها، بل تأخذ قيمتها من السياق الخارجي الذي كتبت فيه. لذا يجب الانتباه إلى عدم استخدام الدوال السهمية في حالات تتطلب قيمة this ديناميكية ففي حالة إعادة استخدام دوال معينة مع كائنات مختلفة، يمكن تعديل قيمة this باستخدام bind أو call أو apply وهذه الأساليب تسمح بتحديد القيمة الدقيقة ل this بشكل صريح.
-
للأسف فبيئة سكراتش لا تدعم خاصية التمرير التلقائي (scrolling background) بشكل مباشر ولكن مع ذلك يمكن تجاوز هذا القيد عبر استخدام أربع صور تمثل الخلفية، بحيث تعامل كل صورة على أنها كائن (Sprite) مستقل. في البداية يجب أن تحمّل الصور الأربع إلى سكراتش بحيث تضع كل واحدة منها في Sprite منفصل بعد ذلك يتم ترتيب هذه الصور بجانب بعضها البعض أفقيا بحيث تتصل نهايات الصور ببدايات الصور التالية دون وجود فجوات ويفضّل أن تكون الصور مصممة مسبقا لتتناسق بصريا عند الاتصال، مما يضمن عدم ظهور أي خطوط فاصلة بين كل صورتين عند الحركة. لنقل مثلا أن كل صورة بعرض 480 بكسل، فستكون مواضع الصور في البداية كالتالي: الصورة الأولى في x = 0 الثانية في x = 480 الثالثة في x = 960 الرابعة في x = 1440 بعد ترتيب الصور يجب كتابة كود برمجي لكل Sprite على حدة، يجعلها تتحرك بشكل مستمر نحو اليسار بمقدار ثابت مثلا -5 في كل تكرار للحلقة. ويمكن استخدام الكتلة "عندما تبدأ الراية الخضراء" لبدء الحركة، متبوعة بكتلة "كرر إلى الأبد"، ثم كتلة "غير x بمقدار -5"، مما يجعل الصورة تنزلق إلى اليسار مع الزمن. والجزء الأهم في هذه التقنية هو التحقق من موقع كل Sprite بشكل مستمر فإذا تجاوزت الصورة الطرف الأيسر للشاشة أي إذا أصبح موضعها أقل من x = -480 مثلا فهذا يعني أنها خرجت من مجال الرؤية، وهنا يجب أن تعاد إلى أقصى يمين الخلفية لتستمر في الحركة بشكل دائري. ولتحقيق ذلك نضيف شرطا داخل حلقة التكرار مثل: إذا كانت x < -480، فإننا نعيد الصورة إلى x = 1440 (أي بعد آخر صورة). وهذا يمكّن الخلفية من الدوران بلا توقف، ما يمنح انطباعا بحركة لا نهائية، وهي الطريقة المعتمدة في الكثير من ألعاب المنصات. من المهم أيضا أن تكون الصور الأربعة ذات جودة ودقة متساوية، ومتناسقة من حيث الألوان والمشهد، حتى لا يشعر اللاعب أو المشاهد بوجود تقطّع أو تغيّر مفاجئ في الخلفية أثناء الحركة. وإن كان هناك عناصر مرئية مثل الأشجار أو الجبال، فيفضّل أن تكون امتداداتها من صورة إلى أخرى طبيعية وسلسة.
- 2 اجابة
-
- 1
-
-
كلاهما صحيح وممكن، لكن من الأفضل أن تبدأ باستخدامه من خلال تضمين الرابط المباشر داخل ملف HTML باستخدام الوسم <script> حيث تتيح لك هذه الطريقة التركيز على المفاهيم الأساسية دون الحاجة إلى إعداد بيئة تطوير معقدة، مما يسهل عليك فهم آلية عمل Vue والتعامل مع البيانات والمكونات البسيطة. أما إذا كنت تسعى لتعلم Vue بشكل احترافي وتطمح إلى بناء تطبيقات حقيقية وقابلة للتوسع، فإن استخدام الأمر التالي: npm create vue@latest لإنشاء مشروع متكامل عبر الطرفية هو الخيار الأنسب لأنه يوفر بيئة تطوير متقدمة تتيح لك التعامل مع بنية المشروع، نظام التوجيه، إدارة الحالة، وأدوات البناء الحديثة، وهو ما يتطلب مستوى أعمق من الفهم والاستعداد للعمل في فرق تطوير أو إنتاج مشاريع جاهزة للنشر. يمكنك الرجوع دوما إلى التوثيق الرسمي للاطلاع أكثر على التحديثات الخاصة به مباشرة: https://vuejs.org/
-
وعليكم السلام البيانات في الواقع العملي تختلف كثيرا عما يقدّم في الدورات التعليمية. ففي الكورسات، تكون البيانات عادة نظيفة، منسقة، ومهيأة مسبقا لأغراض التعلم، حيث تزال القيم المفقودة وترتب الأعمدة وتوضّح المتغيرات بشكل مبسّط لتسهيل الفهم والتركيز على المفهوم المطلوب. أما في الواقع فإن البيانات تكون غالبا فوضوية وغير مكتملة، وقد تحتوي على قيم مكررة أو متناقضة، مما يتطلب وقتا وجهدا كبيرين في مرحلة التحضير والتنظيف قبل البدء بأي تحليل أو بناء نماذج. كما أن التعامل مع البيانات الحقيقية يتطلب أدوات متقدمة ودراية بكيفية معالجة المشكلات غير المتوقعة. ولذلك فإن اكتساب المهارات التقنية يجب أن يرفق دائما بفهم عملي لكيفية التعامل مع تحديات البيانات الواقعية وتحليلها.
- 3 اجابة
-
- 1
-
-
في دورة الذكاء الاصطناعي وفي مختلف الدورات الأخرى يتم وضع في عين الاعتبار احتمال عدم وجود أي خبرة مسبقة في البرمجة. لذلك سيتم البدء من الصفر، خطوة بخطوة، لكن بما أنك لا تملك أي فكرة عن المجال بعد، فأنصحك بالاشتراك بداية في دورة علوم الحاسوب لأخذ نظرة عامة عن المجال والتأسيس فيه، ثم يمكنك بعد ذلك التخصص في مجال ترى نفسك يمكنك أن تبدع فيه وتختار المضيّ فيه. يمكنك الاطلاع عليها من هنا:
-
وعليكم السلام ورحمة الله، يجب أن نفهم جيدا أن الشيفرة التالية: data_train.isna().sum() تستخدم في مكتبة Pandas لحساب عدد القيم المفقودة (missing values) في كل عمود من أعمدة DataFrame. ولكن من المهم أن نفهم أن هذا الكود لا يتعرف على القيمة -1.0 على أنها مفقودة، بل يتعرف فقط على القيم التي تم تمثيلها فعليا ك: في حالة البيانات من نوع float أو object. أي أنه وبمعنى آخر ف -1.0 هي قيمة عددية صالحة من وجهة نظر Pandas، حتى لو كانت تستخدم أحيانا كترميز يدوي للدلالة على نقص البيانات. أما NaN فهي ليست قيمة عددية، بل تمثل حالة غياب القيمة تماما، كأن تكون الخانة فارغة أو لا تحتوي على أي معلومة. لذا في حال ما إذا أردت أن تعتبر -1.0 قيمة مفقودة، فيجب أن تقوم بتحويلها صراحة إلى NaN باستخدام دالة مثل: replace(-1.0, np.nan) لأن مفهوم NaN يعني أن الخلية لا تحتوي على أي قيمة تستخدم في التحليل أو النمذجة، بعكس رقم مثل -1 أو 0 الذي يبقى رقما قابلا للتعامل معه ما لم يتم تحويله يدويا إلى NaN.
- 4 اجابة
-
- 1
-
-
هذا الأمر طبيعي والجميع قد يشعر بذلك خاصة عندما لا يكون قد قام بتطبيقات عملية كثيرة على ما يتعلمه. ومع مرور الوقت ستجد نفسك تنفذ وتنجز المشاريع دون الرجوع إلى الشروحات وهذا لا يأتي بين عشية أو ضحاها، فهو ثمرة الاستمرارية. يمكنك طلب الشروحات حينما يستصعب عليك الأمر، لكن أنصحك دوما بمحاولة التجربة بمفردك في البداية وحينما تجد نفسك قد استنفذت جميع الوسائل لحل التطبيق يمكنك طلب الشروحات أو الرجوع إلى الدرس، أو حتى الاعتماد على التوثيقات الرسمية للغة التي تعمل عليها وه ذا لتستفيد أقصى استفادة من المحتوى الذي يتم تقديمه. يمكنك مراجعة هذا المصدر لتحقيق أكبر استفادة من الدورات التي اشتركت فيها من هنا:
-
وعليكم السلام ورحمة الله، كلاهما يؤديان نفس الوظيفة لكن طريقة التنفيذ تختلف قليلا ففي الكود الأول: tof_columns = [col for col in df.columns if col.startswith('tof_')] يتم المرور على كل اسم عمود في df.columns باستخدام list comprehension، ويتم تطبيق دالة startswith('tof_') على كل اسم عمود وهذه الطريقة تعتمد على تنفيذ سلسلة من العمليات داخل مفسر Python نفسه، مما يجعلها أقل كفاءة عند التعامل مع عدد كبير جدا من الأعمدة، لأن كل اسم عمود يتم التحقق منه بطريقة تكرارية يدوية، بينما في الكود الثاني: tof_columns = df.filter(like='tof_').columns يتم استخدام دالة filter() المدمجة في pandas، وهي مكتوبة بلغة C أو Cython داخل مكتبة pandas نفسها وهذه الطريقة أسرع وأكثر كفاءة لأنها تعتمد على عمليات منخفضة المستوى (low-level operations) داخل pandas لمعالجة أسماء الأعمدة دفعة واحدة بدون المرور التكراري على كل عمود باستخدام Python. لذا فمن حيث الكفاءة والسرعة، الكود الثاني غالبا ما يكون أسرع قليلا، خاصة مع عدد كبير من الأعمدة، لأن df.filter() مكتوبة باستخدام Cython أو C داخل مكتبة pandas، مما يجعلها أكثر كفاءة من استخدام startswith(). ومع ذلك يبقى الفرق في الأداء سيكون ضئيلا جدا ولن يكون ملحوظا إلا في حال وجود عدد هائل من الأعمدة.
- 2 اجابة
-
- 1
-
-
في نماذج تعويض القيم المفقودة يتم التعرف على القيم المفقودة من خلال تمثيلها بصيغة معيارية وهي np.nan، و هذه النماذج لا تعتبر القيم مثل -1 أو أي قيمة عددية أخرى كمفقودة بشكل تلقائي، إذ تعاملها كبيانات صحيحة، وبالتالي يتعين على المستخدم قبل تطبيق أي من هذه النماذج أن يقوم بمعالجة البيانات أولا واستبدال أي رموز مخصصة لتمثيل القيم المفقودة مثل -1 بـ np.nan، و هذه الخطوة ضرورية لضمان أن النماذج تتعرف على القيم المفقودة وتعوضها بطريقة صحيحة بناء على الأنماط الموجودة في البيانات.
- 8 اجابة
-
- 1
-
-
في العادة يتأخر الرد بعض الشيء بسبب الضغط الموجود على مستوى مركز المساعدة. لكن لا داعي للقلق، سأحاول إيصال إنشغالك للفريق المختص، يمكنك الانتظار إلى حين يتم الرد عليك وموافاتك بأي جديد بخصوص مشكلتك. إلى حين ذلك أرجو التحقق جيدا من أن الحساب المسجل به الدخول هو نفسه حقا الذي قمت بتسديد المستحقات به أول مرة.
-
أرجو التواصل مباشرة مع فريق دعم أكاديمية حسوب وسيتم التعامل معك وإخبارك بما يجب فعله بالضبط. بما أنك دخلت بنفس الحساب الذي قمت بتسديد قيمة الدورة به فهذا يعني أن تبويبة "دوراتي" ستظهر عندك قريبا. فعادة يتأخر الأمر بعض الوقت إلى حين ظهورها بمفردها وفي حال تأخر الأمر يمكنك مراسلتهم لتفحص إن كان هنالك أي مشكلة. يمكنك تجربة الذهاب إلى هذا الرابط: https://academy.hsoub.com/courses/
-
نعم يمكن إزالة الأعمدة النصية التي لا تحتوي على قيم مفقودة والاحتفاظ فقط بالأعمدة الرقمية التي تحتوي على القيم المفقودة، لأن هذه النماذج مصممة للعمل على البيانات الرقمية فقط، إذ تعتمد على أساليب إحصائية وحسابية لا تتوافق مع القيم النصية، و من المهم أيضا التأكد قبل إزالة الأعمدة النصية من أنك تحتفظ بنسخة من ترتيب الأعمدة الأصلي حتى تستطيع بعد التعويض إعادة دمجها بشكل صحيح دون فقدان الترتيب أو الارتباط بين البيانات، و من الجيد الانتباه إلى أن التعويض يعتمد على خصائص البيانات الرقمية الأخرى، لذا من الأفضل فحص توزيع البيانات والقيم المتطرفة لأنها قد تؤثر على دقة النتائج، و بعد الانتهاء من التعويض ينصح بمراجعة البيانات المعالجة للتأكد من منطقية القيم المضافة قبل إعادة دمج الأعمدة النصية وضمان جاهزية البيانات لخطوات التحليل أو النمذجة التالية.
- 8 اجابة
-
- 1
-
-
وعليكم السلام ورحمة الله،ذ هل تقصدين مشروعا جاهزا ومتفوح المصدر؟ أم تريدين خطوات لمشروع مماثل لتنجزيه بنفسك؟ في حال كنت تبحثين عن مشروع جاهز يمكنك إيجاد الكثير منها على غيتهاب وتدور حول الطبول بشكل عام، إلا أن المبادئ والتقنيات المستخدمة فيها قابلة للتطبيق على آلة الطار أو أي آلة أخرى إذ يمكنك الاستفادة من هذه المشاريع كنقطة انطلاق مع تخصيص الخوارزميات والتأثيرات البصرية لتناسب خصائص هذه الآلة. يمكنك إنجاز مشروع عملي يستخدم فيديو لآلة الطار بحيث تقومين فيه بتحديد موضع الآلة داخل الفيديو باستخدام تقنيات كشف الأجسام أو التقطيع (segmentation)، ثم تتبع حركة اليد أو العصا لتحديد لحظة ومكان الضربة بدقة. وعند كل ضربة تقومين بإدراج تأثير بصري في الموضع المناسب باستخدام مكتبة رسوميات مثل Unity أو Three.js، بحيث يظهر التأثير بشكل واقعي ومتزامن مع الإيقاع.