يعني إيه Cross-Site Scripting (XSS)؟ ⚠️
.
.
الـ XSS هو نوع من أنواع الثغرات الأمنية اللي ممكن تكون موجودة في المواقع، وبيستغلها الهاكرز علشان ينفذوا أكواد ضارة داخل صفحة الويب اللي بيستخدمها الضحية، وكده الهاكر يقدر يتحكم في الموقع أو حسابات المستخدمين، أو حتى يسحب بياناتهم الخاصة.
———
📌 الثغرة دي بتشتغل إزاي؟
خليني أشرحلك السيناريو البسيط اللي ممكن يحصل:
1- الهاكر بيكون عنده كود JavaScript ضار وعايز يزرعه في الموقع.
2- بيستغل ثغرة في المدخلات (Inputs) الموجودة في الموقع زي الـ Forms أو الـ Comments، أو حتى في URL لو الموقع مش مؤمّن كويس.
3- المستخدم العادي، اللي هو الضحية، بيفتح الصفحة من غير ما يعرف، والكود الضار اللي كتبه الهاكر بيبدأ يشتغل تلقائي، وده بيدّي الهاكر صلاحيات كبيرة داخل حسابات الضحية أو حتى بيتمكن من سرقة البيانات اللي موجودة على الموقع.
💥 يعني الكود الضار اللي كتبه الهاكر ممكن يتحكم في أي حاجة بتظهر للمستخدم على الموقع، وده ممكن يكون من خلال:
- سرقة الكوكيز: اللي هي زي ملفات صغيرة بتحتفظ بمعلومات تسجيل الدخول والتفضيلات. الكود الضار ممكن ياخدها ويبعتهاله، والهاكر يستخدمها علشان يدخل بحساب الضحية.
- تغيير محتوى الصفحة: ممكن الهاكر يحط حاجات أو رسائل وهمية في الصفحة تخلّي المستخدمين يدخلوا بياناتهم الشخصية، زي رسائل "تسجيل الدخول" أو "تحديث الحساب".
- إعادة توجيه المستخدم: لو الهاكر عايز ينقلك لموقع ضار تاني فيه فيروسات أو برامج خبيثة، ممكن يخليك تروحله وأنت مش واخد بالك.
———
🔐 أنواع الـ XSS:
فيه أكتر من نوع يخص الـ XSS، وكل نوع له طريقة مختلفة في التنفيذ وأثر مختلف، خليني أقولك الأنواع الرئيسية:
📍 الـ Stored XSS: النوع ده بيحصل لما الكود الضار بيتخزن في الموقع نفسه، يعني بيكون ثابت وكل مرة حد يفتح الصفحة يتنّفذ على طول.
📍 الـ Reflected XSS: النوع ده بيشتغل لما الكود بيتنّفذ فورًا في الصفحة اللي اتضاف فيها، زي لما حد يبعته في رابط URL، والمستخدم يفتحه فيلاقي الكود شغال.
📍 الـ DOM-based XSS: ده نوع أذكى شويه لأنه بيشتغل على مستوى الـ DOM بتاع الصفحة، يعني بيتعامل مباشرة مع العناصر اللي بتتغير في واجهة المستخدم، وده بيخلي الثغرة أصعب شوية في الاكتشاف.
———
💡 إزاي نمنع الـ XSS؟
عشان تحمي موقعك أو تطمّن إنك متأمن ضد الثغرة دي، لازم تركز على كام حاجة:
📌 أي حاجة بيضيفها المستخدم في الموقع (زي النصوص أو التعليقات) لازم يتعمل عليها فلتر و Validation وتتأكد إن مفيهاش أكواد ضارة.
📌 استخدام Content Security Policy (CSP): ده زي طبقة حماية إضافية بتمنع تنفيذ الأكواد اللي جايه من مصادر غير موثوقة.
📌 تشفير المدخلات والمخرجات: عن طريق استخدام HTML encoding عشان تحول الرموز اللي ممكن تسبب مشاكل (زي < و >) لرموز آمنة.
📌 منع الكوكيز من السرقة: باستخدام حاجة زي HttpOnly اللي بتحمي الكوكيز من الوصول المباشر عبر JavaScript.
———
✋ الـ XSS ثغرة خطيرة جدًا ممكن تهدد خصوصية المستخدمين وتضر بسمعة الموقع كمان. عشان كده لازم تكون فاهم تفاصيلها كويس وتقدر تأمن موقعك منها....
.
.
الـ XSS هو نوع من أنواع الثغرات الأمنية اللي ممكن تكون موجودة في المواقع، وبيستغلها الهاكرز علشان ينفذوا أكواد ضارة داخل صفحة الويب اللي بيستخدمها الضحية، وكده الهاكر يقدر يتحكم في الموقع أو حسابات المستخدمين، أو حتى يسحب بياناتهم الخاصة.
———
📌 الثغرة دي بتشتغل إزاي؟
خليني أشرحلك السيناريو البسيط اللي ممكن يحصل:
1- الهاكر بيكون عنده كود JavaScript ضار وعايز يزرعه في الموقع.
2- بيستغل ثغرة في المدخلات (Inputs) الموجودة في الموقع زي الـ Forms أو الـ Comments، أو حتى في URL لو الموقع مش مؤمّن كويس.
3- المستخدم العادي، اللي هو الضحية، بيفتح الصفحة من غير ما يعرف، والكود الضار اللي كتبه الهاكر بيبدأ يشتغل تلقائي، وده بيدّي الهاكر صلاحيات كبيرة داخل حسابات الضحية أو حتى بيتمكن من سرقة البيانات اللي موجودة على الموقع.
💥 يعني الكود الضار اللي كتبه الهاكر ممكن يتحكم في أي حاجة بتظهر للمستخدم على الموقع، وده ممكن يكون من خلال:
- سرقة الكوكيز: اللي هي زي ملفات صغيرة بتحتفظ بمعلومات تسجيل الدخول والتفضيلات. الكود الضار ممكن ياخدها ويبعتهاله، والهاكر يستخدمها علشان يدخل بحساب الضحية.
- تغيير محتوى الصفحة: ممكن الهاكر يحط حاجات أو رسائل وهمية في الصفحة تخلّي المستخدمين يدخلوا بياناتهم الشخصية، زي رسائل "تسجيل الدخول" أو "تحديث الحساب".
- إعادة توجيه المستخدم: لو الهاكر عايز ينقلك لموقع ضار تاني فيه فيروسات أو برامج خبيثة، ممكن يخليك تروحله وأنت مش واخد بالك.
———
🔐 أنواع الـ XSS:
فيه أكتر من نوع يخص الـ XSS، وكل نوع له طريقة مختلفة في التنفيذ وأثر مختلف، خليني أقولك الأنواع الرئيسية:
📍 الـ Stored XSS: النوع ده بيحصل لما الكود الضار بيتخزن في الموقع نفسه، يعني بيكون ثابت وكل مرة حد يفتح الصفحة يتنّفذ على طول.
📍 الـ Reflected XSS: النوع ده بيشتغل لما الكود بيتنّفذ فورًا في الصفحة اللي اتضاف فيها، زي لما حد يبعته في رابط URL، والمستخدم يفتحه فيلاقي الكود شغال.
📍 الـ DOM-based XSS: ده نوع أذكى شويه لأنه بيشتغل على مستوى الـ DOM بتاع الصفحة، يعني بيتعامل مباشرة مع العناصر اللي بتتغير في واجهة المستخدم، وده بيخلي الثغرة أصعب شوية في الاكتشاف.
———
💡 إزاي نمنع الـ XSS؟
عشان تحمي موقعك أو تطمّن إنك متأمن ضد الثغرة دي، لازم تركز على كام حاجة:
📌 أي حاجة بيضيفها المستخدم في الموقع (زي النصوص أو التعليقات) لازم يتعمل عليها فلتر و Validation وتتأكد إن مفيهاش أكواد ضارة.
📌 استخدام Content Security Policy (CSP): ده زي طبقة حماية إضافية بتمنع تنفيذ الأكواد اللي جايه من مصادر غير موثوقة.
📌 تشفير المدخلات والمخرجات: عن طريق استخدام HTML encoding عشان تحول الرموز اللي ممكن تسبب مشاكل (زي < و >) لرموز آمنة.
📌 منع الكوكيز من السرقة: باستخدام حاجة زي HttpOnly اللي بتحمي الكوكيز من الوصول المباشر عبر JavaScript.
———
✋ الـ XSS ثغرة خطيرة جدًا ممكن تهدد خصوصية المستخدمين وتضر بسمعة الموقع كمان. عشان كده لازم تكون فاهم تفاصيلها كويس وتقدر تأمن موقعك منها....
❤7
الـ OOP أو Object-Oriented Programming 🔻
الـ OOP بتقوم على أربع أعمدة أساسية: Abstraction، Encapsulation، Inheritance، وPolymorphism. طيب، إيه معناهم؟
———
الفكرة في الـ Abstraction هي إنك تخفي التفاصيل اللي تخص الـ implementation وتعرض بس الحاجات المهمة اللي المستخدم محتاج يعرفها.
زي مثلًا لو عندك class اسمه
———
الـ Encapsulation معناه إنك "تغلف" البيانات (اللي هي الـ fields) والوظائف (اللي هي الـ methods) في وحدة واحدة اللي هي الـ class. وكمان، إنك تحدد مين يقدر يوصل للبيانات دي عن طريق الـ access modifiers.
زي إنك تخلي الـ fields بتاعتك
———
الـ Inheritance بيسمح لك تعمل class جديد (child class) يورث الـ attributes والـ methods من class موجود بالفعل (parent class). الميزة هنا إنك بتقدر تعيد استخدام الكود بدل ما تكتبه من أول وجديد.
مثال: عندك class اسمه
———
الـ Polymorphism معناه إن الـ methods بتشتغل بشكل مختلف بناءً على الـ object اللي بتتطبق عليه. وده بيخليك تستخدم نوعين ليهم نفس الـ inheritance chain مع بعض من غير مشاكل.
يعني لو عندك method بتاخد
———
وفقكم الله لكل خير 🌿
الـ OOP بتقوم على أربع أعمدة أساسية: Abstraction، Encapsulation، Inheritance، وPolymorphism. طيب، إيه معناهم؟
———
🟠 Abstraction
الفكرة في الـ Abstraction هي إنك تخفي التفاصيل اللي تخص الـ implementation وتعرض بس الحاجات المهمة اللي المستخدم محتاج يعرفها.
زي مثلًا لو عندك class اسمه
Vehicle وفيه method اسمها stop، الـ method دي ممكن تكون abstract يعني محدش يعرف إزاي بتشتغل من جواها، كل اللي باين إنها بتوقف الـ Vehicle.———
🟠 Encapsulation
الـ Encapsulation معناه إنك "تغلف" البيانات (اللي هي الـ fields) والوظائف (اللي هي الـ methods) في وحدة واحدة اللي هي الـ class. وكمان، إنك تحدد مين يقدر يوصل للبيانات دي عن طريق الـ access modifiers.
زي إنك تخلي الـ fields بتاعتك
private، وتعمل لها getters و setters علشان تتحكم في الوصول لها.———
🟠 Inheritance
الـ Inheritance بيسمح لك تعمل class جديد (child class) يورث الـ attributes والـ methods من class موجود بالفعل (parent class). الميزة هنا إنك بتقدر تعيد استخدام الكود بدل ما تكتبه من أول وجديد.
مثال: عندك class اسمه
Vehicle، تعمل منه class اسمه Car، والـ Car هيبقى عنده نفس صفات وسلوكيات الـ Vehicle.———
🟠 Polymorphism
الـ Polymorphism معناه إن الـ methods بتشتغل بشكل مختلف بناءً على الـ object اللي بتتطبق عليه. وده بيخليك تستخدم نوعين ليهم نفس الـ inheritance chain مع بعض من غير مشاكل.
يعني لو عندك method بتاخد
Vehicle كـ parameter، ممكن تبعت لها Car أو Bike وهتشتغل عادي طالما إنهم بيورثوا من Vehicle.———
وفقكم الله لكل خير 🌿
❤8👏3
دردشة سريعة عن الـ Interface Segregation Principle 💯
.
.
تخيل أنك في شغلانة معينة وكل شوية حد يطلب منك تاسكات ملهاش علاقة ببعض ولا ليها علاقة بالشغلانة...طبيعي هتلاقي نفسك مشتت بين التاسكات كلها ومفيش فرصة تركز في الشغلانة الأساسية اللي جاي علشانها وكمان مش هتعملها بأفضل شكل.
نفس السيناريو ده بالضبط ممكن يحصل في البرمجة لما الكود يبقى مضطر يلتزم بحاجات هو مش محتاجها.
وهنا هتلاقي دور الـ Interface Segregation Principle، واحد من أهم المبادئ الخمسة لمفهوم SOLID، عشان يحل المشكلة دي.
———
يعني إيه Interface Segregation Principle؟ 🤔
الـ ISP بيقول ببساطة: "مينفعش تخلي الكود يلتزم بحاجات هو مش محتاجها."
لو عندك Interface فيه مليون وظيفة (methods) لكن الكائن (object) اللي هيستخدم الـ Interface ده هيحتاج كام حاجة بس، يبقى كده أنت بتحمّله شغل ملوش لازمة، وده هيعمل مشاكل في الكود بعدين.
———
مثال بسيط 👇
لو عندك Interface اسمه Bird
لو عملت كائن (object) زي Duck هيبقى منطقي جدًا إنه يقدر يطير (fly) ويعوم (swim).
لكن لو عندك كائن زي Penguin؟ البطريق بيعوم بس، ومش بيعرف يطير!
في الحالة دي الـ Penguin هيضطر يطبق (implement) وظيفة ملوش علاقة بيها وهي fly، حتى لو مش هيستخدمها.
———
✅ الحل؟
افصل الوظائف بتاعت الـ Interface على حسب الاحتياج الفعلي:
وكده لما تيجي تعمل Duck، هيطبق الاتنين:
أما الـ Penguin، هيطبّق بس اللي له علاقة به:
———
📌 ليه المبدأ ده مهم؟
- لما كل كائن يكون مرتبط بالوظائف اللي فعلًا محتاجها، بيبقى أسهل تعمل تغييرات من غير ما تسبب مشاكل لباقي الكود.
- الكود بتاعك هيبقى منظم "Organized" أكتر ومفهوم لأي حد يشتغل عليه بعدك.
- مش هتضطر تضيف دوال (methods) مش مستخدمة، وده بيقلل الـ Bugs اللي ممكن تظهر.
———
📍 دائمًا خليك حريص إن أي Interface يكون متخصص ومحدد الوظائف.
📍 لو لقيت Interface كبير ومعقد، افصله لعدة Interfaces أصغر.
📍 فكر كويس قبل ما تعمل أي implements، واسأل نفسك: الكائن ده فعلًا محتاج كل اللي موجود في الـ Interface؟
———
وفقكم الله لكل خير 🌿
.
.
تخيل أنك في شغلانة معينة وكل شوية حد يطلب منك تاسكات ملهاش علاقة ببعض ولا ليها علاقة بالشغلانة...طبيعي هتلاقي نفسك مشتت بين التاسكات كلها ومفيش فرصة تركز في الشغلانة الأساسية اللي جاي علشانها وكمان مش هتعملها بأفضل شكل.
نفس السيناريو ده بالضبط ممكن يحصل في البرمجة لما الكود يبقى مضطر يلتزم بحاجات هو مش محتاجها.
وهنا هتلاقي دور الـ Interface Segregation Principle، واحد من أهم المبادئ الخمسة لمفهوم SOLID، عشان يحل المشكلة دي.
———
يعني إيه Interface Segregation Principle؟ 🤔
الـ ISP بيقول ببساطة: "مينفعش تخلي الكود يلتزم بحاجات هو مش محتاجها."
لو عندك Interface فيه مليون وظيفة (methods) لكن الكائن (object) اللي هيستخدم الـ Interface ده هيحتاج كام حاجة بس، يبقى كده أنت بتحمّله شغل ملوش لازمة، وده هيعمل مشاكل في الكود بعدين.
———
مثال بسيط 👇
لو عندك Interface اسمه Bird
interface Bird {
fly(): void;
swim(): void;
}لو عملت كائن (object) زي Duck هيبقى منطقي جدًا إنه يقدر يطير (fly) ويعوم (swim).
لكن لو عندك كائن زي Penguin؟ البطريق بيعوم بس، ومش بيعرف يطير!
في الحالة دي الـ Penguin هيضطر يطبق (implement) وظيفة ملوش علاقة بيها وهي fly، حتى لو مش هيستخدمها.
———
✅ الحل؟
افصل الوظائف بتاعت الـ Interface على حسب الاحتياج الفعلي:
interface FlyingBird {
fly(): void;
}
interface SwimmingBird {
swim(): void;
}وكده لما تيجي تعمل Duck، هيطبق الاتنين:
class Duck implements FlyingBird, SwimmingBird {
fly() {
console.log('Duck is flying');
}
swim() {
console.log('Duck is swimming');
}
}أما الـ Penguin، هيطبّق بس اللي له علاقة به:
class Penguin implements SwimmingBird {
swim() {
console.log('Penguin is swimming');
}
}———
📌 ليه المبدأ ده مهم؟
- لما كل كائن يكون مرتبط بالوظائف اللي فعلًا محتاجها، بيبقى أسهل تعمل تغييرات من غير ما تسبب مشاكل لباقي الكود.
- الكود بتاعك هيبقى منظم "Organized" أكتر ومفهوم لأي حد يشتغل عليه بعدك.
- مش هتضطر تضيف دوال (methods) مش مستخدمة، وده بيقلل الـ Bugs اللي ممكن تظهر.
———
📍 دائمًا خليك حريص إن أي Interface يكون متخصص ومحدد الوظائف.
📍 لو لقيت Interface كبير ومعقد، افصله لعدة Interfaces أصغر.
📍 فكر كويس قبل ما تعمل أي implements، واسأل نفسك: الكائن ده فعلًا محتاج كل اللي موجود في الـ Interface؟
———
وفقكم الله لكل خير 🌿
❤5👏1
أكيد سمعت عن Docker في عالم البرمجة 💡
.
.
تعال ندردش شوية عن Docker بطريقة بسيطة ونفهم هو ليه شيء أساسي في تطوير التطبيقات. 💯
———
📌 إيه هو Docker؟
ببساطة، Docker هو منصة بتسمح لك تبني، تختبر، وتشغل تطبيقاتك في حاجة اسمها Container.
طيب يعني إيه Container؟
فكر فيها زي علبة بتحط فيها التطبيق بتاعك بكل المكونات اللي محتاجها عشان يشتغل: الـ Code، الـ Libraries، والـ Dependencies اللي مستخدمها، والـ System Configurations.
الفكرة الأساسية إن الـ Container ده بيشتغل زي ما هو على أي جهاز أو سيرفر، بغض النظر عن الـ Operating System أو الـ Environment اللي عليه. يعني لو التطبيق شغال عندك على جهازك الشخصي، هيشتغل بالضبط بنفس الطريقة على أي سيرفر تاني من غير مشاكل.
———
📌 ليه Docker مهم في مجال البرمجة؟
⚡️ التوافق بين البيئات المختلفة:
من أكتر المشاكل اللي معظمنا بيقابلها إنك تشتغل على مشروع على جهازك وكل حاجة تبقى تمام، لكن أول ما تيجي ترفعه على السيرفر، تبدأ المشاكل!
ممكن الـ Libraries أو الـ Environment اللي على السيرفر تكون مختلفة عن جهازك، وده يخلي حاجات كتير تبطل تشتغل.
هنا بييجي دور Docker من خلال الـ Container اللي بيبنيها، كل حاجة بتكون جاهزة ومتوافقة مع بعضها، فالتطبيق بتاعك هيشتغل بنفس الكفاءة على أي بيئة تانية من غير تعديلات.
———
⚡️ سرعة الانتقال من مرحلة التطوير للإنتاج:
العادي في أي مشروع إنك بتبدأ بـ Development Environment، وبعد كده تنقل المشروع لـ Production Environment.
نقل المشروع ده ممكن ياخد وقت ومجهود كبير، خصوصًا لو بتحتاج تعيد تهيئة البيئة الجديدة كل مرة. Docker بيحل المشكلة دي عن طريق إنك بتجهز كل حاجة في Container واحد، وبتقدر تنقله مباشرة لأي مكان، وبالتالي بتقلل الوقت اللي بياخده المشروع عشان يبقى جاهز للإطلاق.
———
⚡️ مرونة في التوسع (Scalability):
لو بتشتغل على مشروع كبير أو بتبني تطبيق بيسمح بعدد كبير من المستخدمين، هتحتاج تعمل Scale للتطبيق بسرعة.
تقدر تعمل نسخ متعددة من الـ Containers وتشغلهم على أي عدد من السيرفرات بسهولة وفي وقت قليل، وبالتالي تقدر تتعامل مع زيادة الأحمال بدون مشاكل.
———
⚡️ سهولة التجربة والاختبار:
ميزة Docker إنه بيوفر لك بيئة معزولة لتجربة أفكار جديدة أو تعديل كود معين بدون التأثير على التطبيق الرئيسي. يعني، لو عايز تجرب Framework جديد أو تضيف Feature للتطبيق، تقدر تعمل Container جديد وتجرب براحتك من غير ما تأثر على البيئة اللي شغال عليها باقي الفريق أو المشروع الأساسي.
———
⚡️ الحفاظ على استمرارية العمل:
من خلال Docker تقدر تتأكد إن نفس الـ Setup شغال عندك، عند باقي الفريق، وعلى السيرفرات اللي بتشغل التطبيق. ده معناه إن مفيش مشاكل هتحصل بسبب فرق في الـ Configuration أو الـ Environment.
———
لو تعرف مصادر كويسة بتشرح Docker ياريت تضيفها في التعليقات وتفيد غيرك ✅
بالتوفيق 🌿
.
.
تعال ندردش شوية عن Docker بطريقة بسيطة ونفهم هو ليه شيء أساسي في تطوير التطبيقات. 💯
———
📌 إيه هو Docker؟
ببساطة، Docker هو منصة بتسمح لك تبني، تختبر، وتشغل تطبيقاتك في حاجة اسمها Container.
طيب يعني إيه Container؟
فكر فيها زي علبة بتحط فيها التطبيق بتاعك بكل المكونات اللي محتاجها عشان يشتغل: الـ Code، الـ Libraries، والـ Dependencies اللي مستخدمها، والـ System Configurations.
الفكرة الأساسية إن الـ Container ده بيشتغل زي ما هو على أي جهاز أو سيرفر، بغض النظر عن الـ Operating System أو الـ Environment اللي عليه. يعني لو التطبيق شغال عندك على جهازك الشخصي، هيشتغل بالضبط بنفس الطريقة على أي سيرفر تاني من غير مشاكل.
———
📌 ليه Docker مهم في مجال البرمجة؟
⚡️ التوافق بين البيئات المختلفة:
من أكتر المشاكل اللي معظمنا بيقابلها إنك تشتغل على مشروع على جهازك وكل حاجة تبقى تمام، لكن أول ما تيجي ترفعه على السيرفر، تبدأ المشاكل!
ممكن الـ Libraries أو الـ Environment اللي على السيرفر تكون مختلفة عن جهازك، وده يخلي حاجات كتير تبطل تشتغل.
هنا بييجي دور Docker من خلال الـ Container اللي بيبنيها، كل حاجة بتكون جاهزة ومتوافقة مع بعضها، فالتطبيق بتاعك هيشتغل بنفس الكفاءة على أي بيئة تانية من غير تعديلات.
———
⚡️ سرعة الانتقال من مرحلة التطوير للإنتاج:
العادي في أي مشروع إنك بتبدأ بـ Development Environment، وبعد كده تنقل المشروع لـ Production Environment.
نقل المشروع ده ممكن ياخد وقت ومجهود كبير، خصوصًا لو بتحتاج تعيد تهيئة البيئة الجديدة كل مرة. Docker بيحل المشكلة دي عن طريق إنك بتجهز كل حاجة في Container واحد، وبتقدر تنقله مباشرة لأي مكان، وبالتالي بتقلل الوقت اللي بياخده المشروع عشان يبقى جاهز للإطلاق.
———
⚡️ مرونة في التوسع (Scalability):
لو بتشتغل على مشروع كبير أو بتبني تطبيق بيسمح بعدد كبير من المستخدمين، هتحتاج تعمل Scale للتطبيق بسرعة.
تقدر تعمل نسخ متعددة من الـ Containers وتشغلهم على أي عدد من السيرفرات بسهولة وفي وقت قليل، وبالتالي تقدر تتعامل مع زيادة الأحمال بدون مشاكل.
———
⚡️ سهولة التجربة والاختبار:
ميزة Docker إنه بيوفر لك بيئة معزولة لتجربة أفكار جديدة أو تعديل كود معين بدون التأثير على التطبيق الرئيسي. يعني، لو عايز تجرب Framework جديد أو تضيف Feature للتطبيق، تقدر تعمل Container جديد وتجرب براحتك من غير ما تأثر على البيئة اللي شغال عليها باقي الفريق أو المشروع الأساسي.
———
⚡️ الحفاظ على استمرارية العمل:
من خلال Docker تقدر تتأكد إن نفس الـ Setup شغال عندك، عند باقي الفريق، وعلى السيرفرات اللي بتشغل التطبيق. ده معناه إن مفيش مشاكل هتحصل بسبب فرق في الـ Configuration أو الـ Environment.
———
لو تعرف مصادر كويسة بتشرح Docker ياريت تضيفها في التعليقات وتفيد غيرك ✅
بالتوفيق 🌿
❤11
إزاي تكون مهندس برمجيات شاطر؟
.
.
How To Be A Good Software Engineer
———
📌 الجزء الأول:
Master the Fundamentals: The Bedrock of Becoming a Good Software Engineer
https://dev.to/alisamir/master-the-fundamentals-the-bedrock-of-becoming-a-good-software-engineer-2823
———
📌 الجزء الثاني:
Write Clean, Maintainable Code: A Guide for Software Engineers
https://dev.to/alisamir/write-clean-maintainable-code-a-guide-for-software-engineers-2834
———
📌 الجزء الثالث:
Mastering Testing and Continuous Learning: Steps to Become a Better Software Engineer
https://dev.to/alisamir/mastering-testing-and-continuous-learning-steps-to-become-a-better-software-engineer-an1
———
📌 الجزء الرابع:
How to Excel in Problem-Solving and Collaboration as a Software Engineer
https://dev.to/alisamir/how-to-excel-in-problem-solving-and-collaboration-as-a-software-engineer-2ih8
———
📌 الجزء الخامس:
Becoming a Good Software Engineer: Business Alignment and Performance Optimization
https://dev.to/alisamir/becoming-a-good-software-engineer-business-alignment-and-performance-optimization-3bd0
———
📌 الجزء السادس:
How Embracing Tools and Cultivating Soft Skills Can Make You a Better Software Engineer
https://dev.to/alisamir/how-embracing-tools-and-cultivating-soft-skills-can-make-you-a-better-software-engineer-37c4
———
📌 الجزء السابع:
Building a Personal Brand and Embracing Adaptability as a Software Engineer
https://dev.to/alisamir/building-a-personal-brand-and-embracing-adaptability-as-a-software-engineer-5ke
.
.
How To Be A Good Software Engineer
———
📌 الجزء الأول:
Master the Fundamentals: The Bedrock of Becoming a Good Software Engineer
https://dev.to/alisamir/master-the-fundamentals-the-bedrock-of-becoming-a-good-software-engineer-2823
———
📌 الجزء الثاني:
Write Clean, Maintainable Code: A Guide for Software Engineers
https://dev.to/alisamir/write-clean-maintainable-code-a-guide-for-software-engineers-2834
———
📌 الجزء الثالث:
Mastering Testing and Continuous Learning: Steps to Become a Better Software Engineer
https://dev.to/alisamir/mastering-testing-and-continuous-learning-steps-to-become-a-better-software-engineer-an1
———
📌 الجزء الرابع:
How to Excel in Problem-Solving and Collaboration as a Software Engineer
https://dev.to/alisamir/how-to-excel-in-problem-solving-and-collaboration-as-a-software-engineer-2ih8
———
📌 الجزء الخامس:
Becoming a Good Software Engineer: Business Alignment and Performance Optimization
https://dev.to/alisamir/becoming-a-good-software-engineer-business-alignment-and-performance-optimization-3bd0
———
📌 الجزء السادس:
How Embracing Tools and Cultivating Soft Skills Can Make You a Better Software Engineer
https://dev.to/alisamir/how-embracing-tools-and-cultivating-soft-skills-can-make-you-a-better-software-engineer-37c4
———
📌 الجزء السابع:
Building a Personal Brand and Embracing Adaptability as a Software Engineer
https://dev.to/alisamir/building-a-personal-brand-and-embracing-adaptability-as-a-software-engineer-5ke
❤6
تعال ندردش شوية عن الـ Load Balancing 🔻
.
.
الـ Load Balancing حاجة مهمة جدًا بتأثر في سرعة وثبات أي تطبيق، وخصوصًا لو التطبيق ده عليه عدد ضخم من المستخدمين.
الفكرة في الـ Load Balancing إنه بيوزع ضغط الطلبات اللي بتيجي على السيرفرات عشان يخلي الأداء أحسن ويقلل أي مشاكل ممكن تحصل.
———
📌 إزاي الـ Load Balancing بيشتغل؟
تخيل معايا أنك عندك تطبيق عليه عدد كبير من المستخدمين اللي بيدخلوا ويعملوا طلبات في نفس الوقت، زي متجر إلكتروني كبير أو موقع تواصل اجتماعي.
لو التطبيق ده موجود على سيرفر واحد، هيواجه مشكلة كبيرة لو العدد زاد لأن السيرفر هيبدأ يبقى بطيء، أو ممكن يقع لو الضغط كان زيادة.
الحل هنا إنك بدل ما تشغل التطبيق كله على سيرفر واحد، بتوزعه على أكتر من سيرفر، وكل سيرفر بيشيل جزء من الشغل.
الـ Load Balancer بيدخل هنا وبيبقى هو اللي بيحدد الطلبات تروح لمين، بحيث مفيش سيرفر يكون عليه ضغط أكتر من التاني.
———
📍 أنواع الـ Load Balancing:
- الـ Round Robin: الطريقة دي ببساطة بتوزع الطلبات بالتساوي على كل السيرفرات. أول طلب يروح لأول سيرفر، والتاني للتاني، وهكذا لحد ما يوصل لآخر سيرفر ويرجع تاني من الأول.
- الـ Least Connections: الطريقة دي بتركز على عدد الاتصالات اللي كل سيرفر شغال عليها، بمعنى إنها بتبعت الطلب للسيرفر اللي عليه عدد أقل من الطلبات حاليًا، وده بيكون مفيد لما يكون فيه اختلاف كبير في الحمل بين الطلبات.
- الـ IP Hash: هنا التوزيع بيكون بناءً على عنوان IP بتاع العميل اللي بيعمل الطلب، يعني كل عميل دايمًا هيتم توجيهه لنفس السيرفر بناءً على عنوان الـ IP بتاعه، ودي بتنفع في حالات معينة زي لما يكون فيه بيانات كاش محتاجة تتوزع.
- الـ Weighted Load Balancing: في الحالة دي بنعمل أحمال مختلفة للسيرفرات بناءً على قدرتهم. يعني لو عندك سيرفر أقوى من الباقيين، تقدر تخليه ياخد حمل أكبر.
———
📍 ليه الـ Load Balancing مهم؟
الهدف الأساسي من الـ Load Balancing هو إنه يخلي التطبيق بتاعك مستقر وسريع للمستخدمين مهما زاد عددهم.
يعني بدل ما الموقع يعلق أو يقع، الطلبات هتفضل تتوزع بشكل مرن على كل السيرفرات.
———
وفقكم الله لكل خير 🌿
.
.
الـ Load Balancing حاجة مهمة جدًا بتأثر في سرعة وثبات أي تطبيق، وخصوصًا لو التطبيق ده عليه عدد ضخم من المستخدمين.
الفكرة في الـ Load Balancing إنه بيوزع ضغط الطلبات اللي بتيجي على السيرفرات عشان يخلي الأداء أحسن ويقلل أي مشاكل ممكن تحصل.
———
📌 إزاي الـ Load Balancing بيشتغل؟
تخيل معايا أنك عندك تطبيق عليه عدد كبير من المستخدمين اللي بيدخلوا ويعملوا طلبات في نفس الوقت، زي متجر إلكتروني كبير أو موقع تواصل اجتماعي.
لو التطبيق ده موجود على سيرفر واحد، هيواجه مشكلة كبيرة لو العدد زاد لأن السيرفر هيبدأ يبقى بطيء، أو ممكن يقع لو الضغط كان زيادة.
الحل هنا إنك بدل ما تشغل التطبيق كله على سيرفر واحد، بتوزعه على أكتر من سيرفر، وكل سيرفر بيشيل جزء من الشغل.
الـ Load Balancer بيدخل هنا وبيبقى هو اللي بيحدد الطلبات تروح لمين، بحيث مفيش سيرفر يكون عليه ضغط أكتر من التاني.
———
📍 أنواع الـ Load Balancing:
- الـ Round Robin: الطريقة دي ببساطة بتوزع الطلبات بالتساوي على كل السيرفرات. أول طلب يروح لأول سيرفر، والتاني للتاني، وهكذا لحد ما يوصل لآخر سيرفر ويرجع تاني من الأول.
- الـ Least Connections: الطريقة دي بتركز على عدد الاتصالات اللي كل سيرفر شغال عليها، بمعنى إنها بتبعت الطلب للسيرفر اللي عليه عدد أقل من الطلبات حاليًا، وده بيكون مفيد لما يكون فيه اختلاف كبير في الحمل بين الطلبات.
- الـ IP Hash: هنا التوزيع بيكون بناءً على عنوان IP بتاع العميل اللي بيعمل الطلب، يعني كل عميل دايمًا هيتم توجيهه لنفس السيرفر بناءً على عنوان الـ IP بتاعه، ودي بتنفع في حالات معينة زي لما يكون فيه بيانات كاش محتاجة تتوزع.
- الـ Weighted Load Balancing: في الحالة دي بنعمل أحمال مختلفة للسيرفرات بناءً على قدرتهم. يعني لو عندك سيرفر أقوى من الباقيين، تقدر تخليه ياخد حمل أكبر.
———
📍 ليه الـ Load Balancing مهم؟
الهدف الأساسي من الـ Load Balancing هو إنه يخلي التطبيق بتاعك مستقر وسريع للمستخدمين مهما زاد عددهم.
يعني بدل ما الموقع يعلق أو يقع، الطلبات هتفضل تتوزع بشكل مرن على كل السيرفرات.
———
وفقكم الله لكل خير 🌿
❤5