لا تنسوا أهلنا من صالح الدعاء,اللهم إنّا استودعناك اياهم، اللهم كُن عوناً لهم، اللهم انصرهم واحفظهم. 🇵🇸
أهلًا وسهلا بكم في العدد الرابع عشر من النشرة الأسبوعية لاقرأ-تِك 🚀
كل عام وأنتم جميعًا بخير بمناسبة عيد الأضحى , واعاده الله على الجميع وعلى الأمة الإسلامية باليمن والبركات 🎉
سواء كنت مهندس برمجيات مبتدئ أو محترف، فنشرتنا هدفها انها تثري المحتوى التقني العربي سعيا للتطوير من جودة المحتوى باللغة العربية, من خلال تقديم أحدث المستجدات والتطورات في عالم البرمجيات، بالإضافة إلى أفضل الممارسات والنصائح القيمة, ونشر أحدث المقالات وترشيحات الكتب ومحتوى ورقة وقلم اللي بينزلوا بشكل مستمر في موقع اقرأ-تِك.
في الإصدار ده الفهرس هيكون كالآتي:
أحدث مقالات اقرأ-تِك من مقالات ومحتوى ورقة وقلم
ترشيحات لبعض الأدوات والمشاريع مفتوحة المصدر Open Source
نصائح وارشادات للـ Interviews
أخبار في الـ Tech
ترشيحات الكتب
تحدي الأسبوع - Coding Challenge
الفاعليات التقنية
اقتباسات
دقيقة لقلبك
Date and Time Best Practices
في يوم مشمس جميل في الشغل جالك مشروع برمجة تطبيق لشركة طيران يقدر المستخدم يستعمله في حجز التذاكر, طبعًا فرحت جدًا ما كلنا بنحب السفر لحد ما فكرت في مشكلة التاريخ والوقت وجالك صداع.
هخلي التطبيق يحسب التاريخ والوقت على أساس أنهي دولة؟ طيب هعمل ايه في التوقيت الصيفي؟ وبالنسبة للمناطق الزمنية؟! طيب ايه اللي هيحصل في السنين الكبيسة.
أفضل الطرق للتعامل مع التاريخ والوقت
استخدم مكتبة موثوقة
القاعدة الأهم في موضوع دوال الوقت و التاريخ إنه لازم تستخدم مكتبة موثوق فيها سواء موجودة في اللغة بشكل أساسي زي **datetime** في **python** أو **java.time** في **java**
ابعد تمامًا عن إعادة اختراع العجلة ومحاولتك لبرمجة الدوال دي بنفسك لأن الساعة كما نعرفها الآن تعرضت لتغييرات تاريخية وسياسية وجغرافية بتخلي موضوع برمجة دوال الوقت والتاريخ مشروع معقد جدًااستخدام الـ UTC لتجنب مشاكل الـ Timezones
ال UTC هو نظام توقيت عالمي موحد بنستخدمه عشان نتجنب الالتباس في الساعات والمناطق الزمنية حوالين العالمالتوقيت الصيفي
عند تحويل الصيغة لل Local Time Zone ممكن تقابلنا مشكلة التوقيت الصيفي و لذلك لازم المكتبة تكون بتدعم تغييرات التوقيت الصيفي لمنع حدوث أخطاء نتيجة تغيير الساعة.السنوات الكبيسة و الثواني الكبيسة
لازم تتأكد إن المكتبة اللي بتستخدم منها دوال التاريخ والوقت بتتعامل مع السنوات الكبيسة Lead Years ودا أمر بسيط كونه بيحصل بشكل منتظم وبيأثر بشكل ملحوظ.
وكمان لو تطبيقك بيحتاج دقة زمنية عالية فهتحتاج تعرف إزاي المكتبة بتتعامل مع الثواني الكبيسة Leap Seconds لأنها بتتضاف بشكل غير منتظم علي ال UTC ( الحمدلله النوع دا مش شائع الا لو رايح تشتغل في ناسا😂)ISO 8601 Format
هل 04-06-2024 معناها 4 يونيو و لا 6 أبريل ؟ مشكلة التنسيق دي ممكن تخليك تفوت تذكرة الطيارة وتروح المطار بعدها بشهرين 😂.التدقيق والاختبار و الوضوح
مهم اعمل Unit Tests للكود اللي الوقت بيلعب فيه د
ور محوري واغطي حالات التوقيت الصيفي و السنوات الكبيسة وأشوف الكود بيتعامل معاها إزاي.
بنفكركم بإن ال Unit Tests في حد ذاتها من أحسن طرق ال Documentation ولكن يفضل كمان تكتب ADR اختصار Architecture Decision Record أو Documentation عن أسباب اختياركم كفريق للمكتبة دي وبتقدملكم مميزات ايه.Concurrency vs Parallelism
الـ Concurrency والـ Parallelism اتنين من المصطلحات المهمة جدًا واللي أغلبنا حصله لبس وماقدرش انه يستوعبهم من أول مرة بشكل كويس. ولكن هم من أهم المصطلحات اللي تهمنا في الـ Software.
إيه هي الـ Concurrency؟
الـ Concurrency هي لما يكون عندك أكتر من عملية (task) شغالة في نفس الوقت، بس مش شرط كل العمليات دي تشتغل في نفس اللحظة. بمعنى تاني، الجهاز بتاعك بيتعامل مع كذا عملية في نفس الوقت بس مش شرط يشتغل عليهم كلهم في نفس الثانية.
تخيل إنك طباخ في مطبخ وعندك أكتر من طلبية، بتبدأ شوية في الطلبية الأولى، وبعدها بتسيبها مثلا لحد ما تجهز على النار وتروح للطلبية التانية وتبدأ فيها، وبعدين ترجع للأولى وهكذا. كده إنت بتتعامل مع كل الطلبات في نفس الوقت، بس مش بتخلصهم كلهم مرة واحدة.
مثال تاني على الـ Concurrency في Microsoft Word
تخيل إنك بتكتب مستند في الـ Word، وفي نفس الوقت بتعمل تدقيق إملائي (spell check) وتنفيذ بعض الصيغ (formulas) في نفس المستند.
البرنامج بيقسم وقته بين كتابة النص والتدقيق الإملائي وتنفيذ الصيغ. بمعنى إنه شوية يتأكد من الكلمات المكتوبة وشوية ينفذ الصيغ وشوية يسمح لك بالكتابة.
البرنامج هنا بيدير كل العمليات دي بشكل متزامن، بس مش شرط يكون شغال عليهم كلهم في نفس اللحظة بالظبط.
إيه هي الـ Parallelism؟
الـ Parallelism بقى هي لما يكون عندك أكتر من عملية شغالة في نفس اللحظة. يعني لو عندك جهاز كمبيوتر بيقدر يشغل أكتر من عملية مع بعض فعلًا في نفس الثانية.
نرجع لمثال المطبخ. تخيل إن في طباخين اتنين في المطبخ، وكل واحد فيهم شغال على طلبية مختلفة في نفس اللحظة. الطباخ الأول شغال على طبق السلطة والتاني شغال على طبق الشوربة في نفس الوقت بالظبط. هنا بقى بنقول إن في Parallelism.
مثال على الـ Parallelism في Microsoft Word
تخيل إنك بتفتح مستند Word كبير جدًا ومعقد، وبتعمل فيه بحث عن كلمة معينة (Find and Replace).
لو عندك بروسيسور بعدة أنوية (multi-core processor)، الـ Word ممكن يوزع عملية البحث دي على أكتر من نواة بحيث كل نواة تدور على الكلمة دي في جزء مختلف من المستند في نفس الوقت.
في الحالة دي، عملية البحث بتتنفذ في أجزاء مختلفة من المستند بشكل متوازي وبنفس اللحظة، فده بيسرع عملية البحث ويخلصها في وقت أقل بكتير مقارنة لو كانت بتتنفذ بنواة واحدة.
Program vs Process vs Thread
سؤال من ضمن أسئلة كتير كانت بتتسأل قبل كده في الانترفيوهات هو ايه الفرق بين الـ Process والـ Threads ؟
وفي البرمجة ونظم التشغيل، بتستخدم مصطلحات زي الـ Program والـ Process والـ Thread بشكل متكرر. فخلونا نفهم الفرق بين المصطلحات دي بطريقة مبسطة وسهلة.
ايه هو الـ Program ؟
الـ Program هو مجموعة من التعليمات المكتوبة بلغة برمجة معينة لتنفيذ مهمة محددة. ببساطة، هو الـ Code اللي بتكتبه وتخزنه في ملف. على سبيل المثال، ابسط برنامج هو ملف hello_world.py
المكتوب بلغة بايثون واللي ممكن يكون بالشكل ده:
print("Hello, World!")
فالملف ده هو عبارة عن برنامج. وعشان يتم تنفيذ البرنامج ده، لازم يتم تحميله وتشغيله بواسطة نظام التشغيل.
وأمثلة تانية للـ Program هي التطبيقات اللي بنشغلها وموجودة بطبعيتها على سطح المكتب زي الـ Chrome أو الـ Microsoft Word على سبيل المثال
ايه هي الـ Process ؟
الـ Process هو برنامج قيد التشغيل. يعني ايه ؟ يعني هو عبارة عن Program اتعمله Execute فلما نظام التشغيل بيروح يحمل البرنامج من الـ Disk للـ (RAM) ويبدأ في تنفيذه، بيتحول البرنامج بتاعنا إلى عملية (Process).
الـ Process بتحتوي على الـ Code القابل للتنفيذ، وبيانات البرنامج الخاصة بيه، ومجموعة من الموارد التي يستخدمها البرنامج أثناء تشغيله زي الـ Registers والـ Program Counter والـ Stack.
مثال:
لو جينا نشغل برنامج hello_world.py
على جهازنا، نظام التشغيل هيروح يـ Create Process للبرنامج بتاعنا. والـ Process دي هتشمل جميع الموارد اللازمة لتنفيذ الـ Code بتاعنا وطباعته على الشاشة.
وعشان نبسط الموضوع أكتر , اما بنروح نفتح Chrome أو أي برنامج زي Microsoft Word , نظام التشغيل بيروح ينفذ الـ Instructions والـ Code اللي البرنامج بيتكون منه ويبدأ يحمله في الـ RAM ويجهز كل الموارد اللي البرنامج ده محتاجها.
ايه هو الـ Thread ؟
الـ Thread هو أصغر وحدة تنفيذ ممكن نظام التشغيل يديرها، فكل عملية (Process) بتحتوي على الأقل على Thread واحد بنسميه الـ Main Thread, والـ Thread ده بيمثل سلسلة من التعليمات اللي ممكن تنفيذها.
والـ Process الواحدة ممكن تحتوي على أكتر من Threads بتشتغل بشكل متوازي لتحسين الأداء.
مثال 1
فعلى سبيل المثال في الـ Microsoft Word كنا اتكلمنا في الـ Parallelism في مقال سابق عن ازاي بيستغل الـ Multi-Threading في انه بيخلي عملية الـ Find and Replace سهلة فهو يقدر لو عندك ملف ضخم وكبير انه يوزع عملية البحث دي على أكتر من Threads عشان يسرع عملية البحث.
هل حاسس انك مش واخد حقك من حيث الـ Salary في الشركة اللي شغال فيها مقارنة بباقي السوق ؟
اكيد انت مش لوحدك اللي حاسس بده وفيه غيرك كتير, فمن غير معلومات موثوقة ودقيقة عن المرتبات , صعب جدًا انك تعرف تتفاوض على المرتب بتاعك بشكل عادل , ولكن من خلال مقدرتك انك توصل لبيانات حديثة خاصة بالمرتبات في السوق , هتقدر بكل سهولة وثقة انك تتكلم وتتفاوض بما يضمن حقك وانت مش خايف.
وعشان كده فيه مشروع Open Source بدأ من كام سنة بفكرة ودلوقتي طلع للنور بشكل أجمل الا وهو egytech.fyi واللي بيحاول كل سنة يجمع بعض الـ Surveys من ناس شغالين في الـ Tech في مصر , عشان يحل الأزمة دي ويعالج مشكلة الـ Under Paid بالنسبة لكتير من الناس.
فتقدروا دلوقتي تدخلوا تبصوا على الموقع بتاعهم , وكمان تعملوا Contributions 🌟
من النصائح المهمة جدًا في الـ Interviews هي الـ Communication Skills , وانك تتواصل مع اللي قدامك في الـ Interviews بشكل كويس , وده بيكون عليه عامل كبير جدًا ومؤثر في اجتيازك للـ Interview , وده لان الشركة مش بس غرضها انها تعين شخص شاطر , ولكن شخص يكون سهل وسلس في التعامل معاه لانك هتشتغل مع الناس دي!
فحاول دايمًا انك تتواصل بشكل كويس في الـ Interviews وتسيب انطباع كويس عنك , بغض النظر عن خبرتك العملية , حاول دايمًا تبني انطباع كويس من تعاملك , لان ممكن الانطباع ده يكون سبب بعد كده لو لا قدر الله محصلش نصيب وقدمت تاني .. يكونوا فاكرين ان الشخص ده كان تعامله كويس!
أعلنت Apple في المؤتمر السنوي WWDC24 الخاص بالـ Software والمطورين عن دخولها في عالم الذكاء الاصطناعي ولكن استخدمت اسم مختلف الا وهو الـ Apple Intelligence , عشان تركز بشكل كبير على فكرة الخصوصية، واللي دايما بتحطها في مقدمة أولوياتها.
ووضحت ان المعالجات اللي هتتم على البيانات هتتم من خلال طريقتين , اول طريقة هي الـ On-Device Processing وده اللي احنا عمالين نشوفه باستمرار في تطويرهم من معالجات الـ Hardware القوية في الأجهزة بتاعتها, وبالشكل ده هتتم معالجة البيانات على الأجهزة , وبالتالي ده هيسهل الاستمتاع بمزايا الـ Personal Intelligence من غير الاتصال بالانترنت.
ولكن الطريقة التانية , هتتم من خلال المعالجة السحابية اللي هي الـ Private Cloud Computing واللي بالتالي هتفتح المجال للاستفادة من قوة معالجة أكبر من خلال Servers خاصة بالشركة , ولكن مع تطبيق معايير الحماية والخصوصية كذلك في التعامل مع البيانات , ونوهوا ان البيانات دي مش هيتم تخزينها اطلاقًا على الـ Servers الخاصة بيهم. 🤷♂️
واللي هيقرر اذا كانت المعالجة هتتم على الجهاز من عدمه هي المعالجات اللي موجودة في الأجهزة , فلو مش هتقدر تقوم بعمل المعالجة اللازمة على البيانات , هتحدد وقتها انها تتعمل على الـ Private Cloud.
وبناء على الكلام ده طبعا هيحصل تطور رهيب في الأجهزة بالاضافة لمميزات كتير انضافت لـ Siri واللي اصبحت دلوقتي بشكل اساسي تقدر تساعدك من خلال الـ Personal Context اللي على الجهاز بتاعك ، انها تقوم ببعض الأدوار نيابة عنك.
فدلوقتي باه عندها Access على الـ Personal Context فتقدر تتكلم معاها بشكل طبيعي باستخدام الـ Natural Language وكمان تقدر هي تاخد Actions , وكمثال على ده Apple وضحت انك دلوقتي تقدر تقول لـ Siri على سبيل المثال “انا عاوز اشوف الصور اللي خدتها وانا في مكان معين مع فولان وفولان وكنت لابس كذا”
فلو شوفتوا المؤتمر بتاع Apple , ايه رأيكم في التحديثات الجديدة اللي نزلت واللي بتتضمن الذكاء الاصطناعي ؟
Cracking The Coding Interview
Author: Gayle Laakmann McDowell
بمناسبة بداية موسم التخرج والاستعداد لرحلة دخول سوق العمل بنرشحلكم كتاب Cracking The Coding Interviews
الكتاب مناسب حتي لما قبل التخرج, وبينما تقدر توصل لمحتوي التحضير للانترفيوهات في كل مكان علي الانترنت إلا إنك بتحتاج أن المحتوي دا يكون مترتب ومتنظم عشان تستفاد منه ومتضيعش وقت كبير.
ودا اللي بيوفره الكتاب فهتلاقى الجزء الاول من الكتاب بيتكلم عن:
خطوات عملية الانترفيوهات
ازاي تحضر نفسك والسيرة الذاتية
الخطوات الثابتة لحل أي مسألة تقنية لأن خلال المقابلة الانترفيور مهتم ب“طريقتك في الحل” أكثر من حل المسألة نفسه.
الجزء الثاني من الكتاب متقسم كأسئلة Problem Solving في مواضيع محددة تقدر تستخدمها في خطة تدريبك علي المسائل والنهج دا أفضل من الحل بطريقة عشوائية من البداية وبيزيد من استفادتك من خطة التدريب علي المدي الطويل وتقدر تستخدم LeetCode عشان تلاقي مسائل مختلفة في كل موضوع.
الكتاب كبير فمش شرط تخلصه كله ولكن ركز علي الفصول والمواضيع الأهم بالنسبة ليك.
Sum Multiples
Topic - Math
Given a positive integer n
, find the sum of all integers in the range [1, n]
inclusive that are divisible by 3
, 5
, or 7
.
Return an integer denoting the sum of all numbers in the given range satisfying the constraint.
Give also the time complexity and space complexity
Constraints -
1 <= n <= 103
Example 1
Input: n = 7
Output: 21
Explanation: Numbers in the range [1, 7]
that are divisible by 3
, 5,
or 7
are 3, 5, 6, 7
. The sum of these numbers is 21
.
Manara Tech Salon
هيكون فيه Tech Salon من Manara يوم 25 يونيو, طب ايه الحاجات اللي تتوقعها من حدث زي ده ؟
اكتساب بعض المعارف الجديدة من خلال المحادثات العملية وحلقات النقاش الهادفة.
هتبني Connections مع ناس مختلفة في المجال وعندهم خبرات متفاوتة.
هتسمع من بعض المهندسين المؤثرين خبراتهم العملية , واللي ممكن تفيدك بعد كده بشكل شخصي في حياتك وشغلك.
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." — Martin Fowler
Why do programmers prefer dark mode
Because light attracts bugs
تقدروا دلوقتي تلحقوا خصومات عيد الأضحى 🐑 وتشتركوا في اقرأ-تِك وتستمتعوا بكافة المقالات وترشيحات الكتب ومحتوى ورقة وقلم اللي بيتميزوا بجودتهم العالية بحرية كاملة من خلال InstaPay و VodafoneCash 🌟
🔸اشتراك 3 شهور بـ 170 جنيه فقط
🔸اشتراك 6 شهور بـ 350 جنيه فقط
🔸اشتراك سنة كاملة بـ 700 جنيه فقط
تقدروا تبعتوا دلوقتي من خلال البريد الإلكتروني contact@eqraatech.com 📨
بنفكركوا أن أصبح متاح دلوقتي الاشتراك في اقرأ-تك من خلال InstaPay و VodafoneCash , فتقدروا دلوقتي تستمتعوا بقراءة محتوى ورقة وقلم بحرية وتتصفحوا جميع المقالات وترشيحات الكتب 🚀
تقدروا تتواصلوا معانا من خلال الـ WhatsApp Business أو من خلال الرسايل على مواقع التواصل الاجتماعي أو من خلال البريد الالكتروني contact@eqraatech.com 😍