الفرق بين SQL و NoSQL؟ 🤔
خلال رحلتك في عالم البرمجة، أكيد سمعت عن قواعد البيانات (Database) وعرفت إن فيه نوعين مشهورين: SQL و NoSQL، بس إيه الفرق بينهم؟
- بتستخدم جداول (Tables) زي الإكسل كده، كل جدول فيه أعمدة وصفوف، وبيكون فيه علاقات بين الجداول.
- بتستخدم لغة SQL (Structured Query Language) عشان تعمل استعلامات على البيانات (SELECT, INSERT, UPDATE, DELETE).
- مثالية للبيانات المنظمة والمترابطة، زي الحسابات البنكية، بيانات الموظفين، والمخازن.
- أمثلة عليها: MySQL, PostgreSQL, SQL Server, Oracle.
———
لو عندك جدول اسمه Users، ممكن تجيب كل المستخدمين اللي أعمارهم فوق 25 سنة بكود زي ده:
———
- ملهاش جداول ثابتة زي SQL، بتستخدم طرق تخزين مختلفة زي المستندات (Documents)، الـ (Key-Value)، الـ (Wide-Column)، أو الرسوم البيانية (Graph).
- مش بتحتاج مخطط ثابت (Schema-less)، يعني ممكن تخزن بيانات غير متناسقة بدون مشاكل.
- مناسبة للبيانات اللي بتتغير باستمرار والأنظمة اللي بتحتاج سرعة عالية وقابلية توسع كبيرة، زي مواقع التواصل الاجتماعي وأنظمة التحليل الفوري.
- أمثلة عليها: MongoDB (بتستخدم الـ Documents)، Redis (بتستخدم Key-Value)، Cassandra (بتستخدم Wide-Column).
———
في MongoDB، لو عندك مجموعة (Collection) اسمها Users، وعاوز تجيب المستخدمين اللي أعمارهم فوق 25 سنة، هتستخدم استعلام زي ده:
———
✅ الـ SQL مناسب لو عندك بيانات مترابطة وعاوز تضمن التكامل بينها.
✅ الـ NoSQL مناسب لو عندك بيانات غير منظمة، أو بتحتاج تتوسع بسرعة، أو عندك عمليات قراءة وكتابة ضخمة.
———
#دقيقة_برمجة
خلال رحلتك في عالم البرمجة، أكيد سمعت عن قواعد البيانات (Database) وعرفت إن فيه نوعين مشهورين: SQL و NoSQL، بس إيه الفرق بينهم؟
📌 الـ SQL - قواعد بيانات علائقية (Relational Databases)
- بتستخدم جداول (Tables) زي الإكسل كده، كل جدول فيه أعمدة وصفوف، وبيكون فيه علاقات بين الجداول.
- بتستخدم لغة SQL (Structured Query Language) عشان تعمل استعلامات على البيانات (SELECT, INSERT, UPDATE, DELETE).
- مثالية للبيانات المنظمة والمترابطة، زي الحسابات البنكية، بيانات الموظفين، والمخازن.
- أمثلة عليها: MySQL, PostgreSQL, SQL Server, Oracle.
———
📍 مثال سريع:
لو عندك جدول اسمه Users، ممكن تجيب كل المستخدمين اللي أعمارهم فوق 25 سنة بكود زي ده:
SELECT * FROM Users WHERE age > 25;
———
📌 الـ NoSQL - قواعد بيانات غير علائقية (Non-Relational Databases)
- ملهاش جداول ثابتة زي SQL، بتستخدم طرق تخزين مختلفة زي المستندات (Documents)، الـ (Key-Value)، الـ (Wide-Column)، أو الرسوم البيانية (Graph).
- مش بتحتاج مخطط ثابت (Schema-less)، يعني ممكن تخزن بيانات غير متناسقة بدون مشاكل.
- مناسبة للبيانات اللي بتتغير باستمرار والأنظمة اللي بتحتاج سرعة عالية وقابلية توسع كبيرة، زي مواقع التواصل الاجتماعي وأنظمة التحليل الفوري.
- أمثلة عليها: MongoDB (بتستخدم الـ Documents)، Redis (بتستخدم Key-Value)، Cassandra (بتستخدم Wide-Column).
———
📍 مثال سريع:
في MongoDB، لو عندك مجموعة (Collection) اسمها Users، وعاوز تجيب المستخدمين اللي أعمارهم فوق 25 سنة، هتستخدم استعلام زي ده:
db.Users.find({ "age": { $gt: 25 } })
———
أستخدم أي واحد في المشروع؟ 🤔
✅ الـ SQL مناسب لو عندك بيانات مترابطة وعاوز تضمن التكامل بينها.
✅ الـ NoSQL مناسب لو عندك بيانات غير منظمة، أو بتحتاج تتوسع بسرعة، أو عندك عمليات قراءة وكتابة ضخمة.
———
#دقيقة_برمجة
❤4👍2
الفرق بين GET و POST في HTTP 🤔
لما تيجي تتعامل مع الـ APIs، هتقابل نوعين من الـ HTTP Requests مهمين جدًا: GET و POST. طيب إيه الفرق بينهم؟
- بيستخدم لما تحب تجيب بيانات من السيرفر، زي لما تفتح موقع وتشوف البيانات اللي عليه.
- البيانات اللي بتبعتها للسيرفر بتكون في الـ URL نفسه كـ Query Parameters، يعني لو عندك حاجة زي:
https://example.com/users?id=5
ده معناه إنك بتطلب بيانات المستخدم اللي الـ ID بتاعه 5.
- مش آمن لو بتبعت بيانات حساسة زي الباسورد، لأن البيانات بتظهر في الرابط.
- ممكن يتخزن في الكاش (Cache)، فلو عملت نفس الطلب تاني ممكن السيرفر يرد بنفس النتيجة من غير ما يعالج الطلب من جديد.
———
- بيستخدم لما تحب تبعت بيانات للسيرفر عشان تسجّل مستخدم، تبعت بيانات من Form، أو تضيف حاجة جديدة في قواعد البيانات (Database).
- البيانات بتتبعت داخل الـ (Body)، مش في الـ URL، فده بيكون أكثر أمانًا مقارنةً بـ GET.
- مش بيتخزن في الكاش، لأن كل مرة بتبعت فيها بيانات جديدة بيتم معالجتها.
- ممكن يبعت بيانات ضخمة، عكس GET اللي بيكون محدود بحجم الـ URL.
———
- لو عايز تجيب بيانات بس بدون ما تغير أي حاجة في السيرفر استخدم GET
- لو عايز تبعت بيانات أو تعمل تعديل أو تضيف حاجة جديدة استخدم POST
———
يعني مثلًا:
🔹 لو بتبحث في جوجل، ده GET لأنك بتطلب بيانات بس.
🔹 لو بتسجّل دخول في موقع، ده POST لأنك بتبعت بيانات حساسة (الإيميل والباسورد).
———
#دقيقة_برمجة
لما تيجي تتعامل مع الـ APIs، هتقابل نوعين من الـ HTTP Requests مهمين جدًا: GET و POST. طيب إيه الفرق بينهم؟
📌 الـ GET Request
- بيستخدم لما تحب تجيب بيانات من السيرفر، زي لما تفتح موقع وتشوف البيانات اللي عليه.
- البيانات اللي بتبعتها للسيرفر بتكون في الـ URL نفسه كـ Query Parameters، يعني لو عندك حاجة زي:
https://example.com/users?id=5
ده معناه إنك بتطلب بيانات المستخدم اللي الـ ID بتاعه 5.
- مش آمن لو بتبعت بيانات حساسة زي الباسورد، لأن البيانات بتظهر في الرابط.
- ممكن يتخزن في الكاش (Cache)، فلو عملت نفس الطلب تاني ممكن السيرفر يرد بنفس النتيجة من غير ما يعالج الطلب من جديد.
———
📌 الـ POST Request
- بيستخدم لما تحب تبعت بيانات للسيرفر عشان تسجّل مستخدم، تبعت بيانات من Form، أو تضيف حاجة جديدة في قواعد البيانات (Database).
- البيانات بتتبعت داخل الـ (Body)، مش في الـ URL، فده بيكون أكثر أمانًا مقارنةً بـ GET.
- مش بيتخزن في الكاش، لأن كل مرة بتبعت فيها بيانات جديدة بيتم معالجتها.
- ممكن يبعت بيانات ضخمة، عكس GET اللي بيكون محدود بحجم الـ URL.
———
💡 امتى تستخدم كل واحد فيهم؟
- لو عايز تجيب بيانات بس بدون ما تغير أي حاجة في السيرفر استخدم GET
- لو عايز تبعت بيانات أو تعمل تعديل أو تضيف حاجة جديدة استخدم POST
———
يعني مثلًا:
🔹 لو بتبحث في جوجل، ده GET لأنك بتطلب بيانات بس.
🔹 لو بتسجّل دخول في موقع، ده POST لأنك بتبعت بيانات حساسة (الإيميل والباسورد).
———
#دقيقة_برمجة
❤6👍3
DevMeetsDevs 🔥
Unlock your creativity with these incredible websites—your next project’s inspiration starts here!
https://devmeetsdevs.com
❤4
بفضل الله وتوفيقه، تم نشر ثاني مقال في مدونة Level Up Coding على منصة Medium! 🚀
In today’s digital landscape, businesses must ensure 24/7 availability to meet user expectations. A scalable back end with zero downtime deployments is essential, not optional.
This article presents a straightforward approach to building an efficient back end that scales seamlessly and deploys without disruption, keeping users satisfied.
———
🔗 Link To Article:
https://medium.com/gitconnected/how-to-build-a-scalable-back-end-with-zero-downtime-deployments-6f10b6d1f389
How to Build a Scalable Back-End with Zero Downtime Deployments 💡
In today’s digital landscape, businesses must ensure 24/7 availability to meet user expectations. A scalable back end with zero downtime deployments is essential, not optional.
This article presents a straightforward approach to building an efficient back end that scales seamlessly and deploys without disruption, keeping users satisfied.
———
🔗 Link To Article:
https://medium.com/gitconnected/how-to-build-a-scalable-back-end-with-zero-downtime-deployments-6f10b6d1f389
❤8
إزاي تعمل Commit صح في Git؟ ✅
.
.
الـ Commit في Git تعتبر "لحظة حفظ" للتغييرات اللي عملتها في مشروعك. يعني لو فيه حاجة حصلت وحبيت ترجع لها بعدين، تقدر تلاقي الـ Commit ده. لكن عشان يكون شغلك مميز، لازم تعمل Commit صح. 💡
———
لازم الـ Commit يكون خاص بتغيير معين أو ميزة معينة، يعني متعملش Commit كبير جدًا فيه شوية حاجات مش مترابطة. خليك دايمًا مركز في حاجة واحدة، زي "إصلاح bug في الصفحة الرئيسية" أو "إضافة زر جديد للتسجيل".
رسالة الـ Commit هي اللي هتشرح للناس (وأنت كمان بعد مدة) إيه اللي اتحسن أو اتغير في الكود. خلي الرسالة مختصرة وواضحة. زي:
- "Fix login issue" 👨💻
- "Add user profile page" 👤
مهم جدًا إن الرسالة تكون واضحة علشان لو حد رجع لها بعد فترة، يعرف التغيير ده كان بخصوص إيه.
خلي الرسالة مكتوبة في الزمن الحاضر. يعني لو هتكتب عن إضافة ميزة جديدة، اكتب "Add new feature" بدل "Added new feature". دايمًا خلي الكلام بسيط ومباشر.
متعملش Commit لكل حاجة مع بعض. يعني لو عدلت على أكثر من جزء في المشروع، خلي كل Commit له حاجة واحدة، كده لو حصل مشكلة في حاجة معينة، هتكون عارف الـ Commit اللي تسبب فيها.
زي ملفات الـ logs أو الملفات المؤقتة (node_modules أو build folders). خلي الملفات دي في الـ gitignore علشان Git ما يضيفها مع الـ Commits بتاعتك.
———
قبل ما تعمل الـ Commit، دايمًا اعمل مراجعة للتغييرات اللي عملتها باستخدام git status أو git diff. كده هتكون متأكد إنك مش ناسي حاجة أو فيه حاجة غلط.
———
#دقيقة_برمجة
.
.
الـ Commit في Git تعتبر "لحظة حفظ" للتغييرات اللي عملتها في مشروعك. يعني لو فيه حاجة حصلت وحبيت ترجع لها بعدين، تقدر تلاقي الـ Commit ده. لكن عشان يكون شغلك مميز، لازم تعمل Commit صح. 💡
———
1- اعمل Commit صغير ومنظم
لازم الـ Commit يكون خاص بتغيير معين أو ميزة معينة، يعني متعملش Commit كبير جدًا فيه شوية حاجات مش مترابطة. خليك دايمًا مركز في حاجة واحدة، زي "إصلاح bug في الصفحة الرئيسية" أو "إضافة زر جديد للتسجيل".
2- اكتب رسالة Commit واضحة
رسالة الـ Commit هي اللي هتشرح للناس (وأنت كمان بعد مدة) إيه اللي اتحسن أو اتغير في الكود. خلي الرسالة مختصرة وواضحة. زي:
- "Fix login issue" 👨💻
- "Add user profile page" 👤
مهم جدًا إن الرسالة تكون واضحة علشان لو حد رجع لها بعد فترة، يعرف التغيير ده كان بخصوص إيه.
3- استخدم صيغة الزمن الحاضر
خلي الرسالة مكتوبة في الزمن الحاضر. يعني لو هتكتب عن إضافة ميزة جديدة، اكتب "Add new feature" بدل "Added new feature". دايمًا خلي الكلام بسيط ومباشر.
4- افصل بين التغييرات باستخدام أكثر من Commit
متعملش Commit لكل حاجة مع بعض. يعني لو عدلت على أكثر من جزء في المشروع، خلي كل Commit له حاجة واحدة، كده لو حصل مشكلة في حاجة معينة، هتكون عارف الـ Commit اللي تسبب فيها.
5- متعملش Commit للـ Files المؤقتة أو اللي فيها بيانات سرية
زي ملفات الـ logs أو الملفات المؤقتة (node_modules أو build folders). خلي الملفات دي في الـ gitignore علشان Git ما يضيفها مع الـ Commits بتاعتك.
———
قبل ما تعمل الـ Commit، دايمًا اعمل مراجعة للتغييرات اللي عملتها باستخدام git status أو git diff. كده هتكون متأكد إنك مش ناسي حاجة أو فيه حاجة غلط.
———
#دقيقة_برمجة
❤16👍3
يعني إيه Callback Function؟ 🔄
خلال رحلتك في عالم الـ JavaScript أكيد سمعت قبل كده عن Callback Functions، بس إيه الفكرة منها وليه بنستخدمها؟ 🤔
خليني أوضحها لك بطريقة بسيطة… تخيل أنك طلبت بيتزا من المطعم، وقالوا لك: "هتاخد 30 دقيقة عشان توصل." دلوقتي بدل ما تقعد مستني على باب المطعم، تقدر تسيب رقمك لهم، وأول ما البيتزا تجهز، هيكلموك ويقولوا لك: "تعال استلمها"
———
الـ Callback Function بتشتغل بنفس الطريقة، هي عبارة عن دالة بتتبعت كـ parameter لدالة تانية، ولما الدالة الأساسية تخلص شغلها، بتنادي الـ Callback عشان تنفذ حاجة معينة.
———
📌 هنا الـ fetchData شغالة زي المطعم، وبتاخد callback كمعامل، وبمجرد ما تجيب الداتا، بتستدعي processData عشان تتعامل مع البيانات.
———
- التعامل مع العمليات غير المتزامنة (زي جلب بيانات من API أو تنفيذ عمليات بتاخد وقت).
- إعادة استخدام الكود بدل ما نكتب نفس الحاجة أكتر من مرة.
- تنظيم الكود بدل ما يكون كله متداخل وصعب القراءة.
———
لو استخدمتها بطريقة غلط، ممكن تدخل في Callback Hell (كود متداخل بشكل معقد)، وده السبب اللي يخليك تستخدم الـ Promises والـ Async/Await 🚀
———
#دقيقة_برمجة
خلال رحلتك في عالم الـ JavaScript أكيد سمعت قبل كده عن Callback Functions، بس إيه الفكرة منها وليه بنستخدمها؟ 🤔
خليني أوضحها لك بطريقة بسيطة… تخيل أنك طلبت بيتزا من المطعم، وقالوا لك: "هتاخد 30 دقيقة عشان توصل." دلوقتي بدل ما تقعد مستني على باب المطعم، تقدر تسيب رقمك لهم، وأول ما البيتزا تجهز، هيكلموك ويقولوا لك: "تعال استلمها"
———
الـ Callback Function بتشتغل بنفس الطريقة، هي عبارة عن دالة بتتبعت كـ parameter لدالة تانية، ولما الدالة الأساسية تخلص شغلها، بتنادي الـ Callback عشان تنفذ حاجة معينة.
———
🎯 مثال عملي
function fetchData(callback) {
console.log("Fetching data... ⏳");
setTimeout(() => {
console.log("Data fetched ✅");
callback("Here is your data! 📦");
}, 2000);
}
function processData(data) {
console.log("Processing: " + data);
}
fetchData(processData);
📌 هنا الـ fetchData شغالة زي المطعم، وبتاخد callback كمعامل، وبمجرد ما تجيب الداتا، بتستدعي processData عشان تتعامل مع البيانات.
———
🛠 ليه نستخدم الـ Callback Functions؟
- التعامل مع العمليات غير المتزامنة (زي جلب بيانات من API أو تنفيذ عمليات بتاخد وقت).
- إعادة استخدام الكود بدل ما نكتب نفس الحاجة أكتر من مرة.
- تنظيم الكود بدل ما يكون كله متداخل وصعب القراءة.
———
❌ مشكلة الـ Callbacks؟
لو استخدمتها بطريقة غلط، ممكن تدخل في Callback Hell (كود متداخل بشكل معقد)، وده السبب اللي يخليك تستخدم الـ Promises والـ Async/Await 🚀
———
#دقيقة_برمجة
❤7👍5👏1
إيه الفرق بين Framework و Library؟ 🤔
الفكرة ببساطة إن الـ Library هي مجرد مجموعة أكواد أو دوال جاهزة بتساعدك تعمل حاجة معينة في الكود بتاعك، يعني أنت اللي بتتحكم فيها وبتستدعيها وقت ما تحتاج.
مثال؟ لو بتكتب JavaScript ممكن تستخدم Lodash علشان تسهل عليك التعامل مع المصفوفات (Arrays)، أو Axios علشان تبعت طلبات API.
———
أما الـ Framework فالموضوع مختلف شوية، لأنه بيكون بيئة عمل متكاملة فيها قواعد وأنماط معينة لازم تلتزم بيها. يعني بدل ما أنت اللي بتنادي على الكود، هو اللي بينادي عليك وبيقولك "اكتب الكود بتاعك هنا".
مثال؟ إطار العمل Angular في الفرونت إند، و Django في الباك إند.
———
🔹 الـ Library = أنت اللي بتتحكم فيها وتستخدمها بحرية
🔹 الـ Framework = هو اللي بيديك القالب أو الشكل العام ويجبرك تمشي على نظام معين.
———
#دقيقة_برمجة
❤10👍6👏1
🔒 الفرق بين Encapsulation و Abstraction؟
ناس كتير بتتلخبط بين الـ Encapsulation والـ Abstraction وده طبيعي لأن الاتنين بيتكلموا عن إخفاء حاجات في البرمجة، بس كل واحد فيهم ليه هدف مختلف.
———
📦 الـ Encapsulation (الاحتواء أو التغليف): يعني إنك "تغلف" البيانات (زي الـ variables) والوظائف (زي الـ functions أو الـ methods) اللي بتتعامل مع البيانات دي داخل كائن واحد (class)، وكمان تمنع أي حد من خارج الكائن ده إنه يتعامل معاهم بشكل مباشر.
بمعنى تاني: بتخبي التفاصيل الداخلية، وبتخلي فيه واجهة واحدة بس الناس تتعامل معاها.
وده بيحافظ على الداتا من إنها تتغير بشكل خطأ أو عشوائي.
———
🛡 مثال بسيط:
لو عندك
لازم تعدي من method زي
يعني الكود بيكون كده:
هنا احنا "غلفنا" البيانات وخبيناها وخلينا التعامل معاها من خلال methods بس ✅
———
🎭 الـ Abstraction (التجريد): يعني إنك تركز على "إيه اللي الـ class بيعمله"، وتخبي "إزاي بيعمله"
بمعنى إنك بتعمل للـ user واجهة بسيطة يتعامل بيها، وما تعرفه التفاصيل الداخلية حصلت إزاي.
مثلًا: أنت لما بتشغل الغسالة من الزرار، مش لازم تعرف إزاي الموتور بيشتغل أو الميه بتتوزع أو إزاي البرنامج بيعدّ الوقت.
كل اللي يهمك هو إنك تضغط الزرار وهي تشتغل.
نفس الفكرة في الكود:
لو عندك method اسمها
———
#دقيقة_برمجة
ناس كتير بتتلخبط بين الـ Encapsulation والـ Abstraction وده طبيعي لأن الاتنين بيتكلموا عن إخفاء حاجات في البرمجة، بس كل واحد فيهم ليه هدف مختلف.
———
📦 الـ Encapsulation (الاحتواء أو التغليف): يعني إنك "تغلف" البيانات (زي الـ variables) والوظائف (زي الـ functions أو الـ methods) اللي بتتعامل مع البيانات دي داخل كائن واحد (class)، وكمان تمنع أي حد من خارج الكائن ده إنه يتعامل معاهم بشكل مباشر.
بمعنى تاني: بتخبي التفاصيل الداخلية، وبتخلي فيه واجهة واحدة بس الناس تتعامل معاها.
وده بيحافظ على الداتا من إنها تتغير بشكل خطأ أو عشوائي.
———
🛡 مثال بسيط:
لو عندك
BankAccount
class فيه متغير اسمه balance
، مش المفروض أي حد يقدر يغير balance
على مزاجه.لازم تعدي من method زي
deposit
أو withdraw
، ودي بتحط شروط (زي إنك مينفعش تسحب أكتر من اللي موجود).يعني الكود بيكون كده:
class BankAccount {
private int balance;
public void deposit(int amount) {
if (amount > 0) balance += amount;
}
public int getBalance() {
return balance;
}
}
هنا احنا "غلفنا" البيانات وخبيناها وخلينا التعامل معاها من خلال methods بس ✅
———
🎭 الـ Abstraction (التجريد): يعني إنك تركز على "إيه اللي الـ class بيعمله"، وتخبي "إزاي بيعمله"
بمعنى إنك بتعمل للـ user واجهة بسيطة يتعامل بيها، وما تعرفه التفاصيل الداخلية حصلت إزاي.
مثلًا: أنت لما بتشغل الغسالة من الزرار، مش لازم تعرف إزاي الموتور بيشتغل أو الميه بتتوزع أو إزاي البرنامج بيعدّ الوقت.
كل اللي يهمك هو إنك تضغط الزرار وهي تشتغل.
نفس الفكرة في الكود:
لو عندك method اسمها
sendEmail(to, subject, body)
، فالمستخدم مش محتاج يعرف الـ SMTP settings أو التفاصيل اللي بتحصل ورا الكواليس. كل اللي محتاجه إنه يبعت الإيميل وخلاص.———
#دقيقة_برمجة
❤14👍1