Mohamed Elsherif

Mohamed Elsherif

Software Architect

480 Answers · 534 likes

Tag: Classics

ال Test طبقات، و كل طبقة ليها وظيفة، ال Unit Testing أقرب حاجة للكود بتاعك، بيختبر الكود بتفاصيله، و على مستوى دقيق، يعني كل class مثلاً، بتقدر من خلاله انك تعدي في كل تفصيلة في الكود و تتأكد انها بتشتغل زي ما انت متخيل، ميزته أنه سريع جداً، يعني ممكن تعمل run لآلاف ال unit tests في دقائق أو أقل، و ده بيساعدك لما تغير أي حاجة في الكود انك تتأكد انك ما ضربتش حاجة تانية، غير طبعاً أن ليه فوائد تانية زي أنه بيساعدك تبني الكود بطريقة Testable و بالتالي تصميمك حيبقى أفضل.

الطبقة اللي بعدها بتبقى Functional Testing أو Component Testing و دي برضه طبقة مهمة لأنك بتبتدي تعمل Testing لأكتر من جزء في نفس الوقت، زي مثلاً انك تعمل test لل Persistence layer أو عمليات ال CRUD بالذات لو عندك اجزاء معقدة شوية فيها Aggregates أو Domain Objects فيها logic و events بتسمع في حتت تانية لما تحصل و عاوز تتأكد أن الكلام ده شغال صح، و دي ممكن تاخد وقت أطول شوية في التنفيذ، لكن برضه مهمة علشان نفس الأسباب السابقة.

و الطبقة اللي بعدها Integration Testing و دي بتتعامل مع النظام كله أو أجزاء كبيرة منه، و بتحتاج يكون النظام Deployed زي ال API Testing و طبقة تانية زي ال UI Testing المكتوب بحاجة زي Selenium مثلاً، كل ده مهم و طبعاً بيبقى أبطأ لأنه بيحتاج النظام كله يشتغل الاول و بيحتاج بنية أساسية كويسة علشان البيانات اللي بتحصل أثناء تنفيذ ال Tests ما تأثرش على Tests تانية.

الفكرة كلها أن الطبقات دي كلها Automated، يعني بضغطة زرار - أو مع كل Build- الكود و النظام بيمر بكل المراحل دي من الاختبارات، و ده بيضمنلك إن النظام مش عرضة للمشاكل مع كل تغيير.

و اي شركة ما عندهاش استثمار في الموضوع ده تعرف انها شركة أي كلام.

Image attached to the answer about: ايه الفكرة اني اعمل unit test لما انا كل حاجة بتستها postman اسهل واسرع بكتير وحتي الشركات لما بخش انترفيو وبيسالوا في ال unit test واسال…

سيبك من ال JWT دلوقتي خلينا نفهم يعني ايه Access Token، ناخد مثال بسيط، انت دلوقتي لو داخل مكان و الأمن على الباب سألك انت مين، حتقوله اسمك فلان الفلاني، انت كده عملت Identification بس طبعاً ده مش ينفع أغلب الأحوال فحيقولك ممكن أشوف تحقيق الشخصية، و ده في لغتنا بتوع ال security بنسميه Challenge بنقدمه لتحقيق الشخصية بتاعك اللي هو مثلاً بطاقتك او رخصتك او باسورد مثلاً و دي بنسميها Credentials، هو حيبص فيهم و يتأكد من صحتهم لو مثلاً فيه علامات مائية عليهم و بعدين يرجعهم لك و بكده هو عمل Authentication و قرر انه يدخلك المكان او لا ده حسب اللائحة بتاعته و ده هو ال Authorization.

في المثال ده رجل الأمن اعتمد على تحقيق شخصية صادر من جهة هو بيثق فيها ضمنياً، اللي هي مثلاً الداخلية او الحكومة بشكل عام، و لما اتأكد من صحة تحقيق الشخصية فهو اعتمد على ثقته في الجهة دي في تحقيق شخصيتك بناء على ثبات صحة ال Credentials اللي معاك و اللي صادرة منهم.

