↘️
إذا عندك مشروع Monolith وشغال تمام
وما عندك أي مشاكل، لا تفكر تتحول لـ Microservices.
وإذا كنت بتبدأ مشروع جديد وما تتوقع عدد كبير من المستخدمين في البداية، لا تشتغل Microservices.
إذا ما تفهم تحديات Deployment والضغط على الشبكة (Network Load) وما عندك حلول لها، لا تستخدم Microservices.
إذا فريق التطوير أقل من 10 أشخاص، لا تفكر فيها.
إذا ما معك DevOps شاطر، لا تدخل نفسك في تعقيدها.
إذا الترافيك المتوقع على المشروع قليل أو متوسط، مش ضروري Microservices.
إذا مشروعك في مرحلة التجربة وما تعرف إذا بينجح بالسوق، خليها بسيطة واشتغل Monolith.
إذا ما عندك نظام Automated Testing و Deployment، لا تدخل في Microservices.
طيب متى تستخدم Microservices؟
لازم تحقق هذه الشروط كلها:
1. يكون عندك فريق كبير شغال على نفس المشروع.
2. تواجه مشاكل حقيقية في التوسع والـ Scalability.
3. عندك بنية تحتية قوية وموارد كافية لدعم التشغيل.
4. تكون قادر تتحمل تكلفة التشغيل العالية.
5. الفريق يكون عنده خبرة كافية في التعامل مع Distributed Systems.
الخلاصة:
ابدأ بمشروع Monolith مكتوب بشكل نظيف ومحكم.
ولما تحس أن الـ Monolith صار عبء على مشروعك، وقتها فقط فكر تتحول لـ Microservices.
إذا عندك مشروع Monolith وشغال تمام
وما عندك أي مشاكل، لا تفكر تتحول لـ Microservices.
وإذا كنت بتبدأ مشروع جديد وما تتوقع عدد كبير من المستخدمين في البداية، لا تشتغل Microservices.
إذا ما تفهم تحديات Deployment والضغط على الشبكة (Network Load) وما عندك حلول لها، لا تستخدم Microservices.
إذا فريق التطوير أقل من 10 أشخاص، لا تفكر فيها.
إذا ما معك DevOps شاطر، لا تدخل نفسك في تعقيدها.
إذا الترافيك المتوقع على المشروع قليل أو متوسط، مش ضروري Microservices.
إذا مشروعك في مرحلة التجربة وما تعرف إذا بينجح بالسوق، خليها بسيطة واشتغل Monolith.
إذا ما عندك نظام Automated Testing و Deployment، لا تدخل في Microservices.
طيب متى تستخدم Microservices؟
لازم تحقق هذه الشروط كلها:
1. يكون عندك فريق كبير شغال على نفس المشروع.
2. تواجه مشاكل حقيقية في التوسع والـ Scalability.
3. عندك بنية تحتية قوية وموارد كافية لدعم التشغيل.
4. تكون قادر تتحمل تكلفة التشغيل العالية.
5. الفريق يكون عنده خبرة كافية في التعامل مع Distributed Systems.
الخلاصة:
ابدأ بمشروع Monolith مكتوب بشكل نظيف ومحكم.
ولما تحس أن الـ Monolith صار عبء على مشروعك، وقتها فقط فكر تتحول لـ Microservices.
لما يكون معي كورس كيف اعمل من أحد الطرق 😅
👇👇👇👇👇👇👇👇👇👇👇👇
ليه تتعلم Docker؟
Docker مش مجرد أداة، دي منصة بتغير شكل إدارة التطبيقات.
بتوفر بيئة تشغيل موحدة مهما كان الجهاز.
بتسرّع عملية التطوير والتشغيل.
بتقليل المشاكل المتعلقة بالتوافق بين البيئات المختلفة.
يعني، هتوفر وقتك وجهدك بشكل كبير.
ليه تتعلم الذكاء الاصطناعي (AI)؟
AI هو المستقبل، سواء في تحليل البيانات، الأتمتة، أو حتى تطوير تجارب المستخدم.
السوق محتاج متخصصين يفهموا فيه.
التطبيقات بتدخل كل المجالات: الطب، الهندسة، التسويق، وكل حاجة.
بتفتح ليك أبواب فرص جديدة.
لو مش مقتنع، فكر كده: العالم بيتغير بسرعة، والمهارات دي مش رفاهية، دي أدوات للنجاح.
#تعلم_لتتطور
#الضحية
👇👇👇👇👇👇👇👇👇👇👇👇
ليه تتعلم Docker؟
Docker مش مجرد أداة، دي منصة بتغير شكل إدارة التطبيقات.
بتوفر بيئة تشغيل موحدة مهما كان الجهاز.
بتسرّع عملية التطوير والتشغيل.
بتقليل المشاكل المتعلقة بالتوافق بين البيئات المختلفة.
يعني، هتوفر وقتك وجهدك بشكل كبير.
ليه تتعلم الذكاء الاصطناعي (AI)؟
AI هو المستقبل، سواء في تحليل البيانات، الأتمتة، أو حتى تطوير تجارب المستخدم.
السوق محتاج متخصصين يفهموا فيه.
التطبيقات بتدخل كل المجالات: الطب، الهندسة، التسويق، وكل حاجة.
بتفتح ليك أبواب فرص جديدة.
لو مش مقتنع، فكر كده: العالم بيتغير بسرعة، والمهارات دي مش رفاهية، دي أدوات للنجاح.
#تعلم_لتتطور
#الضحية
في أولى إعدادي هندسة، أتذكر محاضرة عن المصفوفات، كان فيها الأستاذ يحاول يوضح لنا كيف ممكن تكون مفيدة. رسم مستطيل وشرح كيف يمكننا نحركه ونخليه يدور حول مركزه أثناء حركته باستخدام مصفوفة للإزاحة وأخرى للدوران. وقال إن هذا يمكننا من بناء محاكيات معقدة للأجزاء الميكانيكية، وهو أمر مهم في علم Kinematic.
قال لنا إنك إذا عملت هاتين المصفوفتين وتعلمت ضرب المصفوفات في بعضها، بإمكانك تنفيذ أي نوع من الحركة التي تحتاجها. أتذكر يومها رجعت للبيت، وكان عندي كمبيوتر XT وفيه Floppy Disk 5.25. كتبت الكود وكان بلغة Pascal تحت نظام DOS إذا لم تخني الذاكرة. لما شفت المستطيل يتحرك وفق معادلة Parabola ويدور أثناء حركته، شعرت بفرحة كأني اكتشفت قانون الحركة بدلًا من نيوتن.
ما فعله الأستاذ يومها أنه أعطانا معنى لما ندرسه، وأرانا فائدته. دور الأستاذ قد يكون له تأثير كبير لا يمكن تخيله. للأسف، معظم الأساتذة يهدرون هذا الدور وهذه القيمة.
قال لنا إنك إذا عملت هاتين المصفوفتين وتعلمت ضرب المصفوفات في بعضها، بإمكانك تنفيذ أي نوع من الحركة التي تحتاجها. أتذكر يومها رجعت للبيت، وكان عندي كمبيوتر XT وفيه Floppy Disk 5.25. كتبت الكود وكان بلغة Pascal تحت نظام DOS إذا لم تخني الذاكرة. لما شفت المستطيل يتحرك وفق معادلة Parabola ويدور أثناء حركته، شعرت بفرحة كأني اكتشفت قانون الحركة بدلًا من نيوتن.
ما فعله الأستاذ يومها أنه أعطانا معنى لما ندرسه، وأرانا فائدته. دور الأستاذ قد يكون له تأثير كبير لا يمكن تخيله. للأسف، معظم الأساتذة يهدرون هذا الدور وهذه القيمة.
Forwarded from الرسمية CS4 Class-22 (أحمد جلال | 𐩱𐩢𐩣𐩵 𐩴𐩡𐩱𐩡)
مواصلة في مزايا الايميل الجامعي تبعنا و الذي نقدر نستفيد منه في أشياء كثييرة ذكرناها مسبقًا، بس لفت انتباهي شيء أنذهلت منه الصدق، أي ايميل تبع جوجل لمن تسجل فيه و تشتي ترفع أشيائك من صور و فيديوهات و ملفات و غيره المساحة الذي يعطوها للواحد معروفة و ما تتجاوز ال 15GB، بس لمن جربت أزامن تلفوني مع حسابي الجامعي و ربطته ب Google Drive
جابوا لي حوالي 95TB، ايوه زيما شايفين تيرا .
فاستغلوا ايميلاتكم يا شباب و استفيدوا من المزايا المتوفرة و كمان للذي يستخدموا البرنامج الغني عن التعريف Cam Scanner تقدروا تستفيدوا من مزايا فيه Premium بمجرد ربط البرنامج بالايميل الجامعي و لا تختاروا سنة التخرج بالشكل الصحيح، خلوها 2029 عشان يطول معاكم..
جابوا لي حوالي 95TB، ايوه زيما شايفين تيرا .
فاستغلوا ايميلاتكم يا شباب و استفيدوا من المزايا المتوفرة و كمان للذي يستخدموا البرنامج الغني عن التعريف Cam Scanner تقدروا تستفيدوا من مزايا فيه Premium بمجرد ربط البرنامج بالايميل الجامعي و لا تختاروا سنة التخرج بالشكل الصحيح، خلوها 2029 عشان يطول معاكم..
انطلق في البرمجة من بدري فرصتك الجامعية لاتعوض لاتصدق ان بعد التخرج تبدأ تتخصص الحق نفسك الجامعة لو شفتها بتعطلك ارجمها خلف الشمس بخمس عادي طلع للقب البكالوريوس حافظ على درجة النجاح ان كنت ضابح منها للأخر ثقتك بنفسك تكسر اي حاجز أليس كذلك لو ثقتك ان الشهادة هي مهمه أنت احلم وسعى وياليت تتخرج وبلادك مليانه شركات وعمل هذا مافيش لو قلت لك جيب لي خمسة مبرمجين لهم ثقلهم للأسف يمكن تحصل لذلك اشتغل على نفسك ياسطى عندما تسمع موضوع الناس الآن كلها داخله حاسوب لكن مافيش إنتاج اينهم مدري كلامي هذا للي عاده دخل من البلاد فقط الي عقليته عادها نظيفة جدا وشكرا
👍3
لماذا ما ابدع مثلا في frontend ولي فترة
المشكلة فيني أنا دائما مستعجل وأريد نتائج مذهله واشوف ناس مبدعه قبلي واحبط واشوف ان ai جاء كمل الباقي
أنا شغوف ب backend ولك وجهي بعد فتره انه وصل لا درجة صحراء أين يروح لذلك لاتمشي بخريطة زميلك أو أحد شفت زميلك متقدم عليك استفيد منه ولا تنافسه اكسبه
المشكلة فيني أنا دائما مستعجل وأريد نتائج مذهله واشوف ناس مبدعه قبلي واحبط واشوف ان ai جاء كمل الباقي
أنا شغوف ب backend ولك وجهي بعد فتره انه وصل لا درجة صحراء أين يروح لذلك لاتمشي بخريطة زميلك أو أحد شفت زميلك متقدم عليك استفيد منه ولا تنافسه اكسبه
👍2
القدرة على كتابة كود يشتغل ≠ كود يشتغل بكفاءة ⚡
عند كتابة join في الاستعلامات باستخدام الـ ORM مثل EF-Core أو أي ORM آخر، الكود يتم تحويله إلى استعلام SQL. لكن هل هذا الاستعلام دائمًا أمثل (optimal)؟ الجواب: لا. ❌
لو قاعدة البيانات مش مهيأة بشكل جيد (ما فيها Indexing أو Foreign Keys أو الإحصائيات قديمة 📉)، أي محرك قاعدة بيانات (مثل SQL Server) قد يواجه صعوبة في تنفيذ الاستعلام بكفاءة. والنتيجة؟ Clustered Index Scan أو Table Scan 🔍.
إيش اللي بيصير؟
1. Physical Reads عالية جدًا 📚: البيانات المطلوبة مش موجودة في الـ cache.
2. Logical Reads عالية جدًا 📊: محرك قاعدة البيانات يضطر يقرأ كميات ضخمة من البيانات حتى لو بعضها موجود في الـ cache.
الخلاصة؟ أداء ضعيف جدًا 💻، خصوصًا مع الجداول الكبيرة، لأن عملية الـ Scan مكلفة.
الحل؟ 🛠️
Indexing هو الحل. الـ Index يحدد إذا كان محرك قاعدة البيانات هيعمل Seek (بحث سريع 🔍) أو Scan (بحث بطيء 🐢).
لو الحقول اللي تستخدمها في الـ join أو في الـ where ما عليها Index، محرك قاعدة البيانات مش هيقدر يعمل Seek، وحيضطر يعمل Scan.
مثال:
لو عندك جدول فيه مليون صف 💯، وعملت join على حقل ما فيه Index، محرك قاعدة البيانات هيعمل Scan على المليون صف.
النتيجة؟ أداء ضعيف جدًا 🚶♂️.
نفهم من كذا إيش؟
الـ ORM زي EF-Core يساعد في تسهيل كتابة الكود، لكنه مش ساحر. لو ما عندك فكرة واضحة عن الـ SQL اللي بيتولد، هتواجه مشاكل في الأداء دون أن تعرف السبب.
فين المشكلة؟
المشكلة هي أن الـ ORM يخفي بعض التفاصيل المهمة التي تساعد في تحسين الأداء. لو ما عندك فهم جيد لـ SQL أو Execution Plans، ستكتب كود غير كفؤ.
مثال عملي:
إذا كتبت استعلام LINQ معقد، الـ ORM قد يحوله إلى استعلام SQL معقد جدًا. النتيجة؟ أداء ضعيف 💔.
إيش الحل؟
1. افهم محرك قاعدة البيانات بشكل صحيح:
تعرف على كيفية قراءة Execution Plans 📑.
افهم كيفية استخدام محرك قاعدة البيانات للـ Indexes.
تعلم الفرق بين Seek و Scan.
2. اعمل Indexing بشكل ذكي:
ضع Indexes على الحقول التي تستخدمها في الـ joins أو في الـ where conditions 🔑.
لا تفرط في استخدام الـ Indexes حتى لا يؤثر ذلك على أداء عمليات Insert/Update ⚖️.
3. راقب الأداء:
استخدم أدوات مثل SQL Profiler لمراجعة الاستعلامات التي يتم توليدها من الـ ORM 🔍.
قيس Logical Reads و Physical Reads لتقييم كفاءة الاستعلامات.
4. إذا كان الاستعلام معقدًا، استخدم الاستعلامات الخام (Raw SQL):
إذا كان LINQ معقد جدًا، استخدم الاستعلامات الخام مع الـ ORM لكتابة استعلام دقيق ومحسن 🖋️.
ختامًا :
حتى إذا كنت تستخدم ORM مثل EF-Core أو غيره، يجب أن تكون لديك معرفة جيدة بـ SQL. هذا الفهم سيجعلك قادرًا على تحسين الأداء وحل المشكلات بكفاءة عالية 💡.
عند كتابة join في الاستعلامات باستخدام الـ ORM مثل EF-Core أو أي ORM آخر، الكود يتم تحويله إلى استعلام SQL. لكن هل هذا الاستعلام دائمًا أمثل (optimal)؟ الجواب: لا. ❌
لو قاعدة البيانات مش مهيأة بشكل جيد (ما فيها Indexing أو Foreign Keys أو الإحصائيات قديمة 📉)، أي محرك قاعدة بيانات (مثل SQL Server) قد يواجه صعوبة في تنفيذ الاستعلام بكفاءة. والنتيجة؟ Clustered Index Scan أو Table Scan 🔍.
إيش اللي بيصير؟
1. Physical Reads عالية جدًا 📚: البيانات المطلوبة مش موجودة في الـ cache.
2. Logical Reads عالية جدًا 📊: محرك قاعدة البيانات يضطر يقرأ كميات ضخمة من البيانات حتى لو بعضها موجود في الـ cache.
الخلاصة؟ أداء ضعيف جدًا 💻، خصوصًا مع الجداول الكبيرة، لأن عملية الـ Scan مكلفة.
الحل؟ 🛠️
Indexing هو الحل. الـ Index يحدد إذا كان محرك قاعدة البيانات هيعمل Seek (بحث سريع 🔍) أو Scan (بحث بطيء 🐢).
لو الحقول اللي تستخدمها في الـ join أو في الـ where ما عليها Index، محرك قاعدة البيانات مش هيقدر يعمل Seek، وحيضطر يعمل Scan.
مثال:
لو عندك جدول فيه مليون صف 💯، وعملت join على حقل ما فيه Index، محرك قاعدة البيانات هيعمل Scan على المليون صف.
النتيجة؟ أداء ضعيف جدًا 🚶♂️.
نفهم من كذا إيش؟
الـ ORM زي EF-Core يساعد في تسهيل كتابة الكود، لكنه مش ساحر. لو ما عندك فكرة واضحة عن الـ SQL اللي بيتولد، هتواجه مشاكل في الأداء دون أن تعرف السبب.
فين المشكلة؟
المشكلة هي أن الـ ORM يخفي بعض التفاصيل المهمة التي تساعد في تحسين الأداء. لو ما عندك فهم جيد لـ SQL أو Execution Plans، ستكتب كود غير كفؤ.
مثال عملي:
إذا كتبت استعلام LINQ معقد، الـ ORM قد يحوله إلى استعلام SQL معقد جدًا. النتيجة؟ أداء ضعيف 💔.
إيش الحل؟
1. افهم محرك قاعدة البيانات بشكل صحيح:
تعرف على كيفية قراءة Execution Plans 📑.
افهم كيفية استخدام محرك قاعدة البيانات للـ Indexes.
تعلم الفرق بين Seek و Scan.
2. اعمل Indexing بشكل ذكي:
ضع Indexes على الحقول التي تستخدمها في الـ joins أو في الـ where conditions 🔑.
لا تفرط في استخدام الـ Indexes حتى لا يؤثر ذلك على أداء عمليات Insert/Update ⚖️.
3. راقب الأداء:
استخدم أدوات مثل SQL Profiler لمراجعة الاستعلامات التي يتم توليدها من الـ ORM 🔍.
قيس Logical Reads و Physical Reads لتقييم كفاءة الاستعلامات.
4. إذا كان الاستعلام معقدًا، استخدم الاستعلامات الخام (Raw SQL):
إذا كان LINQ معقد جدًا، استخدم الاستعلامات الخام مع الـ ORM لكتابة استعلام دقيق ومحسن 🖋️.
ختامًا :
حتى إذا كنت تستخدم ORM مثل EF-Core أو غيره، يجب أن تكون لديك معرفة جيدة بـ SQL. هذا الفهم سيجعلك قادرًا على تحسين الأداء وحل المشكلات بكفاءة عالية 💡.
Forwarded from اللجنة العلمية CS 22 (خالد العبسي)
Hack like a ghost.pdf
16.6 MB
كتاب يشرح لك عن أكثر الطرق للتخفي على الإنترنت
Forwarded from اللجنة العلمية CS 22 (ʙʀʜᴏᴏᴍ ⑇)
إذا أنت شغال بـ Django وعندك موديل وكسلان تسوي Form وHTML وcss وغيره.
الحل مع DFormKit تسويه لك بلحظة ومصمم بطريقة مرتبة باستخدام Tailwind CSS، أو حتى لو نفسك المكتبة تولد لك الأكواد الجاهزة في`urls.py` و
بس ليش DFormKit؟؟
- توليد ModelForm ديناميكي ما عاد في داعي تكتب الفورم يدوياً!
- تفعل الـ HTML بتنسيقات Tailwind جاهزة 100%
- الأتمتة
- واجهة CLI تفاعلية
ركز انت على الأمور الأهم... والـ Forms على DFormKit 👍🏻
والجميل ان المكتبة Open Source
https://github.com/abdulrahmanRadan/dformkit
وهذا رابط المشروع في pypi
https://pypi.org/project/dformkit/
كل الشكر للباش مهندس عبدالرحمن رعدان لدعم Django community +وإذا عندك أي اقتراحات او مشاكل شاركها في issues 👍🏻
#مساعد #مكاتب
الحل مع DFormKit تسويه لك بلحظة ومصمم بطريقة مرتبة باستخدام Tailwind CSS، أو حتى لو نفسك المكتبة تولد لك الأكواد الجاهزة في`urls.py` و
views.py بدون أي تعببس ليش DFormKit؟؟
- توليد ModelForm ديناميكي ما عاد في داعي تكتب الفورم يدوياً!
- تفعل الـ HTML بتنسيقات Tailwind جاهزة 100%
- الأتمتة
- واجهة CLI تفاعلية
ركز انت على الأمور الأهم... والـ Forms على DFormKit 👍🏻
والجميل ان المكتبة Open Source
https://github.com/abdulrahmanRadan/dformkit
وهذا رابط المشروع في pypi
https://pypi.org/project/dformkit/
كل الشكر للباش مهندس عبدالرحمن رعدان لدعم Django community +وإذا عندك أي اقتراحات او مشاكل شاركها في issues 👍🏻
#مساعد #مكاتب
GitHub
GitHub - radanpro/DFormKit: DFormKit is a lightweight Django library designed to dynamically generate ModelForms and corresponding…
DFormKit is a lightweight Django library designed to dynamically generate ModelForms and corresponding HTML templates with ease. It simplifies form creation by automating repetitive tasks, making i...
🔥2
موضوع في غاية الأهمية 🙆
ما في شيء ببلاش | المكتبات وأطر العمل 📚
أول مرة تستخدم مكتبة أو إطار عمل بتحس بالسعادة لأنك وفّرت وقت وجهد، وتعتبرهم أدوات عظيمة مليئة بالمميزات 🤩.
لكن هل فعلاً إتقانك لهم يعتمد فقط على استخدامهم؟
الإجابة: لا. الإتقان الحقيقي يعتمد على معرفتك بـ المميزات والعيوب معًا!
🔍 ليش العيوب مهمة؟
لأنها اللي بتحدد:
متى تفضل مكتبة على أخرى.
متى تفضل إطار عمل على مكتبة.
ومتى أصلاً تستخدمهم أو تستغني عنهم.
لو ركزت على المميزات فقط، كل الحلول بتكون صواب بالنسبة لك وما بتشوف الفرق الحقيقي.
أبرز عيوب استخدام المكتبات وأطر العمل:
1️⃣ الترابط الزائد بالكود
لما يكون مشروعك يعتمد بشكل كبير على مكتبة أو إطار عمل، استبدالهم بالمستقبل بيكون تحدّي كبير لأن الأكواد المتعلقة بهم منتشرة في كل المشروع.
💡 الحل الذكي:
لا تخلي الكود يتعامل مباشرة مع المكتبة!
بدلاً من ذلك، استخدم واجهة (Interface) من تصميمك للتعامل مع المكتبة.
إذا قررت تستبدل المكتبة لاحقاً، كل التعديلات بتكون على الواجهة فقط، والمشروع بالكامل يظل بأمان.
📌 هذا يتم بسهولة باستخدام Facade Design Pattern.
2️⃣ قضايا الأمان (Security)
ثغرة واحدة في المكتبة أو إطار العمل = ثغرة في مشروعك 😨.
🛠 كيف تتعامل مع المشكلة؟
راجع مشاكل المكتبة (Issues) باستمرار.
لو شفت مشكلة أمنية، تعامل معها فوراً.
عند نزول تحديث أمني، لا تتأخر بتحديث المكتبة.
3️⃣ الأخطاء (Bugs)
وجود خطأ (Bug) في المكتبة قد يؤدي إلى أخطاء في مشروعك.
✅ الحل:
اختار مكتبات تعتمد على عملية اختبار (Testing) قوية.
إذا المكتبة ما فيها اختبارات، أضف Unit Testing بنفسك على الأجزاء اللي بتستخدمها منها.
🎯 الفائدة من الاختبارات:
1. تقدر تحدث المكتبة وأنت مطمئن طول ما الاختبارات ما تفشل.
2. الاختبارات بتكون بمثابة توثيق (Documentation) داخلي لك ولأعضاء الفريق، خصوصاً الجدد.
ختامًا:
> المكتبات وأطر العمل أدوات رائعة، لكنها مش عصا سحرية 🪄.
ذكاءك كمطور يظهر في كيفية إدارتك لها بعقلية واعية، بحيث تحصل على الفوائد وتتجنب المشاكل.
اتبع النصائح السابقة، وبتصنع مشروع قوي ومستدام، بعيد عن التعقيدات والمشاكل المستقبلية. 🚀
ما في شيء ببلاش | المكتبات وأطر العمل 📚
أول مرة تستخدم مكتبة أو إطار عمل بتحس بالسعادة لأنك وفّرت وقت وجهد، وتعتبرهم أدوات عظيمة مليئة بالمميزات 🤩.
لكن هل فعلاً إتقانك لهم يعتمد فقط على استخدامهم؟
الإجابة: لا. الإتقان الحقيقي يعتمد على معرفتك بـ المميزات والعيوب معًا!
🔍 ليش العيوب مهمة؟
لأنها اللي بتحدد:
متى تفضل مكتبة على أخرى.
متى تفضل إطار عمل على مكتبة.
ومتى أصلاً تستخدمهم أو تستغني عنهم.
لو ركزت على المميزات فقط، كل الحلول بتكون صواب بالنسبة لك وما بتشوف الفرق الحقيقي.
أبرز عيوب استخدام المكتبات وأطر العمل:
1️⃣ الترابط الزائد بالكود
لما يكون مشروعك يعتمد بشكل كبير على مكتبة أو إطار عمل، استبدالهم بالمستقبل بيكون تحدّي كبير لأن الأكواد المتعلقة بهم منتشرة في كل المشروع.
💡 الحل الذكي:
لا تخلي الكود يتعامل مباشرة مع المكتبة!
بدلاً من ذلك، استخدم واجهة (Interface) من تصميمك للتعامل مع المكتبة.
إذا قررت تستبدل المكتبة لاحقاً، كل التعديلات بتكون على الواجهة فقط، والمشروع بالكامل يظل بأمان.
📌 هذا يتم بسهولة باستخدام Facade Design Pattern.
2️⃣ قضايا الأمان (Security)
ثغرة واحدة في المكتبة أو إطار العمل = ثغرة في مشروعك 😨.
🛠 كيف تتعامل مع المشكلة؟
راجع مشاكل المكتبة (Issues) باستمرار.
لو شفت مشكلة أمنية، تعامل معها فوراً.
عند نزول تحديث أمني، لا تتأخر بتحديث المكتبة.
3️⃣ الأخطاء (Bugs)
وجود خطأ (Bug) في المكتبة قد يؤدي إلى أخطاء في مشروعك.
✅ الحل:
اختار مكتبات تعتمد على عملية اختبار (Testing) قوية.
إذا المكتبة ما فيها اختبارات، أضف Unit Testing بنفسك على الأجزاء اللي بتستخدمها منها.
🎯 الفائدة من الاختبارات:
1. تقدر تحدث المكتبة وأنت مطمئن طول ما الاختبارات ما تفشل.
2. الاختبارات بتكون بمثابة توثيق (Documentation) داخلي لك ولأعضاء الفريق، خصوصاً الجدد.
ختامًا:
> المكتبات وأطر العمل أدوات رائعة، لكنها مش عصا سحرية 🪄.
ذكاءك كمطور يظهر في كيفية إدارتك لها بعقلية واعية، بحيث تحصل على الفوائد وتتجنب المشاكل.
اتبع النصائح السابقة، وبتصنع مشروع قوي ومستدام، بعيد عن التعقيدات والمشاكل المستقبلية. 🚀
👌1
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
| Have a BUG free Weekend |
|______________|
. .
\ /
\ | o : o |/
~-| o : o |-~
_ / \_ : _/ \_
| Have a BUG free Weekend |
|______________|
. .
\ /
/ ! \\ | o : o |/
~-| o : o |-~
_ / \_ : _/ \_
Forwarded from AI (Artificial Intelligence )
YouTube
Harvard CS50’s Artificial Intelligence with Python – Full University Course
This course from Harvard University explores the concepts and algorithms at the foundation of modern artificial intelligence, diving into the ideas that give rise to technologies like large language models, game-playing engines, handwriting recognition, and…
Forwarded from AI (Artificial Intelligence )
YouTube
OpenCV Course - Full Tutorial with Python
Learn everything you need to know about OpenCV in this full course for beginners. You will learn the very basics (reading images and videos, image transformations) to more advanced concepts (color spaces, edge detection). Towards the end, you'll have hands…
Forwarded from AI (Artificial Intelligence )
AI (Artificial Intelligence )
Photo
Anaconda
هو عبارة عن توزيع مجاني مفتوح المصدر لـ Python، مصمم خصيصًا لعلماء البيانات ومهندسي التعلم الآلي. يوفر بيئة عمل شاملة لتطوير وتنفيذ مشاريع التعلم الآلي وعلوم البيانات.
لماذا نستخدم أنكوندا؟
إدارة بيئات العمل: يسمح لك أنكوندا بإنشاء بيئات عمل افتراضية مستقلة لكل مشروع، مما يضمن عدم تداخل الحزم والاعتمادات بين المشاريع المختلفة.
حزمة واسعة من الحزم: يأتي أنكوندا مع مجموعة كبيرة من حزم Python الشائعة المستخدمة في علوم البيانات والتعلم الآلي، مثل NumPy، Pandas، Matplotlib، Scikit-learn، وغيرها.
سهولة الاستخدام: يوفر أنكوندا واجهة مستخدم رسومية (GUI) تسمى Anaconda Navigator، تسهل إدارة البيئات والحزم وتشغيل النوتبوكات.
مجتمع كبير: يتمتع أنكوندا بمجتمع مستخدم نشط كبير يوفر الدعم والمساعدة.
مكونات أنكوندا الرئيسية:
conda:
هو مدير الحزم والأدوات الذي يستخدم لإدارة البيئات والحزم في أنكوندا.
Anaconda Navigator:
هي واجهة المستخدم الرسومية التي تتيح لك إدارة بيئات العمل والحزم وتشغيل النوتبوكات.
Jupyter Notebook:
هو تطبيق ويب تفاعلي يسمح لك بكتابة وتنفيذ شفرة Python وتصور النتائج في نفس المستند.
يمكنك تحميل أنكوندا من الموقع الرسمي: https://www.anaconda.com/download/
هو عبارة عن توزيع مجاني مفتوح المصدر لـ Python، مصمم خصيصًا لعلماء البيانات ومهندسي التعلم الآلي. يوفر بيئة عمل شاملة لتطوير وتنفيذ مشاريع التعلم الآلي وعلوم البيانات.
لماذا نستخدم أنكوندا؟
إدارة بيئات العمل: يسمح لك أنكوندا بإنشاء بيئات عمل افتراضية مستقلة لكل مشروع، مما يضمن عدم تداخل الحزم والاعتمادات بين المشاريع المختلفة.
حزمة واسعة من الحزم: يأتي أنكوندا مع مجموعة كبيرة من حزم Python الشائعة المستخدمة في علوم البيانات والتعلم الآلي، مثل NumPy، Pandas، Matplotlib، Scikit-learn، وغيرها.
سهولة الاستخدام: يوفر أنكوندا واجهة مستخدم رسومية (GUI) تسمى Anaconda Navigator، تسهل إدارة البيئات والحزم وتشغيل النوتبوكات.
مجتمع كبير: يتمتع أنكوندا بمجتمع مستخدم نشط كبير يوفر الدعم والمساعدة.
مكونات أنكوندا الرئيسية:
conda:
هو مدير الحزم والأدوات الذي يستخدم لإدارة البيئات والحزم في أنكوندا.
Anaconda Navigator:
هي واجهة المستخدم الرسومية التي تتيح لك إدارة بيئات العمل والحزم وتشغيل النوتبوكات.
Jupyter Notebook:
هو تطبيق ويب تفاعلي يسمح لك بكتابة وتنفيذ شفرة Python وتصور النتائج في نفس المستند.
يمكنك تحميل أنكوندا من الموقع الرسمي: https://www.anaconda.com/download/
Anaconda
Download Anaconda Distribution | Anaconda
Download Anaconda's open-source Distribution today. Discover the easiest way to perform Python/R data science and machine learning on a single machine.
Forwarded from AI (Artificial Intelligence ) (AHMED ALLAW)
AI (Artificial Intelligence )
Photo
#IS4
الخوارزميات الشائعة المستخدمة في البحث في الرسوم البيانية:
Dijkstra, DFS, BFS, A*:
هذه الخوارزميات تستخدم لحل مجموعة متنوعة من المشاكل المتعلقة بالبحث عن المسارات في الرسوم البيانية،
مثل:
عثور أقصر مسار:
تحديد أقصر مسار بين نقطتين في رسم بياني مرجح.
استكشاف الرسم البياني:
زيارة جميع العقد في الرسم البياني.
حل المسائل المتعلقة باللعب:
مثل لعبة الشطرنج أو المتاهات.
نحو الهدف.
BFS و DFS:
تستخدم لاستكشاف الرسم البياني، ولا تضمن العثور على أقصر مسار في الرسوم البيانية المرجحة.
Dijkstra:
تضمن العثور على أقصر مسار في الرسوم البيانية المرجحة ذات الأوزان الموجبة.
A*:
تحسن على Dijkstra باستخدام دالة تكلفة تقديرية لتوجيه البحث، مما يجعلها أكثر كفاءة في العديد من الحالات.
مثال:
إذا كنت تريد العثور على أقصر مسار بين مدينتين في خريطة، فإن خوارزمية Dijkstra أو *A ستكون مناسبة.
أما إذا كنت تريد التحقق من وجود دورة في رسم بياني، فإن DFS ستكون أكثر ملاءمة.
#ذكاء_إصطناعي_عملي
الخوارزميات الشائعة المستخدمة في البحث في الرسوم البيانية:
Dijkstra, DFS, BFS, A*:
هذه الخوارزميات تستخدم لحل مجموعة متنوعة من المشاكل المتعلقة بالبحث عن المسارات في الرسوم البيانية،
مثل:
عثور أقصر مسار:
تحديد أقصر مسار بين نقطتين في رسم بياني مرجح.
استكشاف الرسم البياني:
زيارة جميع العقد في الرسم البياني.
حل المسائل المتعلقة باللعب:
مثل لعبة الشطرنج أو المتاهات.
نحو الهدف.
BFS و DFS:
تستخدم لاستكشاف الرسم البياني، ولا تضمن العثور على أقصر مسار في الرسوم البيانية المرجحة.
Dijkstra:
تضمن العثور على أقصر مسار في الرسوم البيانية المرجحة ذات الأوزان الموجبة.
A*:
تحسن على Dijkstra باستخدام دالة تكلفة تقديرية لتوجيه البحث، مما يجعلها أكثر كفاءة في العديد من الحالات.
مثال:
إذا كنت تريد العثور على أقصر مسار بين مدينتين في خريطة، فإن خوارزمية Dijkstra أو *A ستكون مناسبة.
أما إذا كنت تريد التحقق من وجود دورة في رسم بياني، فإن DFS ستكون أكثر ملاءمة.
#ذكاء_إصطناعي_عملي
Forwarded from AI (Artificial Intelligence ) (AHMED ALLAW)
Forwarded from AI (Artificial Intelligence ) (AHMED ALLAW)
AI (Artificial Intelligence )
#IS4 #ذكاء_إصطناعي_عملي
#IS4
خوارزميات البحث Search Algorithms:
المستنيرة وغير المستنيرة
(Informed vs. Uninformed Search Algorithms).
الخوارزميات غير المستنيرة (Uninformed Search Algorithms)
تعريف:
هي خوارزميات لا تمتلك أي معلومات مسبقة عن الهدف أو الحل الأمثل.
تعتمد بشكل أساسي على استكشاف كل الاحتمالات الممكنة بشكل منهجي حتى الوصول إلى الهدف.
أمثلة:
البحث العرضي (Breadth-First Search):
يبدأ من العقدة الجذرية ويستكشف جميع العقد على نفس المستوى قبل الانتقال إلى المستوى التالي.
البحث العميق (Depth-First Search):
يتقدم بعمق في كل فرع من الشجرة حتى يصل إلى ورقة أو عقدة هدف، ثم يعود للبحث في فروع أخرى.
البحث التوحيدي (Uniform Cost Search):
يختار دائماً العقدة التي لها أقل تكلفة تراكمية من البداية.
الخوارزميات المستنيرة (Informed Search Algorithms)
تعريف:
هي خوارزميات تستخدم معلومات إضافية عن الهدف أو الحل الأمثل لتوجيه عملية البحث. هذه المعلومات تساعد في تقليل عدد العقد التي يتم فحصها وتحسين كفاءة البحث.
أمثلة:
البحث الأكثر تكلفة (Greedy Best-First Search):
يختار دائماً العقدة التي تبدو أقرب إلى الهدف بناءً على تكلفة مسار معين.
البحث *A:
يعتبر أحد أشهر الخوارزميات المستنيرة، حيث يجمع بين تكلفة المسار الحالي وتقدير التكلفة المتبقية للوصول إلى الهدف.
متى تستخدم كل نوع؟
الخوارزميات غير المستنيرة:
تستخدم عندما لا تتوفر أي معلومات مسبقة عن الهدف، أو عندما تكون تكلفة الحصول على هذه المعلومات عالية.
الخوارزميات المستنيرة:
تستخدم عندما تتوفر معلومات عن الهدف ويمكن استخدامها لتوجيه البحث. تكون مفيدة بشكل خاص في مشاكل البحث المعقدة حيث يكون عدد الاحتمالات كبيرًا.
#ذكاء_إصطناعي_عملي
خوارزميات البحث Search Algorithms:
المستنيرة وغير المستنيرة
(Informed vs. Uninformed Search Algorithms).
الخوارزميات غير المستنيرة (Uninformed Search Algorithms)
تعريف:
هي خوارزميات لا تمتلك أي معلومات مسبقة عن الهدف أو الحل الأمثل.
تعتمد بشكل أساسي على استكشاف كل الاحتمالات الممكنة بشكل منهجي حتى الوصول إلى الهدف.
أمثلة:
البحث العرضي (Breadth-First Search):
يبدأ من العقدة الجذرية ويستكشف جميع العقد على نفس المستوى قبل الانتقال إلى المستوى التالي.
البحث العميق (Depth-First Search):
يتقدم بعمق في كل فرع من الشجرة حتى يصل إلى ورقة أو عقدة هدف، ثم يعود للبحث في فروع أخرى.
البحث التوحيدي (Uniform Cost Search):
يختار دائماً العقدة التي لها أقل تكلفة تراكمية من البداية.
الخوارزميات المستنيرة (Informed Search Algorithms)
تعريف:
هي خوارزميات تستخدم معلومات إضافية عن الهدف أو الحل الأمثل لتوجيه عملية البحث. هذه المعلومات تساعد في تقليل عدد العقد التي يتم فحصها وتحسين كفاءة البحث.
أمثلة:
البحث الأكثر تكلفة (Greedy Best-First Search):
يختار دائماً العقدة التي تبدو أقرب إلى الهدف بناءً على تكلفة مسار معين.
البحث *A:
يعتبر أحد أشهر الخوارزميات المستنيرة، حيث يجمع بين تكلفة المسار الحالي وتقدير التكلفة المتبقية للوصول إلى الهدف.
متى تستخدم كل نوع؟
الخوارزميات غير المستنيرة:
تستخدم عندما لا تتوفر أي معلومات مسبقة عن الهدف، أو عندما تكون تكلفة الحصول على هذه المعلومات عالية.
الخوارزميات المستنيرة:
تستخدم عندما تتوفر معلومات عن الهدف ويمكن استخدامها لتوجيه البحث. تكون مفيدة بشكل خاص في مشاكل البحث المعقدة حيث يكون عدد الاحتمالات كبيرًا.
#ذكاء_إصطناعي_عملي