VOL55: Getting Started with Cursor AI - AI Pair Programming in Action
أهلًا وسهلا بكم في العدد الخامس والخمسين من النشرة الأسبوعية لاقرأ-تِك 🚀
لا تنسوا أهلنا من صالح الدعاء,اللهم إنّا استودعناك اياهم، اللهم كُن عوناً لهم، اللهم انصرهم واحفظهم. 🇵🇸
أهلًا وسهلا بكم في العدد الخامس والخمسين من النشرة الأسبوعية لاقرأ-تِك 🚀
سواء كنت مهندس برمجيات مبتدئ أو محترف، فنشرتنا هدفها انها تثري المحتوى التقني العربي سعيا للتطوير من جودة المحتوى باللغة العربية، من خلال تقديم أحدث المستجدات والتطورات في عالم البرمجيات، بالإضافة إلى أفضل الممارسات والنصائح القيمة، ونشر أحدث المقالات وترشيحات الكتب ومحتوى ورقة وقلم اللي بينزلوا بشكل مستمر في موقع اقرأ-تِك.
في الإصدار ده الفهرس هيكون كالآتي:
Getting Started with Cursor AI - AI Pair Programming in Action
WebSockets In a Nutshell
Building a Scalable Notification System with NodeJS
Date and Time Best Practices
الإصدار الأول من مدونات فطين في تصميم النظم
Getting Started with Cursor AI - AI Pair Programming in Action
محرر أكواد حديث مدعوم بالذكاء الاصطناعي، بيقدر يتعرف على ال codebase الخاصة بالمشروع ويفهمها ويقترح عليك إضافات وتعديلات. بل ويقدر يكتب أكواد مشروع كامل من البداية للنهاية وما عليك إلا إنك توجه باستخدام ال Prompts واللي ممكن كمان تكون بالعربي!
من أول لما ال AI اتعلم كتابة وتعديل الأكواد وظهر لنا إضافات ذكية مثل GitHub Copilot ولكن اللي بيميز cursor عنهم كون أغلبية الـ extensions دي بتقدر تعدل الملف المفتوح فقط و مبيكونش عندها دراية بالمشروع ككل. بينما Cursor بيقدر يفهم المشروع ككل ويكتب ويقترح أكواد أدق ومناسبة أكثر, ويقدر كمان يقدم تعديلات جماعية بينما أغلب المساعدات الذكية من قبل كانت تقتصر على تعديل سطر بسطر أو اقتراح أسطر قليلة.
مميزات Cursor
بيفهم الكود الكامل لمشروعك فتكون إضافته وتعديلاته أدق.
يستخدم أكثر من AI Model فى عمله فبيعطينا نتائج أفضل.
يتميز بالسرعة في توليد الأكواد الجديدة بتصل ل real-time ودا بيخلي تجربة استخدامه كمساعد ممتعة.
يتيح تفعيل ميزة الخصوصية فلا يتم تحميل الكود الخاص بك على remote servers ودا مناسب جدًا لأن أغلب الشركات تهتم بخصوصية مشاريعها
تقدر تكلمه بالعربي, وبالطبع زي أي AI Model كل لما كان ال Prompt أدق ومليء بالتفاصيل هيقدر يساعدك بشكل أفضل.
بسيط, أينعم واجهة المستخدم بتاعته فعلاً بسيطة وتقدر ت customize ال themes و ال extensions براحتك في تجربة شبيهة ب Visual studio code إن لم تكن أسهل.
عيوب Cursor
الحلو مايكملش ففي بعض التحديات معاه:
بيستهلك موارد - ال Ram اللي عاملانا مشاكل على طول- أكثر من Vscode
النسخة المجانية محدودة لعدد استخدامات الذكاء الاصطناعي في اليوم
زي أي AI Model ممكن يقترح أو يكتب أكواد خطأ أو فيها Bugs
لا يوجد نفس العدد من ال Free extensions مثل Vs code
WebSockets In a Nutshell
عشان نعرف قد ايه الـ Web Sockets ساعدت بشكل كبير في تطور صناعة البرمجيات محتاجين نبص على المثالين دول:
تخيلوا ان دلوقتي عاوزين نبعت رسالة لحد , فاللي هيحصل كالآتي هنروح نودي الرسالة لمكتب البريد , وبعدين هنفضل مستنين ان الشخص اللي استلمها يرد علينا , والرد ممكن يجي بسرعة وممكن ياخد وقت في بعض الاحيان وده بيعتمد على عوامل كتير زي مثلا المسافة اللي الرسالة دي محتاجة توصل من جهة للتانية وكذلك وقت الـ Processing بتاعها , وهكذا ..
وخلونا نتخيل مثال تاني ان عندنا تليفون أرضي بس بشكل مختلف شوية وهو ان عشان تكلم حد من صحابك محتاج تتصل وتساله سؤال وبعدين تقفل الخط وهو يرجع يتصل بيك يجاوبك على السؤال بتاعك ويسالك اللي هو عاوزه , وبعدين يقفل وتتصل تاني وترد عليه ..
الـ Paradigm في المثالين اللي فاتوا هو الـ HTTP Request Response وده التقليدي واللي بيتم استعماله في اغلب التطبيات حاليا .. وبكل بساطة الـ Client بيبعت Request للـ Server والـ Server يرد على الـ Client من خلال Response.
الفرق بين الـ WebSockets والـ HTTP Req/Res
الـ WebSockets جت عشان تسمح بمشاركة البيانات بين الطرفين بشكل بيحصل in-real time بمعنى ان دلوقتي باه عندي وسيلة تواصل ثنائية الاتجاه او بنقول عليه Bi-Directional Communication وده معناه ان دلوقتي اصبح عندي الـ Server والـ Client الاتنين يقدروا يكلموا بعض في نفس الوقت.
خلونا نرجع لمثال الرسالة بتاعة مكتب البريد , بدل ما كنا هنبعت الرسالة ونستنى وقت ما معين لحد ما يجيلنا الرد , دلوقتي باه عندنا Messenger نقدر من خلاله نبعت الرسالة ونحصل على الرد بشكل لحظي ونتكلم في نفس الوقت مع بعض من غير منبعت كل شوية رسالة ونستنى الرد عليها.
وبالنسبة لمثال التليفون فاحنا في وقتنا الحالي نقدر نتكلم في التليفون احنا الاتنين في خط واحد ونسمع بعض ونتكلم في نفس الوقت
هو ده فرق الـ WebSockets عن البروتوكول التقليدي للـ HTTP Request Response.
اي هي الـ Web Sockets ؟
هي عبارة عن Communication Protocol مزدوجة الاتجاه بنقول عليها Full-Duplex Communication Channels وده كله من خلال TCP Connection واحد بس. وبالتالي بتسمح بعملية الـ Real-time والـ Event-Driven Connections بين الـ Client والـ Server.
وعشان كده هنعرف كمان شوية في استعمالاتها انها كويسة اوي مع الـ Paradigms دي جدا.
Building a Scalable Notification System with NodeJS
في تطبيقات الويب الحديثة، تُعد أنظمة الإشعارات عنصرًا أساسيًا لتعزيز تفاعل المستخدمين. سواءً كنت تُنشئ منصة تواصل اجتماعي، أو تطبيق تجارة إلكترونية، أو نظام إدارة محتوى، فستحتاج إلى طريقة فعّالة لإرسال الإشعارات إلي المستخدمين.
في المقال ده هتكلم عن تصميم نظام إشعارات scalable بلغة Nodejs و هركز اكتر على:
Architectural Design (تصميم معمارية النظام بتاعنا)
Database Choices (SQL vs NoSQL) (إختيار الداتا بيز الأمثل للنظام)
Efficient Notification Processing
Horizontal Scaling Strategies
ما قبل إنشاء نظام إشعارات فعال
علشان تنشئ نظام فعال وناجح تعالى نتعرف على المتطلبات الأساسية:
عاوزين نخلي السيستم بتاعنا multi-channel support بمعنى أنه يقدر يبعت إشعارات من أكتر من خدمة زي email أو من ال app بتاعنا أو SMS وغيرها .
عاوزين نظام الإشعارات يبقى في ال real time او حتى نعملها schedule بمعني تتبعت في وقت معين.
عاوزين نضيف بيانات خاصة بالمستخدم في الإشعار علشان ده بيلفت انتباهه يحسسه انه ليه وده حاجه بنسميها Personalization.
نعمل tracking للإشعارات بتاعتنا ونشوف هي وصلت واتفتحت ولا لا وهكذا .
طبعا ال scalability علشان نضمن إنها تقدر توصل لكل مستخدمين السيستم اللي ممكن يعدوا ال 1M مستخدم.
طيب يلا نعمل Design لـ Scalable Architecture.
خصم 50% على جميع خطط الاشتراك السنوية لفترة محدودة، تقدروا دلوقتي تشتركوا في اقرأ-تِك وتستمتعوا بكافة المقالات في كل ما يخص هندسة البرمجيات باللغة العربية والمحتوى المميز من ورقة وقلم ومدونات فطين اللي بيتميزوا بتصاميم ذات جودة عالية وكل ده بحرية كاملة وكمان مفاجآت اقرأ-تِك الجاية 🚀
وبرضو متاح الاشتراك من خلال InstaPay و VodafoneCash 🎁
مدونات فطين في تصميم النظم - الإصدار الأول 🚀
كتابة هذا الكتاب لم تكن قرارًا مخططًا... بل كانت نتيجة لتراكمات من الحيرة، الإحباط، والدهشة اللي بيواجهوا أغلب الشباب حاليًا خصوصًا في رحلة البحث عن تعلم مهارات تصميم النظم واللي أصبحت من المهارات الأساسية في الانترفيوهات بالإضافة لكونها مهمة فعلًا على جميع المستويات.
على مدار سنوات من العمل داخل شركات تكنولوجية متعددة، وجدت نفسي مرارًا أواجه بعض الأسئلة زي:
لماذا صُمّم هذا النظام بهذه الطريقة؟
لماذا لم نرَ المشكلة إلا بعد فوات الأوان؟
هل كان يمكن أن نصمم الأمر بشكل أبسط؟
الإجابات كانت دائمًا معقدة، وتعود لأبعاد تقنية وتنظيمية ونفسية أيضًا.
هذا الكتاب ليس دليلًا أكاديميًا، بل هو مجموعة من التجارب والخبرات العملية كتبتها بعين المهندس الذي يراقب، يسأل، ويُخطئ ثم يتعلّم. المجموعة دي لم يتم ترجمتها للعربية من مدونات الشركات العالمية .. بل تم اعادة شرحها وتبسيطها باللغة العربية بأسلوب مختلف حتى تتسم بالبساطة بالإضافة لتميزها بالرسوم التوضيحية الجذابة.
اخترت اسم "فَطين" لأنه الشخصية التي تمنيت لو كانت موجودة معي منذ البداية— يسأل الأسئلة الصحيحة، ويفكّر بصوت عالٍ، ويحكي لك الدروس المستفادة.
إن كنت مهندسًا في بداية الطريق، أو تعمل منذ سنين ولديك خبرة متوسطة أو متقدمة في تصميم وبناء النظم فهذا الكتاب كتبته لك ليكون مرجعًا عمليًا لك يساعدك في تطوير مهاراتك التحليلية والفكرية في بناء وتطوير النظم الضخمة.
يتناول الكتاب ما يعادل من 15 تجربة عملية مميزة من داخل الشركات العالمية في تصميم النظم الضخمة بأكتر من 160 صفحة ويضم الآتي :
Introduction Into System Design
How Uber Serves Over 40 Million Reads Per Second
How Discord Stores Trillions of Messages
Dropbox's Chrono: Scalable, Consistent and Metadata Caching Solution
Unlocking Notion's Power - The Data Model Explained
How Shopify Mitigates Deadlocks in High Concurrency Environments
How LinkedIn Improves Microservices Performance With Protobuf
How Figma Secures Internal Web Applications
How GitHub Improves Reliability of Code Push Processing
How Meta Leverages AI For Efficient Incident Response
How Stripe Architected Massive Scale Observability Solution on AWS
Change Data Capture at Pinterest
How Canva Built Scalable and Reliable Content Usage Counting Service
How Netflix Migrates Critical Traffic at Scale With No Downtime
How Slack Handles Billions of Tasks in Milliseconds
How YouTube Supports Billions of Users With MySQL
System Design Comprehensive Guide
تقدروا تشوفوا النسخة كاملة من هنا كـ E-Book ، وحاولنا نخليها بسعر رمزي يناسب الجميع 👇
وكمان وفرناه على Kindle عشان الناس اللي بتحب تجربة القراءة على الـ Kindle منحرمهاش من التجربة الممتعة دي 🎉
بفضل الله أصبح متاح حاليا دعمنا من خلال الرعاة والشراكات وفعلنا الـ Sponsorship واحنا بنرحب بجميع الشراكات مع المؤسسات والشركات وأصحاب الأعمال لبناء مجتمع عربي يشجع على القراءة والتعلم ومشاركة التجارب والخبرات العملية في هندسة البرمجيات.
دورك كشريك أو راعي هيكون محوري في دعم المحتوى وتوسيع نطاق تأثيره. فانضم لرحلتنا وكن جزءًا من صناعة مستقبل التكنولوجيا في المنطقة 🚀
تقدروا تشوفوا التفاصيل كاملة من هنا والـ Analytics بتاعتنا من خلال اقرأ-تِك والنشرة الأسبوعية 👇
Date and Time Best Practices
في يوم مشمس جميل في الشغل جالك مشروع برمجة تطبيق لشركة طيران يقدر المستخدم يستعمله في حجز التذاكر, طبعًا فرحت جدًا ما كلنا بنحب السفر لحد ما فكرت في مشكلة التاريخ والوقت وجالك صداع!
هخلي التطبيق يحسب التاريخ والوقت على أساس أنهي دولة؟ طيب هعمل ايه في التوقيت الصيفي؟ وبالنسبة للمناطق الزمنية؟!, طيب ايه اللي هيحصل في السنين الكبيسة!!
مشاكل التعامل مع التاريخ والوقت في صناعة البرمجيات غنية عن التعريف لأن الموضوع فعلاً معقد فورقة وقلم وتعالوا نتعرف على أفضل الطرق للتعامل معها.
1- استخدم مكتبة موثوقة
القاعدة الأهم في موضوع دوال الوقت و التاريخ إنه لازم تستخدم مكتبة موثوق فيها سواء موجودة في اللغة بشكل أساسي زي datetime في python أو java.time في java
ابعد تمامًا عن إعادة اختراع العجلة ومحاولتك لبرمجة الدوال دي بنفسك لأن الساعة كما نعرفها الآن تعرضت لتغييرات تاريخية وسياسية وجغرافية بتخلي موضوع برمجة دوال الوقت والتاريخ بشكل صحيح من الصفر مشروع معقد جدًا.
لازم كمان تضمن إن المكتبة اللي بتستخدمها بتوفر بيانات محدثة ودقيقة عن المناطق الزمنية.
2- استخدام الـ UTC لتجنب مشاكل الـ Timezones
ال UTC هو نظام توقيت عالمي موحد بنستخدمه عشان نتجنب الالتباس في الساعات والمناطق الزمنية حوالين العالم, فخلي دايمًا برنامجك معتمد عليه بشكل أساسي بدل ما تستخدم الوقت المحلي للمنطقة أو الدولة اللي أنت فيها. وممكن بسهولة تقدر تعمل formatting ليه عشان يظهر الوقت المحلي للمستخدم.
فكمثال عندما يقوم مستخدم بحجز رحلة من نيويورك (UTC-5) إلى باريس (UTC+1)، يجب على النظام أن يحسب بدقة وقت المغادرة ووقت الوصول في المنطقة الزمنية المحلية.
إذا كانت الرحلة تغادر نيويورك في الساعة 6 مساءً بالتوقيت المحلي وتستغرق 7 ساعات، يجب أن يعرض النظام وقت الوصول في باريس بالتوقيت المحلي الصحيح (الساعة 2 صباحًا بتوقيت باريس).
3- التوقيت الصيفي
احنا خلاص متفقين اننا دايمًا هنخزن التاريخ والوقت بصيغة ال UTC في ال Database ولكن عند تحويل الصيغة لل Local Time Zone ممكن تقابلنا مشكلة التوقيت الصيفي و لذلك لازم المكتبة تكون بتدعم تغييرات التوقيت الصيفي لمنع حدوث أخطاء نتيجة تغيير الساعة.
رؤيتنا هي إثراء المحتوى التقني العربي وجعل التعلم من خلال القراءة أمتع، وذلك من خلال إثراء المحتوى التقني باللغة العربية وتشجيع المبرمجين على القراءة بلغتهم الأم والتفكير أيضًا بها.
لذلك اتحنا الفرصة أمام الجميع للمساهمة ومساعدتنا في نشر واثراء المحتوى التقني باللغة العربية, من خلال كتابة المقالات التقنية في مختلف مجالات هندسة البرمجيات.
وجب التنويه أنه لن يتم نشر كافة الأعمال التي تصل إلينا، وإنما سيتم الانتقاء منها ما يحقق هدفنا بإثراء المحتوى التقني العربي، ولذلك قد تُطلب بعض التعديلات من الكاتب قبل النشر.
لمعرفة المزيد بخصوص :
💬 المعايير العامة لكتابة ونشر المقالات
⚡️ كيفية الإرسال
🔥 التزامات اقرأ-تِك تجاه الكتاب
يمكنكم قراءة كافة التفاصيل من هنا 👇