في العالم الرقمي الموضوع مشابه جداً، انت بتروح تستخدم خدمة ما، مثلاً عاوز تدخل موقع StackOverflow و حتلاقيه بيطلب منك تحقيق شخصية برضه و حيقولك انا بقبل Google, Microsoft, Facebook، و غيرهم من ال Identity Providers لما حتستخدم أي واحد فيهم، ال Identity provider ده حيديك Access Token فيه معلومات عنك بنسميها Claims زي اسمك ايه، عنوان البريد الإلكتروني بتاعك ايه و هكذا، و بعدين بيحط عليه امضاء إلكتروني Digital Signature باستخدام ال Private Key بتاعه اللي مفيش جهة تانية في الدنيا عندها المفتاح ده غيره هو لما بتاخد ال Access Token ده و تروح بيه StackOverflow حيستخدم ال Public Key المتاح على موقع ال Identity Provider و ده الناس كلها تقدر تشوفه و باستخدامه حيقدر يتحقق من صحة التوقيع الإلكتروني على ال Access Token و بعدين يقرا البيانات اللي فيه اللي هي ال Claims و يعرف انت مين.

و على أساس لائحته يقرر يسمحلك او لأ.

التوقيع الإلكتروني مش مجرد حاجة بتتزود و خلاص، يعني ما ينفعش حد ياخد Access Token موقع بالفعل و يغير البيانات اللي فيه و يفضل سليم، لأن التوقيع بيتحسب من محتويات ال Token نفسه، فلو اي حاجة اتغيرت في ال Token فالتوقيع مش حيطبق و حيتكشف أثناء تحقيق صحة التوقيع في الجهة اللي بتقدملها ال Token.

ال JWT هو مجرد Format علشان تمثل بيه البيانات اللي جوة ال Token باستخدام JSON و بيبقى متقسم ل ٣ أجزاء، Header, Payload & Signature، كل جزء بيبقى عبارة عن JSON object او document فيها بيانات مختلفة.

ايه هي ال Parallel Programming؟Anonymous · Around February 2018

يعني بدل ما البرنامج يكون بينفذ بطريقة متسلسلة خطوة خطوة، ممكن نقسم البرنامج لحاجات تتنفذ في نفس الوقت، يعني زي ما تكون بتبني عمارة مثلاً و عندك عامل واحد شغال على العمارة كلها، أو عندك مجموعة عمال شغالين سوا، طبعاً لو عندك عمال كتير احتمال كبير تخلص أسرع، لكن المشكلة انك محتاج تقسم الشغل الأول لحاجات ممكن تخلص في نفس الوقت من غير تعارض، يعني مثلاً ما تقولش انا حقسم العمال كل عامل يبني دور في العمارة، طيب ما كده العمال حيضطروا يستنوا بعض و في الآخر برضه عندك عامل واحد بيبني في الواقع، لكن محتاج تقسم العمل بحيث كلهم يتشاركوا في البناء في نفس الوقت

ال Parallel Programming نفس الفكرة، لو تقدر تقسم الشغل صح حتقدر تنفذه أسرع بكتير من ال Sequential

هو SaaS قبل ما يبقى تكنولوجيا معينة هو في الأساس تغيير في فلسفة السوفتوير من أنه منتج بتشتريه زي ما بتشتري مثلاً نسخة اوفيس او فوتوشوب لانه يتحول لخدمة باشتراك شهري زي Office 365 و Adobe Creative Suite و ده بيادي لتحديات تكنولوجيا كتير من أكبرها أن عبء حفظ و تخزين بيانات المستخدم بتبقى على مقدم الخدمة علشان يضمن أن المستخدم يقدر يوصل للخدمة و الملفات و اي progress من اي مكان، و ايضاً بما أن المستخدم مشترك فبالتالي لازم البرامج تتحدث تلقائياً باستمرار و ده اللي بيحصل حالياً انك بتلاقي البرامج بتتغير كل يوم عن اللي قبله طبعاً تغييرات بسيطة لكن مستمرة فعلى المدى البعيد البرامج بتكون اتغيرت كتير بس مش عن طريق نسخة جديدة تنزل مرة كل كام سنة لكن عن طريق تحديثات مستمرة بسيطة.

