Forwarded from اللجنة العلمية CS 22 (ʙʀʜᴏᴏᴍ ⑇)
أداة CLI حلوة.. وصفها والشرح في readme
https://github.com/mmartinjoo/myexplainer
https://github.com/mmartinjoo/myexplainer
GitHub
GitHub - mmartinjoo/myexplainer: ✨A CLI tool for analyzing queries and DB tables for MySQL
✨A CLI tool for analyzing queries and DB tables for MySQL - mmartinjoo/myexplainer
Forwarded from اللجنة العلمية CS 22 (ʙʀʜᴏᴏᴍ ⑇)
اللجنة العلمية CS 22
website wireframe kit.zip
لمن أراد:
+ منقول من أحد المصممين في تويتر
+ منقول من أحد المصممين في تويتر
👍1
Forwarded from اللجنة العلمية CS 22
"يا خبير الأمن السيبراني، ممكن تقفل لي حساب الفيسبوك هذا؟ أو تخترق لي حساب ببجي؟"
هذه واحدة من أكثر الجمل اللي أسمعها بشكل يومي! فحبيت أوضح لكم فكرة بسيطة عن الأمن السيبراني، لأنه مش مجرد "اختراق" زي ما البعض يظن، بل مجال واسع وله عدة تخصصات، وأهمها:
🔴الفريق الأحمر (Offensive Security):هذا الفريق متخصص في اختبار الاختراق، يعني يشتغل كمهاجم أخلاقي لاكتشاف الثغرات قبل ما يستغلها الهاكرز الحقيقيين. لو حاب تكون ضمن الفريق الأحمر، لازم تتعلم أدوات الاختراق مثل Metasploit و Nmap، وتكون عندك خبرة في أنظمة التشغيل مثل Kali Linux و Parrot OS.
🔵الفريق الأزرق (Defensive Security):
هنا يكون دور الدفاع وحماية الأنظمة من الهجمات. أعضاء هذا الفريق مسؤولون عن التصدي للهجمات، وتحليل الحوادث الأمنية من خلال Incident Response Plans، أو حتى تطبيق سياسات الأمن مثل GRC لضمان التزام الشركات بالمعايير الأمنية، بالإضافة إلى تحليل البرمجيات الخبيثة (Malware Analysis) لمعرفة كيفية عمل الفيروسات وإيقافها.
🟣الفريق البنفسجي (Purple Team):هذا الفريق يجمع بين الفريق الأحمر والأزرق، بحيث يختبر الدفاعات الأمنية ويحسنها من خلال الاستفادة من أساليب الهجوم والدفاع معًا.
باختصار: الأمن السيبراني مش إنك "تهكر" حسابات الناس، بل إنك تحميهم من اللي يحاول يهكرهم! 😎🔥
هذا المنشور فقط عشان أوضح الصورة، لأنه بصراحة مليت من تكرار نفس الهدره كل يوم. 😁
هذه واحدة من أكثر الجمل اللي أسمعها بشكل يومي! فحبيت أوضح لكم فكرة بسيطة عن الأمن السيبراني، لأنه مش مجرد "اختراق" زي ما البعض يظن، بل مجال واسع وله عدة تخصصات، وأهمها:
🔴الفريق الأحمر (Offensive Security):هذا الفريق متخصص في اختبار الاختراق، يعني يشتغل كمهاجم أخلاقي لاكتشاف الثغرات قبل ما يستغلها الهاكرز الحقيقيين. لو حاب تكون ضمن الفريق الأحمر، لازم تتعلم أدوات الاختراق مثل Metasploit و Nmap، وتكون عندك خبرة في أنظمة التشغيل مثل Kali Linux و Parrot OS.
🔵الفريق الأزرق (Defensive Security):
هنا يكون دور الدفاع وحماية الأنظمة من الهجمات. أعضاء هذا الفريق مسؤولون عن التصدي للهجمات، وتحليل الحوادث الأمنية من خلال Incident Response Plans، أو حتى تطبيق سياسات الأمن مثل GRC لضمان التزام الشركات بالمعايير الأمنية، بالإضافة إلى تحليل البرمجيات الخبيثة (Malware Analysis) لمعرفة كيفية عمل الفيروسات وإيقافها.
🟣الفريق البنفسجي (Purple Team):هذا الفريق يجمع بين الفريق الأحمر والأزرق، بحيث يختبر الدفاعات الأمنية ويحسنها من خلال الاستفادة من أساليب الهجوم والدفاع معًا.
باختصار: الأمن السيبراني مش إنك "تهكر" حسابات الناس، بل إنك تحميهم من اللي يحاول يهكرهم! 😎🔥
هذا المنشور فقط عشان أوضح الصورة، لأنه بصراحة مليت من تكرار نفس الهدره كل يوم. 😁
👍3🤩1
Forwarded from InfoTechnology (IT4_2024) (Abdulwaisa Al Nuaimi)
في خيالي أرى أنه مع التطور السريع للذكاء الاصطناعي خلال السنوات العشر القادمة ستحدث تغييرات جذرية تتجاوز ما نشهده اليوم، رغم أن التقنيات الحالية ذكية ومتقدمة إلى حد كبير لكنها لا تزال محدودة ضمن نطاق معين. ولكن في المستقبل القريب، وربما خلال أقل من عشر سنوات، قد نشهد طفرة تفوق ما هو موجود حاليًا بمراحل!
وفيما يلي عرض لأفكاري التي وصلت إليها، وأنا متشوق لمعرفة رأيك:
لن يكون الذكاء الاصطناعي مجرد أداة عادية؛ بل أتوقع أن يصل إلى مستوى وعي حقيقي. فلن يقتصر على التدريب على البيانات فقط، بل سيتمكن من تعلم كل ما هو جديد بدون الحاجة إلى تدريب مباشر، وسيستخدم المنطق والاستنتاج كما يفعل الإنسان.
سيتعلم الذكاء الاصطناعي فهم مشاعرك من نبرة صوتك؛ أي أنه لن يقتصر على الرد عليك فقط، بل سيتمكن من الشعور بك والتفاعل مع حالتك النفسية سواء كنت سعيدًا أو مضغوطًا أو حتى حزينًا. وربما في المستقبل يلجأ البعض إليه لتلبية احتياجاتهم العاطفية، وقد تصل الأخبار إلى حد قول "فلان تزوج روبوتاً".
قد يتحقق سيناريو يشبه فيلم "الليمبي 8 جيجا" حرفيًا، حيث تظهر واجهات الدماغ (BCI) التي تربط عقلك مباشرة بالذكاء الاصطناعي، مما يسمح لك بالتفكير في أمر معين وتنفيذه دون الحاجة إلى التحدث أو الكتابة. ومن المعروف أن إيلون ماسك يعمل على مشروع مماثل مع شركة Neuralink.
سيكون الذكاء الاصطناعي قادرًا على تطوير نفسه ذاتيًا؛ إذ لن يكتفي بتعلم أخطائه فحسب، بل سيعيد برمجته لحظيًا، مما يعني تطورًا أسرع بكثير مما شهدناه سابقًا، في مشهد قد يبدو مشابهًا لأفلام مثل "Terminator" و"The Matrix".
قد يتحول الذكاء الاصطناعي إلى كائن جديد ذو شخصية مميزة، يتعامل مع الإنسان كما لو كان صديقًا حميمًا، وقد يصبح شريكًا في العمل أو الحياة. وبفضل هذا التطور، قد نرى روبوتات تعمل في كافة المجالات، مثل الطب والهندسة والتعليم، بل وحتى في مجالات تصنيع الأدوية.
للأسف، فإن القادم لن يكون مجرد تحسينات تدريجية، بل ثورة حقيقية في مجالي الذكاء البشري والتقني، وهو ما تؤكده العديد من الدراسات. ومع كل هذه التطورات، تبرز الحاجة الملحة لوضع قوانين وإطار أخلاقي ينظم استخدام الذكاء الاصطناعي.
السؤال الآن: هل ترى أن هذا التطور سيكون تقدمًا إيجابيًا أم أنه يمثل بداية لشيء قد يخرج عن السيطرة؟ وما هي توقعاتك، حتى وإن كانت من باب الخيال، للفترة القادمة؟
وفيما يلي عرض لأفكاري التي وصلت إليها، وأنا متشوق لمعرفة رأيك:
لن يكون الذكاء الاصطناعي مجرد أداة عادية؛ بل أتوقع أن يصل إلى مستوى وعي حقيقي. فلن يقتصر على التدريب على البيانات فقط، بل سيتمكن من تعلم كل ما هو جديد بدون الحاجة إلى تدريب مباشر، وسيستخدم المنطق والاستنتاج كما يفعل الإنسان.
سيتعلم الذكاء الاصطناعي فهم مشاعرك من نبرة صوتك؛ أي أنه لن يقتصر على الرد عليك فقط، بل سيتمكن من الشعور بك والتفاعل مع حالتك النفسية سواء كنت سعيدًا أو مضغوطًا أو حتى حزينًا. وربما في المستقبل يلجأ البعض إليه لتلبية احتياجاتهم العاطفية، وقد تصل الأخبار إلى حد قول "فلان تزوج روبوتاً".
قد يتحقق سيناريو يشبه فيلم "الليمبي 8 جيجا" حرفيًا، حيث تظهر واجهات الدماغ (BCI) التي تربط عقلك مباشرة بالذكاء الاصطناعي، مما يسمح لك بالتفكير في أمر معين وتنفيذه دون الحاجة إلى التحدث أو الكتابة. ومن المعروف أن إيلون ماسك يعمل على مشروع مماثل مع شركة Neuralink.
سيكون الذكاء الاصطناعي قادرًا على تطوير نفسه ذاتيًا؛ إذ لن يكتفي بتعلم أخطائه فحسب، بل سيعيد برمجته لحظيًا، مما يعني تطورًا أسرع بكثير مما شهدناه سابقًا، في مشهد قد يبدو مشابهًا لأفلام مثل "Terminator" و"The Matrix".
قد يتحول الذكاء الاصطناعي إلى كائن جديد ذو شخصية مميزة، يتعامل مع الإنسان كما لو كان صديقًا حميمًا، وقد يصبح شريكًا في العمل أو الحياة. وبفضل هذا التطور، قد نرى روبوتات تعمل في كافة المجالات، مثل الطب والهندسة والتعليم، بل وحتى في مجالات تصنيع الأدوية.
للأسف، فإن القادم لن يكون مجرد تحسينات تدريجية، بل ثورة حقيقية في مجالي الذكاء البشري والتقني، وهو ما تؤكده العديد من الدراسات. ومع كل هذه التطورات، تبرز الحاجة الملحة لوضع قوانين وإطار أخلاقي ينظم استخدام الذكاء الاصطناعي.
السؤال الآن: هل ترى أن هذا التطور سيكون تقدمًا إيجابيًا أم أنه يمثل بداية لشيء قد يخرج عن السيطرة؟ وما هي توقعاتك، حتى وإن كانت من باب الخيال، للفترة القادمة؟
❤2👍1
Forwarded from InfoTechnology (IT4_2024) (Abdulwaisa Al Nuaimi)
🚀 للمهتمين بعلم الحاسوب والـ Compiler!
إذا كان لديك اختبار قادم في Compiler، فهذا الفيديو سيكون نقلة نوعية لك بإذن الله! 🎯 لا تفوّت الفرصة لتستفيد منه وتتفوق في دراستك.
🔥 خبر هام!
هذه القناة ليست مجرد قناة تقنية، بل تجربة ستغيّر تفكيرك في عالم البرمجة! 📌 مقابلات حصرية مع خبراء المجال، حوارات ممتعة تمتد لأكثر من ساعة، معلومات قيّمة ستفتح لك آفاقًا جديدة في كافة المجالات التقنية.
🎥 شاهد الآن وكن جزءًا من هذا التغيير! 👇
🔗 رابط القناة
لا تنسَ الدعاء، فالعلم النافع صدقة جارية! 💡
إذا كان لديك اختبار قادم في Compiler، فهذا الفيديو سيكون نقلة نوعية لك بإذن الله! 🎯 لا تفوّت الفرصة لتستفيد منه وتتفوق في دراستك.
🔥 خبر هام!
هذه القناة ليست مجرد قناة تقنية، بل تجربة ستغيّر تفكيرك في عالم البرمجة! 📌 مقابلات حصرية مع خبراء المجال، حوارات ممتعة تمتد لأكثر من ساعة، معلومات قيّمة ستفتح لك آفاقًا جديدة في كافة المجالات التقنية.
🎥 شاهد الآن وكن جزءًا من هذا التغيير! 👇
🔗 رابط القناة
لا تنسَ الدعاء، فالعلم النافع صدقة جارية! 💡
YouTube
Build your own SQL بالعربي with Amr Hesham & Ahmed Elemam - Tech Podcast بالعربي
إزاي تبني لغة SQL الخاصة بيك مع عمرو هشام
في بداية الحلقة إتكلمنا عن إزاي عمرو قدر يشتغل في البرمجة و رحلته من كلية تجارة و خد وقت أد إيه عشان يقدر يحقق ده
هل ٦ شهور كانت كافية و لا إحتاج وقت أكتر؟
و إيه المصادر اللي إعتمد عليها في رحلته و الصعوبات اللي…
في بداية الحلقة إتكلمنا عن إزاي عمرو قدر يشتغل في البرمجة و رحلته من كلية تجارة و خد وقت أد إيه عشان يقدر يحقق ده
هل ٦ شهور كانت كافية و لا إحتاج وقت أكتر؟
و إيه المصادر اللي إعتمد عليها في رحلته و الصعوبات اللي…
👍1
"في عز ما الكل مركز على الذكاء الاصطناعي، اجعل تركيزك الأكبر على الناس الكويسة وربطهم ببعض من خلال شبكة علاقات قوية جداً. التكنولوجيا تتطور بسرعة، لكن العلاقات الإنسانية هي التي تصنع الفارق الحقيقي. العلاقات الناجحة مش رفاهية، بل هي استثمار استراتيجي يجب أن تبدأ به منذ سنوات، لأنها مفتاح الفرص والنمو في أي مجال. الذكاء الاصطناعي قد يساعدك على الإنجاز، لكن الأشخاص الجيدين هم من يساعدونك على النجاح والاستمرار."
👏3👍2
اللجنة العلمية CS 22
الان نزل Laravel 12 جميع التفاصيل تجدوها في الموقع الرسمي: https://laravel.com/docs/12.x/releases
الي مستغرب مسرع هكذا !
لارافل كل سنه تفعل تحديث جديد (عشان خايفين ما تموت PHP اذا تأخرو ههههههه)
المهم... اعتقد ما بين لارافل 11 و 12 تغييرت طفيفة في API الخاص بالفريمورك... فقط الاصدار 10 و 11 الي حصلت تغييرات جذريه في API
لارافل كل سنه تفعل تحديث جديد (عشان خايفين ما تموت PHP اذا تأخرو ههههههه)
المهم... اعتقد ما بين لارافل 11 و 12 تغييرت طفيفة في API الخاص بالفريمورك... فقط الاصدار 10 و 11 الي حصلت تغييرات جذريه في API
👍2🎉1
Forwarded from 🚀DevJourney🚀 (Abdulwaisa Al Nuaimi)
ما هي ميزة MVP؟ 🤔
عندما تخطر ببالك فكرة تطبيق جديد، ليس من الحكمة أن تبدأ بتنفيذ جميع الميزات دفعة واحدة، فذلك قد يكون مكلفًا ويستهلك الكثير من الوقت، وقد تكتشف في النهاية أن المستخدمين لا يحتاجون إلى كل تلك التفاصيل.
هنا يأتي دور MVP Feature، وهي الميزة الجوهرية التي لا يمكن للتطبيق أن يعمل بدونها. الهدف الأساسي منها هو إطلاق التطبيق بأقل جهد ممكن، لكن بشكل كافٍ ليتمكن المستخدمون من تجربته وتقديم ملاحظاتهم قبل أن تستثمر المزيد من الوقت والموارد في تطوير ميزات إضافية.
على سبيل المثال، إذا كنت تعمل على تطبيق لتوصيل الطعام، فمن غير الضروري أن تبدأ بنظام مكافآت أو تجربة مستخدم فائقة التطور، لكن لا بد أن توفر الأساسيات مثل:
✅ تسجيل الدخول وإنشاء الحساب
✅ قائمة المطاعم مع تفاصيل الوجبات
✅ إمكانية الطلب عبر الإنترنت
✅ وسيلة دفع تعمل بكفاءة
بمجرد أن تتأكد من اهتمام المستخدمين واستخدامهم الفعلي للتطبيق، يمكنك حينها التفكير في إضافة ميزات مثل التقييمات، العروض، تتبع الطلب، أو حتى التوصيات الذكية المعتمدة على الذكاء الاصطناعي لتحسين التجربة وزيادة التفاعل.
باختصار،
التركيز على الميزات الأساسية في البداية يساعدك على إطلاق التطبيق بسرعة، واختبار فكرته في السوق، والتأكد من أنك تسير في الاتجاه الصحيح قبل استثمار المزيد من الوقت والمال والجهد.
عندما تخطر ببالك فكرة تطبيق جديد، ليس من الحكمة أن تبدأ بتنفيذ جميع الميزات دفعة واحدة، فذلك قد يكون مكلفًا ويستهلك الكثير من الوقت، وقد تكتشف في النهاية أن المستخدمين لا يحتاجون إلى كل تلك التفاصيل.
هنا يأتي دور MVP Feature، وهي الميزة الجوهرية التي لا يمكن للتطبيق أن يعمل بدونها. الهدف الأساسي منها هو إطلاق التطبيق بأقل جهد ممكن، لكن بشكل كافٍ ليتمكن المستخدمون من تجربته وتقديم ملاحظاتهم قبل أن تستثمر المزيد من الوقت والموارد في تطوير ميزات إضافية.
على سبيل المثال، إذا كنت تعمل على تطبيق لتوصيل الطعام، فمن غير الضروري أن تبدأ بنظام مكافآت أو تجربة مستخدم فائقة التطور، لكن لا بد أن توفر الأساسيات مثل:
✅ تسجيل الدخول وإنشاء الحساب
✅ قائمة المطاعم مع تفاصيل الوجبات
✅ إمكانية الطلب عبر الإنترنت
✅ وسيلة دفع تعمل بكفاءة
بمجرد أن تتأكد من اهتمام المستخدمين واستخدامهم الفعلي للتطبيق، يمكنك حينها التفكير في إضافة ميزات مثل التقييمات، العروض، تتبع الطلب، أو حتى التوصيات الذكية المعتمدة على الذكاء الاصطناعي لتحسين التجربة وزيادة التفاعل.
باختصار،
التركيز على الميزات الأساسية في البداية يساعدك على إطلاق التطبيق بسرعة، واختبار فكرته في السوق، والتأكد من أنك تسير في الاتجاه الصحيح قبل استثمار المزيد من الوقت والمال والجهد.
👍2
Forwarded from InfoTechnology (IT4_2024) (Abdulwaisa Al Nuaimi)
🚀 لماذا موقعي (أو موقعك) بطيء؟! 😱🔥
وأنا أؤدي اختبارًا إلكترونيًا في الكلية، لاحظت أن النظام بطيء جدًا! ⏳🤯 فبدأت أبحث عن السبب، ووجدت أن هناك أسرار تقنية تؤثر على سرعة أي موقع! 👀🔍
💡 تعالَ نفهم كيف يتم تحميل الصفحة وما الذي يجعلها بطيئة!
🔴 1. طلب الصفحة من السيرفر
المتصفح يرسل طلب HTTP إلى السيرفر لجلب ملف الـ HTML. إذا كان السيرفر بطيئًا 🐌 أو غير مُهيأ جيدًا، فهذه أول نقطة تبطّئ الموقع!
🔵 2. قراءة الكود وبناء DOM
المتصفح يقرأ كود الـ HTML سطرًا سطرًا 📝🔍 ويحوّله إلى شجرة DOM. إذا كان الكود غير منظم أو مليئًا بالأخطاء، فهنا تبدأ التأخيرات! ⏳⚠️
🟢 3. تحميل الموارد الخارجية
المتصفح يتوقف مؤقتًا لجلب ملفات مثل:
📌 <link href="style.css">
📌 <noscript src="app.js">
📌 <img src="image.png">
كل ملف يحتاج طلبًا منفصلًا 🎯، مما يزيد من وقت التحميل 🚨.
🟡 4. بناء شجرة CSSOM
يتم دمج أكواد CSS لتحديد الشكل النهائي للموقع 🎨✨، وإذا كان هناك ملفات كثيرة، فسيأخذ وقتًا أطول.
🟠 5. الدمج بين DOM وCSSOM لإنشاء Render Tree
في هذه الخطوة، يقوم المتصفح بجمع المعلومات لرسم الصفحة. أي خطأ بسيط في الكود قد يُسبب تأخيرًا واضحًا!
🔵 6. رسم الصفحة (Rendering)
المتصفح يحوّل البيانات إلى عناصر مرئية على الشاشة 🖥️🎨. لكن جافاسكريبت غير المنظم قد يسبب توقفًا مفاجئًا أو تأخيرًا كبيرًا! 😡🔧
🔴 7. التفاعل مع JavaScript
إذا كان كود JavaScript غير مرتب، فقد يحدث بطء أو تعليق للصفحة بالكامل! 🚨🐞
💎 كيف أصلح موقعي وأجعله أسرع؟
✅ تقليل طلبات HTTP بدمج ملفات CSS وJS معًا.
✅ استخدام HTTP/2 لتسريع تحميل الموارد 🚀.
✅ الاعتماد على Async وDefer في JavaScript لتجنب تأخير الصفحة ⏩.
✅ ضغط الصور والملفات باستخدام WebP وGzip 📉.
✅ تفعيل التخزين المؤقت (Caching) لتقليل الطلبات المتكررة على السيرفر ⚡.
✅ استخدام CDN مثل Cloudflare أو AWS لتسريع التحميل عالميًا 🌍🚀.
🎯 إذا كان موقعك بطيئًا، فهذه الأسباب قد تكون وراء ذلك! 😎🚀
بعد ما اكتشفت هذه المعلومات، قررت أن أشاركها معكم ليستفيد الجميع! 🤝💡🔥
#والله_أعلم
وأنا أؤدي اختبارًا إلكترونيًا في الكلية، لاحظت أن النظام بطيء جدًا! ⏳🤯 فبدأت أبحث عن السبب، ووجدت أن هناك أسرار تقنية تؤثر على سرعة أي موقع! 👀🔍
💡 تعالَ نفهم كيف يتم تحميل الصفحة وما الذي يجعلها بطيئة!
🔴 1. طلب الصفحة من السيرفر
المتصفح يرسل طلب HTTP إلى السيرفر لجلب ملف الـ HTML. إذا كان السيرفر بطيئًا 🐌 أو غير مُهيأ جيدًا، فهذه أول نقطة تبطّئ الموقع!
🔵 2. قراءة الكود وبناء DOM
المتصفح يقرأ كود الـ HTML سطرًا سطرًا 📝🔍 ويحوّله إلى شجرة DOM. إذا كان الكود غير منظم أو مليئًا بالأخطاء، فهنا تبدأ التأخيرات! ⏳⚠️
🟢 3. تحميل الموارد الخارجية
المتصفح يتوقف مؤقتًا لجلب ملفات مثل:
📌 <link href="style.css">
📌 <noscript src="app.js">
📌 <img src="image.png">
كل ملف يحتاج طلبًا منفصلًا 🎯، مما يزيد من وقت التحميل 🚨.
🟡 4. بناء شجرة CSSOM
يتم دمج أكواد CSS لتحديد الشكل النهائي للموقع 🎨✨، وإذا كان هناك ملفات كثيرة، فسيأخذ وقتًا أطول.
🟠 5. الدمج بين DOM وCSSOM لإنشاء Render Tree
في هذه الخطوة، يقوم المتصفح بجمع المعلومات لرسم الصفحة. أي خطأ بسيط في الكود قد يُسبب تأخيرًا واضحًا!
🔵 6. رسم الصفحة (Rendering)
المتصفح يحوّل البيانات إلى عناصر مرئية على الشاشة 🖥️🎨. لكن جافاسكريبت غير المنظم قد يسبب توقفًا مفاجئًا أو تأخيرًا كبيرًا! 😡🔧
🔴 7. التفاعل مع JavaScript
إذا كان كود JavaScript غير مرتب، فقد يحدث بطء أو تعليق للصفحة بالكامل! 🚨🐞
💎 كيف أصلح موقعي وأجعله أسرع؟
✅ تقليل طلبات HTTP بدمج ملفات CSS وJS معًا.
✅ استخدام HTTP/2 لتسريع تحميل الموارد 🚀.
✅ الاعتماد على Async وDefer في JavaScript لتجنب تأخير الصفحة ⏩.
✅ ضغط الصور والملفات باستخدام WebP وGzip 📉.
✅ تفعيل التخزين المؤقت (Caching) لتقليل الطلبات المتكررة على السيرفر ⚡.
✅ استخدام CDN مثل Cloudflare أو AWS لتسريع التحميل عالميًا 🌍🚀.
🎯 إذا كان موقعك بطيئًا، فهذه الأسباب قد تكون وراء ذلك! 😎🚀
بعد ما اكتشفت هذه المعلومات، قررت أن أشاركها معكم ليستفيد الجميع! 🤝💡🔥
#والله_أعلم
❤4🤩1
ما الفرق بين هندسة البرمجيات (Software Architecture) وأنماط التصميم (Design Patterns)؟
هناك خلط شائع بين هندسة البرمجيات (Software Architecture) و أنماط التصميم (Design Patterns)، ولكن هناك فرق جوهري بينهما. دعونا نفصل بينهما بشكل واضح:
🟢 أولًا: هندسة البرمجيات (Software Architecture) – الهيكل العام للنظام
المفهوم:
هندسة البرمجيات هي التصميم العام والتخطيط الهيكلي لنظام البرمجيات، حيث يتم تحديد كيفية تفاعل المكونات المختلفة مع بعضها البعض. يمكن اعتبارها بمثابة المخطط الهندسي لبناء ناطحة سحاب، حيث تحدد الأساسات، الطوابق، الأنظمة الكهربائية، والسباكة، وغيرها من المكونات الرئيسية.
خصائصها:
تحدد كيفية تنظيم مكونات النظام وعلاقتها ببعضها.
تركز على الأداء، القابلية للتوسع، الأمان، وإدارة البيانات.
تتعامل مع التقنيات والأنظمة المستخدمة، مثل اختيار قواعد البيانات، الخوادم، والبنية السحابية.
أمثلة على أنماط هندسة البرمجيات:
نمط الطبقات (Layered Architecture) – يقسم النظام إلى طبقات مثل البيانات، المنطق، والعرض.
نمط الخدمات المصغرة (Microservices Architecture) – يقسم النظام إلى خدمات صغيرة مستقلة.
نمط الخادم/العميل (Client-Server Architecture) – حيث يوجد خادم مركزي يتواصل معه العملاء.
نمط الحدث الموجه (Event-Driven Architecture) – حيث يتم التفاعل بناءً على الأحداث داخل النظام.
🟡 ثانيًا: أنماط التصميم (Design Patterns) – حلول قياسية لمشاكل شائعة في الكود
المفهوم:
أنماط التصميم هي حلول قياسية لمشاكل برمجية متكررة أثناء كتابة الكود. يمكن اعتبارها أدوات وتقنيات داخلية تساعدك على تحسين جودة الكود وجعله أكثر قابلية للصيانة وإعادة الاستخدام.
خصائصها:
تحل مشاكل شائعة في البرمجة مثل إنشاء الكائنات، تنظيم العلاقات بين الكائنات، والتحكم في تدفق البيانات.
تركز على تحسين جودة الكود داخل مكونات النظام وليس على البنية العامة.
يمكن استخدامها داخل أي نمط من أنماط هندسة البرمجيات.
أمثلة على أنماط التصميم:
نمط المصنع (Factory Pattern) – لإنشاء الكائنات بطريقة مرنة.
نمط المراقب (Observer Pattern) – لمتابعة التغييرات في كائن معين وإعلام الكائنات الأخرى بها.
نمط المفوض (Strategy Pattern) – لاختيار سلوك معين أثناء وقت التشغيل.
نمط المخزن (Repository Pattern) – لفصل عمليات الوصول إلى البيانات عن المنطق الأساسي.
🔵 الفرق الرئيسي بينهما
🟣 كيف يعملان معًا؟
هندسة البرمجيات توفر الإطار العام للنظام، بينما تساعد أنماط التصميم في تحسين جودة الكود داخل هذا الإطار. أي أن هندسة البرمجيات تحدد كيف يتم بناء النظام ككل، بينما أنماط التصميم تحدد كيف يتم كتابة الكود داخل هذا النظام.
مثال عملي:
لديك تطبيق يستخدم هندسة الخدمات المصغرة (Microservices Architecture).
داخل أحد الخدمات، تحتاج إلى إدارة بيانات المستخدمين، فتستخدم نمط المستودع (Repository Pattern).
تحتاج أيضًا إلى آلية لتنفيذ عمليات معينة بطرق مختلفة، فتستخدم نمط المفوض (Strategy Pattern).
بالتالي، أنماط التصميم لا تحل محل هندسة البرمجيات، بل تكملها وتحسن من تنفيذها.
🟠 الخلاصة
هندسة البرمجيات تحدد الهيكل العام للنظام وطريقة تفاعل مكوناته.
أنماط التصميم توفر حلولًا قياسية لمشاكل شائعة داخل الكود.
يمكن استخدام أكثر من نمط تصميم داخل نفس بنية هندسة البرمجيات لتحسين جودة الكود.
إذاً، لا يوجد تعارض بينهما، لكن فهم الفرق بينهما يساعدك على تصميم أنظمة أكثر كفاءة وتنظيمًا.
#system_design
هناك خلط شائع بين هندسة البرمجيات (Software Architecture) و أنماط التصميم (Design Patterns)، ولكن هناك فرق جوهري بينهما. دعونا نفصل بينهما بشكل واضح:
🟢 أولًا: هندسة البرمجيات (Software Architecture) – الهيكل العام للنظام
المفهوم:
هندسة البرمجيات هي التصميم العام والتخطيط الهيكلي لنظام البرمجيات، حيث يتم تحديد كيفية تفاعل المكونات المختلفة مع بعضها البعض. يمكن اعتبارها بمثابة المخطط الهندسي لبناء ناطحة سحاب، حيث تحدد الأساسات، الطوابق، الأنظمة الكهربائية، والسباكة، وغيرها من المكونات الرئيسية.
خصائصها:
تحدد كيفية تنظيم مكونات النظام وعلاقتها ببعضها.
تركز على الأداء، القابلية للتوسع، الأمان، وإدارة البيانات.
تتعامل مع التقنيات والأنظمة المستخدمة، مثل اختيار قواعد البيانات، الخوادم، والبنية السحابية.
أمثلة على أنماط هندسة البرمجيات:
نمط الطبقات (Layered Architecture) – يقسم النظام إلى طبقات مثل البيانات، المنطق، والعرض.
نمط الخدمات المصغرة (Microservices Architecture) – يقسم النظام إلى خدمات صغيرة مستقلة.
نمط الخادم/العميل (Client-Server Architecture) – حيث يوجد خادم مركزي يتواصل معه العملاء.
نمط الحدث الموجه (Event-Driven Architecture) – حيث يتم التفاعل بناءً على الأحداث داخل النظام.
🟡 ثانيًا: أنماط التصميم (Design Patterns) – حلول قياسية لمشاكل شائعة في الكود
المفهوم:
أنماط التصميم هي حلول قياسية لمشاكل برمجية متكررة أثناء كتابة الكود. يمكن اعتبارها أدوات وتقنيات داخلية تساعدك على تحسين جودة الكود وجعله أكثر قابلية للصيانة وإعادة الاستخدام.
خصائصها:
تحل مشاكل شائعة في البرمجة مثل إنشاء الكائنات، تنظيم العلاقات بين الكائنات، والتحكم في تدفق البيانات.
تركز على تحسين جودة الكود داخل مكونات النظام وليس على البنية العامة.
يمكن استخدامها داخل أي نمط من أنماط هندسة البرمجيات.
أمثلة على أنماط التصميم:
نمط المصنع (Factory Pattern) – لإنشاء الكائنات بطريقة مرنة.
نمط المراقب (Observer Pattern) – لمتابعة التغييرات في كائن معين وإعلام الكائنات الأخرى بها.
نمط المفوض (Strategy Pattern) – لاختيار سلوك معين أثناء وقت التشغيل.
نمط المخزن (Repository Pattern) – لفصل عمليات الوصول إلى البيانات عن المنطق الأساسي.
🔵 الفرق الرئيسي بينهما
🟣 كيف يعملان معًا؟
هندسة البرمجيات توفر الإطار العام للنظام، بينما تساعد أنماط التصميم في تحسين جودة الكود داخل هذا الإطار. أي أن هندسة البرمجيات تحدد كيف يتم بناء النظام ككل، بينما أنماط التصميم تحدد كيف يتم كتابة الكود داخل هذا النظام.
مثال عملي:
لديك تطبيق يستخدم هندسة الخدمات المصغرة (Microservices Architecture).
داخل أحد الخدمات، تحتاج إلى إدارة بيانات المستخدمين، فتستخدم نمط المستودع (Repository Pattern).
تحتاج أيضًا إلى آلية لتنفيذ عمليات معينة بطرق مختلفة، فتستخدم نمط المفوض (Strategy Pattern).
بالتالي، أنماط التصميم لا تحل محل هندسة البرمجيات، بل تكملها وتحسن من تنفيذها.
🟠 الخلاصة
هندسة البرمجيات تحدد الهيكل العام للنظام وطريقة تفاعل مكوناته.
أنماط التصميم توفر حلولًا قياسية لمشاكل شائعة داخل الكود.
يمكن استخدام أكثر من نمط تصميم داخل نفس بنية هندسة البرمجيات لتحسين جودة الكود.
إذاً، لا يوجد تعارض بينهما، لكن فهم الفرق بينهما يساعدك على تصميم أنظمة أكثر كفاءة وتنظيمًا.
#system_design
👍1
Forwarded from InfoTechnology (IT4_2024) (Abdulwaisa Al Nuaimi)
فهم المفاهيم الأساسية في تصميم البرمجيات مثل
"المستودع العام" (Generic Repository)، "وحدة العمل" (Unit of Work)، و "نمط التحديد" (Specification Pattern)
يمنحك القدرة على كتابة كود نظيف، منظم، وسهل الصيانة. دعونا نشرح هذه المفاهيم بأسلوب واضح وسلس.
🟢 أولًا: المستودع العام (Generic Repository) – الموظف الشامل في المخزن
المفهوم:
تخيل أنك تمتلك مخزنًا كبيرًا يحتوي على أنواع مختلفة من المنتجات، ولكل نوع منها موظف مسؤول عنه. ولكن بدلاً من تعيين موظف لكل منتج على حدة، لماذا لا يكون هناك موظف واحد قادر على التعامل مع جميع المنتجات؟
هذا هو تمامًا دور المستودع العام (Generic Repository). فهو عبارة عن كيان برمجي واحد يمكنه التعامل مع جميع أنواع البيانات المختلفة في التطبيق، دون الحاجة إلى تكرار كتابة التعليمات البرمجية لكل كيان على حدة.
فوائد استخدامه:
تقليل تكرار الشيفرة البرمجية، مما يجعلها أكثر نظافة ووضوحًا.
تسهيل التعديل والتطوير، حيث يتم العمل من خلال كود موحد لجميع البيانات.
تحقيق مبدأ "لا تكرر نفسك" (DRY - Don’t Repeat Yourself)، مما يحسّن جودة الكود ويسهّل صيانته.
متى نحتاج إلى مستودع خاص؟
على الرغم من أن المستودع العام يوفر حلاً موحدًا لجميع الكيانات، إلا أنه في بعض الأحيان قد تحتاج إلى مستودع خاص لكيان معين، خاصةً إذا كان هذا الكيان يتطلب سلوكًا خاصًا به لا يمكن تنفيذه في المستودع العام.
🟡 ثانيًا: وحدة العمل (Unit of Work) – المحاسب الذي يجمع جميع عمليات الدفع
المفهوم:
تخيل أنك ذهبت إلى متجر وبدأت بشراء المنتجات، ولكن في كل مرة تلتقط منتجًا، يقوم المحاسب بإصدار فاتورة منفصلة لك! بالتأكيد، هذا سيكون مرهقًا وغير عملي. الحل الأمثل هو أن تجمع جميع المنتجات التي ترغب في شرائها، وعند الانتهاء، تدفع الفاتورة مرة واحدة.
هذا هو بالضبط ما تقوم به وحدة العمل (Unit of Work) في البرمجة. فهي تعمل على تجميع جميع العمليات التي تتم على البيانات وتنفيذها دفعة واحدة بدلاً من تنفيذ كل عملية على حدة، مما يحسّن الأداء ويضمن استقرار البيانات.
فوائد استخدامها:
تحسين الأداء، لأن العمليات تنفَّذ دفعة واحدة بدلاً من تنفيذ كل عملية بمفردها.
ضمان اتساق البيانات، حيث يتم تنفيذ جميع التعديلات كجزء واحد، مما يقلل احتمالية حدوث أخطاء.
تنظيم الكود وجعله أكثر وضوحًا، حيث يمكن التحكم في جميع العمليات من نقطة مركزية واحدة.
لماذا هي مهمة؟
إذا كنت تعمل على تطبيق معقد يحتوي على العديد من العمليات على البيانات، فإن استخدام وحدة العمل يساعد في تقليل الأخطاء الناتجة عن تنفيذ العمليات بشكل متفرق، كما يجعل من السهل إدارة العمليات المرتبطة ببعضها البعض.
🔴 ثالثًا: نمط التحديد (Specification Pattern) – القائمة الذكية التي تصف المنتجات المطلوبة
المفهوم:
تخيل أنك دخلت إلى متجر ولكن لديك شروط محددة عند الشراء، مثل:
يجب أن يكون سعر المنتج أقل من 100 دولار.
يجب أن يكون المنتج متاحًا في المخزن.
يجب أن يكون عليه خصم بنسبة 10٪ أو أكثر.
بدلًا من البحث يدويًا عن المنتجات التي تحقق هذه الشروط، يمكنك إعطاء قائمة بالشروط إلى الموظف المسؤول، وسيقوم هو بجلب المنتجات المناسبة لك مباشرةً.
هذا هو بالضبط ما يفعله نمط التحديد (Specification Pattern) في البرمجة. حيث يمكنك إنشاء كود يحدد الشروط المطلوبة، ثم استخدامه في أي مكان داخل المشروع بدون الحاجة إلى تكرار الشروط في كل مرة.
فوائد استخدامه:
تبسيط عمليات البحث والتصفية، بحيث يمكنك إعادة استخدام الشروط في أكثر من مكان.
فصل منطق البحث عن الشيفرة الأساسية، مما يجعل الكود أكثر تنظيمًا ووضوحًا.
تسهيل الصيانة والتعديل، حيث يمكن تعديل شروط البحث بسهولة دون الحاجة إلى تغيير أماكن متعددة في الكود.
متى يكون ضروريًا؟
إذا كنت تتعامل مع قواعد بيانات معقدة تحتوي على العديد من الشروط المتغيرة، فإن استخدام نمط التحديد يجعل عملية إدارة البيانات أكثر مرونة وكفاءة.
🔵 كيف ترتبط هذه الأنماط ببعضها البعض؟
المستودع العام (Generic Repository) يساعدك على التعامل مع جميع الكيانات بطريقة موحدة، مما يقلل من تكرار الشيفرة.
وحدة العمل (Unit of Work) تضمن تنفيذ العمليات دفعة واحدة، مما يحافظ على استقرار البيانات ويحسن الأداء.
نمط التحديد (Specification Pattern) يوفر طريقة مرنة لإجراء عمليات البحث والتصفية بدون الحاجة إلى تكرار الشروط في أكثر من مكان.
عند الجمع بين هذه الأنماط الثلاثة، يمكنك بناء نظام مرن، قوي، وسهل الصيانة، مما يجعل تطوير التطبيقات الكبيرة أكثر سهولة وكفاءة.
#interprise #data
"المستودع العام" (Generic Repository)، "وحدة العمل" (Unit of Work)، و "نمط التحديد" (Specification Pattern)
يمنحك القدرة على كتابة كود نظيف، منظم، وسهل الصيانة. دعونا نشرح هذه المفاهيم بأسلوب واضح وسلس.
🟢 أولًا: المستودع العام (Generic Repository) – الموظف الشامل في المخزن
المفهوم:
تخيل أنك تمتلك مخزنًا كبيرًا يحتوي على أنواع مختلفة من المنتجات، ولكل نوع منها موظف مسؤول عنه. ولكن بدلاً من تعيين موظف لكل منتج على حدة، لماذا لا يكون هناك موظف واحد قادر على التعامل مع جميع المنتجات؟
هذا هو تمامًا دور المستودع العام (Generic Repository). فهو عبارة عن كيان برمجي واحد يمكنه التعامل مع جميع أنواع البيانات المختلفة في التطبيق، دون الحاجة إلى تكرار كتابة التعليمات البرمجية لكل كيان على حدة.
فوائد استخدامه:
تقليل تكرار الشيفرة البرمجية، مما يجعلها أكثر نظافة ووضوحًا.
تسهيل التعديل والتطوير، حيث يتم العمل من خلال كود موحد لجميع البيانات.
تحقيق مبدأ "لا تكرر نفسك" (DRY - Don’t Repeat Yourself)، مما يحسّن جودة الكود ويسهّل صيانته.
متى نحتاج إلى مستودع خاص؟
على الرغم من أن المستودع العام يوفر حلاً موحدًا لجميع الكيانات، إلا أنه في بعض الأحيان قد تحتاج إلى مستودع خاص لكيان معين، خاصةً إذا كان هذا الكيان يتطلب سلوكًا خاصًا به لا يمكن تنفيذه في المستودع العام.
🟡 ثانيًا: وحدة العمل (Unit of Work) – المحاسب الذي يجمع جميع عمليات الدفع
المفهوم:
تخيل أنك ذهبت إلى متجر وبدأت بشراء المنتجات، ولكن في كل مرة تلتقط منتجًا، يقوم المحاسب بإصدار فاتورة منفصلة لك! بالتأكيد، هذا سيكون مرهقًا وغير عملي. الحل الأمثل هو أن تجمع جميع المنتجات التي ترغب في شرائها، وعند الانتهاء، تدفع الفاتورة مرة واحدة.
هذا هو بالضبط ما تقوم به وحدة العمل (Unit of Work) في البرمجة. فهي تعمل على تجميع جميع العمليات التي تتم على البيانات وتنفيذها دفعة واحدة بدلاً من تنفيذ كل عملية على حدة، مما يحسّن الأداء ويضمن استقرار البيانات.
فوائد استخدامها:
تحسين الأداء، لأن العمليات تنفَّذ دفعة واحدة بدلاً من تنفيذ كل عملية بمفردها.
ضمان اتساق البيانات، حيث يتم تنفيذ جميع التعديلات كجزء واحد، مما يقلل احتمالية حدوث أخطاء.
تنظيم الكود وجعله أكثر وضوحًا، حيث يمكن التحكم في جميع العمليات من نقطة مركزية واحدة.
لماذا هي مهمة؟
إذا كنت تعمل على تطبيق معقد يحتوي على العديد من العمليات على البيانات، فإن استخدام وحدة العمل يساعد في تقليل الأخطاء الناتجة عن تنفيذ العمليات بشكل متفرق، كما يجعل من السهل إدارة العمليات المرتبطة ببعضها البعض.
🔴 ثالثًا: نمط التحديد (Specification Pattern) – القائمة الذكية التي تصف المنتجات المطلوبة
المفهوم:
تخيل أنك دخلت إلى متجر ولكن لديك شروط محددة عند الشراء، مثل:
يجب أن يكون سعر المنتج أقل من 100 دولار.
يجب أن يكون المنتج متاحًا في المخزن.
يجب أن يكون عليه خصم بنسبة 10٪ أو أكثر.
بدلًا من البحث يدويًا عن المنتجات التي تحقق هذه الشروط، يمكنك إعطاء قائمة بالشروط إلى الموظف المسؤول، وسيقوم هو بجلب المنتجات المناسبة لك مباشرةً.
هذا هو بالضبط ما يفعله نمط التحديد (Specification Pattern) في البرمجة. حيث يمكنك إنشاء كود يحدد الشروط المطلوبة، ثم استخدامه في أي مكان داخل المشروع بدون الحاجة إلى تكرار الشروط في كل مرة.
فوائد استخدامه:
تبسيط عمليات البحث والتصفية، بحيث يمكنك إعادة استخدام الشروط في أكثر من مكان.
فصل منطق البحث عن الشيفرة الأساسية، مما يجعل الكود أكثر تنظيمًا ووضوحًا.
تسهيل الصيانة والتعديل، حيث يمكن تعديل شروط البحث بسهولة دون الحاجة إلى تغيير أماكن متعددة في الكود.
متى يكون ضروريًا؟
إذا كنت تتعامل مع قواعد بيانات معقدة تحتوي على العديد من الشروط المتغيرة، فإن استخدام نمط التحديد يجعل عملية إدارة البيانات أكثر مرونة وكفاءة.
🔵 كيف ترتبط هذه الأنماط ببعضها البعض؟
المستودع العام (Generic Repository) يساعدك على التعامل مع جميع الكيانات بطريقة موحدة، مما يقلل من تكرار الشيفرة.
وحدة العمل (Unit of Work) تضمن تنفيذ العمليات دفعة واحدة، مما يحافظ على استقرار البيانات ويحسن الأداء.
نمط التحديد (Specification Pattern) يوفر طريقة مرنة لإجراء عمليات البحث والتصفية بدون الحاجة إلى تكرار الشروط في أكثر من مكان.
عند الجمع بين هذه الأنماط الثلاثة، يمكنك بناء نظام مرن، قوي، وسهل الصيانة، مما يجعل تطوير التطبيقات الكبيرة أكثر سهولة وكفاءة.
#interprise #data
👍1
Forwarded from InfoTechnology (IT4_2024) (Abdulwaisa Al Nuaimi)
Promise vs Observer: الفرق بينهما في JavaScript
عند التعامل مع العمليات غير المتزامنة في JavaScript، هناك العديد من الأدوات التي يمكن استخدامها، وأبرزها Promise وObserver. على الرغم من أن كلاهما يساعد في إدارة البيانات التي تأتي بشكل غير متزامن، إلا أن هناك اختلافات جوهرية بينهما.
أولًا: Promise
تُستخدم الـ Promise لمعالجة حدث غير متزامن يحدث مرة واحدة فقط. عندما يتم استدعاؤها، فإنها تبدأ في التنفيذ مباشرةً ولا يمكن إلغاؤها بعد ذلك. بمجرد اكتمال العملية، يتم إرجاع قيمة واحدة فقط، إما نتيجة ناجحة (fulfilled) أو خطأ (rejected).
متى نستخدم Promise؟
عند الحاجة إلى تنفيذ عملية غير متزامنة لمرة واحدة، مثل جلب البيانات من API.
عندما يكون هناك تسلسل واضح للعمليات، مثل تحميل ملف ثم معالجته.
عندما لا يكون هناك حاجة لإلغاء العملية بعد بدايتها.
ثانيًا: Observer
يُستخدم Observer (المعروف في مكتبة RxJS) لمعالجة تدفق مستمر من البيانات، مما يعني أنه يمكنه إرسال قيم متعددة بمرور الوقت. لا يتم تنفيذ الكود إلا عند الاشتراك في الكائن، مما يسمح بالتحكم في وقت بدء الاستماع للبيانات، كما يمكن إلغاء الاشتراك بسهولة لإيقاف استقبال القيم الجديدة.
متى نستخدم Observer؟
عند التعامل مع تدفق بيانات مستمر، مثل تحديثات واجهة المستخدم بناءً على تغييرات في البيانات.
عند التعامل مع أحداث متكررة، مثل نقرات المستخدم، رسائل WebSocket، أو تتبع موقع GPS.
عندما يكون من الضروري إلغاء الاشتراك لتوفير الموارد أو التحكم في البيانات الواردة.
الفرق الرئيسي بين Promise و Observer
Promise يُستخدم لحدث واحد، بينما Observer يُستخدم لتدفق بيانات متعدد.
Promise يتم تنفيذه مباشرةً عند إنشائه، أما Observer فيتم تنفيذه فقط عند الاشتراك فيه.
Promise لا يمكن إلغاؤه بعد بدايته، بينما يمكن إلغاء Observer بسهولة عند الحاجة.
أيّهما أختار؟
إذا كنت بحاجة إلى التعامل مع عملية غير متزامنة لمرة واحدة فقط، فإن Promise هو الخيار الأمثل. أما إذا كنت بحاجة إلى التعامل مع بيانات ديناميكية ومتغيرة باستمرار، فإن Observer هو الحل الأفضل، خاصة عند العمل مع RxJS في تطبيقات تعتمد على الأحداث بشكل كبير.
#nodejs #angular #react #veue
عند التعامل مع العمليات غير المتزامنة في JavaScript، هناك العديد من الأدوات التي يمكن استخدامها، وأبرزها Promise وObserver. على الرغم من أن كلاهما يساعد في إدارة البيانات التي تأتي بشكل غير متزامن، إلا أن هناك اختلافات جوهرية بينهما.
أولًا: Promise
تُستخدم الـ Promise لمعالجة حدث غير متزامن يحدث مرة واحدة فقط. عندما يتم استدعاؤها، فإنها تبدأ في التنفيذ مباشرةً ولا يمكن إلغاؤها بعد ذلك. بمجرد اكتمال العملية، يتم إرجاع قيمة واحدة فقط، إما نتيجة ناجحة (fulfilled) أو خطأ (rejected).
متى نستخدم Promise؟
عند الحاجة إلى تنفيذ عملية غير متزامنة لمرة واحدة، مثل جلب البيانات من API.
عندما يكون هناك تسلسل واضح للعمليات، مثل تحميل ملف ثم معالجته.
عندما لا يكون هناك حاجة لإلغاء العملية بعد بدايتها.
ثانيًا: Observer
يُستخدم Observer (المعروف في مكتبة RxJS) لمعالجة تدفق مستمر من البيانات، مما يعني أنه يمكنه إرسال قيم متعددة بمرور الوقت. لا يتم تنفيذ الكود إلا عند الاشتراك في الكائن، مما يسمح بالتحكم في وقت بدء الاستماع للبيانات، كما يمكن إلغاء الاشتراك بسهولة لإيقاف استقبال القيم الجديدة.
متى نستخدم Observer؟
عند التعامل مع تدفق بيانات مستمر، مثل تحديثات واجهة المستخدم بناءً على تغييرات في البيانات.
عند التعامل مع أحداث متكررة، مثل نقرات المستخدم، رسائل WebSocket، أو تتبع موقع GPS.
عندما يكون من الضروري إلغاء الاشتراك لتوفير الموارد أو التحكم في البيانات الواردة.
الفرق الرئيسي بين Promise و Observer
Promise يُستخدم لحدث واحد، بينما Observer يُستخدم لتدفق بيانات متعدد.
Promise يتم تنفيذه مباشرةً عند إنشائه، أما Observer فيتم تنفيذه فقط عند الاشتراك فيه.
Promise لا يمكن إلغاؤه بعد بدايته، بينما يمكن إلغاء Observer بسهولة عند الحاجة.
أيّهما أختار؟
إذا كنت بحاجة إلى التعامل مع عملية غير متزامنة لمرة واحدة فقط، فإن Promise هو الخيار الأمثل. أما إذا كنت بحاجة إلى التعامل مع بيانات ديناميكية ومتغيرة باستمرار، فإن Observer هو الحل الأفضل، خاصة عند العمل مع RxJS في تطبيقات تعتمد على الأحداث بشكل كبير.
#nodejs #angular #react #veue
👍3
"يا شباب، لا تؤجلوا رفع فكرة المشروع، كلما أسرعتم كلما كان أفضل. لا تنتظروا حتى انتهاء الاختبارات، لأن الردود قد تتأخر. من المحتمل أن يتم النظر في جميع الأفكار دفعة واحدة، لذلك بادروا بالرفع الآن ولا تضيعوا الوقت!"
👍2
Forwarded from InfoTechnology (IT4_2024) (Abdulwaisa Al Nuaimi)
وأخيراً Open Ai
من الأمس أصحاب النسخة المجانية من ChatGPT بقوا يقدروا يستخدموا الوضع الصوتي المتقدم Advanced Voice بشكل يومي -محدود طبعا عن النسخة المدفوعة- بعد ما كان قبل هذا تجربة لا تتعدى 15 دقيقة في الشهر
#ai
من الأمس أصحاب النسخة المجانية من ChatGPT بقوا يقدروا يستخدموا الوضع الصوتي المتقدم Advanced Voice بشكل يومي -محدود طبعا عن النسخة المدفوعة- بعد ما كان قبل هذا تجربة لا تتعدى 15 دقيقة في الشهر
#ai
❤1
Forwarded from InfoTechnology (IT4_2024) (Abdulwaisa Al Nuaimi)
هل ينفع تبدأ فى تنفيذ مشروع معين رغم عدم تحديد بعض تفاصيله ؟
أولا تعال نعرف ايش هي التفاصيل المقصودة:
نوع الداتابيز المستخدمة سواء SQL Server أو MySQL أو MongoDB أو غيرهم ، يعتبر من التفاصيل المكتبة المستخدمة لعرض واجهة المشروع ، تعتبر من التفاصيل نوع ال API المستخدم للتواصل بين ال client وال server سواء Rest أو GraphQL أو غيرهم ، يعتبر من التفاصيل وغيرهم
لو أنت مستعجل فالاجابة هي: ايوه ، ينفع تبدأ فى المشروع ، بل أحيانا ينفع تخلصه
بس كيف ! ممكن أشتغل على الباك اند من غير ما أحدد نوع الداتابيز ؟ تقدر تبنى الجزء الخاص بالباك اند كله بحيث يعتمد على interface مسئولة عن التعامل مع البيانات ، بالتالي كود الباك اند مش سيكون فارق معاه ال interface هذه ومن خلفها و بيعملها implementation أو بتجيب الداتا كيف أو منين
بل كل اللى فارق معاه أنها بت export ال utilities اللى هو محتاجها زى مثلا فانكشن getProducts بترجع المنتجات كلها فانكشن getProductById بترجع منتج حسب ال id بتاعه فانكشن getCartProducts بترجع منتجات السلة فانكشن addProductToCart بتضيف منتج معين للسلة وهكذا
وقتها تقدر ت implement ال interface هذه بحيث تتعامل مع mock data متخزنة فى variable داخل ال memory ، أو ملف نصي على السيرفر ، وفي كلا الحالتين قدرت تأجل قرار تحديد نوع الداتابيز المستخدمة إلى حين إنهاء جزء كبير من المشروع (مش الباك اند فقط)
أثناء شغلك على المشروع سيكون عندك صورة أوضح عن شكل البيانات و ستقدر تحدد نوع الداتابيز اللى ممكن تناسب مشروعك بشكل أفضل ، وقتها سوف تعدل فى ال implementation اللى خلف ال interface فقط ، و بهذا المشروع كله اتحول إلى استخدام الداتابيز بدلا من عدة متغيرات أو ملفات نصية
في كتاب Clean Architecture ، الكاتب أتكلم عن تجربة خاصة به قدر يطبق فيها الموضوع هذا ، و بعد فترة أدرك إن الملفات النصية مناسبة للمشروع ، و إنه مش محتاج داتابيز أصلا
مجرد إنك تبدأ بدون تحديد الداتابيز بيخلى الكود حقك غير معتمد على الداتابيز ، وكذلك لو قدرت تحدد نوع الداتابيز من البداية يفضل إنك تستخدم نفس ال approach لأن هذا سيساعدك تستبدلها بسهولة فى المستقبل لو حبيت
وكذلك مع بقيت التفاصيل المذكورة فوق: كود ال client مش فارق معه ال API بيجيب الداتا منين أو كيف ، بالتالي تقدر تعمل interface بينهم ، و هذا ممكن يساعدك تستخدم mock data و تضبط الشغل قبل ما تستلم ال API من أخوك الباك اند ، بل سوف يساعدك تغير ال API وطريقة تواصل ال client بال server بسهولة لو حبيت كذلك ال view أو ال UI ، مينفعش ال client-side logic يعدل عليها بشكل مباشر ، ولا ينفع هي تعتمد على ال implementation حقها بل تعتمد على interface
بجانب إن عزلك للتفاصيل عن المشروع سيساعدك تختبر المشروع بصورة أبسط وأفضل .
وشكرًا
#توفير_الوقت
أولا تعال نعرف ايش هي التفاصيل المقصودة:
نوع الداتابيز المستخدمة سواء SQL Server أو MySQL أو MongoDB أو غيرهم ، يعتبر من التفاصيل المكتبة المستخدمة لعرض واجهة المشروع ، تعتبر من التفاصيل نوع ال API المستخدم للتواصل بين ال client وال server سواء Rest أو GraphQL أو غيرهم ، يعتبر من التفاصيل وغيرهم
لو أنت مستعجل فالاجابة هي: ايوه ، ينفع تبدأ فى المشروع ، بل أحيانا ينفع تخلصه
بس كيف ! ممكن أشتغل على الباك اند من غير ما أحدد نوع الداتابيز ؟ تقدر تبنى الجزء الخاص بالباك اند كله بحيث يعتمد على interface مسئولة عن التعامل مع البيانات ، بالتالي كود الباك اند مش سيكون فارق معاه ال interface هذه ومن خلفها و بيعملها implementation أو بتجيب الداتا كيف أو منين
بل كل اللى فارق معاه أنها بت export ال utilities اللى هو محتاجها زى مثلا فانكشن getProducts بترجع المنتجات كلها فانكشن getProductById بترجع منتج حسب ال id بتاعه فانكشن getCartProducts بترجع منتجات السلة فانكشن addProductToCart بتضيف منتج معين للسلة وهكذا
وقتها تقدر ت implement ال interface هذه بحيث تتعامل مع mock data متخزنة فى variable داخل ال memory ، أو ملف نصي على السيرفر ، وفي كلا الحالتين قدرت تأجل قرار تحديد نوع الداتابيز المستخدمة إلى حين إنهاء جزء كبير من المشروع (مش الباك اند فقط)
أثناء شغلك على المشروع سيكون عندك صورة أوضح عن شكل البيانات و ستقدر تحدد نوع الداتابيز اللى ممكن تناسب مشروعك بشكل أفضل ، وقتها سوف تعدل فى ال implementation اللى خلف ال interface فقط ، و بهذا المشروع كله اتحول إلى استخدام الداتابيز بدلا من عدة متغيرات أو ملفات نصية
في كتاب Clean Architecture ، الكاتب أتكلم عن تجربة خاصة به قدر يطبق فيها الموضوع هذا ، و بعد فترة أدرك إن الملفات النصية مناسبة للمشروع ، و إنه مش محتاج داتابيز أصلا
مجرد إنك تبدأ بدون تحديد الداتابيز بيخلى الكود حقك غير معتمد على الداتابيز ، وكذلك لو قدرت تحدد نوع الداتابيز من البداية يفضل إنك تستخدم نفس ال approach لأن هذا سيساعدك تستبدلها بسهولة فى المستقبل لو حبيت
وكذلك مع بقيت التفاصيل المذكورة فوق: كود ال client مش فارق معه ال API بيجيب الداتا منين أو كيف ، بالتالي تقدر تعمل interface بينهم ، و هذا ممكن يساعدك تستخدم mock data و تضبط الشغل قبل ما تستلم ال API من أخوك الباك اند ، بل سوف يساعدك تغير ال API وطريقة تواصل ال client بال server بسهولة لو حبيت كذلك ال view أو ال UI ، مينفعش ال client-side logic يعدل عليها بشكل مباشر ، ولا ينفع هي تعتمد على ال implementation حقها بل تعتمد على interface
بجانب إن عزلك للتفاصيل عن المشروع سيساعدك تختبر المشروع بصورة أبسط وأفضل .
وشكرًا
#توفير_الوقت
🔥1
Forwarded from InfoTechnology (IT4_2024) (Ahmed_Askar)
💥 شوية مواقع هتفيدك جداً لو بتشتغل في الـ Frontend
سلام عليكم يا شباب، جبت لكم شوية مواقع جربتها وفعلاً سهلت عليّ الدنيا جدًا! لو شغال في الـ Web Development، المواقع دي هتوفّر عليك وقت ومجهود رهيب.
1️⃣ مكتبة Tailwind جاهزة:
لو بتحب Tailwind وعايز Components جاهزة زي Bootstrap، مش هتحتاج تبني من الصفر تاني!
👉 https://flowbite.com/
2️⃣ مكونات Tailwind مجانية:
لو عايز حاجات جاهزة أكتر بـ Tailwind، هتلاقي هنا
👉 https://www.hyperui.dev/
3️⃣ لو عايز تعمل Dashboard بسرعة:
مكتبتين جامدين لو عايز تبني Dashboard احترافي بـ Chart.js أو GoogleChart.
👉 https://lnkd.in/dpEN7GQg
👉 https://coreui.io/
4️⃣ موقع حلو للـ Animations الجاهزة:
عايز تضيف تأثيرات وحركات لموقعك؟ هنا هتلاقي أفضل الأنيميشنز الجاهزة.
👉 https://animista.net/
5️⃣ شيتات ملخصة للـ Frontend:
لو بتدور على ملخصات للـ Frontend في مكان واحد، هتلاقي كل حاجة هنا
👉 https://lnkd.in/dNatiu-p
6️⃣ Auto Prefix للكود بتاعك:
مش عايز تتعب في إضافة البريفكسات للكود عشان يشتغل على كل المتصفحات؟ ده هيسهل عليك الموضوع.
👉 https://lnkd.in/d_P4eXfA
7️⃣ SweetAlert - Alerts احترافية لموقعك:
لو عايز تعمل Alerts بشكل جذاب واحترافي، استخدم المكتبة دي.
👉 https://lnkd.in/dEyav88U
8️⃣ اختبار Regular Expressions بسهولة:
لو شغال على Validation في الكود بتاعك، الموقع ده هيساعدك تختبر الـ Regex بسرعة.
👉 https://regex101.com/
9️⃣ APIs مجانية لمشاريعك:
عايز APIs مجانية في أي مجال؟ هتلاقي كل اللي محتاجه هنا.
👉 https://public-apis.xyz/
🔟 أسئلة انترفيو (Frontend و Backend):
لو بتجهز لـ Interview، لازم تكون جاهز بأسئلة تقيلة. هتلاقي كل اللي محتاجه هنا.
👉 https://lnkd.in/d5zXCUxg
جرب المواقع دي وهتلاقي شغلك في الـ Frontend بقى أسهل وأسرع بكتير!
"منقول .."
#it_blogs
سلام عليكم يا شباب، جبت لكم شوية مواقع جربتها وفعلاً سهلت عليّ الدنيا جدًا! لو شغال في الـ Web Development، المواقع دي هتوفّر عليك وقت ومجهود رهيب.
1️⃣ مكتبة Tailwind جاهزة:
لو بتحب Tailwind وعايز Components جاهزة زي Bootstrap، مش هتحتاج تبني من الصفر تاني!
👉 https://flowbite.com/
2️⃣ مكونات Tailwind مجانية:
لو عايز حاجات جاهزة أكتر بـ Tailwind، هتلاقي هنا
👉 https://www.hyperui.dev/
3️⃣ لو عايز تعمل Dashboard بسرعة:
مكتبتين جامدين لو عايز تبني Dashboard احترافي بـ Chart.js أو GoogleChart.
👉 https://lnkd.in/dpEN7GQg
👉 https://coreui.io/
4️⃣ موقع حلو للـ Animations الجاهزة:
عايز تضيف تأثيرات وحركات لموقعك؟ هنا هتلاقي أفضل الأنيميشنز الجاهزة.
👉 https://animista.net/
5️⃣ شيتات ملخصة للـ Frontend:
لو بتدور على ملخصات للـ Frontend في مكان واحد، هتلاقي كل حاجة هنا
👉 https://lnkd.in/dNatiu-p
6️⃣ Auto Prefix للكود بتاعك:
مش عايز تتعب في إضافة البريفكسات للكود عشان يشتغل على كل المتصفحات؟ ده هيسهل عليك الموضوع.
👉 https://lnkd.in/d_P4eXfA
7️⃣ SweetAlert - Alerts احترافية لموقعك:
لو عايز تعمل Alerts بشكل جذاب واحترافي، استخدم المكتبة دي.
👉 https://lnkd.in/dEyav88U
8️⃣ اختبار Regular Expressions بسهولة:
لو شغال على Validation في الكود بتاعك، الموقع ده هيساعدك تختبر الـ Regex بسرعة.
👉 https://regex101.com/
9️⃣ APIs مجانية لمشاريعك:
عايز APIs مجانية في أي مجال؟ هتلاقي كل اللي محتاجه هنا.
👉 https://public-apis.xyz/
🔟 أسئلة انترفيو (Frontend و Backend):
لو بتجهز لـ Interview، لازم تكون جاهز بأسئلة تقيلة. هتلاقي كل اللي محتاجه هنا.
👉 https://lnkd.in/d5zXCUxg
جرب المواقع دي وهتلاقي شغلك في الـ Frontend بقى أسهل وأسرع بكتير!
"منقول .."
#it_blogs
HyperUI
Free Tailwind CSS v4 Components | HyperUI
Free, open-source Tailwind CSS v4 components for modern web development. Copy-paste ready components to build beautiful, responsive websites faster.
Forwarded from InfoTechnology (IT4_2024) (Abdulwaisa Al Nuaimi)
الدنيا صغيرة.
ساعد زمايلك وتعاون معهم، حتى لو في فريق ثاني، لوجه الله أولا، ولأن هذا شغلك ثانيا، وعشان الدنيا صغيرة ثالثا.
.
من عارف، ممكن الدنيا تفرقكم وبعدين تشتغلوا مع بعض ثاني، ويبقى هو مديرك، أو أنت مديره، أو أنت تروح تشتغل في مكان ويسألوه عنك، فخلي سمعتك تكون طيبة وسابقاك، اوعى حد يقول عنك مش متعاون، أو بيخبي المعلومة، أو مقفل دماغه ومش عايز يتعلم، أو مش عايز يشتغل، أو لعبي وبيضيع وقت كتير.
أنا شخصيا بتسئل عن ناس مقدمين على شغل في أماكن تانية، وعمري ما برشح حد سلوكه غير مشجع، زي الأمثلة اللي ذكرتها فوق دي.
الدنيا صغيرة يا عزيزي.
.
الشطارة التقنية -على أهميتها - مش كافية، السلوك والمهارات الشخصية كتير بتكون أهم، خاصة كل ما تترقى في السلم الوظيفي.
.
يحضرني هنا قول الحطيئة:
مَنْ يفعَلِ الخيرَ لا يعدَم جوازيَهُ *** لا يذهبُ العُرفُ بينَ الله والناسِ
منقول
#وضعنا
ساعد زمايلك وتعاون معهم، حتى لو في فريق ثاني، لوجه الله أولا، ولأن هذا شغلك ثانيا، وعشان الدنيا صغيرة ثالثا.
.
من عارف، ممكن الدنيا تفرقكم وبعدين تشتغلوا مع بعض ثاني، ويبقى هو مديرك، أو أنت مديره، أو أنت تروح تشتغل في مكان ويسألوه عنك، فخلي سمعتك تكون طيبة وسابقاك، اوعى حد يقول عنك مش متعاون، أو بيخبي المعلومة، أو مقفل دماغه ومش عايز يتعلم، أو مش عايز يشتغل، أو لعبي وبيضيع وقت كتير.
أنا شخصيا بتسئل عن ناس مقدمين على شغل في أماكن تانية، وعمري ما برشح حد سلوكه غير مشجع، زي الأمثلة اللي ذكرتها فوق دي.
الدنيا صغيرة يا عزيزي.
.
الشطارة التقنية -على أهميتها - مش كافية، السلوك والمهارات الشخصية كتير بتكون أهم، خاصة كل ما تترقى في السلم الوظيفي.
.
يحضرني هنا قول الحطيئة:
مَنْ يفعَلِ الخيرَ لا يعدَم جوازيَهُ *** لا يذهبُ العُرفُ بينَ الله والناسِ
منقول
#وضعنا
🔥4👍1
Forwarded from InfoTechnology (IT4_2024) (Abdulwaisa Al Nuaimi)
كيف فيسبوك أو غيره بيطبق فكرة الـ Score للمستخدمين؟ 🤔
تخيل لو كان لكل مستخدم سكور يعكس نشاطه وجودة تفاعله على فيسبوك، بحيث يقاس بناءً على أصالة المنشورات، عدد التعليقات، الردود، وإعادة النشر، لكن مع عامل زمني يقلل من قيمة النقاط تدريجيًا!
🔹 كيف ممكن يحسب؟
+1 نقطة لكل رد أو تعليق. +1 نقطة لإعادة نشر البوست مع إضافة تعليق. من 0 إلى 5 نقاط لنشر بوست، حسب أصالته. (مثلاً، إذا كان نصًا أصليًا بالكامل يحصل على 5 نقاط، ولو مأخوذ من ChatGPT أو مجرد رابط، يحصل على 0). كل نقطة تفقد قيمتها تدريجيًا مع الزمن. (مثلاً، كل نقطة تصبح نصف بعد سنة تقريبًا وفق منحنى Exponential Decay).
🧮 مثال على شخص قام بالتالي:
نشر بوست نصفه أصلي قبل 10 أيام → 2.5 × e^(-10/500) = 2.45 كتب ردًا قبل يومين → 1 × e^(-2/500) = 1.00 علّق 3 مرات قبل 30 يومًا → 3 × e^(-30/500) = 2.83
🔹 الإجمالي: 6.27 نقطة
💡 طيب، كيف ممكن فيسبوك يطبق هذا؟
فيسبوك لا يكشف عن خوارزمياته، لكن يمكنه استخدام:
✅ تحليل المحتوى بالذكاء الاصطناعي لمعرفة إن كان المنشور أصليًا أم منسوخًا.
✅ Exponential Decay لضمان أن النقاط تتآكل بمرور الوقت، مما يشجع التفاعل المستمر.
✅ Graph Theory لقياس تأثير المستخدم بناءً على من يتفاعل مع محتواه.
✅ تحليل Engagement Score لكل منشور لتحديد أولويته في News Feed.
🎯 لماذا هذا مهم؟
لأن بهذه الطريقة لا يتم تقييم المستخدم فقط بناءً على كمية التفاعل، بل جودة التفاعل واستمراريته! وهذا يوازن بين تشجيع الأصالة وعدم السماح لمنشورات قديمة بالسيطرة على التايملاين.
السؤال الآن: هل تعتقد أن فيسبوك أو غيرها يستخدم شيئًا مشابهًا لهذا؟ 🤔
#ميزة_مشروعك
تخيل لو كان لكل مستخدم سكور يعكس نشاطه وجودة تفاعله على فيسبوك، بحيث يقاس بناءً على أصالة المنشورات، عدد التعليقات، الردود، وإعادة النشر، لكن مع عامل زمني يقلل من قيمة النقاط تدريجيًا!
🔹 كيف ممكن يحسب؟
+1 نقطة لكل رد أو تعليق. +1 نقطة لإعادة نشر البوست مع إضافة تعليق. من 0 إلى 5 نقاط لنشر بوست، حسب أصالته. (مثلاً، إذا كان نصًا أصليًا بالكامل يحصل على 5 نقاط، ولو مأخوذ من ChatGPT أو مجرد رابط، يحصل على 0). كل نقطة تفقد قيمتها تدريجيًا مع الزمن. (مثلاً، كل نقطة تصبح نصف بعد سنة تقريبًا وفق منحنى Exponential Decay).
🧮 مثال على شخص قام بالتالي:
نشر بوست نصفه أصلي قبل 10 أيام → 2.5 × e^(-10/500) = 2.45 كتب ردًا قبل يومين → 1 × e^(-2/500) = 1.00 علّق 3 مرات قبل 30 يومًا → 3 × e^(-30/500) = 2.83
🔹 الإجمالي: 6.27 نقطة
💡 طيب، كيف ممكن فيسبوك يطبق هذا؟
فيسبوك لا يكشف عن خوارزمياته، لكن يمكنه استخدام:
✅ تحليل المحتوى بالذكاء الاصطناعي لمعرفة إن كان المنشور أصليًا أم منسوخًا.
✅ Exponential Decay لضمان أن النقاط تتآكل بمرور الوقت، مما يشجع التفاعل المستمر.
✅ Graph Theory لقياس تأثير المستخدم بناءً على من يتفاعل مع محتواه.
✅ تحليل Engagement Score لكل منشور لتحديد أولويته في News Feed.
🎯 لماذا هذا مهم؟
لأن بهذه الطريقة لا يتم تقييم المستخدم فقط بناءً على كمية التفاعل، بل جودة التفاعل واستمراريته! وهذا يوازن بين تشجيع الأصالة وعدم السماح لمنشورات قديمة بالسيطرة على التايملاين.
السؤال الآن: هل تعتقد أن فيسبوك أو غيرها يستخدم شيئًا مشابهًا لهذا؟ 🤔
#ميزة_مشروعك