VOL:15 Slack Uses LLMs to Automatically Convert 80% of 15,000 Unit Tests
أهلًا وسهلا بكم في العدد الخامس عشر من النشرة الأسبوعية لاقرأ-تِك 🎉
لا تنسوا أهلنا من صالح الدعاء,اللهم إنّا استودعناك اياهم، اللهم كُن عوناً لهم، اللهم انصرهم واحفظهم. 🇵🇸
أهلًا وسهلا بكم في العدد الخامس عشر من النشرة الأسبوعية لاقرأ-تِك 🚀
سواء كنت مهندس برمجيات مبتدئ أو محترف، فنشرتنا هدفها انها تثري المحتوى التقني العربي سعيا للتطوير من جودة المحتوى باللغة العربية, من خلال تقديم أحدث المستجدات والتطورات في عالم البرمجيات، بالإضافة إلى أفضل الممارسات والنصائح القيمة, ونشر أحدث المقالات وترشيحات الكتب ومحتوى ورقة وقلم اللي بينزلوا بشكل مستمر في موقع اقرأ-تِك.
في الإصدار ده الفهرس هيكون كالآتي:
ازاي نختار الحجم المثالي والفعال للـ ThreadPool ونحقق أقصى استفادة ممكنة ؟
الفرق بين الـ Proxy و Reverse Proxy
مشروع Live Codes وازاي تقدر تلعب بأكتر من 80 لغة و Framework Online
ازاي الـ Star Formula والـ Storytelling مهمين في الـ Behavioral Interviews
ازاي Slack استغلوا الـ LLMs في انهم يحسنوا من الانتاجية في تحويل الـ Unit , Integration Tests
تحدي الأسبوع - SQL Query Challenge
اكتب معنا
اقتباسات
العروض والخصومات
دقيقة لقلبك
ما هو الحجم الأمثل والمناسب للـ Thread Pool في المهمة التي أود القيام بها ؟
كان يتردد هذا السؤال علي كثيرًا أثناء عملي في مختلف الأنواع من المهام كمعالجة تدفق البيانات أو ما يعرف بالـ Data Stream Processing أو تنفيذ بعض المهام بشكل متوازٍ (في نفس الوقت) للتحسين من أداء تنفيذها. وهو ما يعرف بالـ Parallel Processing. وأكاد أجزم أن هنالك الكثير ممن راودهم هذا السؤال أثناء عملهم في مختلف المهام.
في هذا المقال سنتناول بشكل بسيط وسهل الإجابة عن هذا السؤال. وستعرفون أن أهم العوامل التي تؤثر في اختيارك لحجم الـ Thread Pool بشكل أساسي هم:
١- عدد الـ CPU Cores التي يستطيع ويُسمَح للبرنامج الخاص بك استعمالها والحصول عليها.
٢- طبيعة المهمة التي تريد القيام بها إذا ما كانت مهمة تعتمد بشكل كبير على المدخلات والمخرجات أو ما يعرف بـ I/O Bound Task، أم إذا كانت مهمة تعتمد بشكل قوي على المعالجات وهو ما يعرف بالـ CPU Intensive Task.
هنالك أيضًا بعض العوامل التي لم يتم ذكرها، ولكن يمكننا أن نعتمد على ما سبق بشكل أساسي قبل الإجابة عن هذا السؤال.
ما هو الحجم المثالي للـ Thread Pool ؟
ليس هناك حجم مثالي للـ Thread Pool؛ فالأمر كله يعتمد على نوع المهمة التي تود القيام بها بالإضافة الى بعض المقايضات Trade-Offs التي عليك أن تفاضل بينها.
ما هي الـ CPU CORES ؟
الـ CPU Cores هي تمثل الأنوية التي تتواجد داخل وحدة المعالجة المركزية أو ما يعرف بالـCPU، وحيث إنه منذ قديم الزمن كانت هذه الوحدة تضم فقط نواة واحدة، فلم يكن باستطاعتها إلا أن تقوم بعمل مهمة واحدة فقط في كل مرة. أما الآن فنحن نسمع عن العديد من الأنوية Multi-Core CPU. وبهذا الشكل أصبح باستطاعتنا الاستفادة من عمل أكثر من مهمة في كل مرة بدلًا من مهمة واحدة. ومن هنا نستطيع الاعتماد على تلك الـ Cores في تسريع وتحسين الأداء عن طريق الاستفادة من الـ Parallelism.
هذه الصورة تمثل الفرق بين الـ Single Core والـQuad Core:
ما هو الفرق بين الـ I/O Bound Tasks والـ CPU Intensive Tasks ؟
كما علمنا هنالك نوعان من المهام التي يجب وضعها في الاعتبار عند تحديد حجم الـ Thread Pool وهم ال I/O Bound Tasks والـCPU Intensive Tasks… ومن اسمهما يمكننا أن نستنتج أن مهام الـ I/O هي المهام التي تعتمد بشكل أساسي على انتظار عمليات المدخلات والمخرجات حتى تنتهي. على سبيل المثال: القراءة والكتابة على القرص الصلب أو عمليات القراءة والكتابة في قواعد البيانات وآخيرًا وليس آخرًا العمليات التي ترتبط بالشبكات أو ما يعرف بالـ Network Operations.
أما على الجانب الآخر فمهام الـ CPU Intensive بكل بساطة هي عمليات تعتمد بشكل أساسي على الـ CPU. على سبيل المثال: انتظار العمليات الحسابية الصعبة والخوارزميات المعقدة حتى تنتهي من عملها مثل: عمليات البحث والترتيب في عدد كبير من البيانات أو الحسابات الرياضية المعقدة.
ما الذي نسعى إليه وما هو الهدف الذي نود الوصول إليه باختيار حجم الـ Thread Pool؟
نحن نسعى ونهدف إلى تحقيق أقصى استفادة ممكنة من الـ CPU والـ Resources التي نتعامل معها دون إهدارها.
مهام وحدة البيانات المكثفة أو ما يعرف بالـ CPU Intensive ؟
لنفترض أننا نتعامل مع Single CPU Core وبالتالي لن يكون معنا غير Thread أساسي واحد قادر على عمل مهمة واحدة فقط خلال فترة من الزمن.
في الشكل السابق يمكننا أن نرى أنه خلال فترة زمنية معينة كان هذا هو شكل الـ CPU وهو يقوم بتنفيذ المهام… خلال تلك الفترة، فهناك فترات من الزمن يستقبل وينفذ المهام وفترات أخرى يكون خاملًا لا يقوم بتنفيذ أية مهام.
ولكن ماذا لو أصبح عدد المهام التي يجب على الـ CPU إتمامها مهمتان بدلًا من مهمة واحدة كما في الشكل السابق ؟ سيكون الشكل كما هو موضح:
يمكننا الآن ملاحظة شيء مهم وهو أننا استطعنا أن نقلل الفجوة عن الشكل الأول وهو عدم ترك الـ CPU ينتظر بدون عمل أية مهام. ماذا لو أصبح لدينا عدد المهام من هذه النوعية ١٠٠ (مائة) بدلًا من مهمتان ؟ ومازال لدينا Single Core CPU ومازلنا نعتمد على One Thread فقط لإتمام تلك المهام ؟
يمكننا الآن أن نرى Thread 1 الذي يعمل على الـ Single Core CPU يقوم باستقبال وتنفيذ المهام بشكل متتابع مهمة تلو الآخرى حيث أنه يقوم بالانتهاء من الأولى ثم تليها الثانية وبالمثل حتى يصل للانتهاء من جميع المهام المطلوبة. وهنا اذا فكرنا مليًا يمكننا إدراك شيء مهم وهو أننا حققنا الهدف المرجو وهو تحقيق الاستفادة القصوى من استخدام الـ CPU.
الآن دعونا نفترض أنه بدلًا من وجود Thread واحد فقط لدينا في الـ Thread Pool , يوجد الآن 2 Threads وعدد المهام المطلوبة كما في المثال السابق ١٠٠ (مائة).
كتير من الشركات دلوقتي بتستعمل الـ Proxy عشان تـ Route وتـ Secure الـ Traffic بين الـ Networks وبعضها بالاضافة لفوايد تانية كتير هنعرفها سوا.
الـ Proxy بكل بساطة بيتمثل دوره في كونه عبارة عن وسيط بين الـ Clients والـ Servers، وفيه نوعين ليه وهم الـ Forward Proxy والـ Reverse Proxy
الـ Forward Proxy
وعادة بيتم الاشارة ليه بكلمة Proxy بس .. فلو قابلت اسم Proxy المفترض ان يكون المقصد هو الـ Forward Proxy .. والنوع ده من الـ Proxy بيكون شغله ناحية الـ Clients وبيشتغل كوسيط بين الـ Clients والـ Servers
1. وأحد أهم استخداماته هو انه بيعمل Processing للـ Requests الخارجة من الـ Clients ورايحة للـ Outgoing Resources أو للـ Internet
2. الـ Forward Proxy برضو بيتم استعماله في الشركات بشكل كبير عشان يحمي الـ Clients اللي موجودين في Private Network من أنهم يعملوا Access للـ Internet Resources ..
استخدامات تانية للـ Forward Proxy
1. الـ Client Anonymity يعني بيخفي هوية الـ Client وده لإن الـ Outgoing Requests اللي خارجة من الـ Clients ورايحة للـ Servers أو للانترنت عمومًا .. بيكون المسئول عنها دلوقتي هو الـ Proxy لانه بيستقبل الـ Request ويبعته بالنيابة عنهم .. وبالتالي الـ Servers مش عارفة هوية الـ Clients الحقيقية .. (ودي احدى اهم استخداماته واللي بنشوفها في الـ VPN )
2. الـ Content Filtering وده لإن زي ما عرفنا انه هو بيستقبل الـ Requests من الـ Client فيقدر يعمل عليها Filtration قبل ميبعتها وبالتالي ممكن هنا يعمل URL Blocking لكتير من الـ Websites اللي ممكن تمثل Threats.
3. الـ Performance Improvement وده من خلال انه يقدر باستعمال Caching Mechanisms يطور ويحسن من الأداء ويبقى بمثابة Boost لكتير من الـ Client Requests.
الـ Reverse Proxy
النوع ده من الـ Proxy بيكون شغله ناحية الـ Server-Side Infrastructure أكتر، فالـ Reverse Proxy هنا دوره أنه بيضمن أن الـ Clients ميقدروش يتواصلوا بشكل Direct مع الـ Web Servers ولكن بيتواصلوا معاهم بشكل غير مباشر من خلال الـ Reverse Proxy اللي بيستقبل الـ Client Requests دي قبل ميبعتها للـ Web Servers.
1. وعشان كده أحد أهم استخدامات الـ Reverse Proxy هو انه بنسبة كبيرة بيتم الاعتماد عليه كـ Load Balancer في انه بيوزع الـ Incoming Requests من الـ Clients على الـ Web Servers.
استخدامات تانية للـ Reverse Proxy
1. الـ Server Anonymity يعني بيخفي هوية الـ Server وده لإن الـ Client دلوقتي أصبح بيبعت الـ Request واللي بيستقبله هو الـ Reverse Proxy
2. الـ DDos Mitigation وده معناه انه يقدر يخفف من الـ DDos من خلال عملية الـ Throttling اللي ممكن يعملها للـ Incoming Requests
LiveCodes
كتير مننا بيكون عاوز يجرب يكتب حاجة بـ Framework أو لغة معينة ويلعب شوية , وبسبب التعقيدات اللي ممكن تتطلبها عشان توفر ده بتكسل وما بتعملش حاجة .. خصوصا لو فيه حاجة سريعة عاوز تجربها !
وبينتهي بينا المطاف اننا بنروح نسيرش ف جوجل على X Playground , عشان نكتب ونـ Run الكود بتاعنا Online !
وهنا جه دور دكتور / حاتم حسني في انه بدأ يعمل LiveCodes , وقصته معاه ليها حكاية جميلة جدًا 🌟
طب ايه هو LiveCodes ؟
هو Open-Source وكمان غني بعدة خصائص ومميزات زي الـ Client-Side Code Playground للـ React , Vue, Svelte, Solid, TypeScript, Python, Go, Ruby, PHP وكمان أكتر من 80 لغة برمجة / و Framework
لو عاوزين تعرفوا عنه اكتر تقدروا تشوفوا الرابط هنا , وكمان تقدروا تشوفوا الـ GitHub Repo وتعملمولها Star وتبدأوا تعملوا Contributions من هنا
Star Formula and Storytelling in Behavioral Interviews
العدد اللي فات اتكلمنا عن أهمية التواصل خلال مقابلة العمل و واحدة من أكثر الطرق الفعالة في تحسين التواصل خلال الانترفيو هي استخدام ال STAR Formula.
الانترفيو بيبقي عبارة عن أسئلة من جهة الانترفيوير وكتير منها أسئلة مفتوحة لأنه محتاج يعرف أكتر عنك وعن سلوكك, لكن البشر مش زي الكمبيوتر مستنين إجابات علي هيئة Bullet Points لأنه غالبًا هينسوها قبل ما تكملها حتي.
فلو سألتك ازاي بتواجه الضغط في الشغل أو الكلية؟
وأنت ابتديت تقولي إجابة محفوظة من الانترنت عن تقسيمك للمهام و تنظيم الوقت هاخد انطباع إنك حافظ إجابة ما بس مفيش دليل إنك حقيقي بتعمل دا. علي عكس ما تحكيلي موقف حصل وتبين اتعاملت ازاي فيه باستخدامك لتقسيم المهام وتنظيم الوقت يمكن كمان تكون عملت Delegation أو استخدمت مهاراتك القيادية. وقتها أنا هعرف عنك أكتر و الانطباع هيكون أحسن بمراحل.
فالأفضل دايمًا إنك تجاوب علي هيئة "قصة" وبما إن مش كلنا عندنا مهارة ال Storytelling فال STAR Formula بتساعدك ترتب إجابتك في شكل قصة. وتقدر تطبقها بإنك بتكتب إجاباتك الطبيعية علي السؤال و بعدين تعدلها بحيث
تبتدي بتوضيح الموقف Situation
توضح المهمة اللي كانت مطلوبة منك في الموقف دا Task
تشرح خطوات حلك للمهمة دي Action
توضح ال Result الناتجة عن ال Actions اللي خدتها
يفضل دايمًا تحتفظ بملف تكتب فيه أهم أسئلة الانترفيوهات السلوكية و تحاول تجاوب علي الاسئلة دي باستخدام ال STAR Formula وراجع علي إجاباتك وحسنها لحد ما توصل لقصة قصيرة و فعالة بتعكس مهاراتك الحقيقة في كل موقف.
وعشان نتدرب افتح ملف و جاوب علي ال 3 أسئلة دول:
احكيلنا عن أحسن مشروع برمجي اشتغلت عليه؟
احكيلنا عن موقف اتعاملت فيه بسرعة بديهة وفي وقت ضيق؟
قولنا عن مرة عملت خطأ في مشروع واتعاملت ازاي؟
مصادر مفيدة:
STAR Method: How to Use This Technique to Ace Your Next Job Interview
Slack Uses LLMs to Automatically Convert 80% of 15,000 Unit Tests
فريق المهندسين في Slack نشروا مؤخرًا إزاي استخدموا نموذج لغوي كبير (LLM) عشان يحولوا تلقائيًا 15,000 من الـ Unit والـ Integration Tests من Enzyme لـ React Testing Library (RTL). من خلال دمج الـ Transformations اللي بتحصل في Abstract Syntax Tree (AST) مع الـ AI-Powered Automations
النهج المبتكر ده من Slack حقق نسبة نجاح في التحويل وصلت لـ 80%، وده قلل بشكل كبير الجهد الـ Manual اللي كان المطلوب وورى إمكانيات الذكاء الاصطناعي في تبسيط المهام التطويرية المعقدة واللي كانت ممكن تاخد وقت ومجهود كبير جدًا من فريق المهندسين.
التحول ده كان سببه إن Enzyme مش بيدعم React 18، وده اضطرهم لتحول كبير عشان يفضلوا متوافقين مع أحدث نسخة من React. معدل تبني أداة التحويل في Slack وصل لحوالي 64%، وده وفر وقت كبير للمطورين بنسبة 22% من 10,000 ساعة. مع إن الرقم ده يمثل توفير كبير.
Image Sources: Slack Engineering Blog
Advanced Select Statement
الموضوع: SQL - Advanced Select Statements
المستوي: Medium
Generate the following two result sets:
1. Query an alphabetically ordered list of all names in OCCUPATIONS, immediately followed by the first letter of each profession as a parenthetical (i.e.: enclosed in parentheses).
For example: AnActorName(A)
, ADoctorName(D)
, AProfessorName(P)
, and ASingerName(S)
.
2. Query the number of ocurrences of each occupation in OCCUPATIONS. Sort the occurrences in ascending order, and output them in the following format:
There are a total of [occupation_count] [occupation]s.
where [occupation_count]
is the number of occurrences of an occupation in OCCUPATIONS and [occupation]
is the lowercase occupation name.
If more than one Occupation has the same [occupation_count]
, they should be ordered alphabetically.
Note: There will be at least two entries in the table for each type of occupation.
Input Format
The OCCUPATIONS table is described as follows:
Occupation will only contain one of the following values: Doctor, Professor, Singer or Actor.
Sample Input
An OCCUPATIONS table that contains the following records:
Sample Output
Ashely(P)
Christeen(P)
Jane(A)
Jenny(D)
Julia(A)
Ketty(P)
Maria(A)
Meera(S)
Priya(S)
Samantha(D)
There are a total of 2 doctors.
There are a total of 2 singers.
There are a total of 3 actors.
There are a total of 3 professors.
اكتب معنا
رؤيتنا هي إثراء المحتوى التقني العربي وجعل التعلم من خلال القراءة أمتع، وذلك من خلال إثراء المحتوى التقني باللغة العربية وتشجيع المبرمجين على القراءة بلغتهم الأم والتفكير أيضًا بها.
لذلك اتحنا الفرصة أمام الجميع للمساهمة ومساعدتنا في نشر واثراء المحتوى التقني باللغة العربية, من خلال كتابة المقالات التقنية في مختلف مجالات هندسة البرمجيات.
وجب التنويه أنه لن يتم نشر كافة الأعمال التي تصل إلينا، وإنما سيتم الانتقاء منها ما يحقق هدفنا بإثراء المحتوى التقني العربي، ولذلك قد تُطلب بعض التعديلات من الكاتب قبل النشر.
لمعرفة المزيد بخصوص :
💬 المعايير العامة لكتابة ونشر المقالات
⚡️ كيفية الإرسال
🔥 التزامات اقرأ-تِك تجاه الكتاب
يمكنكم قراءة كافة التفاصيل من هنا 👇
Premature optimization is the root of all evil." — Donald Knuth”
فاضل دلوقتي 5 ايام بس على عروض اقرأ-تِك فتقدروا تشتركوا في اقرأ-تِك وتستمتعوا بكافة المقالات وترشيحات الكتب ومحتوى ورقة وقلم اللي بيتميزوا بجودتهم العالية بحرية كاملة من خلال InstaPay و VodafoneCash 🌟
🔸اشتراك 3 شهور بـ 150 جنيه فقط
🔸اشتراك 6 شهور بـ 300 جنيه فقط
🔸اشتراك سنة كاملة بـ 500 جنيه فقط
تقدروا تبعتوا دلوقتي من خلال البريد الإلكتروني contact@eqraatech.com 📨
Why do Java developers wear glasses
🤓 Because they don’t CSharp
بنفكركوا أن أصبح متاح دلوقتي الاشتراك في اقرأ-تك من خلال InstaPay و VodafoneCash , فتقدروا دلوقتي تستمتعوا بقراءة محتوى ورقة وقلم بحرية وتتصفحوا جميع المقالات وترشيحات الكتب 🚀
تقدروا تتواصلوا معانا من خلال الـ WhatsApp Business أو من خلال الرسايل على مواقع التواصل الاجتماعي أو من خلال البريد الالكتروني contact@eqraatech.com 😍