تخيل انك عندك كتب كتير و ملفات و ورق في البيت، و الحاجات مرمية كده في كل حتة، كل شوية لما تحب تقرا كتاب، تروح تدور في وسط الاكوام ده علشان تلاقي اللي انت عاوزه، طبعاً كل مرة حتيجي تعمل أي حاجة حيطلع عينك و مش حتبقى عارف الموضوع حياخد قد ايه و اذا كنت حتعرف تلاقي اللي انت عاوزه اصلاً و الا لأ.

فواحد اقترح عليك انك تشتري مكتبة و أرفف تحط عليها الكتب و تنظمها و ترتبها و كل حاجة يبقى ليها مكان، و تأرشف الكتب دي بالطريقة المناسبة لك، سواء ابجدياً او بالموضوع أو بالاتنين أو بأي حاجة، بحيث لما تبقى عاوز كتاب معين تروح مباشرة على الرف اللي انت متأكد ان لو الكتاب ده موجود حتلاقيه هناك.

اهه الكتب دي هي البيانات، و المكتبة و الأرفف هي الهياكل. و الأسلوب اللي انت اخترته و انت بتدور أو بتخزن هي الخوارزميات.

تخيل انك بتبعت جواب لحد ساكن في عمارة كبيرة، فانت بتكتب على الجواب عنوان العمارة (رقم المبنى، الشارع، المدينة، الدولة) و بتكتب برضه رقم الشقة

العمارة هي ال Computer و عنوان العمارة هو ال IP Address و رقم الشقة هو ال Port و الشقق هي ال Programs اللي شغالة على الجهاز و الجواب هو ال Packet

لو كتب الجواب من غير رقم الشقة، الجواب حيوصل على باب العمارة، بس ما حدش حيبقى عارف الجواب بتاع مين تحديداً، و كذلك لو كتب ال IP Address بس فال Packet حيوصل للجهاز، بس الجهاز مش حيعرف أي برنامج المفروض يستقبل ال Packet ده.

الفكرة العامة انك محتاج حاجة تقيس بيها أداء الخوارزميات المختلفة، علشان تقدر تقارن بينهم و تصنفهم، و تشوف مين أسرع أو مين بيستخدم موارد أقل و هكذا.

طيب نقيس ازاي؟ الموضوع ده فضل ماشي بالحب لحد ما عمنا ربنا يطولنا في عمره دونالد كنوث Donald Knuth اقترح و قال انتم واجعين دماغكم ليه، ما احنا ممكن نحسب للخوارزميات حاجة اسمها ال Asymptotic Notation و دي حاجة موجودة في الرياضيات بالفعل من القرن ال 19، الفكرة انك تحسب مدى تأثر الخوارزمية بحجم البيانات اللي داخلة ليها، يعني هل الخوارزمية لو اشتغلت على 10 عناصر من البيانات حتاخد نفس الوقت أو الموارد اللي حتحتاجها لو اشتغلت على 100 عنصر؟ طيب 1000؟ طب لو الوقت أو الموارد عموماً بتزيد، هل بتزيد كدالة أو function لحجم البيانات اللي داخلة، و لو كده ايه الدالة اللي بتربط بين الموارد المستهلكة و بين حجم البيانات؟

اهه الدالة اللي بتربط دي هي ال Complexity بتاعة الخوارزمية، و اتعملت Classifications أو تصنيفات شهيرة بتشوف بشكل عام الخوارزمية دي بتقع فين.

مثلاً لو عندي خوارزمية الوقت اللي بتحتاجه بيتناسب طردياً مع حجم البيانات، يعني معادلتها شبه معادلة خط مستقيم فبنقول عليها Linear و بنرمزلها بأبسط معادلة لخط مستقيم اللي هي O(n)

