Biography

Have been working as a software developer for more than 8 years in various roles, and many different businesses, and feels home with the web platform and service oriented environments.

Worked in Microsoft in multiple teams including Microsoft AdCenter, Windows Azure Active Directory.

Currently working as Sr. Software Engineer in Microsoft in Redmond, WA, USA

About The Broadcast

Weekly Podcast discussing the Egyptian IT industry, and various other technology related topics.

The show is a technical show that is talking about programming & software development, and how to adopt best practices and share experiences between the Egyptian developers community members

Latest Youtube Video

RSS

RSS Blog Feed

  • Ask Developer Podcast - 53 - Privacy and GDPR


    General Data Protection Regulation

    Following the Data Protection Directive of 1995
    ePrivacy Directive of 2002 (cookie law)

    Articles


    EU Site:

    Privacy by Design

    Questions

    • What?
    • Why?
    • Who is affected ?
      • Am I a controller?
      • Am I a processor?
    • What data is included in protection?
    • What protection is required?
    • What to protect against? What consent is required?
    • What are the penalties?


    Privacy Impact Assessments

    A Privacy Impact Assessment (PIA), which is required under GDPR for data-intensive projects, is a living document which must be made accessible to all involved with a project. It is the process by which you discuss, audit, inventory, and mitigate the privacy risks inherent in the data you collect and process.
    Like all GDPR documentation, a PIA can be requisitioned by a data protection regulator in the event of a privacy concern or data breach. Not having a PIA is not an option.


  • ايه الفرق بين ال Big Data و ال Data Science و ال Data Analysis

    مساء الخير
    ازيكم

    زي ما وعدتكم المرة اللي فاتت ان شاء الله المرة دي حنتكلم عن الفروق بين مجالات مسمياتها قريبة قوي من بعض و اللي هي
    Big Data
    Data Analysis
    Data Science
    و حنحاول ندي نبذة عن كل واحد فيهم و ايه المهارات المختلفة اللي محتاج تعرفها علشان تبتدي في المجال ده.

    ايه هو ال Big Data؟
    يمكن في الفترة الأخيرة مصطلح ال Big Data كان عليه دوشة كثير بالذات لما عمرو أديب قال تعريف عجيب ليه أظهره كأنه حاجة شريرة أو سيئة, و طبعاً التعريف ده للأسف ما كانش ليه أي علاقة بالواقع.
    ال Big Data في النهاية هو مجال هندسي من مجالات هندسة البرمجيات, بيهدف في الأساس لبناء أنظمة تقدر تتعامل مع حجم البيانات الهائل, و لو أخدت بالك احنا هنا ما قلناش نوع التعامل ده ايه, احنا هنا بنتكلم في أساس أي تعامل مع البيانات و اللي بيبتدي عادة بالتخزين, و الأرشفة و البحث و القدرة على انك تعمل عمليات عليها. يعني علشان نقرب المفهوم, قاعدة البيانات اللي احنا كلنا متعودين عليها زي mySQL, PostgreSQL, SQL Server في النهاية بتخزن, و تفهرس و تتيح وسائل للتعامل مع البيانات نفسها, و ده نفس اللي بتعمله ال Big Data Systems برضه, لكن الفرق الأهم هو ان حجم البيانات ضخم جداً, و بالتالي البيانات دي مش متخزنة على سيرفر واحد مثلاً, بل ممكن تبقى عشرات بل مئات الآلاف من السيرفرات اللي كلها بتساهم في بناء نظام ال Big Data بتاعك.
    من أشهر أنظمة ال Big Data و اللي يمكن أغلب الناس اللي في المجال ده بتستخدمه, هو مجموعة تقنيات Apache Hadoop و زي ما أكيد أخدت بالك اني قلت مجموعة تقنيات, و ده لأنه Hadoop ده تقدر تقول كده انه مظلة لمجموعة كبيرة جداً من التقنيات اللي كل حاجة فيها بتعمل وظيفة معينة و بتساعدك في سيناريوهات معينة.
    يعني مثلاً, أول حاجة غالباً حتحتاجها في التعامل مع أي بيانات, هو انك تخزنها و تنظمها في حاجة زي ال File System اللي على جهازك, و هنا بيجي دور أول تقنية و هي HDFS  و ده اسم ال File System بتاع Hadoop و اللي يعتبر القاعدة الأساسية اللي بتني عليها كل التقنيات التانية, و ده اللي بيسمح بتخزين البيانات و الحفاظ عليها عن طريق ال Redundancy و يديلك abstraction بحيث ما تحتاجش تعرف تفاصيل كثير عن ازاي البيانات و فين البيانات متخزنة او على أي أجهزة
    بعد ما خزنت البيانات, حتحتاج طريقة تقدر تكتب بيها برامج تشتغل على البيانات دي, و اللي هو بنسميه Programming Model, و ال Programming Model اللي بتستخدمه في ال Big Data يمكن اشهرهم على الاطلاق هو MapReduce و ده اللي بيخليك تقدر تكتب برامج, طبعاً ده موضوع كبير لوحده. طبعأً Hadoop فيه مكونات أساسية أكثر من كده بكثير, زي ZooKeeper و Yarn و فوق ده كله فيه تطبيقات مشهورة زي Hive و اللي بتخليك تقدر تعامل البيانات اللي على Hadoop كأنها قاعدة بيانات و تكلمها بلغة شبه ال SQL جداً اسمها HQL, و حاجات تانية زي Hbase و غيرها كثير جداً من التقنيات اللي لا يسع المجال دلوقتي اننا نتكلم فيها.
    الفكرة لو بصيت على ده كله, حتكتشف انها في النهاية كلها ادوات و تقنيات للتعامل مع البيانات, لكن نوعية التعامل ده ايه مش مشكلة ال Big Data

    نيجي لل Data Analysis و ال Data Science

    علشان نفهم الاتنين, محتاجين الأول نوصل الفكرة ان ال Data Science هو مجال بيختص بكل ماله علاقة بالبيانات, سواء بيانات Structured أو لأ, سواء محتاجة شوية تجهيز الأول, الهدف الأساسي لل Data Scientist هو انه يبحث في البيانات عن الدرر, زي الأنماط اللي بتتكرر و اللي على أساسها ممكن نتوقع حاجة تحصل في المستقبل, و ده غالباً بيكون عن طريق تطوير Models و ال Models دي ممكن تكون مبنية على حاجات زي Mathematical models, Statistical models, Machine learning, deep learning كل دي طرق مختلفة لبناء ال models اللي حتساعده انه من خلال البيانات اللي معاه دلوقتي يقدر يتوقع حاجات تحصل في المستقبل.
    ال Data Scientist عمومأً بيبقى خلفيته رياضية أو احصائية مع ال Computer Science, و ده طبعاً بيخليهم نادرين و الطلب عليهم كثير لأن الخلطة دي من المهارات مش سهلة قوي.
    و فيه مثل مشهور

    Data Scientist: A person who is better at Statistics than any Software Engineer, and better at Software Engineering than any Statistician

    و أغلب الصناعات و المجالات اللي بتتعامل مع بيانات كثير بتحتاج ناس تقدر تطلعلهم النوع ده من ال insights من البيانات, زي المؤسسات المالية, و شركات السوشيال ميديا, و التسويق و المبيعات و غيرها من المجالات.

    ال Data Analyst
     هو شخص بيتعامل مع البيانات بشكل يومي و غالباً من خلال ادوات جاهزة, زي Tableu أو حتى Excel, الفكرة انه أغلب الوقت بيكون هدفه هو الوضع الحالي أكثر من ايه اللي حيحصل في المستقبل, يعني أسئلة زي احنا عملنا مبيعات النهاردة بكام, أو عندنا كام عميل جديد, أو السنة دي مقارنة بالسنة اللي فاتت عملنا فلوس قد ايه, كلها بيانات و أسئلة مهمة, لكن أغلبها بتكون اسئلة اجابتها موجودة في البيانات أو محتاجة عمليات احصائية بسيطة, مش بالضرورة يكون عنده خلفية برمجية, و ان كان من المتوقع انه يكون عنده القدرة على التعامل مع قواعد بيانات أو البرامج الخاصة بده, مع خلفية احصائية.
    يعني لو حبينا نقول أكبر فرق بين ال Data Scientist و ال Data Analyst هو ان ال Data Scientist مشغول باستقراء المستقبل و ال Data Analyst مشغول بتقييم الواقع و الماضي.

    ده كان موضوعنا الأسبوع ده, مستنيين مقترحاتكم و اسئلتكم, و ان شاء الله نرجعلكم بموضوع جديد قريب.

    شكراً و ما تنساش تعمل Like و Subscribe و تفعل الجرس علشان يجيلك Notifications أول ما ينزل فيديو جديد.

    سلام

  • ٥ كتب أي مبرمج لازم يقراها

    مساء الخير
    ازيكم

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

    الكتاب الأول معانا هو كتاب يعتبر علامة في الكتب اللي بتتكلم في ال Software Engineering من واحد من أفضل الكتاب و الخبراء في المجال, الكتاب هو Code Complete 2nd Edition للكاتب Steve McConnell
    الكتاب بيتعرض لمجموعة من المبادئ المهمة لأي مبرمج, زي التعامل مع ال Complexity و ازاي تهزمها, بوسائل كثير زي ال Modularization و ال Abstraction و ال Discipline
    بيتعرض بالتفصيل لعملية بناء السوفتوير و المراحل المختلفة فيها, مع التركيز على مراحل ال Construction اللي هي ال Requirements, Design, Coding
    الكتاب حيعلمك يعني ايه Software Engineering بالمعنى الحقيقي, و ازاي انت تبقى Software Engineer, واحد من أفضل الفصول في الكتاب هو الفصل 33 و اللي بيتكلم عن Personal Character و ازاي تبني شخصيتك و مبادءك كمهندس برمجيات.
    https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670

    الكتاب التانيمعانا هو كتاب بيتكلم في يعني ايه كود نظيف, زي ما اسم الكتاب بيقول Clean Code, بيناقش مواضيع كثيرة تصب كلها في جودة الكود كمنتج لعملية السوفتوير من أول المبادئ الأولية زي البساطة و البعد عن الكلاكيع و اتباع الأساليب القياسية, مروراً بازاي تصمم بشكل يقلل ال Complexity و يعزلها اذا لزم الأمر,  و ازاي تبقى Consistent أو متسق مع نفسك طول الوقت, يعني لو عملت حاجة باسلوب معين مرة, و جيت تعمل حاجة شبها بعدين, اعملها بنفس الطريقة, مش بطريقة مختلفة تماماً, علشان تسهل على غيرك انه يستغل الخبرات اللي اكتسبها من تعامله مع الكود, ازاي تسمي الحاجات, و ده شئ يبان عبيط لكنه في الحقيقة من اول ابواب التعقيد, هو ازاي تسمي حاجة اسم معبر و في نفس الوقت تبقى متوقعة و مفهومة, و فيه مثل مشهور في ال Computer Science هو The two hardest things in computer science are Cache invalidation and Naming Things, طبعاً الكتاب فيه تفاصيل كثير عن كل حاحة في الكود زي ازاي تكتب functions, comments, tests ازاي تقسم الكود و قدم مفهوم Code Smell  و هي الحاجات اللي لو شفتها في أي كود بتبقى علامة انه كود مش Clean
    الكتاب جزء من سلسلة كتب, منها Clean Coder و مؤخراً صدر Clean Architecture و اللي ان شاء الله حعمل عنه فيديو لما أقراه بالكامل.
    https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882


    الكتاب الثالث معانا هو كتاب بيتكلم في مشكلة بتقابل اي مبرمج في الدنيا و هي التعامل مع ال Legacy Code و اسم الكتاب واضح Working Effectively with legacy Code, و الكتاب طبعاً بيبتدي بتعريف يعني ايه Legacy Code و ليه بيحصل, و ليه الناس كلها بتعاني منه, و ايه الاخطاء اللي اغلب المبرمجين بيعملوها لما بيقعوا في الموقف ده, زي انهم اول فكرة تيجي في بالهم هو Rewrite, و طبعاً ده بيبقى 90% من الوقت اقتصادياً مستحيل, و لو بشكل ما اقنعت الناس انها تعمله, بنسبه كبيرة الموضوع بينتج عنه حاجة أسوأ من اللي كان موجود بالفعل قبل كده زائد طبعاً وقت ضايع من غير اضافة أي شئ جديد. فالكتاب مبدئياً بيعرف ال Legacy Code  بانه ال Code  اللي مالوش Unit Tests و مش مبني من الأول انه يبقى Testable و ده طبعاً موضوع كبير, ممكن نبقى نفردله فيديو بحاله, لكن عموماً المشكلة في ان الكود علشان مش Testable فده بيخليه عرضة للمشاكل بمجرد انك تعمل اي تغيير, اللي هو نظام جيت اضبط البنطلون الجاكتة ضربت, و الكتاب تقريباً كله بيتكلم في نصائح و وسائل في ازاي تبتدي تبني Unit Tests لكود من النوع ده, بطريقة آمنة من غير ما تحتاج تعمل أي تغييرات جذرية في الأول, علشان تكسر ال Catch 22 اللي هو You need uni tests to refactor, and you need to refactor to unit tests.
    https://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052


    الكتاب الرابع معانا هو كتاب Writing Secure Code 2nd Edition و ده برضه من أهم الكتب اللي لازم أي مبرمج يقراها, لأنها بتفتح عينه على أهمية التفكير في ال Security في كل مراحل بناء النظام, و الكتاب ده تحديداً كان كتاب رائد في المجال, و قصته جت من Microsoft للناس الكبيرة اللي زينا فاكرة مشاكل الأمن اللي كانت في منتجات مايكروسوفت زمان في التسعينات و اللي تسببت في مشاكل كثير في العالم, و كان جزء من المشكلة طبعاً ان عملية بناء سوفتوير آمن ما كانتش اتطورت, و كان ده الدافع الأساسي ل Bill Gates انه يكتب ال Memo الشهيرة بتاعة Trustworthy Computing سنة 2002 و اللي على أساسها تم انشاء فريق بنفس الاسم في الشركة, بهدف البحث و التطوير في مجال أمن البرمجيات, و الكتاب ده كان واحد من نتائج ابحاثهم.
    الكتاب ده بيجمع حاجات كثير مهمة لأي مبرمج علشان يفكر و يكتب كود آمن, لكن في رأيي أفضل اسهامات الكتاب ده هو تقديمه لفكرة ال Threat Modeling و صدر بعد كده كتاب منفصل عن ال Threat Modeling ممكن تلاقوه في الروابط تحت, ال Threat Modeling يمكن هو من أهم الحاجات اللي ممكن أي فريق أو شركة تستخدمها في تحليل النظام أثناء عملية التصميم و تستخدمه في ايجاد المشاكل الأمنية و متابعة ال mitigations او طرق تفاديها.
    https://www.amazon.com/Writing-Secure-Second-Developer-Practices/dp/0735617228

    الكتاب الخامسمعانا هو كتاب Head First Design Patterns, و ده يمكن الكتاب الأخف و الأمتع في قراءته, و اللي يمكن أفضل كتاب في سلسلة Head First من وجهة نظري, الكتاب طبعاً واضح من اسمه انه بيتكلم عن ال Design Patterns و بيقسمها لأنواع و بيتكلم عن كل Pattern بالكود و الأمثلة, أنا عن نفسي بستمتع جداً بقراءة الكتاب ده, و ساعات بقلب فيه حتى من باب اني اتفرج على الصور لأنه شبه كتب الحضانة كده, بس ده لا يمنع من انه بيشرح المادة العلمية بشكل كاف جداً.
    https://www.amazon.com/Head-First-Design-Patterns-Brain-Friendly/dp/0596007124


    دي كانت 5 كتب حبيت اشاركها معاكم النهاردة, لو فيه كتب كنت تحب تشوفها في القائمة دي, يا ريت تكتبها في التعليقات, الكتب دي طبعاً مش أفضل كتب في الدنيا, لكن دي الكتب اللي من رأيي لازم أي مبرمج يقراها أو على الأقل يقرا عن المواضيع اللي بتتكلم فيها الكتب دي.

    شكراً جزيلاً لمتابعتكم و نشوفكم المرة الجاية.

    سلام