VOL:19 Strategies for Read Heavy Systems
أهلًا وسهلا بكم في العدد التاسع عشر من النشرة الأسبوعية لاقرأ-تِك 🎉
لا تنسوا أهلنا من صالح الدعاء,اللهم إنّا استودعناك اياهم، اللهم كُن عوناً لهم، اللهم انصرهم واحفظهم. 🇵🇸
أهلًا وسهلا بكم في العدد التاسع عشر من النشرة الأسبوعية لاقرأ-تِك 🚀
سواء كنت مهندس برمجيات مبتدئ أو محترف، فنشرتنا هدفها انها تثري المحتوى التقني العربي سعيا للتطوير من جودة المحتوى باللغة العربية, من خلال تقديم أحدث المستجدات والتطورات في عالم البرمجيات، بالإضافة إلى أفضل الممارسات والنصائح القيمة, ونشر أحدث المقالات وترشيحات الكتب ومحتوى ورقة وقلم اللي بينزلوا بشكل مستمر في موقع اقرأ-تِك.
في الإصدار ده الفهرس هيكون كالآتي:
بعض الاستراتيجيات للتعامل مع الـ Read Heavy Systems
ازاي الـ QR Codes بيشتغل وحكايته بدأت ازاي
ازاي الـ Monorepo ممكن تساعد في ادارة المشاريع بشكل فعال
بعض النصايح والارشادات عشان الـ CV يعدي الـ Screening
العالم محاط بشاشة زرقاء - Microsoft and CrowdStrike Global Outage
لا تدع شيء يفوتك!
بفضل الله قمنا بإطلاق قناة اقرأ-تِك على التليجرام مجانًا للجميع 🚀
آملين بده اننا نفتح باب تاني لتحقيق رؤيتنا نحو إثراء المحتوى التقني باللغة العربية ، ومساعدة لكل متابعينا في انهم يوصلوا لجميع أخبار اقرأ-تِك من حيث المقالات ومحتوى ورقة وقلم والنشرة الأسبوعية وكل جديد بطريقة سريعة وسهلة
مستنينكوا تنورونا , وده رابط القناة 👇
Strategies for Read Heavy Systems
لما نيجي نتكلم عن الأنظمة اللي بتركز على عمليات القراءة أكتر من الكتابة، يعني الـ Systems اللي بيكون فيها نسبة قراءة للبيانات أكبر بكتير من نسبة الكتابة.
فلو كان الـ System اللي بتبنيه بيتضمن من المتطلبات بتاعته انه يكون Read Heavy ففيه شوية استراتيجيات ممكن نستخدمها عشان نحسن من الأداء ونضمن إن النظام يشتغل بكفاءة عالية.
فورقة وقلم وتعالوا نتكلم عن بعض الاستراتيجيات اللي ممكن نستخدمها.
Caching
أول استراتيجية وأكتر واحدة مشهورة هي الـ Caching. وفكرة الـ Caching ببساطة هي إنك بتحتفظ بنسخة من البيانات اللي بتتقرا كتير في مكان سريع زي الـ RAM فبالتالي البيانات دي بتكون In-Memory.
لما المستخدم بيطلب البيانات دي تاني، النظام بدل ما يروح يجيبها من الـ Database، ويكون فيه Latency نتيجة قراءة البيانات دي من الـ Disk بيجيبها علطول من الـ Cache.
فده طبعًا بيقلل الوقت اللي الـ System محتاجه علشان يجيب البيانات وبالتالي يقلل الحمل على الـ Database.
وفيه أنواع كتير من الـ Caching زي:
الـ In-Memory Caching: زي استخدام Redis أو Memcached. ده بيكون مفيد لما تكون محتاج الوصول للبيانات بسرعة فائقة.
الـ Application-Level Caching: في النوع ده بتحتفظ بنسخة من البيانات في الـ Application نفسه، زي لما تعمل Cache لنتائج API Calls.
Indexing
الـ Indexing بيساعد في تسريع عمليات البحث في الـ Database. فلما يكون عندنا Table فيها ملايين الـ Records، البحث جواها ممكن ياخد وقت طويل.
لكن لو عاملين Index على الـ Column مثلا اللي بنبحث بيه كتير، هنلاقي إن البحث بقى أسرع بكتير. زي ما يكون عندك فهرس في كتاب، بدل ما تقعد تدور على الكلمة في كل صفحات الكتاب، بتروح للفهرس وتوصل للمعلومة بسرعة.
وطبعًا بنأكد على ان عمل Indexing لازم يتم بعناية وانك تكون فاهم كويس ايه الـ Column اللي فعلا ممكن تحتاج يتعملها Indexing عشان تساعد في تحسين الاداء.
أنواع الـ Indexes:
الـ B-Tree Index: ده النوع الافتراضي في معظم الـ Databases. بيكون فعال في معظم حالات البحث.
الـ Hash Index: بيكون أسرع في عمليات البحث عن القيم الدقيقة لكنه مش مفيد في عمليات البحث عن نطاق معين من القيم واللي بيعرف بالـ Range Based Queries.
How QR Codes Work
ال QR Codes من الأشياء اللي بنشوفها بشكل شبه يومي في كل مكان
فورقة وقلم و تعالوا نفهم هما إيه ونعرف إزاي ال Quick-Response Codes بتتحول ل URLs و إزاي كمبرمج تقدر تعمل تطبيق بسيط بيعمل generation ل QR Codes.
قبل ما نبتدي خلينا نعرف إن الهدف الأساسي وراء اختراع ال QR Codes هو تمثيل قدر كبير من المعلومات في مكان صغير.
ال QR Codes تم اختراعها في مصنع سيارات في اليابان من ٣٠ سنة عشان يكتبوا أكبر قدر من المعلومات عن القطعة المصنعة عليها.
فكرة العمل؟
الفكرة كانت تطوير لفكرة الـ barcode اللي بقدر أمثل بيها أرقام المنتجات باستخدام شرائط طولية ولكن الخطوط الطولية بتديني combinations محدودة وبالتالي أقدر أعبر عن معلومات قليلة ولكن لو بدلنا الخطوط بمربعات صغيرة هيبقي عندي combinations أكثر وبالتالي أقدر أمثل بيها معلومات أكثر
خلينا نفكر في اللونين الأبيض والأسود للـ QR Code على أنهم صفر و واحد, نظام ثنائي عادي من اللي كلنا عارفينه, وكل 8 مربعات مع بعض هنعتبرهم وحدة واحدة (مش بيفكرك دا بال bytes?!) و بس كدا زي ما 011 بتمثل رقم 3 بال binary system فمربعين أسود وواحد أبيض هتمثل رقم 3 في رسمة ال qr code
ونفس فكرة تحويل ال binary ل hexadecimal and ASCII هنقدر نكتب معلومات تحتوي على حروف وأرقام.
ولأن ممكن تحويل الأبيض والأسود (أو أي لونين متباينين) بسهولة لصفر و واحد تفهمه الأجهزة بسهولة بتعتبر ال QR Codes حل ذكي وسريع لتمثيل عنواين المواقع و دا يعتبر استخدامها الأشهر حاليًا, ولكن يمكن استخدامها في تمثيل أي بيانات.
How Monorepo Effectively Manages Software Projects
تخيل معي أن مشروعاً برمجياً يتوسع وأصبح يعتمد على عدة أقسام، ووضعنا كل قسم في مستودعه الخاص على الـGitHub، وبالتالي أصبح كل قسم يتطلب تحديثاته واعتماداته الخاصة.
مع مرور الوقت يصبح تحديث إصدارات المكتبات والاعتمادات الموجودة بكل مستودع ومحاولة مزامنة الأكواد وإجراء الاختبارات أمر مكلف جداً من ناحية الوقت والجهد وهذا التعقيد يكبر مع توسع المشروع والأقسام داخله وبالتالي يؤدي إلى بطئ عملية التطوير واستنزاف طاقات المبرمجين.
ومن هنا تأتي معنا فكرة مستودع الـ Monorepo ليكون الحل الأمثل للمشكلة.
Monorepo
إذاً ماهو الـ Monorepo ؟
الـ”Monorepo" هي اختصار لـ "Monolithic Repository"، وهو ببساطة طريقة لإدارة المشاريع حيث يتم تخزين عدة مشاريع، بما في ذلك التطبيقات والمكتبات والأدوات، في مستودع واحد بدلاً من توزيعها على مستودعات متعددة. تخيل أن لديك مكتبة
كبيرة، حيث كل الكتب مرتبة بعناية في رفوف واحدة بدلاً من أن تكون موزعة في مكتبات مختلفة في أنحاء المدينة.
بعض الميزات التي يقدمها هذا النهج في إدارة المشاريع
1. سهولة إعادة استخدام الكود:
يشجع Monorepo على إعادة استخدام الكود من خلال السماح للمشاريع المتعددة بمشاركة الكود المشترك بينهم، مما يقلل من التكرار ويضمن الاتساق. على سبيل المثال: إذا كانت لديك مكتبة برمجية لمعالجة الصور تستخدمها عدة مشاريع، يمكنك تحديثها مرة واحدة ومشاركة التحديث مع جميع المشاريع بدلاً من تحديث كل مشروع على حدة.
2. تبسيط إدارة الاعتمادات:
تصبح إدارة الاعتمادات أكثر سهولة، حيث تشترك جميع المشاريع في مدير حزم واحد ونظام تحكم بالإصدارات واحد. فهذا يعني أنه يمكنك تحديث مكتبة خارجية مثل React لجميع المشاريع في وقت واحد بدلاً من تحديثها في كل مشروع بشكل منفصل.
3. تحسين عملية الاختبار:
يصبح الاختبار الشامل أسهل، حيث يمكنك تشغيل الاختبارات على جميع المشاريع في وقت واحد، مما يضمن جودة الكود بشكل أفضل. فيمكنك إعداد اختبارات شاملة تغطي جميع التطبيقات والمكتبات في المستودع، وتشغيلها دفعة واحدة للتحقق من أن التغييرات لم تؤثر سلبًا على أي جزء من المشروع.
ازاي الـ CV يعدي الـ Screening ويوصلك للإنترفيو
هنتكلم انهاردة عن شوية Tips and Tricks تعملها و أخطاء تحاول تتجنبها عشان تطلع بأحسن صورة للـ CV اللي بيعبر عنك فا جهز الـ CV بتاعك كدا و يلا بينا.
اعمل CV مخصص لكل وظيفة
الـ CV لازم يكون متماشي مع الوظيفة اللي انت بتقدم عليها، يعني لو انت مقدم على Software Engineer، مش منطقي تملى الـ CV بتاعك مشاريع و خبرات Machine Learning و Data Science، فحاول تعمل أكتر من نسخة و تكون كل واحدة موجهة لتراك معين يتماشى مع الوظيفة دي.
اهتم بالمشاريع اللي انت عملتها مع نفسك
لو انت حديث التخرج Fresh Graduate او بتقدم على Entry Level عموماً، فا دا مش معناه ان الـ CV بتاعك يبقا فاضي، مشاريع الكلية، أو اي مشاريع انت عملتها مع نفسك اتعملت عشان تحطها في الـ CV، فا لو انت مدخلتش Internships او مشتغلتش قبل كدا اهتم بالجزء دا و حط عدد كويس من المشاريع اللي انت شايفها حلوة.
سواء كنت اشتغلت قبل كدا او Fresh Graduate، و انت بتتكلم عن مشروع او حاجة اشتغلت فيها، بلاش تقتصد في عددهم أو تفاصيلهم، يعني متكتبش اسم البروجكت و خلاص، أنا معرفش أنت عملت إيه هنا و لا دا كان مشروع سهل و لا صعب ولا إيه التفاصيل بتاعته
في كل مشروع، حاول تتكلم عن التحديات أو إنجازاتك في الشغلانة دي، محتاج تبين اتعاملت ازاي مع التحديات دي و ازاي اوجدت ليها حلول عشان توصلك للإنجاز اللي أنت عملته (اللي يخليها تستاهل انها تتحط في الCV بتاعك)
أهم الأجزاء اللي تركز عليها في الـ CV
طبعا أهم جزئين في الـ CV كله هو الـ Work Experience إن وجدت، و الـ Projects. فا اهتم بيهم و اذكرهم زي ما قولنا في النقطة اللي فاتت.
أهمية الـ Problem Solving
لو انت طالب فا اهتم بالـ Problem Solving، مش عشان دا اللي هيعديك، بس هو أكيد إضافة كويسة ليك في الـ CV
Microsoft and CrowdStrike Global Outage
الغاء في رحلات الطيران في مطارات في كافة دول العالم زي أسبانيا وهولندا وانجلترا وأمريكا, ومش بس كده ده كمان البنوك معطله عن العمل بالاضافة لوكالات الأنباء والمستشفيات!
طب ايه السبب اللي خلى كل ده يحصل ؟
السبب مرتبط بتحديث من شركة اسمها CrowdStrike، ومتعلق بمنتج اسمه Falcon، والتحديث للاسف استهدف الأجهزة التي تعمل على أنظمة تشغيل مايكروسوفت. والمنتج ده غرضه الاساسي هو حماية الاجهزة والسيرفرات من التهديدات الأمنية اللي ممكن تحصل من خلال تقنيات متقدمة.
فبالتالي نتيجة حدوث خطأ في التحديث ده , ادى لظهور شاشات الـ Blue Screen الشهيرة والسيرفرات دخلت في مرحلة لا نهائية من إعادة التشغيل. والعطل ده كان هو السبب في خروج ملايين الأجهزة حول العالم عن الخدمة ومن ضمنها انظمة المطارات وكذلك البنوك وأجهزة ال ATM ووكالات الأنباء والمستشفيات والفنادق وغيرها من أنظمة الشركات حول العالم.
وشركة CrowdStrike بالفعل قامت بإصدار حل للمشكلة ونشر التحديث على السيرفرات المتضررة من المشكلة التقنية. ولكن الاف الشركات كانت بدأت تقوم بإيجاد حلول للمشكلة وبعضهم قام بحذف برامج الحماية الخاصة بشركة CrowdStrike وده بالطبع أدى لإن سيرفرات الشركات دي تكون متروكة حاليًا بلا حماية وعرضه لعمليات إختراق!
ووفقًا لـ CBVC العربية أسهم شركة ميكروسوفت خسرت 60 مليار دولار من قيمتها السوقية بسبب العطل الفني ده!
ويبقى السؤال هنا , هل كنتم تتخيلوا ان أزمة عالمية ممكن تحصل نتيجة خطأ صغير بالشكل ده ؟!
تقدروا دلوقتي تشتركوا في اقرأ-تِك بخصم الـ 20% وتنضموا لمجتمع مهتم بالقراءة في هندسة البرمجيات بـ 50 جنيه بس 🎉
وتستمتعوا بحرية كاملة في قراءة المقالات في مواضيع مختلفة بجودة عالية زي:
Data Structure & Algorithms , System Design , Distributed Systems , Micro-Services, Clean Code, Refactoring, Databases , Web Development, DevOps وغيرهم كتير باللغة العربية!
بالاضافة لمحتوى ورقة وقلم اللي بنشرح فيه مفاهيم برمجية بطريقة سهلة وباستعمال صور توضيحية 🚀
ولو فيه مشاكل في الدفع الأونلاين فمتاح دلوقتي الاشتراك من خلال InstaPay و VodafoneCash 💪
تقدروا تتواصلوا معانا من خلال الـ WhatsApp Business أو من خلال الرسايل على مواقع التواصل الاجتماعي أو من خلال البريد الالكتروني contact@eqraatech.com 😍
رؤيتنا هي إثراء المحتوى التقني العربي وجعل التعلم من خلال القراءة أمتع، وذلك من خلال إثراء المحتوى التقني باللغة العربية وتشجيع المبرمجين على القراءة بلغتهم الأم والتفكير أيضًا بها.
لذلك اتحنا الفرصة أمام الجميع للمساهمة ومساعدتنا في نشر واثراء المحتوى التقني باللغة العربية, من خلال كتابة المقالات التقنية في مختلف مجالات هندسة البرمجيات.
وجب التنويه أنه لن يتم نشر كافة الأعمال التي تصل إلينا، وإنما سيتم الانتقاء منها ما يحقق هدفنا بإثراء المحتوى التقني العربي، ولذلك قد تُطلب بعض التعديلات من الكاتب قبل النشر.
لمعرفة المزيد بخصوص :
💬 المعايير العامة لكتابة ونشر المقالات
⚡️ كيفية الإرسال
🔥 التزامات اقرأ-تِك تجاه الكتاب
يمكنكم قراءة كافة التفاصيل من هنا 👇