طيب لو بتاخد وقت قريب من تربيع حجم البيانات، يبقى اسمها Quadratic function و بنرمزلها بأبسط صورة لمعادلة الدالة دي اللي هي O(n^2) و هكذا.

طبعاً ده شرح مبسط، حتلاقي تفاصيل أكتر و باقي أشهر التصنيفات هنا
https://en.wikipedia.org/wiki/Time_complexity

Open referenced link

en.wikipedia.org

ال authentication هو اثبات و تحقيق الشخصية، يعني مثلاً لو رحت البنك فالموظف حيسألك مين حضرتك فحتقوله فلان الفلاني لحد هنا ده اسمه Identification فالموظف حيسألك ممكن بطاقتك، حتديله البطاقة حيبص فيها و يبصلك و يتأكد من العلامات المميزة في البطاقة و يقولك اهلا استاذ فلان، كده هو عمل Authentication لانه طلب منك تحقيق شخصية Challenge و أنت قدمت اثبات لشخصيتك اللي هي ال Credentials.

ممكن بعديها تقوله انا عاوز اسحب فلوس من حساب علان الفلاني، حيقولك ما ينفعش علشان انت مالكش حق غير انك تسحب فلوس من حسابك انت بس مش حساب اي حد تاني، و ده هو ال Authorization و اللي هو بناء على قواعد بتحددها الجهة اللي بتحاول تتعامل معاها ممكن تسمحلك بالعملية دي او لأ.

فيه الفرق اللي الناس كلها عارفاه، اللي هو ال interface ما فيهوش implementation لكن ال abstract class ممكن يبقى فيها implementation، و ان اي class ممكن تعمل implement لأكتر من interface لكن ال class ما تقدرش تعمل inherit لأكتر من base class واحدة بس، و ده مش كل اللغات بس في أغلبها.

لكن الفرق الحقيقي هو في الهدف.

ال interface أشبه بالحد الأدنى من الخصائص لتعريف شئ ما، مثلاً من وجهة نظر الحكومة العربية هي وسيلة مواصلات ليها موتور و اربع عجلات و زجاج امامي و خلفي و فرامل و بتشتغل بوقود ما و بتطلع عادم. ده ال interface العام لايه عربية من وجهة نظر الحكومة اللي على اساسه حتبني طرق و كباري و جراجات و هكذا.

لكن من وجهة نظر شركة العربيات اللي بتصنعها، حتصمم شاسيه معين لنوع من العربيات اللي بيتفق مع المفهوم اللي حددته الحكومة. لكن الشاسيه ده ممكن يعملوا عليه عربية حمرا و خضرا و عربيات بالبنزين وعربيات بسولار أو كهربا و 4 كراسي او كرسيين بس أو أو أو، اه، الشاسيه الاصلي ده abstract class فيها شوية حاجة مشتركة بين عربيات الشركة دي تحديداً، لكن في النهاية كلها تحت نفس المعيار اللي حطه ال interface

هو مش صفر على الشمال قوي، هو التأثير محدود لأن الاقتصاد و حجم السوق محدود. لكن اقليمياً تقريباً النسبة الأكبر من اللي بيشتغلوا في مجال التقنية مصريين. و أكبر عدد متخرجين سنوياً في المجال ده من مصر برضه على الأقل عدداً.
بالنسبة للنفخ في الذات، فدي طبيعة مصرية فرعونية قديمة. من أيام ما الملوك كانوا بيرسموا نفسهم على المعابد من غير كرش

و الله أنا مش عارف أرد على ايه و الا ايه في السؤال، انت معترض على ناس انت نفسك بتفكر زيهم بالضبط!!!
ما بلاش شغل المقارنات ده أصلاً، و كل واحد يخليه في نفسه، مفيش حد بيفهم في المجال ده علشان هو خريج كلية س أو ص، من الآخر لو الخريج نفسه ما عملش اللي عليه و زيادة حيقعد زي خيبتها جنب أخوه من الكلية التانية.