-
المساهمات
8752 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
117
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو محمد_عاطف
-
هذا الكود هو إختصار للكود التالي : const createApp = Vue.createApp; فحيث عندما تستخدم { createApp } فأنت تستخدم معامل التفكيك "Destructuring assignment" وهي طريقة لإستخراج وتفكيك خصائص (Properties) من الكائن (Object) وتخزينها في متغيرات مستقلة. فهنا نحن نريد إستخراج الدالة createApp من الكائن Vue ووضعها في ثابت بإسم createApp أيضا ويمكننا إستخدامه بعد ذلك دون مشكلة. وإن createApp في Vue تستخدم لإنشاء تطبيق Vue جديد هكذا : const app = createApp({ data() { return { message: "Hello From Vue" }; } }); app.mount('#app');
-
الأمر سيكون بالفعل معقد وصعب جدا في البداية بالنسبة إلى تحريك العديد من الخلفيات. والأفضل في تلك الحالة هي دمج الخلفيات التي لديك في برامج مثل ال phoshop أو أى برامج أخرى لتعديل الصور. ولكن توجد طريقة بسيطة ولكنها ستحتاج أن تكون الخلفيات متشابهة أو تعمل كأنها متصلة كما وجدت في الفديوا الذي على اليوتيوب حيث بسهولة يمكنك تحريك صورتين. ولكن لو أردت 4 صور يمكنك إنشاء كائنين وفي كل كائن تقوم بوضع مظهرين أى تقوم بتوزيع الأربع صور على كائنين هكذا : بعد ذلك بداخل حلقة التكرار يمكنك تغير المظهر هكذا : والآن يمكنك تحريك الأربع خلفيات كما تريد ولكن يجب عليك معرفة أن أول خلفية ستظهر ستكون أول مظهر في الكائن 1 وثاني خلفية هي أول مظهر في الكائن 2 وثالث خلفية هي ثاني مظهر في الكائن 1 وهكذا يمكنك ترتيب الخلفيات كما تريد. وإليك ملف به الخلفيات والكود الخاص بكيفية تحريكها . Animated_wallpaper.sb3
- 2 اجابة
-
- 1
-
-
إن تعلم Vue يمكن أن يكون من خلال كلا الطريقتين التي وضحتها،ولكن لكل واحدة منهما لها استخداماتها وفوائدها حسب هدفك من التعلم: فالطريقة الأولى من خلال إنشاء مشروع جديد : npm create vue@latest حيث تستخدم تلك الطريقة كما في المشاريع الحقيقية حيث تعطيك بيئة تطوير متكاملة من خلال Vite أو Webpack و يسمح لك باستخدام: مكونات متعددة (Component-based) Vue Router ودعم TypeScript إن أردت بناء ملفات .vue وهو مناسب لو أردت بناء تطبيقات كبيرة أو العمل في فريق أو التقديم على وظائف. ولهذا إذا كنت تنوي تعلم Vue بعمق أو لبناء مشاريع حقيقية فيمكنك إستخدام هذه الطريقة. أما الطريقة الثانية من خلال ربط مكتبة vue في الصفحة : <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script> فتلك الطريقة بسيطة وسريعة ولا تحتاج تثبيت أي أدوات أو بيئة تطوير ومفيدة لك إذا أردت تجربة Vue أو لفهم الأساسيات وهي مناسبة للمشاريع الصغيرة والبسيطة. ولكنها لا تدعم vue components ولا يوجد system للموديولات modules ولهذا إذا كنت تريد البدأ فقط في فهم المبادئ بسرعة قبل الانتقال للبيئة الاحترافية فهذه الطريقة جيدة. ولكن إذا أردت يمكنك البدأ بالنسخة البسيطة من خلال الطريقة الثانية <script> فقط لفهم الأساسيات لمدة بسيطة مثلا يومين أو ثلاثة ثم يمكنك بعد ذلك الذهاب إلى الطريقة الأولى الإحترافية.
-
وعليكم السلام ورحمة الله وبركاته. كل عام وانتم بخير وتقبل الله منا ومنكم صالح الأعمال. ستجد أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل. ولكن بالنسبة إلى سؤالك فإن دالة store في المتحكمات controller يتم إستخدامها لتنفيذها عن الذهاب إلى عنوان للحفظ أى لدينا url نقوم بتوجيه الطلب له . وليس شرطا بأن تكون بإسم store يمكنك إعطائها أى إسم كما هنا مثلا like.
- 2 اجابة
-
- 1
-
-
هل تعمل على برنامج vpn ؟ إذا كان كذلك فغالبا هذا هو سبب تلك المشكلة. حيث لاحظ أن برنامج الحماية لديك Kaspersky يقوم بمنع الدرس من التشغيل لأنه لم يتعرف على شهادة SSL الخاصة بالموقع الذي يقوم بتوفير الدرس . لهذا إذا كان لديك vpn يرجى إغلاقه أو محاولة الإتصال بشبكة إنترنت أخرى وإذا ظلت المشكلة فغالبا إن برنامج الحماية لديك يتحتاج إلى تحديث أو هناك إعدادات خاصة به هي من تقوم بتعطيل الوصول إلى الدروس.
-
أى لغة متخصصة في ال back end ستكون مناسبة لك فجميع اللغات تتعامل مع HTML و CSS و JS التي ستتعلمها من دورة واجهات المستخدم. سواء كانت لغة php أو بايثون أو حتى جافاسكريبت . وأنصحك بأن تأخذ نبذة عن تلك اللغات سريعة وأنظر إلى أى لغة تميل لها أكثر . أيضا يجب عليك تحديد هل تريد العمل الحر أم الشركات. فمثلا لغة php مع إطار عمل لارافيل هي أشهر اللغات المطلوبة في العمل الحر . ومثلا nodejs و بايثون مطلوبة أكثر في الشركات من php . لهذا كما وضحت لك لا يوجد لغة أفضل من لغة بل يجب عليك البحث عن المناسب لك فلكل شخص تفضيلات عن الأخر .
- 12 اجابة
-
- 1
-
-
لا يوجد أفضل أو أحسن بالنسبة إلى اللغة لتعلم ال backend بل أن كل لغه تتميز بشئ عن اللغه الأخري فمثلا يوجد : NodeJs بإستخدام javascript ويوجد إطار العمل Express.js للتعامل مع السيرفر وإطار العمل MonogoDB للتعامل مع قواعد البيانات Python ولديها إطار العمل Django وFlask PHP ولديها إطار العمل Laravel وما سبق هي أشهر اللغات وأُطر العمل الخاصه بجزء ال backend. ولكن قبل اختيار اي لغه تبدأ في تعلمها أنصحك بالقراءه عن كل لغه بشكل مفصل وتحديد ما تريد تعمله بناء علي بعض العوامل مثل مميزات وعيوب اللغه وتحديد اللغه المطلوبه أكثر في منطقتك ومنحني التعلم الخاص بكل لغه ومدي سهوله أو صعوبه تعلم اللغه حتي يكون اختيارك مبني علي تحليل سليم منك حتي لا تضيع وقتك مثلا في تعلم لغه معينه وتكتشف بعد فترة من بدء التعلم أن هذه اللغه لا تناسبك لذلك يفضل البحث عن اللغات وأنظر أيهما أسهل بالنسبة لك وما هي اللغة التي يتم طلبها في الوظائف في منطقك. وإليك تفاصيل أكثر من خلال الإجابات التالية والمقال التالي :
- 12 اجابة
-
- 1
-
-
أولا أنصحك بقراءة المقال التالي لمعرفقة الفروقات بينهما بشكل أكثر تفصيل ولكن يجب الإنتباه إلى أن الإحصائيات فيه قديمة وليست جديدة: ما تقوله صحيح إلى حد ما . حيث يمكنك تعلم Vue إذا: كنت مبتدئ في الواجهات الأمامية وتريد تعلّم الأساسيات بسرعة. تريد العمل في مشاريع فردية أو العمل الحر على المدى القريب. تحب البساطة والوضوح في الكود. ويجب عليك البدأ في تعلم React إذا: كان لديك خلفية جيدة في JavaScript. تفكر في العمل في شركات أو ضمن فريق . إمكانية تعلم الأدوات الحديثة مثل Next.js أو Zustand أو Redux وغيرها كما سيتم شرحهم في دورة تطوير التطبيقات ب js. تريد الحصول على وظيفة Frontend Developer .
-
نعم بالطبع . ولكن في بداية تعلمك يجب عليك معرفة الأساسيات فقط حاليا. فمثلا يجب أن تعرف ماذا يفعل مجلد public و مجلد storage ومجلد app مثلا ومجلد config ومجلد database وهكذا . يجب عليك معرفة الأساسيات حيث لكل مجلد الإستخدامات والملفات الخاصة به فإذا لم تعرف ما فائدة كل مجلد فلن تعرف أين تقوم بحفظ الملفات الصحيحة وتشغيل المشروع بالشكل الصحيح.
- 10 اجابة
-
- 1
-
-
لم أفهم السؤال ؟ تقصد كيف يعمل في الخلفية أم ماذا ؟ إذا كان كذلك فنحن لسنا بحاجة لمعرفة كيف يعمل فهذا هو ميزة ال Facade يوفر لنا دالة تنفذ أمر معين ويمكننا إستخدام الدالة دون أن نعرف كيف يقوم لارافيل بذلك في الخلفية . ف Route يقوم بإنشاء مسارات وعناوين يمكنك الذهاب إليها . فكما في الكود المرفق أنشأنا مسار / ويقوم بإظهار ملف home.blade عند الذهاب إلى هذا المسار . وهكذا مسار home يقوم بالذهاب إلى متحكم HomeController وتنفيذ الدالة index . كل ما عليك الإهتمام به ومعرفته هو إستخدام Route في إنشاء المسارات
- 10 اجابة
-
- 1
-
-
Route هو ما تستخدمه في ملف web.php هكذا : use Illuminate\Support\Facades\Route; Route::get('/', function () { return view('home'); }); Route::get('/home', [HomeController::class, 'index']); بخصوص services container و services provider يمكنك قراءة التالي لمزيد من التفاصيل والتوضيح: حاوي الخدمات (Service Container) في Laravel
- 10 اجابة
-
- 1
-
-
أولا إن Facade هو نمط من أنماط التصميم الهيكلية (Structural Design Pattern) وهو يستخدم بكثرة في البرمجة الكائنية التوجه حيث يوفير لك واجهة بسيطة وموحدة لمجموعة معقدة من الفئات أو الأنظمة الفرعية. ويتم إستخدامه عندما يكون لديك نظام معقد يتكون من العديد من الفئات التي تتفاعل مع بعضها البعض بطرق معقدة ويقوم نمط Facade بإخفاء هذه التعقيدات ويقدم واجهة أبسط لك . وفي إطار عمل لارافيل (Laravel) يتم إستخدام هذا النمط وتم إعطاء إسم Facade لتلك الواجهة حيث تعتبر Facades واجهات (Interfaces) توفر طريقة سهلة ومنظمة للوصول إلى الخدمات المسجلة في حاوية الخدمات (Service Container) باستخدام صيغة برمجية بسيطة تشبه استدعاء الدوال الثابتة (Static Methods) بدلا من التعامل مباشرة مع الكائنات أو الحقن اليدوي للتبعيات (Dependency Injection) وتتيح Facades وصول بسيط وسهل إلى الخدمات الأساسية في التطبيق دون الحاجة إلى معرفة كيف يتم ذلك في الخلفية والإبتعاد عن التعقيد. وFacades هي طبقة تعطيك وصول مباشر إلى كائنات الخدمات الموجودة في حاوية الخدمات وكل Facade هو واجهة لكائن معين يتم تسجيله في الحاوية مثلا خدمات قواعد البيانات والتخزين المؤقت (Cache) وإدارة الملفات والجلسات (Sessions) وغيرها.وهي تستخدم صيغة الاستدعاء الثابت (Static-like Syntax) مثل: Cache::get('key') // أو DB::table('users')->get() لكنها في الواقع ترسل الطلب إلى الكائن الأصلي في الحاوية وفقط تعطيك طريقة سهلة للوصول إليها. وتستخدم Facades في كثير من الأمور . فأولا تستخدم لإدارة قواعد البيانات: use Illuminate\Support\Facades\DB; $users = DB::table('users')->get(); لاحظ كيف وفرت لارافيل واجهة DB للوصول إلى خدمة استعلام قاعدة البيانات بسهولة دون الحاجة إلى الخوض في التفاصيل. ثانيا التخزين المؤقت (Cache): use Illuminate\Support\Facades\Cache; $value = Cache::get('key'); Cache::put('key', 'value', 60); // تخزين لمدة 60 ثانية فهنا وفرت لنا لارافيل واجهة لتخزين البيانات المؤقتة وتحسين الأداء. ثالثا إدارة الملفات: use Illuminate\Support\Facades\Storage; Storage::put('file.txt', 'Content'); هنا يمكننا التعامل مع الملفات وحفظها أو حذفها بسهولة دون الحاجة لمعرفة كيف يتم ذلك. إذا لا يجب عليك الإهتمام الكبير بها هكذا هي فقط نمط تصميم قام لارافيل بإستخدامه ووضع جميع تلك الواجهات في المسار Illuminate\Support\Facades وتوفيرها لك لتنفيذ الخدمات المعقدة في الخلفية وتوفير واجهة سهلة الإستخدام لك.
- 10 اجابة
-
- 1
-
-
أولا الإثنين مختلفين تماما حيث لكل منهما إستخدام مختلف عن الأخر . حيث Pycharm هو برنامج IDE أى محرر شيفرات ويتم فيه تطوير وكتابة أكواد بايثون سواء كانت للذكاء الإصطناعي أو غيرها . وأيضا يساعدك كثيرا في تطوير المشاريع الكبيرة وإدارة البيئات الإفتراضية . أما google colab فهو يمكن تنفيذ الخلايا بشكل منفصل.و يتم إستخدمها غالبا وبكثيرة في تحليل البيانات أو الوثائق أو إذا أردت عرض كل جزء من الكود بشكل منفصل. ولكنه غير مناسب لتشغيل سكريبتات بايثون أو المشاريع الكبيرة الغير متخصصة في الذكاء الإصطناعي أو تحليل البيانات. يمكنك قراءة تفاصيل أكثر من خلال التالي حيث python scripts يتم تشغيلها من خلال برامج IDE مثل Pycharm : وأخيرا إذا أردت تنفيذ أكواد لتحليل البيانات أو الذكاء الإًصطناعي فإن colab أفضل . أما إذا كنت تعمل على مشاريع غير الذكاء الإصطناعي وتحليل البيانات أو تريد كتابة أكواد وسكريبتات بايثون ف Pycharm أفضل. لهذا لا يمكن الإستغناء عن الإثنين حيث لكل منهما الإستخدام الخاص به.
-
وعليكم السلام ورحمة الله وبركاته. إن الجزء المسؤول عن التقريب في الكود لديك هو data.round(1) هنا : و هذا السطر يقوم بتقريب جميع القيم في DataFrame data بعد تعويض القيم المفقودة إلى رقم عشري واحد وليس فقط القيم التي تم تعويضها بواسطة IterativeImputer أى الكود ليس صحيحا لما تريد تنفيذه. ولتنفيذ ما تريده ستحتاج إلى طريقة لتتبع هذه القيم وتطبيق التقريب عليها بشكل منفصل. حيث للأسف IterativeImputer لا يوفر طريقة مباشرة للقيام بذلك بعد عملية التعويض. def handle_missing_values(data, save_path): # عمل نسخة من البيانات الأصلية للحفاظ على الدقة الأصلية original_data = data.copy() numeric_features = data.select_dtypes(include=['number']).columns.tolist() text_features = data.select_dtypes(include=['object']).columns.tolist() preprocessor = ColumnTransformer( transformers=[ ('num', IterativeImputer(), numeric_features), ('text', 'passthrough', text_features), ] ) df_transformed = preprocessor.fit_transform(data) features_names = numeric_features + text_features data_imputed = pd.DataFrame(df_transformed, columns=features_names) # تقريب فقط القيم التي تم تعويضها (التي كانت مفقودة أصلاً) for col in numeric_features: mask = original_data[col].isna() # تحديد القيم المفقودة الأصلية data_imputed.loc[mask, col] = data_imputed.loc[mask, col].round(1) # تقريبها فقط if save_path is not None: data_imputed.to_csv(save_path, index=False) return data_imputed حيث أولا نقوم بعمل نسخة من ال data قبل أي تعويض وحفظها في original_data. بعد ذلك نقوم بتحديد القيم التي تم تعويضها فنستخدم original_data[col].isna() للكشف عن تلك القيمة هل هي كانت مفقودة أم لا. وم ثم نطبق .round(1) فقط على القيم التي تم تعويضها أى التي كانت NaN في الأصل.
- 3 اجابة
-
- 1
-
-
يجب عليك أولا التفكير في المنطق الصحيح قبل البدأ في كتابة الكود ووضع خطوات الحل ومن ثم تحويله إلى كود. لاحظ أنك يجب تعريف المتغير خارج دالة ال addEventListener حتى يتم الإحتفاظ بالقيمة للعداد ولا يتم جعله ب 1 دائما وأيضا يجب أن يكون ب 0 في البداية . أيضا لم تقم بزيادة قيمة العداد أبدا حيث يجب أن تقوم بزيادة قيمة المتغير بداخل دالة addEventListener . وأخيرا يجب وضع قيمة العداد في contnue وليس في button حيث button هو الزر ولا علاقة له بوضع قيمة العداد به. let button = document.getElementById('button'); let contnue = document.querySelector('.contnue'); let numbers = 0; button.addEventListener('click',function(event){ numbers++; contnue.innerHTML = numbers; });
- 2 اجابة
-
- 1
-
-
أولا المشكلة الرئيسية في ملف index.css سطر 231 و 232 حيث تستخدم grid مما يجعل الحاوية الخاصة بالأيقونات كبيرة جدا لهذا يجب حذف هذين السطرين . وأيضا يجب تقليل ال gap وهي المسافة بين العناصر بعد سطر 228 مباشرة هكذا : .skills { flex-wrap: wrap; gap: 1rem; } وأيضا يجب وضع هذا الكود لجعل النص في صف بمفرده والأيقونات بمفردها في الشاشات الصغيرة : @media(max-width: 778px){ .skills .content{ width: 100%; } } وهذا هو الملف بعد التعديل. index.css
-
هذا بسبب التنسيق في ملف index.css سطر 140 . حيث لاحظ أنك إستخدمت الخاصية text-align وجعلتها ب center . وتلك الخاصية تقوم بمحاذاة النص بداخل العنصر الخاص به وبما أنك إخترت center فلهذا يتم محاذاة النص في منتصف العنصر الخاص به ولهذا تجدها متقدمة عن النص الأخر . ولجعل النص يظهر في بدايته وليس فيه محاذاة يجب حذف سطر 140 هكذا : h2{ margin-top: 30px; font-size: 30px; color: orangered; } ولقراءة تفاصيل أكثر حول محاذاة النص يمكنك الدخول على موسوعة حسوب من خلال الرابط التالي : الخاصية text-align
-
المشكلة أنك تقوم بإستخدام تخطيط الشبكة grid مع تخطيط flex بشكل خاطئ . لا أعرف هل تريد إستخدام flex أم grid أم ماذا . ولكن لجعل العناصر في صف واحد في ملف index.html يرجى نقل سطر 86 ووضعه بعد سطر 73 مباشرة حيث نريد جعل جميع العناصر هي أبناء للعنصر main وليس بداخل content . وبعد ذلك في ملف index.css يجب حذف من سطر 127 حتى 131 . وتغير سطر 126 ليكون العرض flex هكذا : .services{ display: flex; } ويمكنك الآن تغير عرض عناصر ال card حيث يظهر أنك تضغ لها عرض 70% وهذا خاطئ يجب وضع عرض مناسب لعدد العناصر في الصف . index.html index.css
-
إن ال addEventListener هي دالة تستخدم في JavaScript لربط مستمع (listener) بحدث معين (event) على عنصر من العناصر الموجودة في صفحة HTML. فعندما يحدث هذا الحدث مثل النقر على زر أو التمرير أو إدخال نص أو إرسال نموذج form أو غيرها من الأحداث فإنه يتم تنفيذ دالة معينة . element.addEventListener(event, function); فالسطر السابق هو طريقة إستخدام الدالة حيث : element: هو العنصر الذي نريد ربط الحدث به مثل زر أو div أو أى عنصر أخر. event: وهو إسم الحدث الذي نريد الإستماع إليه مثل "click أو "keydown" وغيرها من الأحداث . function: وهي الدالة التي نريد تنفيذها عند حدوث هذا الحدث. مثال : const button = document.querySelector('#myButton'); // إضافة مستمع للحدث "click" button.addEventListener('click', function(event) { alert('تم النقر على الزر'); }); في المثال السابق عند النقر على الزر الذي يحمل المعرف myButton سيظهر تنبيه (alert) يحتوي على الرسالة "تم النقر على الزر". إذا لو أردنا تتبع المستخدم وتنفيذ دوال بناء على ما يقوم به في الصفحة يمكننا إستخدام الدالة addEventListener لتحقيق ذلك. أما preventDefault فهي دالة تستخدم داخل معالج الحدث (event handler) أى الدالة التي يتم تنفيذها عن حدوث الحدث.وذلك لمنع السلوك الافتراضي للحدث. فلكل حدث في المتصفح سلوك افتراضي مثلا عند إرسال نموذج form عند النقر على زر الإرسال يتم إعادة تحميل الصفحة و مثلا عند الضغط على رابط (عنصر a) يتم تلقائيا الذهاب إلى هذا الرابط . وباستخدام preventDefault يمكننا إلغاء هذا السلوك الافتراضي تماما. فمثلا لو أردت إرسال النموذج form من خلال ajax أو أردت تطبيق تحقق (validation) من البيانات قبل إرسالها يجب عليك أولا إلغاء السلوك الإفتراضي للنموذج form حتى لا يتم إرسال النموذج وإعادة تحميل الصفحة تلقائيا وهذا يتم من خلال الدالة preventDefault هكذا : const form = document.querySelector('#myForm'); // إضافة مستمع للحدث "submit" form.addEventListener('submit', function(event) { event.preventDefault(); // منع إرسال النموذج console.log('تم منع إرسال النموذج!'); // يمكنك هنا إضافة منطق مخصص، مثل التحقق من البيانات }); ففي المثال السابق عند الضغط على زر submit لإرسال النموذج سيتم إيقاف السلوك الإفتراضي وهو إرسال النموذج من خلال event.preventDefault وهكذا يمكنك تطبيق المنطق الذي تريده سواء التحقق من البيانات أو إرسالها بنفسك أو أى شئ أخر. ومثلا لو أردنا عند الضغط على رابط (عنصر a) عدم الذهاب إلى هذا الرابط وتنفيذ أمر ما قبل الذهاب إليه هنا يجب أيضا أن نوقف السلوك الإفتراضي هكذا : const link = document.querySelector('a'); link.addEventListener('click', function(event) { event.preventDefault(); // منع فتح الرابط console.log('تم النقر على الرابط، لكن لن يتم فتحه!'); }); ويمكنك الإطلاع على المزيد من خلال التالي :
-
وعليكم السلام ورحمة الله وبركاته على. كل عام وأنتم بخير وعيد أضحى مبارك عليك. نعم صحيح ما تقوله . حيث إن هندسة المميزات هي أقرب إلى الفن وتحتاج إلى تفكير وليس مجرد خطوات. حيث أولا يجب عليك أن تكون قادر على فهم البيانات بعمق وتستطيع تخمين أو تخيل الميزات اللتي ممكن أت تساعد النموذج في التعلم بشكل أفضل وأيضا في المشاكل المختلفة الحلول لا تكون واضحة ولكن أغلب الأوقات أنت تحاول أت تجرب وتفكر خارج الصندوق. فيجب أن تكون فاهم بشكل جيد للمجال اللذي تعمل عليه. فمثلا الميزات المفيدة في تحليل النص غير اللتي في الصور أو البيانات المالية أو البيانات الطبية . وممكن ميزة معينة يتم الإعتقاد أنها عشوائية ولكنها تكون مرتبطة بسلوك معين في السياق هذا. وكل ما تعمل على مشاريع أكثر وتتمرن أكثر ستبدا بشكل تلقائي بالإحساس والشعور بأنواع الميزات اللي من الممكن أن تعمل معك وتكون صحيحة.وأيضا الخبرة تجعلك ترى الأنماط patterns من أول مرة بشكل واضح.
- 4 اجابة
-
- 1
-
-
مرحبا عبدالرحمن . يفضل أولا إذا لم تكن لديك أى خبرة مسبقا في البرمجة أو التكنولوجيا عموما في الإنتهاء من دورة علوم الحاسوب أولا ومن ثم الإنتقال إلى دورة تطوير واجهات المستخدم. او إذا أردت يمكنك أولا الإنتهاء من المسارات التالية في دورة علوم الحاسوب : مدخل إلى علوم الحاسوب أساسيات البرمجة إلى عالم الويب وبعدها يمكنك البدأ في دورة تطوير واجهات المستخدم. ولكن الأفضل هو الإنتهاء من دورة علوم الحاسوب كاملة أولا.
- 2 اجابة
-
- 1
-
-
وعليكم السلام ورحمة الله وبركاته. نعم، البيانات الجيدة مع نموذج بسيط في الغالب ما تكون أفضل بكثير من بيانات سيئة مع نموذج معقد. حيث البيانات الجيدة تعني بيانات نظيفة ودقيقة وممثلة للمشكلة التي لدينا ومتوازنة وموزعة بشكل جيد ولهذا يتسطيع النموذج البسيط التعامل معها بشكل صحيح وأكثر كفاءة . حيث النموذج لا يستطيع تصحيح البيانات السيئة وإذا كانت البيانات غير دقيقة أو تحتوي على ضجيج (noise) أو قيم متطرفة كثيرة فلن يفيدك حتى أقوى النماذج. أما النموذج البسيط يمكنه الأداء الممتاز إذا كانت البيانات واضحة وممثلة بشكل جيد وأحيانا الانحدار الخطي يتفوق على شبكة عصبية إذا كانت البيانات قوية وواضحة. والبيانات السيئة تعني نموذج يتعلم أشياء خاطئة والنموذج المعقد قد يحفظ البيانات السيئة (overfitting) بدلًا من أن يتعلم منها. لذلك ابدأ دائما بتحسين جودة البيانات ثم يمكنك بعد ذلك التفكير في تعقيد النموذج.
- 4 اجابة
-
- 1
-
-
وعليكم السلام ورحمة الله وبركاته. يتم تسمية العملية بترابطية إذا لم يتغير الناتج الخاص بها بتغيير ترتيب الأقواس عند تنفيذها على أكثر من عنصر فمثلا عمليات الجمع والضرب هي ترابطية لأن النتائج لا تختلف بإختلاف ترتيب تنفيذ العملية : ( 2 + 3 ) + 4 2 + ( 3 + 4 ) ففي المثال السابق هنا النتيجة واحدة للعمليتين فلا إختلاف في الناتج النهائي إذا فهي ترابطية . أما إذا تغير ناتج العملية بتغيير الأقواس أو بتغير ترتيب التنفيذ فهي غير ترابطية مثل عمليات الطرح والقسمة. أما بالنسبة إلى سؤالك عن عوامل المقارنة فهي ليست ترابطية لأن ناتج المقارنة هو قيمة منطقية (Boolean) وعندما تقوم بمقارنة أخرى بعدها فإنك تقارن بين نتيجة منطقية وعدد أو نتيجتين منطقيتين مما يغير معنى العملية. 5 > 3 > 1 فمثلا هنا أولا يتم تنفيذ 5 > 3 والتيجة true وبعد ذلك يتم مقارنة true > 1 وهنا نحول true إلى 1، فتصبح المقارنة 1 > 1 أى النتيجة النهائية ب false. لكن في نفس المثال السابق قمنا بتغير ترتيب تنفيذ العملية هكذا : 5 > (3 > 1) هنا أولا 3 > 1 تساوي trueوبعد ذلك نقارن 5 > true أى 5 > 1 وستكون النتيجة النهائية true. وهكذا بما أن الناتج مختلف حسب ترتيب تنفيذ العملية فإذا العامل > ليس ترابطي. إذا لم تكن تقصد ما سبق يرجى توضيح سؤالك . ولو كان هذا السؤال مرتبط بإحدى دروس الدورات فستجد في أسفل الدرس صندوق للتعليقات كما هنا يرجى وضع سؤالك هناك أسفل الدروة لمساعدتك بشكل أفضل.
- 4 اجابة
-
- 1
-
-
وعليكم السلام ورحمة الله وبركاته. يمكنك العمل إن كمطور للواجهات الخلفيه فقط او كمطور للواجهات الأمامية فقط او الجمع بينهم معا والعمل ك Full Stack وأعتقد أن هذا ما تريده. ولكن يجب عليك اولا فهم ادوار كل منهم جيدا وتفهم الفرق بينهم ويمكنك في النهاية ان تقرر ما المجال الذي تريد أن تتعلمه : تطوير الواجهة الأمامية (Front End) : وهو بناء واجهة المستخدم والعناصر الرسومية لصفحة الويب. ويشمل كل ما يراه المستخدم ويتفاعل معه على الموقع أمامه.ويمكن أن يكون أي شيء بدءًا من أحجام الأزرار والألوان وحتى التخطيط والتصميم العام. ويتواصل مطور الواجهة الأمامية مع مطوري الواجهة الخلفية لجعل المواقع دايناميكية. ويتطلب التطوير الجيد للواجهة الأمامية فهمًا قويا للغات مثل HTML و CSS و JavaScript ومبادئ التصميم الجيد. بالإضافة إلى ذلك، يحتاج مطورو الواجهة الأمامية إلى فهم كيفية تفاعل المستخدمين مع مواقع الويب لإنشاء واجهة بديهية وسهلة الاستخدام. ويتميز تطوير الواجهات الأمامية بالتالي : التطوير السريع: عادة ما يكون تطوير الواجهة الأمامية أسرع من Full Stack والتطوير الواجهة الخلفيه. يوجد عدد أقل من الملفات التي يمكن العمل بها، وعادةً ما يكون الكود بسيطا. كود أبسط: عادة ما يكون كود الواجهة الأمامية أبسط من كود الواجهة الخلفية.و يمكنك فهمها بسهولة والبدء بتطوير الواجهة الأمامية إذا كنت جديدا في مجال البرمجة. تطوير الواجهه الخلفيه (Back End) : وهو إنشاء وإدارة التعليمات البرمجية والبنية التحتية التي تسمح لموقع الويب أو التطبيق بالعمل في الخلف. حيث يتضمن إنشاء قواعد البيانات وصيانتها وإنشاء طبقة منطق الأعمال وكتابة التعليمات البرمجية التي تتعامل مع إدخال المستخدم مثل إرسال النماذج وعرض الصفحات ديناميكيا وإستقبال الطلبات والرد عليها. ومن لغات البرمجة للواجهات الخلفية PHP و Ruby on Rails و Java و Node.js ومن أنظمة قواعد البيانات مثل MySQL وMongoDB. أما مطور (Full Stack) : فهو الشخص الذي يمتلك الخبرة والمعرفة في كل من تطوير الواجهة الخلفية والواجهة الأمامية معا ويعمل بهم ومن مزايا مطور ال (Full Stack) أنه لديه الخبرة في كلا الأمرين الواجهة الأمامية والواجهية الخلفية وهكذا لديه فرصة أكبر في الحصول على وظائف والعمل على مشاريع متنوعة ولكن من عيوبه أنه يأخذ وقتا أكثر للتعلم ويحتاج إلى الخبرة ومعرفة عميقة بالعديد من لغات البرمجة والأدوات . لذلك يمكنك أولا تحديد أى مجال تريد العمل فيه ومن ثم يمكنك البحث عن التقنية أو لغة البرمجة التي تريد العمل بها ومن ثم التعمق فيها وإنشاء مشاريع تطبيقية عليها . فمثلا إذا إخترت الواجهة الأمامية فيجب عليك تعلم اللغات الأساسية مثل: HTML لبناء هيكل الصفحة. CSS لتنسيق وتصميم الصفحة. JavaScript لإضافة التفاعل مثل الأزرار والقوائم المتحركة وتتبع المستخدم في الصفحة. أيضا ستحتاح إلى تقنيات وأطر متقدمة مثل React وهو إطار عمل خاص بالواجهة الأمامية ويساعدك في ربط الواجهة الأمامية بالخلفية وإنشاء مواقع ديناميكية . ولو إخترت الواجهة الخلفية فيجب عليك أولا تحديد لغة البرمجة التي تريد العمل عليها سواء PHP أو JavaScript (node.js) أو Python أو Ruby on Rails أو حتى Java . ويمكنك البحث عن تلك اللغات ومعرفة الفروقات بينهم ومدى صعوبة كل منهم لتستطيع الإختيار بشكل أفضل بالنسبة لك . وبعدها يجب تعلم قواعد البيانات لحفظ وتخزين البيانات والتعامل معها . وأخيرا يمكنك البحث عن أطر عمل بالنسبة للغة التي إخترتها والتي ستساعدك بشكل كبير في إنشاء مواقع الويب . فمثلا في PHP يوجد إطار عمل Laravel و في node.js يوجد إطار عمل Express و في Python يوجد لديك Django و Flask . وأخيرا كما وضحت لك يجب عليك تحديد المجال الذي تريد العمل فيه لو كنت تحب التصميم والتعامل مع العناصر والصفحات والمستخدم فالأفضل لك الواجهة الأمامية و أما إذا لم ترد التعامل مع التصميم وأردت التعامل مع البيانات وإنشاء الخوادم فالأفضل لك هو مجال الواجهة الخلفية . ولو أردت إنشاء مواقع كاملة أى واجهة أمامية وخلفية فيمكنك تعلمهم معا وتصبح full stack وأنصحك حينها أولا أن تبدأ بمجال الواجهة الخفلية ثم تعلم الواجهة الأمامية.
-
في بداية تعلمك لا ينبغي عليك القلق أو الإهتمام بشأن سرعة الكود أو كفائته حيث في البداية لن تكون لديك الأدوات أو المعرفة لذلك ولهذا فإن البحث عن الكمال "perfectionism" في بداية التعلم هو أمر مضر لك أكثر مما هو مفيد حيث سيؤخر وقت التعلم الخاص بك وأيضا من الممكن أن يصيبك بالملل أو الإحباط، وينبغي عليك فقط الإهتمام بوضع المنطق الذي يحل المشكلة لك ومن ثم تنفيذ هذا المنطق وتحويله إلى كود . بعد ذلك عند إنتهاءك من الأساسيات وتقدم مستواك قليلا يمكنك دراسة هياكل البيانات والخوارزميات والتي ستعطيك نبذة كبيرة عن فهم الكود وكيفية تقيم سرعته وأداءه وأيضا ستساعدك في كتابة كود ذات كفاءة عالية وسريع .وبعد تعلم هياكل البيانات والخوارزميات أنصحك بالبدأ في تطوير مهارة حل المشكلات لديك من خلال الإشتراك في المسابقات و الدخول على المواقع التي توفر لك مشاكل ويمكنك حلها من خلال الكود والبحث عن أفضل طريقة وخوارزمية لحل تلك المشكلة بكفاءة ودقة عالية . ومن تلك المواقع هي : Hackerrank و LeetCode. PyBites. codeforces. Codewars. ويمكنك قراءة المقال التالي لتحسين مهارة حل المشكلات لديك :