VOL65: Top 5 Prompting Techniques
أهلًا وسهلا بكم في العدد الخامس والستين من النشرة الأسبوعية لاقرأ-تِك 🚀
لا تنسوا أهلنا من صالح الدعاء,اللهم إنّا استودعناك اياهم، اللهم كُن عوناً لهم، اللهم انصرهم واحفظهم. 🇵🇸
أهلًا وسهلا بكم في العدد الخامس والستين من النشرة الأسبوعية لاقرأ-تِك 🚀
سواء كنت مهندس برمجيات مبتدئ أو محترف، فنشرتنا هدفها انها تثري المحتوى التقني العربي سعيا للتطوير من جودة المحتوى باللغة العربية، من خلال تقديم أحدث المستجدات والتطورات في عالم البرمجيات، بالإضافة إلى أفضل الممارسات والنصائح القيمة، ونشر أحدث المقالات وترشيحات الكتب ومحتوى ورقة وقلم اللي بينزلوا بشكل مستمر في موقع اقرأ-تِك.
في الإصدار ده الفهرس هيكون كالآتي:
Top 5 Prompting Techniques
How Shopify Mitigates Deadlocks in High Concurrency Environments
Deep Dive Into Mailing Servers and SMTP
How to Store Passwords In Database
الإصدار الأول من مدونات فطين في تصميم النظم
Top 5 Prompting Techniques
الكلام مع ال LLMs بقى جزء من حياتنا اليومية والنهارده في ورقة وقلم وهنتكلم عن أكثر من طريقة لتحسين ال Prompts وطريقة كلامك مع ال Models عشان تطلع لك نتائج أحسن وأكثر دقة.
ال Prompt Engineering بتقدم مجموعة من الطرق والإرشادات المناسبة للتعامل مع نموذج ال LLM بناءًا على معرفتنا بطبيعة ال Model, هنعرض النهارده خمس طرق بأمثلة عليهم ومتى نستخدم كل واحدة منهم.
Zero Shot Technique
ال Shot هنا بتيجي بمعنى المثال, ودا بيكون ال Prompt العادي اللي بتكتبه من غير ما توفر أمثلة لل Model يتعلم منها
مثال:
Translate this sentence into Arabic: “I love Eqraatech”.
متى تستخدمه؟
عندما تكون المهمة التي تطلبها بسيطة ولا تتطلب توجيه إضافي منك, وقتها يعتمد النموذج علي معلوماته وما تدرب عليه.
One Shot / Few Shots Technique
هو كتابة الطلب مع إعطاء مثال أو أكثر للنموذج عن كيف يحققه أو أمثلة مع إجابتها ليتعلم منها, النموذج وقتها بيحاول يتعلم النمط من الأمثلة اللي أخذها ويستخدمها مع ما تدرب عليه مسبقًا ليعطيك النتيجة. حاول تخلي الأمثلة قصيرة وواضحة عشان متلخبطش النموذج.
مثال:
Classify the sentiment of each sentence:
"I love this product! It's amazing!" → Positive
"This is the worst service I’ve ever had." → Negative
"It's okay, not bad but not great." → Neutral
"I'm really impressed with the performance." → [Your turn]
متى تستخدمه؟
عندما يكون هناك أكثر من طريقة لحل المهمة، وتريد توجيه النموذج لأسلوب معيّن.
Role Prompting (Persona Prompting)
في هذه الطريقة تقوم أنت بتحديد دور أو شخصية للنموذج، دا بيخلي الرد أكثر تخصصًا ودقة. استخدامك لهذه الطريقة مع تحديد سياق Context في الطلب ممكن يحسن دقة الإجابات اللي بتحصل عليها من النموذج بشكل كبير جدًا.
مثال:
You are a professional fitness coach. Give me a weekly workout plan for a beginner.
مثال مع إضافة سياق:
You are a professional fitness coach. Give me a weekly workout plan for a beginner female trainee with moderate activity level to increase stamina and muscle strength
متى تستخدمه؟
وقت ما تحتاج إجابة بأسلوب أو خبرة معيّنة.
Chain of Thought Technique
هو تشجيع للنموذج على التفكير بصوت عالٍ خطوة بخطوة قبل إعطاء الإجابة. ودا مهم لأن طريقة تدريب النماذج بتجعلها ضعيفة في بعض العمليات زي العمليات الحسابية اللفظية حتي لو كانت بسيطة وممكن تقدملك نتائج خاطئة وعشان كدا استخدام الطريقة دي في الطلب بتساعد النموذج على تفكيك الأمر لأوامر ابسط ويقوم بتنفيذها حتي يصل للإجابة الصحيحة
مثال:
Q: If John has 3 apples and buys 2 more, then gives 1 to his friend, how many does he have ? think step by step
A: First, John starts with 3 apples. Then he buys 2 more, which makes 5 apples. After that, he gives 1 apple to his friend, so he is left with 4 apples. Answer: 4.
متى تستخدمه؟
في طلب حل المسائل الرياضية أو المنطقية و عند طلبك لتحليل البيانات مثل تحليل البيانات الإحصائية أو المالية إلخ…
Step-Back Prompting
هو أنك تطلب من النموذج أنه يرجع خطوة "فكريًا" قبل ما يجاوب على طلبك عشان يحلل الطلب بشكل أفضل فبدل مايجيب مباشرة، تطلب منه أولاً أن "يفهم السياق العام" أو يحدد "ما نوع المشكلة؟"، وبعدها يبدأ في الحل. الطريقة دي بتخليك تتفادي الإجابات السطحية أو السريعة من النماذج.
مثال:
First, before answering, identify what factors influence user engagement in general. Then suggest the most relevant strategies based on those factors.
متى تستخدمه؟
في الأسئلة التحليلية أو المفتوحة.
عند العمل على محتوى تعليمي أو تدريبي.
في البرمجة، لتحديد نوع الخطأ قبل اقتراح الحل.
How Shopify Mitigates Deadlocks in High Concurrency Environments
عشان نضمن الـ Data Integrity فالـ MySQL بيحتاج يعمل Lock على البيانات قبل ما يعمل Update على أي Record موجود ، لو فيه عمليات متعددة (Multiple Processes) بتحاول تعمل Update للبيانات في نفس الجدول في نفس الوقت، فممكن يحصل "deadlock" حسب طريقة تخزين البيانات على الـ Disk وحسب إدارة MySQL ليها.
ده ممكن يحصل حتى لو العمليات المختلفة دي بتتعامل مع Records مختلفة. فتعالوا نشوف في المقال ده ازاي Shopify بتشرح مشكلة الـ "deadlocks" في MySQL أثناء عمليات الـ Updates للبيانات، ونشوف إزاي الـ "composite primary keys" ممكن يكون حل للمشكلة دي بشكل فعال.
Deadlock Problem
لما MySQL بيعمل Update/Insert اللي هي (up-sert) لمجموعة من الـ Records اللي فيها بيانات جديدة وموجودة، بيحاول يضيف كل الـ Records ويعملهم Insert. فبالنسبة للسجلات اللي موجودة بالفعل، لو حصل "collision" على الـ "unique constraint" ده بيبقى معناه إن التحديث مطلوب بدل الإضافة. وعشان MySQL يقدر انه يعمل Update للسجلات دي بأمان، بيحتاج يعمل "gap lock".
لما العملية دي بتتكرر بشكل متزامن عن طريق أكتر من Process بتحاول تعمل نفس الكلام، الكلام ده بيبقى عرضة لحدوث "deadlocks".
وده طبعًا بيحصل لأن الـ "gap lock" بيستهدف الـ Record اللي بيتحدث فعليًا والـ Record اللي قبله على طول في الـ Index ، فـ MySQL بيعمل كده عشان يقدر يحدث الـ Index كمان.
لو الـ pkid
بطبيعته Sequential ، فده معناه إن البيانات هتتخزن بنفس ترتيب الـ Sequence ده. فلما يجي MySQL يحتاج يعمل "gap locks" عشان يدير العمليات المتعددة اللي بتحدث البيانات، ممكن وقتها يحصل تداخل في الـ "gap locks" اللي محتاجها العمليات المختلفة.
وعلى حسب عدد العمليات اللي شغالة في نفس الوقت وعدد الـ "unique constraint collisions" اللي بتحصل، ممكن ده طبعًا يؤدي لحدوث "deadlocks". وبناءً على تكرار الـ "deadlocks" دي ، ممكن تأثر بشكل كبير على أداء التطبيق ككل.
والـ "deadlocks" ممكن تحصل حتى لو العمليات شغالة على دفعات مختلفة (Multiple Batches) من السجلات.
الصورة دي بتوضح جدول اسمه transactions
. الجدول ده بيتم تحديثه بشكل متزامن عن طريق عمليات ETL بتشتغل على كل account
بشكل مستقل. ورغم إن كل عملية بتستهدف مجموعة مختلفة من الـ Records في الجدول transaction
، إلا إن متطلبات الـ Locks بينهم ممكن تتداخل وتسبب "deadlocks".
Deep Dive Into Mailing Servers and SMTP
.حياتنا اليومية تكاد لا تخلوا من الـ Emails , سواء كان في الشغل أو برا الشغل ، طب اي حكاية الـ Mail Server وازاي لسه لغاية دلوقتي ما بنعرفش نحذف الـ Emails بعد اما بنبعتها ؟!
ده اللي هنعرفه من خلال المقال ده ، فهنتعرف علي الـ SMTP وازاي بيشتغل ووقتها هنفهم ليه مش بنقدر نحذف الـ Emails اللي بنبعتها.
Sending Emails Workflow
لما بنيجي نبعت أي Email لحد ، الـ Email بيلف ف رحلة لذيذة متوضحة ف الرسمه اللي تحت دي:
الـ MUA هو الـ Client App اللي انت بتبعت منه أو بتشوف عليه الـ Email ومش لازم يكون موجود ف الـ Flow علشان نقدر نبعت Email ، ولكن نقدر نعتبره هو الواجهة اللي بنتعامل من خلالها زي Outlook أو الـ Gmail على سبيل المثال.
فعادي جدًا ممكن نتكلم مع الـ Mail Server باستعمال الـ SDKs وده على سبيل المثال عشان نقدر نبعت Transactional Emails او Marketing Emails.
SMTP - Simple Mail Transfer Protocol
الـ SMTP ببساطة هو الـ Protocol اللي بيخلينا نتكلم مع الـ Mail Server عشان نبعت الـ Emails. ومعندوش أي طريقه نقدر بيها نـ List الـ Emails، في حين الـ MUA بيستخدم Protocols تانية ممكن تكون HTTP عادي عشان يكلم الـ Mail Server ويشوف الـ Emails اللي اتبعتت.
الـ SMTP Server بيتكون من اكتر من Program:
الـ MTA ( Mail Transfer Agent )
الـ MDA ( Mail Delivery Agent )
الـ MSA ( Mail Submission Agent )
كل واحد في دول بيكون عنده مهمة معينة بيعملها عشان ال Mail Server يقدر يبعت او يستقبل الـ Emails.
طب هو ازاي الـ SMTP بيشتغل ؟
How to Store Passwords In Database
ازاي الـ Passwords بتتخزن في الـ Database وازاي نقدر نتأكد من الـ Password بتاع الـ User سليم وهو بيعمل Login ؟
وقبل ما نبدأ نتكلم عن ده خلونا في البداية نأكد على أهمية الموضوع وأن تخزين الـ Passwords في الـ Database لازم يتم بشكل ميسهلش للـ Hackers أنهم يوصلوا للـ Passwords حتى لو حصل اختراق للـ Database.
طب ايه هي الحاجات اللي بتسهل عملية الوصول للـ Passwords ؟
فيه بعض الحاجات اللي مفروض نبعد عنها تمامًا عشان بتسهل للـ Hackers انهم يوصلوا للـ Passwords زي:
اننا نخزن الـ Passwords كـ Plain Text في الـ Database ، ده هيخلي اي حد Internal شغال في الشركة انه يكون ليه Access على كل الـ Passwords وعارفهم كلهم .. وده برضو هيخلي اختراق الـ Database عملية بتسهل الوصول لكل الـ Passwords اللي موجودة، فالـ Hacker هيكون قدامه الـ Passwords على طبق من ذهب ..
اننا نستعمل Legacy Hashing Algorithms زي الـ MD5 و الـ SHA-1 فبالرغم من انهم يعتبروا Algorithms سريعة جدًا، إلا أنهم يعتبروا Not Secured وسهل يتم معرفة الـ Passwords من خلالهم.
طب ازاي نخزن الـ Passwords بشكل آمن ؟
وفقًا لمشروع الـ OWASP واللي هو اختصار لـ Open Web Application Security Project فهم ادونا شوية Guidelines نقدر نمشي عليها عشان نخزن الـ Passwords بشكل آمن زي:
اول حاجة اننا نستعمل Modern Hashing Algorithms والـ Hashing هنا هو عبارة عن طريق واحد رايح مبيرجعش، فهي عبارة عن Function بتديها الـ Password ومينفعش تعمل عكس العملية دي عشان تعرف الـ Password .
وفي نفس الوقت لو حصل اي اختراق والـ Attacker وصل للـ Passwords فهو مش هيقدر يستعملها في الـ Application لانها Hashed .. ومن أمثلة الـ Modern Hashing Function الـ Bcrypt واللي بعتر بطيء بسبب الـ Resources اللي بيحتاجها عشان يـ Compute الـ Hashed Value ..
تاني حاجة هي اننا نضيف شوية ملح على الـ Password منسيبهوش كده .. والـ Salt هنا هو عبارة عن Unique Random Generated String بينضاف على الـ Password قبل ما يتعمل Hashing وبعدين يتعمل Hashing ليهم مع بعض ..
طب ليه مينفعش نخزن الـ Passwords كـ Hashed بس ؟
خصم 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 بتاعتنا من خلال اقرأ-تِك والنشرة الأسبوعية 👇
رؤيتنا هي إثراء المحتوى التقني العربي وجعل التعلم من خلال القراءة أمتع، وذلك من خلال إثراء المحتوى التقني باللغة العربية وتشجيع المبرمجين على القراءة بلغتهم الأم والتفكير أيضًا بها.
لذلك اتحنا الفرصة أمام الجميع للمساهمة ومساعدتنا في نشر واثراء المحتوى التقني باللغة العربية, من خلال كتابة المقالات التقنية في مختلف مجالات هندسة البرمجيات.
وجب التنويه أنه لن يتم نشر كافة الأعمال التي تصل إلينا، وإنما سيتم الانتقاء منها ما يحقق هدفنا بإثراء المحتوى التقني العربي، ولذلك قد تُطلب بعض التعديلات من الكاتب قبل النشر.
لمعرفة المزيد بخصوص :
💬 المعايير العامة لكتابة ونشر المقالات
⚡️ كيفية الإرسال
🔥 التزامات اقرأ-تِك تجاه الكتاب
يمكنكم قراءة كافة التفاصيل من هنا 👇