<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title>محمد صلاح</title><subtitle>مقالات وشروحات في هندسة البرمجيات من محمد صلاح في React، JavaScript، HTML، CSS، Web Security</subtitle><link href="https://mhmdsalah.vercel.app/feed.xml" rel="self"/><link href="https://mhmdsalah.vercel.app"/><updated>2024-09-14T00:00:00Z</updated><id>https://mhmdsalah.vercel.app</id><author><name>محمد صلاح</name><email>me@example.com</email></author><entry><title>التعامل مع Secret API Keys في Frontend Apps</title><link href="https://mhmdsalah.vercel.app/posts/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-secret-api-keys-%D9%81%D9%8A-frontend-apps/"/><updated>2024-09-14T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-secret-api-keys-%D9%81%D9%8A-frontend-apps/</id><content type="html">&lt;h2&gt;مقدمة&lt;/h2&gt;
&lt;p&gt;عايز اتكلم عن واحدة من أكبر المشاكل اللي ممكن تتعمل في ال Frontend Apps وازاي ممكن المشكلة دي بأفضل الأحوال تخسر الشركة آلاف الدولارات، وبأسوء الأحوال تدمر سمعة الشركة!&lt;/p&gt;
&lt;p&gt;المشكلة هي التعامل مع ال Secret API Keys لأي Service خارجية!&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/igNpuo4Eju-400.avif 400w, https://mhmdsalah.vercel.app/optimized/igNpuo4Eju-800.avif 800w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/igNpuo4Eju-400.webp 400w, https://mhmdsalah.vercel.app/optimized/igNpuo4Eju-800.webp 800w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/igNpuo4Eju-400.gif 400w, https://mhmdsalah.vercel.app/optimized/igNpuo4Eju-800.gif 800w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Secret API Key&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/igNpuo4Eju-400.jpeg&quot; width=&quot;800&quot; height=&quot;951&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/igNpuo4Eju-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/igNpuo4Eju-800.jpeg 800w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ملحوظة:&lt;/strong&gt; أنا أقصد ب Frontend Apps هنا اي Web, Mobile, Desktop apps مش المقصود بس ال Web frontend فلو انت بتكتب اي Client Code بيشتغل على ال User Device ومش ع السيرفر فالكلام يهمك إن شاء الله.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;تفاصيل المشكلة&lt;/h3&gt;
&lt;p&gt;لما بتتعامل مع أي Service خارجية زي مثلا AWS لو هنقول مثلا انك بترفع عليها Media Files، الService دي بتديك حاجه اسمها Secret Key بتستخدمها عشان تعمل Authentication معاها، في مثلا Service تقولك ابعتلي ال Secret Key ده مع ال Request وفي Service تانية تطلب منك تعمل Signing لل Request بأستخدام ال Secret Key.&lt;/p&gt;
&lt;p&gt;بغض النظر عن طريقة ال Authentication، معظم الناس بتروح تحط ال Secret keys دي في ال frontend code سواء بقى في ال Env file أو حتى ال Source code نفسه!&lt;/p&gt;
&lt;h3&gt;خطورة كشف Secret Keys&lt;/h3&gt;
&lt;p&gt;هنا تحصل المصيبة لأن ال Frontend Code بيروح لل User وبالتالي بيروح معاه ال Secret Keys بتاعتك فأي حد يقدر ياخدها ويعمل بيها اي حاجه انت تقدر تعملها وبالتالي ممكن يسحب كل الداتا بتاعة ال Users بتوعك ولو الداتا دي كانت Sensitive فأنت عندك مشكلة كبيرة! او ممكن حتى يستخدم ال Service دي نفسها وانت تدفع الفواتير مكانه وتخسر فلوس!&lt;/p&gt;
&lt;h2&gt;الحلول المقترحة&lt;/h2&gt;
&lt;h3&gt;الحل الخاطئ:&lt;/h3&gt;
&lt;p&gt;الناس بتسيب ال Secret keys في الFrontend وتعمل Encryption أو Obfuscation لل Secret keys!&lt;/p&gt;
&lt;p&gt;ليه ده حل غلط؟ عشان ال Encryption بيحتاج Encryption key عشان تشفر بيه الداتا بتاعتك وال Frontend محتاج ال Encryption Key ده عشان يقرأ الداتا الأصلية وبالتالي هتضطر تحطه هو كمان في ال Frontend. فانت كده معملتش حاجه لان اي حد هيوصل لل Encryption Key هيفك تشفير الداتا ويرجع الداتا الاصلية (خدها قاعدة عامة ال Encryption مبيحلش المشكلة هو بس يعمل Delegation فبدل ما كنت بتحمي الداتا بقيت بتحمي ال Encryption key اللي شفرت بيه الداتا وبما انك بتبعت الاتنين لل Frontend فأنت معملتش حاجه).&lt;/p&gt;
&lt;p&gt;ال Obfuscation وهو انك تخلي الكود بتاعك مش مقروء وصعب فهمه وبالتالي لو حد قرأ السورس كود ميقدرش يفهمه ويطلع الداتا الاصلية. الحل ده بيسموه Security through obsecurity عامل كده زي الصورة اللي في المنشور انت مخبي المفتاح بتاع العربية فوق الكاوتش وبتقول محدش هيوصله بس للاسف ال Assumption ده غلط لان لو اي Attacker فتح النتورك وعرف انك بتعمل Authentication مع ال Services دي من الكلاينت كود هيعرف أن ال Secret key موجود هنا ومع شوية مجهود فإنه يلاقي ال Secret key المستخبي مسئلة وقت فقط.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/CzqUfsVzwY-300.avif 300w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/CzqUfsVzwY-300.webp 300w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/CzqUfsVzwY-300.gif 300w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Secret Through Obsecurity&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/CzqUfsVzwY-300.jpeg&quot; width=&quot;300&quot; height=&quot;168&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h3&gt;الحل الصحيح:&lt;/h3&gt;
&lt;p&gt;انك اي Authentication مع Service خارجية يتم من خلال ال Backend بتاعك وتنقل ال Secret keys لل Backend وانت من ال Front تبعت Request لل Backend وال Backend يعمل ال Request لل Service اللي بتتعامل معاها وبالتالي ال Frontend مش هيعرف اي حاجه عن ال Secret keys (طبعا انت محتاج انك متسبش الدنيا مفتوحة على البحري عندك في الباك ايند وتتأكد من ال Requests ويكون في Authentication/Authorization).&lt;/p&gt;
&lt;p&gt;طيب افرض معكش Backend أو متقدرش تعدل عليه لأي سبب؟ اعمل سيرفر backend ع ادك أو استخدم حاجه زي ال Next.js لو كنت شغال React واعمل ال Requests من السيرفر بتاعها.&lt;/p&gt;
</content></entry><entry><title>بدأت استخدم Cursor IDE ومن الواضح أنه هيكون قاتل VS Code</title><link href="https://mhmdsalah.vercel.app/posts/%D8%A8%D8%AF%D8%A3%D8%AA-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-cursor-ide-%D9%88%D9%85%D9%86-%D8%A7%D9%84%D9%88%D8%A7%D8%B6%D8%AD-%D8%A3%D9%86%D9%87-%D9%87%D9%8A%D9%83%D9%88%D9%86-%D9%82%D8%A7%D8%AA%D9%84-vs-code/"/><updated>2024-09-07T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D8%A8%D8%AF%D8%A3%D8%AA-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-cursor-ide-%D9%88%D9%85%D9%86-%D8%A7%D9%84%D9%88%D8%A7%D8%B6%D8%AD-%D8%A3%D9%86%D9%87-%D9%87%D9%8A%D9%83%D9%88%D9%86-%D9%82%D8%A7%D8%AA%D9%84-vs-code/</id><content type="html">&lt;h2&gt;مقدمة&lt;/h2&gt;
&lt;p&gt;لو أنت أخدت VS Code + ChatGPT + Copilot ودمجتهم في بعض هيطلعلك Cursor!&lt;/p&gt;
&lt;h2&gt;مميزات Cursor IDE&lt;/h2&gt;
&lt;p&gt;دي بعض المميزات من خلال تجربتي حتى الآن:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;مش محتاج أنك تتخلى عن VS Code او الـ Extensions والـ Configuration بتاعتك لانه مبني على VS Code وبيقدملك نفس التجربة.&lt;/li&gt;
&lt;li&gt;مش محتاج أنك تـ Switch Context كل شوية ما بين ChatGPT وما بين الكود بتاعك وتفضل تنقل الكود من هناك لهنا، انت عندك Chat في الـIDE مدمج وفاهم كل حاجه عن الكود بتاعك تقدر تسئله عن اي حاجه فيه ويجاوبك، ولما بيقدملك حلول لمشاكل او كود تقدر تعمله Apply من الـ Chat نفسه وهو هيعمل كل حاجه بدون تدخل منك.&lt;/li&gt;
&lt;li&gt;الـ Auto Completion فيه أقوى بكتير من Copilot مع VS Code (ع الاقل حسب تجربتي له قبل سنة تقريبا ممكن يكون ده اتغير).&lt;/li&gt;
&lt;li&gt;تقدر تحددله اي مكان في الكود او اي جزء فيه وهو يعمل Refactor او يكتبلك كود جديد او يحللك مشكلة معينة.&lt;/li&gt;
&lt;li&gt;لو ظهرلك اي مشكلة في الـ Console تقدر تسئل الـ Chat وهو يقدملك حلول وتقدر تعملها Apply من داخل الـChat بدون اي تدخل منك وتقبل الحل بعد كده او ترفضه.&lt;/li&gt;
&lt;li&gt;فيه اكتر من Model تقدر تختاره زي GPT-4o, GPT-4o-mini, GPT-3.5, Claude-3.5-sonnet.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/JPJ0u_WHiq-400.avif 400w, https://mhmdsalah.vercel.app/optimized/JPJ0u_WHiq-800.avif 800w, https://mhmdsalah.vercel.app/optimized/JPJ0u_WHiq-1080.avif 1080w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/JPJ0u_WHiq-400.webp 400w, https://mhmdsalah.vercel.app/optimized/JPJ0u_WHiq-800.webp 800w, https://mhmdsalah.vercel.app/optimized/JPJ0u_WHiq-1080.webp 1080w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/JPJ0u_WHiq-400.gif 400w, https://mhmdsalah.vercel.app/optimized/JPJ0u_WHiq-800.gif 800w, https://mhmdsalah.vercel.app/optimized/JPJ0u_WHiq-1080.gif 1080w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;cursor ide&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/JPJ0u_WHiq-400.jpeg&quot; width=&quot;1080&quot; height=&quot;680&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/JPJ0u_WHiq-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/JPJ0u_WHiq-800.jpeg 800w, https://mhmdsalah.vercel.app/optimized/JPJ0u_WHiq-1080.jpeg 1080w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/D8rRGkK7cs-400.avif 400w, https://mhmdsalah.vercel.app/optimized/D8rRGkK7cs-800.avif 800w, https://mhmdsalah.vercel.app/optimized/D8rRGkK7cs-1080.avif 1080w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/D8rRGkK7cs-400.webp 400w, https://mhmdsalah.vercel.app/optimized/D8rRGkK7cs-800.webp 800w, https://mhmdsalah.vercel.app/optimized/D8rRGkK7cs-1080.webp 1080w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/D8rRGkK7cs-400.gif 400w, https://mhmdsalah.vercel.app/optimized/D8rRGkK7cs-800.gif 800w, https://mhmdsalah.vercel.app/optimized/D8rRGkK7cs-1080.gif 1080w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;cursor ide&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/D8rRGkK7cs-400.jpeg&quot; width=&quot;1080&quot; height=&quot;609&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/D8rRGkK7cs-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/D8rRGkK7cs-800.jpeg 800w, https://mhmdsalah.vercel.app/optimized/D8rRGkK7cs-1080.jpeg 1080w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/d8Ry2xM_8O-400.avif 400w, https://mhmdsalah.vercel.app/optimized/d8Ry2xM_8O-800.avif 800w, https://mhmdsalah.vercel.app/optimized/d8Ry2xM_8O-1080.avif 1080w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/d8Ry2xM_8O-400.webp 400w, https://mhmdsalah.vercel.app/optimized/d8Ry2xM_8O-800.webp 800w, https://mhmdsalah.vercel.app/optimized/d8Ry2xM_8O-1080.webp 1080w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/d8Ry2xM_8O-400.gif 400w, https://mhmdsalah.vercel.app/optimized/d8Ry2xM_8O-800.gif 800w, https://mhmdsalah.vercel.app/optimized/d8Ry2xM_8O-1080.gif 1080w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;cursor ide&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/d8Ry2xM_8O-400.jpeg&quot; width=&quot;1080&quot; height=&quot;609&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/d8Ry2xM_8O-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/d8Ry2xM_8O-800.jpeg 800w, https://mhmdsalah.vercel.app/optimized/d8Ry2xM_8O-1080.jpeg 1080w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
</content></entry><entry><title>أكبر مشكلة بتواجه المحتوى العربي التقني</title><link href="https://mhmdsalah.vercel.app/posts/%D8%A3%D9%83%D8%A8%D8%B1-%D9%85%D8%B4%D9%83%D9%84%D8%A9-%D8%A8%D8%AA%D9%88%D8%A7%D8%AC%D9%87-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A-%D8%A7%D9%84%D8%AA%D9%82%D9%86%D9%8A/"/><updated>2024-09-06T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D8%A3%D9%83%D8%A8%D8%B1-%D9%85%D8%B4%D9%83%D9%84%D8%A9-%D8%A8%D8%AA%D9%88%D8%A7%D8%AC%D9%87-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A-%D8%A7%D9%84%D8%AA%D9%82%D9%86%D9%8A/</id><content type="html">&lt;h2&gt;مقدمة&lt;/h2&gt;
&lt;p&gt;أكبر مشكلة بتواجه المحتوى العربي التقني من وجهة نظري هي نشر المقالات والشروحات والنصائح المفيدة على السوشيال ميديا بس!&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/wPJ_sN-8EI-400.avif 400w, https://mhmdsalah.vercel.app/optimized/wPJ_sN-8EI-800.avif 800w, https://mhmdsalah.vercel.app/optimized/wPJ_sN-8EI-1536.avif 1536w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/wPJ_sN-8EI-400.webp 400w, https://mhmdsalah.vercel.app/optimized/wPJ_sN-8EI-800.webp 800w, https://mhmdsalah.vercel.app/optimized/wPJ_sN-8EI-1536.webp 1536w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/wPJ_sN-8EI-400.gif 400w, https://mhmdsalah.vercel.app/optimized/wPJ_sN-8EI-800.gif 800w, https://mhmdsalah.vercel.app/optimized/wPJ_sN-8EI-1536.gif 1536w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;المحتوى التقني الضائع على وسائل التواصل الاجتماعي&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/wPJ_sN-8EI-400.jpeg&quot; width=&quot;1536&quot; height=&quot;1536&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/wPJ_sN-8EI-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/wPJ_sN-8EI-800.jpeg 800w, https://mhmdsalah.vercel.app/optimized/wPJ_sN-8EI-1536.jpeg 1536w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;لو دخلت بحثت على جوجل على أي شيء مفيد بالعربي هتلاقي نتائج البحث مفيهاش أي حاجه مفيدة، بالرغم من أن ليل نهار في ناس هنا على لينكد إن وعلى الفيس بوك وتليجرام بتنشر محتوى مفيد من مقالات ونصائح ومواضيع مفيدة!&lt;/p&gt;
&lt;h2&gt;مقارنة مع المحتوى الأجنبي&lt;/h2&gt;
&lt;p&gt;على العكس تماما مع المحتوى الأجنبي لو بحثت عن أي حاجه تقنية هتلاقي مئات أو حتى آلاف المقالات! وده بسبب أن الأجانب عندهم الفكر أن كل واحد فيهم عنده Blog خاصة بيه بينشر عليها المحتوى التقني بتاعه وبالتالي انت لما تبحث على جوجل هتلاقيه. الناس المشهورة هناك غالبا مبتنشرش على مواقع التواصل الاجتماعي نهائي بما فيهم لينكد إن ولو نشر فبينشر لينك للمقال أو الموضوع اللي هو كتبه على ال Blog، والمحتوى بتاعهم دائما ناس جديدة بتوصله ومبيموتش بفضل محركات البحث، عكس هنا البوست بالكثير اسبوع لو كان جامد جدا وبعدين هيموت ومحدش هيستفاد منه.&lt;/p&gt;
&lt;h2&gt;المشكلة مع السوشيال ميديا&lt;/h2&gt;
&lt;p&gt;احنا ولأن الثقافة دي مش منتشرة عندنا وخصوصا في مجال التقنية فالمحتوى بتاعنا كله ضايع في منصات التواصل الاجتماعي اللي شبه الثقب الأسود اللي بيبلع المحتوى بعد مدة معينة والخوارزميات بتاعتها اللي بتقتل المحتوى المفيد وبتقلل ظهوره أو بتديله زخم يوم ولا يومين وبعدين تخفيه ومحدش هيلاقيه إلا لو دخل مخصوص وقعد يلف في صفحتك ويقرأ فيها وده نادرا أما يحصل، كمان بتفقد جمهور مهم وكبير وهو الناس اللي ممكن تبحث عن المحتوى بتاعك بشكل مخصوص على جوجل.&lt;/p&gt;
&lt;h2&gt;فقدان المحتوى&lt;/h2&gt;
&lt;p&gt;كمان منصات التواصل الاجتماعي حسابك لو اتسرق أو اتقفل فأنت محتواك كله ضاع.&lt;/p&gt;
&lt;h2&gt;الحل&lt;/h2&gt;
&lt;p&gt;انا شايف أن صعب نتكلم عن إثراء المحتوى العربي والناس بترمي المحتوى بتاعها كله في السوشيال ميديا بس (النشر على السوشيال ميديا مفيد بس مش كفاية لوحده)، لازم يكون المحتوى بيتنشر في أماكن تانية عندنا تحكم كامل عليها وصديقه لمحركات البحث زي الـ Personal Blogs.&lt;/p&gt;
</content></entry><entry><title>استخدم Lazy Initialization في React</title><link href="https://mhmdsalah.vercel.app/posts/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-lazy-initialization-%D9%81%D9%8A-react/"/><updated>2024-09-03T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-lazy-initialization-%D9%81%D9%8A-react/</id><content type="html">&lt;h2&gt;مقدمة&lt;/h2&gt;
&lt;p&gt;لو الـ Initial Value لـ &lt;code&gt;useState&lt;/code&gt; عندك &lt;strong&gt;computationally expensive&lt;/strong&gt; (مثلا بتروح تقرأها من الـ LocalStorage، العملية دي بتكون Expensive عشان انت بتقرأ من الـ Hard drive الخاص باليوزر) أستخدم الـ Lazy Initialization!&lt;/p&gt;
&lt;h2&gt;المشكلة اللي بتحصل بسبب الـ Rerendering&lt;/h2&gt;
&lt;p&gt;الـ Lazy Initialization هو أنك بدل ما تباصي الـ Value نفسها للـ &lt;code&gt;useState&lt;/code&gt;، انت هتباصي function بترجع الـ value دي. طيب ليه؟&lt;/p&gt;
&lt;p&gt;لو انت روحت عملت كده:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;const [value, setValue] = React.useState(
  window.localStorage.getItem(&amp;quot;someValue&amp;quot;)
);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;أو كده:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;const getLocalStorageValue = () =&amp;gt; window.localStorage.getItem(&amp;quot;someValue&amp;quot;);
React.useState(getLocalStorageValue());
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ففي كل مرة هيحصل Re-rendering انت هتقرأ من الـ LocalStorage، والـ value اللي انت بتقرأها دي في الـ re-rendering ملهاش لزمة لأن React بتستخدمها كـ Initial State بس، وبعد كده بتحتفظ بالـ value ما بين الـ re-rendering. فأنت كده عمال بتعمل IO Operations ملهاش لزمة!&lt;/p&gt;
&lt;h2&gt;الحل باستخدام Lazy Initialization&lt;/h2&gt;
&lt;p&gt;الحل انك تباصي لـ useState فانكشن بترجع الـ Initial State، واللي هيحصل ان React هتنادي الفانكشن دي مرة واحدة بس لما الـ Component يتعمله Mount. الصورة المرفقة بتوضح ده. الـ Lazy initializers بيحصلها call مرة واحدة في البداية وبعد كده اثناء الـ Update/Re-rendering مبيحصلهاش Call.&lt;/p&gt;
&lt;p&gt;يعني انت مفروض تعمل كده:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;const [value, setValue] = React.useState(() =&amp;gt;
  window.localStorage.getItem(&amp;quot;someValue&amp;quot;)
);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;أو كده:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;const getLocalStorageValue = () =&amp;gt; window.localStorage.getItem(&amp;quot;someValue&amp;quot;);
React.useState(getLocalStorageValue);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/y69kCICvCq-400.avif 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/y69kCICvCq-400.webp 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/y69kCICvCq-400.gif 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;React Hook Flow&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/y69kCICvCq-400.jpeg&quot; width=&quot;400&quot; height=&quot;468&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
</content></entry><entry><title>مراجعة كتاب Refactoring UI</title><link href="https://mhmdsalah.vercel.app/posts/%D9%85%D8%B1%D8%A7%D8%AC%D8%B9%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8-refactoring-UI/"/><updated>2024-08-27T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D9%85%D8%B1%D8%A7%D8%AC%D8%B9%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8-refactoring-UI/</id><content type="html">&lt;h2&gt;مقدمة&lt;/h2&gt;
&lt;p&gt;بفضل الله أنتهيت من كتاب &lt;strong&gt;Refactoring UI&lt;/strong&gt; للمرة التانية وحابب اشارك معاكم ازاي الكتاب ده هيفيدك بشكل كبير لو انت ديفلوبر وعايز تصمم UI يكون شكله جميل بدون وجود Designer معاك وبدون ما تكون مبدع بالفطرة أو مولود بجينات مصممين! 😄&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/2Hd-HR3Xs1-400.avif 400w, https://mhmdsalah.vercel.app/optimized/2Hd-HR3Xs1-758.avif 758w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/2Hd-HR3Xs1-400.webp 400w, https://mhmdsalah.vercel.app/optimized/2Hd-HR3Xs1-758.webp 758w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/2Hd-HR3Xs1-400.gif 400w, https://mhmdsalah.vercel.app/optimized/2Hd-HR3Xs1-758.gif 758w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Refactoring UI Book&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/2Hd-HR3Xs1-400.jpeg&quot; width=&quot;758&quot; height=&quot;1014&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/2Hd-HR3Xs1-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/2Hd-HR3Xs1-758.jpeg 758w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2&gt;الكتاب ومن هو مؤلفه&lt;/h2&gt;
&lt;p&gt;أولا الكتاب من نفس المطور اللي عمل &lt;strong&gt;Tailwind CSS&lt;/strong&gt;. وقبل ما نكمل حابب أسالك: هل حاولت قبل كده تصمم website / application بنفسك وكان التصميم مش أفضل حاجه ومش مبهر على عكس مثلا لما تعتمد على تصميم جاهز عامله ديزاينر؟ أنا حصل معايا كده، وAdam Wathan حصل معاه كده (واحد من الناس اللي عملوا Tailwind ومؤلف الكتاب اللي بنتكلم عليه) وناس كتير حصل معاها كده!&lt;/p&gt;
&lt;h2&gt;كيف يساعدك الكتاب؟&lt;/h2&gt;
&lt;p&gt;كل اللي انت محتاجه هو الكتاب ده. الكتاب مكتوب من وجهة نظر &lt;strong&gt;Developer&lt;/strong&gt;، بيديلك &lt;strong&gt;Tips &amp;amp; Tricks&lt;/strong&gt; عشان تخلي التصميم بتاعك يكون جميل. الموضوع عامل بالظبط زي ما تكون بدأت لعبة ولسه Newbie وبعدين تستخدم Hack يخلي قدراتك عالية جدا بدون ما تتعب، وده بالظبط اللي انت هتعمله في الـ &lt;strong&gt;UI Design&lt;/strong&gt; عن طريق الكتاب.&lt;/p&gt;
&lt;h2&gt;محتوى الكتاب&lt;/h2&gt;
&lt;p&gt;الكتاب حجمه حوالي 220 صفحة بس معظمه صور. فأنت حتى لو ملكش في الكتب، هتلاقي الكتاب خفيف ولغته سهلة. الكتاب هيمر معاك بكل المراحل من أول ازاي تبدأ وتصمم System للـ &lt;strong&gt;Color, Font Size, Spacing&lt;/strong&gt; ..إلخ، الى كل الأمور التانية اللي بتحتك بيها وانت بتصمم زي الـ &lt;strong&gt;Hierarchy&lt;/strong&gt; والـ &lt;strong&gt;Layout&lt;/strong&gt; وكل ما يخص التعامل مع الـ &lt;strong&gt;Text, Images, Color, Shadows&lt;/strong&gt; وغيرهم.&lt;/p&gt;
&lt;h2&gt;الفيديوهات التطبيقية&lt;/h2&gt;
&lt;p&gt;بيجي مع الكتاب فيديوهين تطبيقيين عشان تطبق اللي اتعلمته، واحد عن تصميم &lt;strong&gt;Form&lt;/strong&gt; والتاني عن تصميم &lt;strong&gt;Dashboard&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;رابط الكتاب&lt;/h2&gt;
&lt;p&gt;لينك الصفحة الرسمية للكتاب:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.refactoringui.com/&quot;&gt;https://www.refactoringui.com&lt;/a&gt;&lt;/p&gt;
</content></entry><entry><title>سلسلة Javascript Visualized فيديوهات على اليوتيوب</title><link href="https://mhmdsalah.vercel.app/posts/%D8%B3%D9%84%D8%B3%D9%84%D8%A9-javascript-visualized-%D9%81%D9%8A%D8%AF%D9%8A%D9%88%D9%87%D8%A7%D8%AA-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D9%8A%D9%88%D8%AA%D9%8A%D9%88%D8%A8/"/><updated>2024-08-27T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D8%B3%D9%84%D8%B3%D9%84%D8%A9-javascript-visualized-%D9%81%D9%8A%D8%AF%D9%8A%D9%88%D9%87%D8%A7%D8%AA-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D9%8A%D9%88%D8%AA%D9%8A%D9%88%D8%A8/</id><content type="html">&lt;h2&gt;مقدمة&lt;/h2&gt;
&lt;p&gt;صاحبة سلسلة مقالات &lt;strong&gt;Javascript Visualized&lt;/strong&gt; (اللي كنت نشرتها هنا قبل كده)، حولتها على شكل فيديوهات موجودة على اليوتيوب!&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/YA7N8bhReY-400.avif 400w, https://mhmdsalah.vercel.app/optimized/YA7N8bhReY-800.avif 800w, https://mhmdsalah.vercel.app/optimized/YA7N8bhReY-1345.avif 1345w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/YA7N8bhReY-400.webp 400w, https://mhmdsalah.vercel.app/optimized/YA7N8bhReY-800.webp 800w, https://mhmdsalah.vercel.app/optimized/YA7N8bhReY-1345.webp 1345w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/YA7N8bhReY-400.gif 400w, https://mhmdsalah.vercel.app/optimized/YA7N8bhReY-800.gif 800w, https://mhmdsalah.vercel.app/optimized/YA7N8bhReY-1345.gif 1345w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Lydia Hallie Youtube channel&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/YA7N8bhReY-400.jpeg&quot; width=&quot;1345&quot; height=&quot;524&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/YA7N8bhReY-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/YA7N8bhReY-800.jpeg 800w, https://mhmdsalah.vercel.app/optimized/YA7N8bhReY-1345.jpeg 1345w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2&gt;عن السلسلة&lt;/h2&gt;
&lt;p&gt;اللي ميعرفش، دي سلسلة عاملاها &lt;strong&gt;Lydia Hallie&lt;/strong&gt; بتشرح فيها مواضيع متقدمة في الـ Javascript عن طريق &lt;strong&gt;انيميشن&lt;/strong&gt;. مواضيع زي:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Event loop&lt;/li&gt;
&lt;li&gt;Hoisting&lt;/li&gt;
&lt;li&gt;Scope Chain&lt;/li&gt;
&lt;li&gt;Javascript Engine&lt;/li&gt;
&lt;li&gt;Prototypal Inheritance&lt;/li&gt;
&lt;li&gt;Generators&lt;/li&gt;
&lt;li&gt;Iterators&lt;/li&gt;
&lt;li&gt;Promises&lt;/li&gt;
&lt;li&gt;Async/Await&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;حتى الآن ملقتش أي محتوى على الانترنت بيشرح المواضيع المتقدمة دي بالسهولة والجمال ده.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-400.avif 400w, https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-720.avif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-400.webp 400w, https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-720.webp 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-400.gif 400w, https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-720.gif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Javascript visualized 1&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-400.jpeg&quot; width=&quot;720&quot; height=&quot;405&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-720.jpeg 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-400.avif 400w, https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-720.avif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-400.webp 400w, https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-720.webp 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-400.gif 400w, https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-720.gif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Javascript visualized 2&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-400.jpeg&quot; width=&quot;720&quot; height=&quot;405&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-720.jpeg 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-400.avif 400w, https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-720.avif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-400.webp 400w, https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-720.webp 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-400.gif 400w, https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-720.gif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Javascript visualized 3&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-400.jpeg&quot; width=&quot;720&quot; height=&quot;405&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-720.jpeg 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/SQogac_1qO-400.avif 400w, https://mhmdsalah.vercel.app/optimized/SQogac_1qO-720.avif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/SQogac_1qO-400.webp 400w, https://mhmdsalah.vercel.app/optimized/SQogac_1qO-720.webp 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/SQogac_1qO-400.gif 400w, https://mhmdsalah.vercel.app/optimized/SQogac_1qO-720.gif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Javascript visualized 4&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/SQogac_1qO-400.jpeg&quot; width=&quot;720&quot; height=&quot;405&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/SQogac_1qO-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/SQogac_1qO-720.jpeg 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-400.avif 400w, https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-720.avif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-400.webp 400w, https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-720.webp 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-400.gif 400w, https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-720.gif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Javascript visualized 5&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-400.jpeg&quot; width=&quot;720&quot; height=&quot;405&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-720.jpeg 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2&gt;رابط القناة&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/@theavocoder&quot;&gt;رابط القناة&lt;/a&gt;&lt;/p&gt;
</content></entry><entry><title>ازاي تفضل Up to Date في مجال الـ Front-end</title><link href="https://mhmdsalah.vercel.app/posts/%D8%A7%D8%B2%D8%A7%D9%8A-%D8%AA%D9%81%D8%B6%D9%84-up-to-date-%D9%81%D9%8A-%D9%85%D8%AC%D8%A7%D9%84-%D8%A7%D9%84%D9%80-front-end/"/><updated>2024-08-26T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D8%A7%D8%B2%D8%A7%D9%8A-%D8%AA%D9%81%D8%B6%D9%84-up-to-date-%D9%81%D9%8A-%D9%85%D8%AC%D8%A7%D9%84-%D8%A7%D9%84%D9%80-front-end/</id><content type="html">&lt;h2&gt;مقدمة&lt;/h2&gt;
&lt;p&gt;السوفت وير كما قال بشمهندس Mohamed Hammad: &amp;quot;مجال عنيف&amp;quot;. بيتطور بصورة رهيبة، والكلام ده ينطبق تماما على الـ Front-end. كل ساعة الـ tools والتكنولوجي اللي بنستخدمها بتتطور، أو بتنزل حاجات جديدة، أو الـ Browser نفسه كمنصة بنطور عليها بيتحدث بشكل مستمر وبيوفر APIs جديدة، وكل شوية Trend جديد. فازاي انت كـ Front-end ديفلوبر تكون &lt;strong&gt;Up to date&lt;/strong&gt; ومتابع اللي بيحصل؟&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/haLD-TREgS-400.avif 400w, https://mhmdsalah.vercel.app/optimized/haLD-TREgS-800.avif 800w, https://mhmdsalah.vercel.app/optimized/haLD-TREgS-1024.avif 1024w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/haLD-TREgS-400.webp 400w, https://mhmdsalah.vercel.app/optimized/haLD-TREgS-800.webp 800w, https://mhmdsalah.vercel.app/optimized/haLD-TREgS-1024.webp 1024w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/haLD-TREgS-400.gif 400w, https://mhmdsalah.vercel.app/optimized/haLD-TREgS-800.gif 800w, https://mhmdsalah.vercel.app/optimized/haLD-TREgS-1024.gif 1024w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Overwhelmed&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/haLD-TREgS-400.jpeg&quot; width=&quot;1024&quot; height=&quot;1024&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/haLD-TREgS-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/haLD-TREgS-800.jpeg 800w, https://mhmdsalah.vercel.app/optimized/haLD-TREgS-1024.jpeg 1024w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;في البوست ده جمعت كل الـ newsletters والـ podcasts اللي متابعهم، معظمهم بيبعتلك بشكل أسبوعي. في منهم خاص بالـ CSS وفي بالـ Javascript/Typescript وفي بالـ React وفي بالـ UI/UX وفي بالـ Animation أو الـ Front-end بشكل عام.&lt;/p&gt;
&lt;h2&gt;General Front-end:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendfoc.us/&quot;&gt;frontendfoc.us&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.frontendweekly.co/&quot;&gt;frontendweekly.co&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codepen.io/spark&quot;&gt;https://codepen.io/spark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weekendwebdev.substack.com/&quot;&gt;weekendwebdev.substack.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://webtoolsweekly.com/&quot;&gt;webtoolsweekly.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fridayfrontend.curated.co/&quot;&gt;fridayfrontend.curated.co&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendfront.com/&quot;&gt;frontendfront.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tympanus.net/codrops&quot;&gt;tympanus.net/codrops&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://webweekly.email/&quot;&gt;webweekly.email&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://web.dev/blog&quot;&gt;web.dev/blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Javascript​:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://javascriptweekly.com/&quot;&gt;javascriptweekly.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bytes.dev/&quot;&gt;bytes.dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bestofjs.org/&quot;&gt;bestofjs.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;React:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://thisweekinreact.com/&quot;&gt;thisweekinreact.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://react.statuscode.com/&quot;&gt;react.statuscode.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://reactnewsletter.com/&quot;&gt;reactnewsletter.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;CSS:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://css-weekly.com/&quot;&gt;css-weekly.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tailwindweekly.com/&quot;&gt;tailwindweekly.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Animation:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://weekly.cssanimation.rocks/&quot;&gt;weekly.cssanimation.rocks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://offscreencanvas.com/&quot;&gt;offscreencanvas.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;UI/UX:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://uxdesignweekly.com/&quot;&gt;uxdesignweekly.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://unicornclub.dev/&quot;&gt;unicornclub.dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.toools.design/&quot;&gt;toools.design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.designspells.com/&quot;&gt;designspells.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://uxdesign.cc/&quot;&gt;uxdesign.cc&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Tools:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://console.dev/&quot;&gt;console.dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Podcasts:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://shoptalkshow.com/&quot;&gt;shoptalkshow.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://syntax.fm/&quot;&gt;syntax.fm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content></entry><entry><title>Case Study خاصة بتحسين الـ Next.js Performance</title><link href="https://mhmdsalah.vercel.app/posts/case-study-%D8%AC%D9%85%D9%8A%D9%84%D8%A9-%D8%AE%D8%A7%D8%B5%D8%A9-%D8%A8%D8%AA%D8%AD%D8%B3%D9%8A%D9%86-%D8%A7%D9%84%D9%80-nextjs-performance/"/><updated>2024-08-26T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/case-study-%D8%AC%D9%85%D9%8A%D9%84%D8%A9-%D8%AE%D8%A7%D8%B5%D8%A9-%D8%A8%D8%AA%D8%AD%D8%B3%D9%8A%D9%86-%D8%A7%D9%84%D9%80-nextjs-performance/</id><content type="html">&lt;h2&gt;مقدمة&lt;/h2&gt;
&lt;p&gt;معظم المقالات في الغالب لما بتتكلم عن تحسين الـ Performance في الـ Next.js بتتكلم عن الـ dependencies والـ bundle size وازاي تعمل dynamic imports عشان تقلل حجم الباندل، في المقال هنا بيتكلم عن حاجه تانية مختلفة وهو حجم الـ HTML document وتأثيره على الـ Performance!&lt;/p&gt;
&lt;h2&gt;تأثير حجم الـ HTML Document على الأداء&lt;/h2&gt;
&lt;p&gt;الـ Next.js بتحقن الـ Props اللي انت بترجعها من &lt;code&gt;getServerSideProps&lt;/code&gt; في الـ HTML عندك (هتلاقيها جوا script الـ ID بتاعه &lt;code&gt;___NEXT_DATA___&lt;/code&gt;) عشان عملية الـ Hydration. وبالتالي لو انت مرجع داتا حجمها ضخم ده هيكبر الـ HTML document وبالتالي هيقلل الـ Performance. حجم الداتا الضخم اللي انت بترجعه ده يرجع لمجموعة من الأسباب زي ان الـ REST API بيرجعلك داتا كبيرة جدا انت مش محتاجها بس انت بترجعها للـ Client زي ما هي.&lt;/p&gt;
&lt;h2&gt;تأثير الـ Server Side Rendering&lt;/h2&gt;
&lt;p&gt;المشكلة التانية اللي هو اتكلم عنها ان الـ React بتشتغل مرتين في حالة الـ SSR: مرة على السيرفر عشان تبني الـ HTML document، ومرة تانية على الـ client. وبالتالي لو انت بتعمل aggregation للداتا في الـ React Client فكده اللوجيك ده هيشتغل مرتين مرة على السيرفر ومرة عند اليوزر، عكس لو عملته على السيرفر ورجعته جاهز للـ Client.&lt;/p&gt;
&lt;h2&gt;الخاتمة&lt;/h2&gt;
&lt;p&gt;هسيبك مع المقال في شرح جميل لطريقة التغلب على المشاكل دي وهيفهمك حاجات.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/5_mfSAg3Ge-400.avif 400w, https://mhmdsalah.vercel.app/optimized/5_mfSAg3Ge-640.avif 640w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/5_mfSAg3Ge-400.webp 400w, https://mhmdsalah.vercel.app/optimized/5_mfSAg3Ge-640.webp 640w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/5_mfSAg3Ge-400.gif 400w, https://mhmdsalah.vercel.app/optimized/5_mfSAg3Ge-640.gif 640w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Nextjs Performance&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/5_mfSAg3Ge-400.jpeg&quot; width=&quot;640&quot; height=&quot;606&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/5_mfSAg3Ge-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/5_mfSAg3Ge-640.jpeg 640w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;رابط المقال: &lt;a href=&quot;https://www.smashingmagazine.com/2021/05/reduce-data-sent-client-nextjs/&quot;&gt;https://www.smashingmagazine.com/2021/05/reduce-data-sent-client-nextjs/&lt;/a&gt;&lt;/p&gt;
</content></entry><entry><title>WordPress Plugin Database Trigger Manager</title><link href="https://mhmdsalah.vercel.app/posts/wordPress-plugin-database-trigger-manager/"/><updated>2024-03-01T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/wordPress-plugin-database-trigger-manager/</id><content type="html">&lt;h2&gt;مقدمة&lt;/h2&gt;
&lt;p&gt;بفضل الله عملت أول WordPress Plugin ليا، اسمها &lt;strong&gt;Database Trigger Manager&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/w16irgNuiT-400.avif 400w, https://mhmdsalah.vercel.app/optimized/w16irgNuiT-800.avif 800w, https://mhmdsalah.vercel.app/optimized/w16irgNuiT-1341.avif 1341w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/w16irgNuiT-400.webp 400w, https://mhmdsalah.vercel.app/optimized/w16irgNuiT-800.webp 800w, https://mhmdsalah.vercel.app/optimized/w16irgNuiT-1341.webp 1341w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/w16irgNuiT-400.gif 400w, https://mhmdsalah.vercel.app/optimized/w16irgNuiT-800.gif 800w, https://mhmdsalah.vercel.app/optimized/w16irgNuiT-1341.gif 1341w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Database Trigger Manager&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/w16irgNuiT-400.jpeg&quot; width=&quot;1341&quot; height=&quot;569&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/w16irgNuiT-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/w16irgNuiT-800.jpeg 800w, https://mhmdsalah.vercel.app/optimized/w16irgNuiT-1341.jpeg 1341w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2&gt;فكرة الـ Plugin&lt;/h2&gt;
&lt;p&gt;فكرتها بكل ببساطة أنك تقدر تتعامل مع الـ Triggers من الـ Admin Dashboard.&lt;/p&gt;
&lt;h2&gt;الأسباب وراء إنشاء الـ Plugin&lt;/h2&gt;
&lt;p&gt;لما جيت اعمل Triggers ملقتش ال $wpdb بيدعم الـ Triggers والعملية مكنتش سهلة ومفيش plugins على حسب ما دورت مخصصة لحاجه زي كده.&lt;/p&gt;
&lt;p&gt;رابط البلجن: &lt;a href=&quot;https://github.com/mhmdsalahsebai/database-trigger-manager&quot;&gt;Database Trigger Manager Github&lt;/a&gt;&lt;/p&gt;
</content></entry><entry><title>مراجعة كورس Just Javascript لـ Dan Abramov</title><link href="https://mhmdsalah.vercel.app/posts/%D8%A7%D9%86%D8%AA%D9%87%D9%8A%D8%AA-%D9%85%D9%86-%D9%83%D9%88%D8%B1%D8%B3-just-javascript-%D9%84%D9%80-dan-abramov/"/><updated>2024-02-01T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D8%A7%D9%86%D8%AA%D9%87%D9%8A%D8%AA-%D9%85%D9%86-%D9%83%D9%88%D8%B1%D8%B3-just-javascript-%D9%84%D9%80-dan-abramov/</id><content type="html">&lt;p&gt;بفضل الله أنتهيت من كورس Just Javascript الخاص بـ Dan Abramov (واحد من مطورين React و Redux)، الكورس ده الوحيد في حياتي اللي خلاني زعلان اني خلصته كأني بالظبط كنت بتفرج على فيلم او مسلسل ومش عايزه يخلص.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/eY3vUoVvMQ-400.avif 400w, https://mhmdsalah.vercel.app/optimized/eY3vUoVvMQ-800.avif 800w, https://mhmdsalah.vercel.app/optimized/eY3vUoVvMQ-1350.avif 1350w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/eY3vUoVvMQ-400.webp 400w, https://mhmdsalah.vercel.app/optimized/eY3vUoVvMQ-800.webp 800w, https://mhmdsalah.vercel.app/optimized/eY3vUoVvMQ-1350.webp 1350w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/eY3vUoVvMQ-400.gif 400w, https://mhmdsalah.vercel.app/optimized/eY3vUoVvMQ-800.gif 800w, https://mhmdsalah.vercel.app/optimized/eY3vUoVvMQ-1350.gif 1350w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Just Javascript Course&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/eY3vUoVvMQ-400.jpeg&quot; width=&quot;1350&quot; height=&quot;587&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/eY3vUoVvMQ-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/eY3vUoVvMQ-800.jpeg 800w, https://mhmdsalah.vercel.app/optimized/eY3vUoVvMQ-1350.jpeg 1350w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;في الكورس ده Dan Abramov بيشرح الـ Mental Model الخاص بيه وازاي هو بيفكر بالجافاسكربت عن طريق انه بيصورلك ان الجافاسكربت انها عبارة عن Universe وهياخدك في رحلة جواه كأنك في مغامرة بالظبط عشان تبني Mental Modal وتشوف الجافاسكربت بنفس الطريقة اللي هو بيشوفها بيها.&lt;/p&gt;
&lt;p&gt;لو انت اتعلمت الجافاسكربت بعد ما اتعلمت لغة برمجة تانية او حتى الجافاسكربت كانت اول لغة برمجة ليك أكيد بتقول او سمعت ان الجافاسكربت فيها حاجات كتير مش منطقية وفي تناقض! المشكلة هنا تكمن في حاجتين يا أما عشان انت عندك مفهوم جاي معاك من لغة التانية وبتحاول تطبقه بالعافية على الجافاسكربت، او لان اتشرح ليك الموضوع بتشبيهات معينة خلاك تشوف ان في حاجات مش منطقية ومش راكبة مع التشبيه ده (مثلا ان ال variables عبارة عن صناديق بيتحط جواها ال values).&lt;/p&gt;
&lt;p&gt;الحل هنا في الكورس ده، الكورس هيخليك تبني Mental Model يخلي كل حاجه انت كنت مش مستوعبها او فاكرها متناقضة في الجافاسكربت منطقية جدا، الكورس عبقري وهيغير تفكيرك ناحية الجافاسكربت وناحية الطريقة اللي بتقرأ او بتـ Debug بيها الكود.&lt;/p&gt;
&lt;p&gt;أعتقد ان حتى لو طفل صغير تابع الكورس ده هيفهم الجافاسكربت ويستوعبها بشكل كبير.&lt;/p&gt;
&lt;p&gt;الكورس Text based مش فيديوهات، وDan Abramov متعاون فيه مع Maggie Appleton عشان يقدم Animation و Illustration عشان تسهل عملية الشرح والإستيعاب، الكورس عبارة عن 10 شباتر، واول واحد فيهم مجاني تقدر تشوفه قبل ما تشتري الكورس، وفي خصم لو انت من الدول النامية بيوصل سعر الكورس ل 10 دولار.&lt;/p&gt;
&lt;h3&gt;رابط الكورس:&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://justjavascript.com/&quot;&gt;Just Javascript&lt;/a&gt;&lt;/p&gt;
</content></entry><entry><title>مراجعة كتاب Web Security for Developers</title><link href="https://mhmdsalah.vercel.app/posts/%D9%85%D8%B1%D8%A7%D8%AC%D8%B9%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8-web-security-for-developers/"/><updated>2023-09-02T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D9%85%D8%B1%D8%A7%D8%AC%D8%B9%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8-web-security-for-developers/</id><content type="html">&lt;p&gt;واحد من أفضل الكتب اللي استثمرت وقت فيها وأستمتعت بكل حرف فيه هو الكتاب ده، الكتاب بيعرض اهم المشاكل والثغرات الأمنية اللي بيواجها اي موقع موجود لايف، مع طريقة حل المشاكل دي وازاي تتغلب عليها بأتباع أسلوب الـ Security in Depth يعني بيعرض عليك اكتر من حل للمشكلة بحيث انك تأمن نفسك بأكثر من طبقة حماية عشان لو في حاجه اتكسرت يكون في حاجه تانية تسد مكانها.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/EbHtaqPy7s-400.avif 400w, https://mhmdsalah.vercel.app/optimized/EbHtaqPy7s-757.avif 757w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/EbHtaqPy7s-400.webp 400w, https://mhmdsalah.vercel.app/optimized/EbHtaqPy7s-757.webp 757w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/EbHtaqPy7s-400.gif 400w, https://mhmdsalah.vercel.app/optimized/EbHtaqPy7s-757.gif 757w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Web Security For Developers Book&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/EbHtaqPy7s-400.jpeg&quot; width=&quot;757&quot; height=&quot;1000&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/EbHtaqPy7s-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/EbHtaqPy7s-757.jpeg 757w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2&gt;المواضيع التي يغطيها الكتاب&lt;/h2&gt;
&lt;p&gt;دي بعض المواضيع اللي بيغطيها الكتاب:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SQL Injection Attacks&lt;/li&gt;
&lt;li&gt;Cross-site Scripting Attacks&lt;/li&gt;
&lt;li&gt;Cross-site Request Forgery&lt;/li&gt;
&lt;li&gt;Session Hijacking&lt;/li&gt;
&lt;li&gt;XML Attacks&lt;/li&gt;
&lt;li&gt;Denial-of-service Attacks&lt;/li&gt;
&lt;li&gt;Encryption&lt;/li&gt;
&lt;li&gt;Securing third-party Code&lt;/li&gt;
&lt;li&gt;Information Leaks وغيرهم كتير!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;مميزات الكتاب&lt;/h2&gt;
&lt;p&gt;الكتاب لغته سهلة وحجمه مش كبير 216 صفحة ومقسوم لجزئين. اول جزء بيشرح أساسيات مهمة لازم تكون عارفها، بعد كده الجزء الثاني بيبدأ في المشاكل الأمنية وطريقة حلها. أنصح اي مطور ويب بيكتب كود بيطلع للبرودكشن انه يقرأه.&lt;/p&gt;
</content></entry><entry><title>إزاي تحمي الفرونت ايند جافاسكربت كود بتاعك من ان حد ينسخه او يسرقه او يفهمه؟</title><link href="https://mhmdsalah.vercel.app/posts/%D8%A7%D8%B2%D8%A7%D9%8A-%D8%AA%D8%AD%D9%85%D9%8A-%D8%A7%D9%84%D9%81%D8%B1%D9%88%D9%86%D8%AA-%D8%A7%D9%8A%D9%86%D8%AF-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-%D9%83%D9%88%D8%AF-%D8%A8%D8%AA%D8%A7%D8%B9%D9%83-%D9%85%D9%86-%D8%A7%D9%86-%D8%AD%D8%AF-%D9%8A%D9%86%D8%B3%D8%AE%D9%87-%D9%8A%D8%B3%D8%B1%D9%82%D9%87-%D9%8A%D9%81%D9%87%D9%85%D9%87/"/><updated>2023-08-01T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D8%A7%D8%B2%D8%A7%D9%8A-%D8%AA%D8%AD%D9%85%D9%8A-%D8%A7%D9%84%D9%81%D8%B1%D9%88%D9%86%D8%AA-%D8%A7%D9%8A%D9%86%D8%AF-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-%D9%83%D9%88%D8%AF-%D8%A8%D8%AA%D8%A7%D8%B9%D9%83-%D9%85%D9%86-%D8%A7%D9%86-%D8%AD%D8%AF-%D9%8A%D9%86%D8%B3%D8%AE%D9%87-%D9%8A%D8%B3%D8%B1%D9%82%D9%87-%D9%8A%D9%81%D9%87%D9%85%D9%87/</id><content type="html">&lt;p&gt;اللي انت شايفه قدامك ده هو كود لفانكشن بتطبع Hello World بالجافاسكربت!&lt;br /&gt;
اللي قدامك في الصورة يعتبر ربع الكود بس اللي عرفت أخده سكرين شوت.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/5nJSK0ukVW-400.avif 400w, https://mhmdsalah.vercel.app/optimized/5nJSK0ukVW-800.avif 800w, https://mhmdsalah.vercel.app/optimized/5nJSK0ukVW-1352.avif 1352w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/5nJSK0ukVW-400.webp 400w, https://mhmdsalah.vercel.app/optimized/5nJSK0ukVW-800.webp 800w, https://mhmdsalah.vercel.app/optimized/5nJSK0ukVW-1352.webp 1352w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/5nJSK0ukVW-400.gif 400w, https://mhmdsalah.vercel.app/optimized/5nJSK0ukVW-800.gif 800w, https://mhmdsalah.vercel.app/optimized/5nJSK0ukVW-1352.gif 1352w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Javascript Obfuscation&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/5nJSK0ukVW-400.jpeg&quot; width=&quot;1352&quot; height=&quot;763&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/5nJSK0ukVW-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/5nJSK0ukVW-800.jpeg 800w, https://mhmdsalah.vercel.app/optimized/5nJSK0ukVW-1352.jpeg 1352w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;ما هذا؟ وازاي كود المفروض في العادي يكون 3 سطور بس يكون بالشكل ده؟&lt;br /&gt;
دي حاجه اسمها Obfuscation وهي عملية بتحول السورس كود بتاعك المقروء الطبيعي لحاجه بالشكل ده مستحيل انها تتقرأ او تتفهم من البشر، لكن الكومبيلر يقدر يشغلها وتطلع نفس الناتج بتاع السورس كود الأصلي!&lt;br /&gt;
والعملية دي بتم عن طريق سلسلة من التحويلات للسورس كود بتاعك من تغيير اسماء للمتغيرات لحقن كود ملوش علاقة بالموضوع وغيرها من الامور اللي بتخلي الكود مستحيل يتفهم.&lt;/p&gt;
&lt;h2&gt;ايه الفرق بينها وبين الـ Encryption؟&lt;/h2&gt;
&lt;p&gt;الـ Encryption بيحتاج Secret Key عشان تعمل Decryption للكود بتاعك عشان الكومبيلر يفهمه وبالتالي هتضطر تحط الـ Secret Key في السورس كود وبالتالي لسا عندك نفس المشكلة اي حد هيوصل Secret Key هيفك التشفير، انما الـ Obfuscation انت كأنك عملت تشفير للسورس كود ومع ذلك الكومبيلر يقدر يفهمه.&lt;/p&gt;
&lt;p&gt;ده اللينك بتاع الأداة اللي بتعمل الموضوع ده:&lt;br /&gt;
&lt;a href=&quot;https://www.obfuscator.io/&quot;&gt;https://www.obfuscator.io&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;السؤال الحقيقي&lt;/h2&gt;
&lt;p&gt;ايه اللي ممكن يخلي حد يلجئ لحاجه زي دي؟&lt;br /&gt;
أنا مش شايف اي Use Case تستحق حاجه زي كده في النهاية الفرونت ايند كود المفروض انها حاجه Public ولو عندك حاجه مهمة زي مثلا Algorithm معين خايف ان المنافسين بتوعك في نفس المجال ينسخوه ويستخدموه فالأفضل انك تنقل حاجه زي دي للسيرفر عندك، او مثلا لو شايف ان ده هيصعب الموضوع على الـ Attacker بإنه يقرأ السورس كود ويلاقي ثغرات عندك فالأفضل انك تبحث وتسد الثغرات اللي عندك.&lt;/p&gt;
</content></entry><entry><title>مقال من Auth0 بيناقش الطرق المتاحة لتخزين الداتا في المتصفح من ناحية الـ Security</title><link href="https://mhmdsalah.vercel.app/posts/%D9%85%D9%82%D8%A7%D9%84-%D9%85%D9%86-auth0-%D8%A8%D9%8A%D9%86%D8%A7%D9%82%D8%B4-%D8%A7%D9%84%D8%B7%D8%B1%D9%82-%D8%A7%D9%84%D9%85%D8%AA%D8%A7%D8%AD%D8%A9-%D9%84%D8%AA%D8%AE%D8%B2%D9%8A%D9%86-%D8%A7%D9%84%D8%AF%D8%A7%D8%AA%D8%A7-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD-%D9%85%D9%86-%D9%86%D8%A7%D8%AD%D9%8A%D8%A9-%D8%A7%D9%84%D9%80-security-%D9%88%D8%AE%D8%B5%D9%88%D8%B5%D8%A7-%D8%B6%D8%AF-%D8%A7%D9%84%D9%80-xss-css/"/><updated>2023-06-01T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D9%85%D9%82%D8%A7%D9%84-%D9%85%D9%86-auth0-%D8%A8%D9%8A%D9%86%D8%A7%D9%82%D8%B4-%D8%A7%D9%84%D8%B7%D8%B1%D9%82-%D8%A7%D9%84%D9%85%D8%AA%D8%A7%D8%AD%D8%A9-%D9%84%D8%AA%D8%AE%D8%B2%D9%8A%D9%86-%D8%A7%D9%84%D8%AF%D8%A7%D8%AA%D8%A7-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD-%D9%85%D9%86-%D9%86%D8%A7%D8%AD%D9%8A%D8%A9-%D8%A7%D9%84%D9%80-security-%D9%88%D8%AE%D8%B5%D9%88%D8%B5%D8%A7-%D8%B6%D8%AF-%D8%A7%D9%84%D9%80-xss-css/</id><content type="html">&lt;p&gt;مقال جميل من Auth0 بيناقش الطرق المتاحة لتخزين الداتا في المتصفح من ناحية الـ Security وخصوصا ضد الـ XSS/CSS (Cross-Site Scripting) attacks.&lt;/p&gt;
&lt;p&gt;أنصحك تقرأها خصوصا لو انت فرونت أيند ومضطر تخزن اي Sensitive data في المتصفح عند اليوزر لأي سبب من الأسباب، أحلى حاجه في المقال ان فيه أمثلة عملية:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://auth0.com/blog/secure-browser-storage-the-facts/&quot;&gt;https://auth0.com/blog/secure-browser-storage-the-facts/&lt;/a&gt;&lt;/p&gt;
</content></entry><entry><title>شرح من الريبو الخاصة بـ Proton Mail عن إزاي بيخزنوا Sensitive Data في الـ User browser</title><link href="https://mhmdsalah.vercel.app/posts/%D8%B4%D8%B1%D8%AD-%D9%85%D9%86-%D8%A7%D9%84%D8%B1%D9%8A%D8%A8%D9%88-%D8%A7%D9%84%D8%AE%D8%A7%D8%B5%D8%A9-%D8%A8%D9%80-proton-mail-%D8%B9%D9%86-%D8%A5%D8%B2%D8%A7%D9%8A-%D8%A8%D9%8A%D8%AE%D8%B2%D9%86%D9%88%D8%A7-sensitive-data-%D9%81%D9%8A-%D8%A7%D9%84%D9%80-user-browser/"/><updated>2023-03-01T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D8%B4%D8%B1%D8%AD-%D9%85%D9%86-%D8%A7%D9%84%D8%B1%D9%8A%D8%A8%D9%88-%D8%A7%D9%84%D8%AE%D8%A7%D8%B5%D8%A9-%D8%A8%D9%80-proton-mail-%D8%B9%D9%86-%D8%A5%D8%B2%D8%A7%D9%8A-%D8%A8%D9%8A%D8%AE%D8%B2%D9%86%D9%88%D8%A7-sensitive-data-%D9%81%D9%8A-%D8%A7%D9%84%D9%80-user-browser/</id><content type="html">&lt;p&gt;الـ Requirements بتاعتهم ان الداتا دي متتخزنش في الهاردديسك الخاص باليوزر وتكون مرتبطة بالسيشن يعني لو اليوزر قفل المتصفح او الـ Browser Tab الداتا تختفي وفي نفس الوقت يحافظوا عليها لما اليوزر يعمل ريلود.&lt;/p&gt;
&lt;p&gt;أول خيار كان قدامهم انهم يخزنوا الـ Sensitive Data دي في الميموري ومتتخزنش نهائي في الـBrowser Storage لكن المشكلة اللي هتواجهم ان بمجرد ما اليوزر يعمل ريلود الداتا دي هتختفي.&lt;/p&gt;
&lt;p&gt;الخيار التاني هو الـ sessionStorage بما أن الداتا بتفضل موجودة فيه لو اليوزر عمل ريلود وكمان وقت ما اليوزر يقفل المتصفح او الـ Tab الداتا هتختفي لكن المشكلة ان معظم المتصفحات بتخزن الداتا الموجوده في الـ sessionStorage في الهارديسك بتاع اليوزر عشان الـ session recovery feature. وهم مش عايزين الداتا دي تتخزن في الهاردديسك.&lt;/p&gt;
&lt;p&gt;الخيار التالت هو Property اسمها Window.name بتسمحلك انك تخزن الداتا فيها وبتفضل موجودة لما اليوزر يعمل ريلود ومبتتكتبش على الهارديسك، وكمان لو اليوزر قفل الـ Browser Tab بتتسمح، لكن مشكلتها ان في ناس بتستخدمها في الـ Cross-domain communication وبالتالي الـ Websites التانية تقدر تقرأ القيمة اللي فيها، فبردو مينفعش يخزنوا فيها الداتا بشكل كامل، طيب ايه الحل؟&lt;/p&gt;
&lt;h2&gt;الحل&lt;/h2&gt;
&lt;p&gt;الحل انهم هيعملوا Two tricks، الاولى انهم هيسيبوا الداتا في الميموري ومش هيخزنوها في الـBrowser الا قبل ما الميموري تتمسح، عند الـ Page unloads.&lt;/p&gt;
&lt;p&gt;التركايه التانية انهم هيفصلوا الداتا دي لجزئين بإستخدم الـ XOR، اولا هيعملوا Generate لـ Random Value وبعدين هيعملوا XOR ليها مع الـ Private data زي كده:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;X = Private ^ Random
Y = Random
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;الـ X هتتخزن في الـ sessionStorage ، والـ Y هتتخزن في الـ Window.name!&lt;br /&gt;
فهنا لو افترضنا ان في حد عنده Access على الهارديسك فهو هيقدر يقرأ الحاجه المتخزنة في الـ sessionStorage اللي في الحالة دي X لكن مش هيقدر يقرأ الحاجه المتخزنة في الـ Window.name وبالتالي مش هيقدر يوصل لحاجه، الحاجه التانية ان الـ Websites التانية تقدر تقرأ قيمة الـ Y وده بردو مش هيفرق معانا لانها اولا Random ثانيا ان اي موقع تاني مش هيقدر يوصل للـ sessionStorage بتاعتنا عشان الـ Same-origin policy!&lt;/p&gt;
&lt;h2&gt;النتيجة&lt;/h2&gt;
&lt;p&gt;بعد ما اليوزر يعمل ريلود تقدر تعمل X ^ Y فتوصل لقيمة الـ Private data ودي حاجه معروفة في الـ XOR:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;X ^ Y = Private ^ Random ^ Random
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;الـ Random هيكنسلوا بعض فهيتبقالك الـ Private Data.&lt;br /&gt;
تقدر تقرأ شرحهم والـ Implementation للكلام ده كله من الريبو بتاعتهم من هنا:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/ProtonMail/proton-shared/blob/master/lib/helpers/secureSessionStorage.ts&quot;&gt;github.com/ProtonMail&lt;/a&gt;&lt;/p&gt;
</content></entry><entry><title>لقيت كنز وحبيت اشاركه معاكم، سلسلة المقالات دي بتشرح مواضيع مهمة في الجافاسكربت عن طريق الأنيميشن</title><link href="https://mhmdsalah.vercel.app/posts/%D9%84%D9%82%D9%8A%D8%AA-%D9%83%D9%86%D8%B2-%D9%88%D8%AD%D8%A8%D9%8A%D8%AA-%D8%A7%D8%B4%D8%A7%D8%B1%D9%83%D9%87-%D9%85%D8%B9%D8%A7%D9%83%D9%85-%D8%B3%D9%84%D8%B3%D9%84%D8%A9-%D8%A7%D9%84%D9%85%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%AF%D9%8A-%D8%A8%D8%AA%D8%B4%D8%B1%D8%AD-%D9%85%D9%88%D8%A7%D8%B6%D9%8A%D8%B9-%D9%85%D9%87%D9%85%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-%D8%B9%D9%86-%D8%B7%D8%B1%D9%8A%D9%82-%D8%A7%D9%84%D8%A3%D9%86%D9%8A%D9%85%D9%8A%D8%B4%D9%86/"/><updated>2023-01-20T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D9%84%D9%82%D9%8A%D8%AA-%D9%83%D9%86%D8%B2-%D9%88%D8%AD%D8%A8%D9%8A%D8%AA-%D8%A7%D8%B4%D8%A7%D8%B1%D9%83%D9%87-%D9%85%D8%B9%D8%A7%D9%83%D9%85-%D8%B3%D9%84%D8%B3%D9%84%D8%A9-%D8%A7%D9%84%D9%85%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%AF%D9%8A-%D8%A8%D8%AA%D8%B4%D8%B1%D8%AD-%D9%85%D9%88%D8%A7%D8%B6%D9%8A%D8%B9-%D9%85%D9%87%D9%85%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-%D8%B9%D9%86-%D8%B7%D8%B1%D9%8A%D9%82-%D8%A7%D9%84%D8%A3%D9%86%D9%8A%D9%85%D9%8A%D8%B4%D9%86/</id><content type="html">&lt;p&gt;لقيت كنز وحبيت اشاركه معاكم، سلسلة المقالات دي بتشرح مواضيع مهمة في الجافاسكربت عن طريق الأنيميشن زي:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Event loop&lt;/li&gt;
&lt;li&gt;Hoisting&lt;/li&gt;
&lt;li&gt;Scope Chain&lt;/li&gt;
&lt;li&gt;Javascript Engine&lt;/li&gt;
&lt;li&gt;Prototypal Inheritance&lt;/li&gt;
&lt;li&gt;Generators&lt;/li&gt;
&lt;li&gt;Iterators&lt;/li&gt;
&lt;li&gt;Promises&lt;/li&gt;
&lt;li&gt;Async/Await&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-400.avif 400w, https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-720.avif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-400.webp 400w, https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-720.webp 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-400.gif 400w, https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-720.gif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Javascript visualized 1&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-400.jpeg&quot; width=&quot;720&quot; height=&quot;405&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/4XfUG-zIOd-720.jpeg 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-400.avif 400w, https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-720.avif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-400.webp 400w, https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-720.webp 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-400.gif 400w, https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-720.gif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Javascript visualized 2&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-400.jpeg&quot; width=&quot;720&quot; height=&quot;405&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/QPNGsmd0Hv-720.jpeg 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-400.avif 400w, https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-720.avif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-400.webp 400w, https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-720.webp 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-400.gif 400w, https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-720.gif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Javascript visualized 3&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-400.jpeg&quot; width=&quot;720&quot; height=&quot;405&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/mLcpMQaS12-720.jpeg 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/SQogac_1qO-400.avif 400w, https://mhmdsalah.vercel.app/optimized/SQogac_1qO-720.avif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/SQogac_1qO-400.webp 400w, https://mhmdsalah.vercel.app/optimized/SQogac_1qO-720.webp 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/SQogac_1qO-400.gif 400w, https://mhmdsalah.vercel.app/optimized/SQogac_1qO-720.gif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Javascript visualized 4&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/SQogac_1qO-400.jpeg&quot; width=&quot;720&quot; height=&quot;405&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/SQogac_1qO-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/SQogac_1qO-720.jpeg 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-400.avif 400w, https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-720.avif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-400.webp 400w, https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-720.webp 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-400.gif 400w, https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-720.gif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Javascript visualized 5&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-400.jpeg&quot; width=&quot;720&quot; height=&quot;405&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/xo3dOzp9kR-720.jpeg 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;أنصحك بردو تتابع صاحبة السلسلة دي لانها بتعمل Visualization لمواضيع تانية غير الجافاكسربت زي اوامر Git وغيرها, وده لينك السلسلة:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dev.to/lydiahallie/series/3341&quot;&gt;dev.to/lydiahallie&lt;/a&gt;&lt;/p&gt;
</content></entry><entry><title>واحد من المواضيع اللي بيحصل فيها جدال وإختلاف هو هل الـ Data Structures مهمة للـ Frontend developers؟</title><link href="https://mhmdsalah.vercel.app/posts/%D9%88%D8%A7%D8%AD%D8%AF-%D9%85%D9%86-%D8%A7%D9%84%D9%85%D9%88%D8%A7%D8%B6%D9%8A%D8%B9-%D8%A7%D9%84%D9%84%D9%8A-%D8%A8%D9%8A%D8%AD%D8%B5%D9%84-%D9%81%D9%8A%D9%87%D8%A7-%D8%AC%D8%AF%D8%A7%D9%84-%D9%88%D8%A5%D8%AE%D8%AA%D9%84%D8%A7%D9%81-%D9%87%D9%88-%D9%87%D9%84-%D8%A7%D9%84%D9%80-data-structures-%D9%85%D9%87%D9%85%D8%A9-%D9%84%D9%84%D9%80-frontend-developers/"/><updated>2023-01-01T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D9%88%D8%A7%D8%AD%D8%AF-%D9%85%D9%86-%D8%A7%D9%84%D9%85%D9%88%D8%A7%D8%B6%D9%8A%D8%B9-%D8%A7%D9%84%D9%84%D9%8A-%D8%A8%D9%8A%D8%AD%D8%B5%D9%84-%D9%81%D9%8A%D9%87%D8%A7-%D8%AC%D8%AF%D8%A7%D9%84-%D9%88%D8%A5%D8%AE%D8%AA%D9%84%D8%A7%D9%81-%D9%87%D9%88-%D9%87%D9%84-%D8%A7%D9%84%D9%80-data-structures-%D9%85%D9%87%D9%85%D8%A9-%D9%84%D9%84%D9%80-frontend-developers/</id><content type="html">&lt;p&gt;من وجهة نظري سبب وجود الخلاف ده عن أهميتها للفرونت ايند من عدمه هو ان اللي بيقول انها مهمة مبيديش امثلة حقيقية عن أستخدامها في الفرونت ايند، وغالبا الإجابة بتكون بالشكل ده:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;في ناس بتقول مش مهمة انا شغال ومستخدمتهاش.&lt;/li&gt;
&lt;li&gt;وفي ناس بتقول انت بتستخدمها بس بشكل غير مباشر.&lt;/li&gt;
&lt;li&gt;وفي ناس بتقول هي مهمة عشان تظبط طريقة تفكيرك كمهندس حتى لو مش هتستخدمها بشكل مباشر.&lt;/li&gt;
&lt;li&gt;في ناس بتقول مهمة وهتستخدمها لكن مبيديش أمثلة.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/M90IwT2Kkz-400.avif 400w, https://mhmdsalah.vercel.app/optimized/M90IwT2Kkz-800.avif 800w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/M90IwT2Kkz-400.webp 400w, https://mhmdsalah.vercel.app/optimized/M90IwT2Kkz-800.webp 800w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/M90IwT2Kkz-400.gif 400w, https://mhmdsalah.vercel.app/optimized/M90IwT2Kkz-800.gif 800w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Data Structures in Frontend&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/M90IwT2Kkz-400.jpeg&quot; width=&quot;800&quot; height=&quot;418&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/M90IwT2Kkz-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/M90IwT2Kkz-800.jpeg 800w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;المقال ده عظيم بيدي Real World Examples بتستخدم فيها الداتا ستراكشر في الفرونت أيند والأمثلة مش خيالية او نادرة دي حاجات انت بتشوفها بعينك كل يوم في اي موقع تقريبا.&lt;/p&gt;
&lt;p&gt;الجميل بردو انه كاتب الأمثلة بالـ React.js عشان يوريك الموضوع in action مش مجرد كلام نظري وخلاص، وبردو اتكلم عن الـ Performance وازاي لو استخدمت الداتا ستراكشر المناسبة هتحسن الـ Performance بشكل كبير.&lt;/p&gt;
&lt;h2&gt;الداتا ستراكشر والـ Real World Example:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Map -&amp;gt; Messages with user names.&lt;/li&gt;
&lt;li&gt;Set -&amp;gt; Keeping track of selected items.&lt;/li&gt;
&lt;li&gt;Stack -&amp;gt; Undo previous actions.&lt;/li&gt;
&lt;li&gt;Queue -&amp;gt; Notifications.&lt;/li&gt;
&lt;li&gt;Tree -&amp;gt; Nested menus or comments.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;حاول لو انت مقتنع ان الداتا ستراكشر ملهاش لزمة للفرونت ايند انك تقرأ الأمثلة اللي هو كاتبها وشوف انت هتحل المشكلة دي ازاي وقارن بالحل بتاعه، وده لينك المقال:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://profy.dev/article/javascript-data-structures#real-world-example-undo-previous-actions&quot;&gt;https://profy.dev/article/javascript-data-structures#real-world-example-undo-previous-actions&lt;/a&gt;&lt;/p&gt;
</content></entry><entry><title>لقيت المقالة الجميلة دي فيها Sketches بتشرح الـ SOLID Principles</title><link href="https://mhmdsalah.vercel.app/posts/%D9%84%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D9%85%D9%82%D8%A7%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D9%8A%D9%84%D8%A9-%D8%AF%D9%8A-%D9%81%D9%8A%D9%87%D8%A7-sketches-%D8%A8%D8%AA%D8%B4%D8%B1%D8%AD-%D8%A7%D9%84-solid-principles/"/><updated>2022-12-20T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D9%84%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D9%85%D9%82%D8%A7%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D9%8A%D9%84%D8%A9-%D8%AF%D9%8A-%D9%81%D9%8A%D9%87%D8%A7-sketches-%D8%A8%D8%AA%D8%B4%D8%B1%D8%AD-%D8%A7%D9%84-solid-principles/</id><content type="html">&lt;p&gt;لقيت المقالة الجميلة دي فيها Sketches بتشرح الـ SOLID Principles&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/zQCdjI0rE1-400.avif 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/zQCdjI0rE1-400.webp 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/zQCdjI0rE1-400.gif 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;SOLID Principles&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/zQCdjI0rE1-400.jpeg&quot; width=&quot;400&quot; height=&quot;445&quot; /&gt;&lt;/picture&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/mmws4DeKVb-400.avif 400w, https://mhmdsalah.vercel.app/optimized/mmws4DeKVb-521.avif 521w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/mmws4DeKVb-400.webp 400w, https://mhmdsalah.vercel.app/optimized/mmws4DeKVb-521.webp 521w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/mmws4DeKVb-400.gif 400w, https://mhmdsalah.vercel.app/optimized/mmws4DeKVb-521.gif 521w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;SOLID Principles&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/mmws4DeKVb-400.jpeg&quot; width=&quot;521&quot; height=&quot;478&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/mmws4DeKVb-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/mmws4DeKVb-521.jpeg 521w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/v1C_zIMR7J-400.avif 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/v1C_zIMR7J-400.webp 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/v1C_zIMR7J-400.gif 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;SOLID Principles&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/v1C_zIMR7J-400.jpeg&quot; width=&quot;400&quot; height=&quot;433&quot; /&gt;&lt;/picture&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/4iaXuC5hni-400.avif 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/4iaXuC5hni-400.webp 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/4iaXuC5hni-400.gif 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;SOLID Principles&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/4iaXuC5hni-400.jpeg&quot; width=&quot;400&quot; height=&quot;361&quot; /&gt;&lt;/picture&gt;
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/wBHmd0-8Fv-400.avif 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/wBHmd0-8Fv-400.webp 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/wBHmd0-8Fv-400.gif 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;SOLID Principles&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/wBHmd0-8Fv-400.jpeg&quot; width=&quot;400&quot; height=&quot;389&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://itnext.io/solid-principles-sketches-a38865e771f0&quot;&gt;رابط المقالة&lt;/a&gt;&lt;/p&gt;
</content></entry><entry><title>مراجعة كتاب Learning React Modern Patterns for Developing React Apps</title><link href="https://mhmdsalah.vercel.app/posts/%D9%85%D8%B1%D8%A7%D8%AC%D8%B9%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8-learning-react-modern-patterns-for-developing-react-apps/"/><updated>2022-09-19T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D9%85%D8%B1%D8%A7%D8%AC%D8%B9%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8-learning-react-modern-patterns-for-developing-react-apps/</id><content type="html">&lt;p&gt;قررت في أجازة العيد اني أتعلم تكنولوجي جديدة وأخترت الـ React وأخترت الكتاب ده عشان اتعلمها منه بعد ما شوفت ناس بترشحه على Reddit.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/CZFD1nM9iC-400.avif 400w, https://mhmdsalah.vercel.app/optimized/CZFD1nM9iC-600.avif 600w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/CZFD1nM9iC-400.webp 400w, https://mhmdsalah.vercel.app/optimized/CZFD1nM9iC-600.webp 600w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/CZFD1nM9iC-400.gif 400w, https://mhmdsalah.vercel.app/optimized/CZFD1nM9iC-600.gif 600w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Learning React Book&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/CZFD1nM9iC-400.jpeg&quot; width=&quot;600&quot; height=&quot;600&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/CZFD1nM9iC-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/CZFD1nM9iC-600.jpeg 600w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;الكتاب عبارة عن 12 شابتر في أول شابتر بيبدأ بالـ Modern Javascript وبعد كده تاني شابتر بيشرح الـ Functional Programming هتلاقي بقى شرح لمفاهيم كتيرة زي الـ Immutability , Pure Functions , Higher Order functions , Data Transformations ..إلخ&lt;br /&gt;
بعد كده بيخش في الريأكت ويبدأ يتعمق واحدة واحدة من اول الـ React بتشتغل ازاي ويعني ايه component وJSX ويبدأ يتعمق في مواضيع زي الـ State Management والـ Hooks و Request and Sending data وشابتر كامل عن كل من الـReact Testing و React Router وكان في ضمن الشباتر بردو مقدمة بسيطة عن الأسماء دي Typescript, GraphQl, Next.js, Gatsby، في حاجات تانية كتيرة بردو ممكن تفتح الـ Table of contents عشان تشوف المحتوى كامل.&lt;/p&gt;
&lt;p&gt;في حاجات بسيطة طنشتها ومدتلهاش اهتمام كامل وعرفت بوجودها وهرجعلها بعدين لأن الكتاب ده هستخدمه بإذن الله كمرجع بعد كده وأرجعله وانا شغال، الكتاب جميل ومليان تفاصيل كتير، لو ناوي تقرأه اتأكد انك هتقرأ الإصدار الثاني، حجمه حوالي 310 صفحة.&lt;/p&gt;
</content></entry><entry><title>كنت بتصفح في موقع كورسات شهير وبعدين لاقيتهم حاطين في المميزات أن كورساتهم Text-based</title><link href="https://mhmdsalah.vercel.app/posts/%D9%83%D9%86%D8%AA-%D8%A8%D8%AA%D8%B5%D9%81%D8%AD-%D9%81%D9%8A-%D9%85%D9%88%D9%82%D8%B9-%D9%83%D9%88%D8%B1%D8%B3%D8%A7%D8%AA-%D8%B4%D9%87%D9%8A%D8%B1-%D9%88%D8%A8%D8%B9%D8%AF%D9%8A%D9%86-%D9%84%D8%A7%D9%82%D9%8A%D8%AA%D9%87%D9%85-%D8%AD%D8%A7%D8%B7%D9%8A%D9%86-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D9%85%D9%8A%D8%B2%D8%A7%D8%AA-%D8%A3%D9%86-%D9%83%D9%88%D8%B1%D8%B3%D8%A7%D8%AA%D9%87%D9%85-text-based/"/><updated>2022-09-01T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D9%83%D9%86%D8%AA-%D8%A8%D8%AA%D8%B5%D9%81%D8%AD-%D9%81%D9%8A-%D9%85%D9%88%D9%82%D8%B9-%D9%83%D9%88%D8%B1%D8%B3%D8%A7%D8%AA-%D8%B4%D9%87%D9%8A%D8%B1-%D9%88%D8%A8%D8%B9%D8%AF%D9%8A%D9%86-%D9%84%D8%A7%D9%82%D9%8A%D8%AA%D9%87%D9%85-%D8%AD%D8%A7%D8%B7%D9%8A%D9%86-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D9%85%D9%8A%D8%B2%D8%A7%D8%AA-%D8%A3%D9%86-%D9%83%D9%88%D8%B1%D8%B3%D8%A7%D8%AA%D9%87%D9%85-text-based/</id><content type="html">&lt;p&gt;كنت بتصفح في موقع كورسات شهير وبعدين لاقيتهم حاطين في المميزات اللي تخليك تشترك وتتعلم معاهم أن كورساتهم Text-based وبيوضحوا ليه أن ده افضل واسرع من الفيديوهات وبيأكدوا على الجزئية دي في كل كورس وكل صفحة في الموقع تقريباً.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/iwKOdsLlbC-400.avif 400w, https://mhmdsalah.vercel.app/optimized/iwKOdsLlbC-720.avif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/iwKOdsLlbC-400.webp 400w, https://mhmdsalah.vercel.app/optimized/iwKOdsLlbC-720.webp 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/iwKOdsLlbC-400.gif 400w, https://mhmdsalah.vercel.app/optimized/iwKOdsLlbC-720.gif 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Reading faster than watching&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/iwKOdsLlbC-400.jpeg&quot; width=&quot;720&quot; height=&quot;311&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/iwKOdsLlbC-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/iwKOdsLlbC-720.jpeg 720w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;كشخص محب للتعلم من الكتب أو الTutorials الtext-based عموما، اتمنى اني اشوف منصة عربية الكورسات فيها تكون Text-based أو كتب برمجة باللغة العربية أو حتى حد من المهندسين الكبار اللي بيعمل كورسات يفكر في أن الكورس بتاعه القادم يكون Text-based، والسبب أن القراءة عموما ممتعة بس هتكون أكثر متعة لو كانت بالعربي اللغة الأم.&lt;/p&gt;
&lt;h2&gt;مميزات من نظري بتخلي الشرح المكتوب افضل من الفيديوهات:&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;سهولة تعديل الأخطاء، لو قولت معلومة غلط تقدر تصححها بسهولة.&lt;/li&gt;
&lt;li&gt;أقل جهد بكتير من التصوير والمونتاج.&lt;/li&gt;
&lt;li&gt;اللي بيتعلم منك هيتعلم بطريقة أسرع وصعب أنه يحس بالملل.&lt;/li&gt;
&lt;li&gt;ممكن تتيح الفرصة للناس لتحسين المحتوى معاك، هتلاقي ناس تانية قوية في المجال تخش تعدل وتضيف وتحسن من المحتوى بتاعك (حاجه زي MDN او ويكيبيديا كده)، دي احسن وأسرع طريقة للحصول على محتوى تقني قوي ان الكل يتعاون فيه.&lt;/li&gt;
&lt;/ol&gt;
</content></entry><entry><title>ايه افضل نص ساعة ممكن تقضيها من وقتك لو انت JavaScript Developer؟</title><link href="https://mhmdsalah.vercel.app/posts/%D8%A7%D9%8A%D9%87-%D8%A7%D9%81%D8%B6%D9%84-%D9%86%D8%B5-%D8%B3%D8%A7%D8%B9%D8%A9-%D9%85%D9%85%D9%83%D9%86-%D8%AA%D9%82%D8%B6%D9%8A%D9%87%D8%A7-%D9%85%D9%86-%D9%88%D9%82%D8%AA%D9%83-%D9%84%D9%88-%D8%A7%D9%86%D8%AA-javascript-developer/"/><updated>2022-08-10T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D8%A7%D9%8A%D9%87-%D8%A7%D9%81%D8%B6%D9%84-%D9%86%D8%B5-%D8%B3%D8%A7%D8%B9%D8%A9-%D9%85%D9%85%D9%83%D9%86-%D8%AA%D9%82%D8%B6%D9%8A%D9%87%D8%A7-%D9%85%D9%86-%D9%88%D9%82%D8%AA%D9%83-%D9%84%D9%88-%D8%A7%D9%86%D8%AA-javascript-developer/</id><content type="html">&lt;p&gt;ايه افضل ~نص ساعة ممكن تقضيها من وقتك لو انت JavaScript developer؟&lt;/p&gt;
&lt;p&gt;الإجابة انك تشوف الفيديو ده:&lt;/p&gt;
&lt;iframe src=&quot;https://www.youtube.com/embed/8aGhZQkoFbQ&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
</content></entry><entry><title>ازاي ممكن تلاقي أفضل كتاب في حاجه معينة عايز تتعلمها؟</title><link href="https://mhmdsalah.vercel.app/posts/%D8%A7%D8%B2%D8%A7%D9%8A-%D9%85%D9%85%D9%83%D9%86-%D8%AA%D9%84%D8%A7%D9%82%D9%8A-%D8%A3%D9%81%D8%B6%D9%84-%D9%83%D8%AA%D8%A7%D8%A8-%D9%81%D9%8A-%D8%AD%D8%A7%D8%AC%D9%87-%D9%85%D8%B9%D9%8A%D9%86%D8%A9-%D8%B9%D8%A7%D9%8A%D8%B2-%D8%AA%D8%AA%D8%B9%D9%84%D9%85%D9%87%D8%A7/"/><updated>2022-07-01T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D8%A7%D8%B2%D8%A7%D9%8A-%D9%85%D9%85%D9%83%D9%86-%D8%AA%D9%84%D8%A7%D9%82%D9%8A-%D8%A3%D9%81%D8%B6%D9%84-%D9%83%D8%AA%D8%A7%D8%A8-%D9%81%D9%8A-%D8%AD%D8%A7%D8%AC%D9%87-%D9%85%D8%B9%D9%8A%D9%86%D8%A9-%D8%B9%D8%A7%D9%8A%D8%B2-%D8%AA%D8%AA%D8%B9%D9%84%D9%85%D9%87%D8%A7/</id><content type="html">&lt;p&gt;الموضوع نسبي لان افضل دي تحمل معاني كتير بس أكيد في كتب افضل من كتب تانية في نواحي معينة زي الدخول في التفاصيل ومن ناحية سهولة اللغة المستخدمة والأسلوب والشيء اللي بيحاول الشخص يقدمه عن طريق الكتاب والكتاب مستهدف مبتدئين ولا ناس مستواها متقدم ..إلخ، طب ازاي ممكن تلاقي كتاب كويس تبدأ فيه وتختار ما بين مئات الكتب؟&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/7ui8YqkDlY-400.avif 400w, https://mhmdsalah.vercel.app/optimized/7ui8YqkDlY-800.avif 800w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/7ui8YqkDlY-400.webp 400w, https://mhmdsalah.vercel.app/optimized/7ui8YqkDlY-800.webp 800w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/7ui8YqkDlY-400.gif 400w, https://mhmdsalah.vercel.app/optimized/7ui8YqkDlY-800.gif 800w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Software Engineering Books&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/7ui8YqkDlY-400.jpeg&quot; width=&quot;800&quot; height=&quot;424&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/7ui8YqkDlY-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/7ui8YqkDlY-800.jpeg 800w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;الطريقة المختصرة والأضمن انك تشوف بشمهندس محمد حماد Mohamed Hammad هتلاقيه مرشح كتب في حاجات كتير، عمري ما قرأت في كتاب هو رشحه الا ولقيته كتاب جميل ومميز، بس ممكن تكون انت مهتم بتكنولوجي معينة هو مرشحش فيها كتب تعمل ايه؟ دي الطريقة اللي انا بعملها وغالبا بتنفع معايا وبصطاد بيها كتب كتير عظيمة.&lt;/p&gt;
&lt;p&gt;هتخش على جوجل وتكتب افضل كتاب + اسم الحاجه اللي عايز تتعلمها + اي تفاصيل زيادة لو كنت بتدور على كتاب للمبتدئين او كتاب متقدم + تكتب Reddit.&lt;br /&gt;
كل ده بالأنجليزي هيطلعلك شوية نتائج ع جوجل افتحها كلها.&lt;/p&gt;
&lt;p&gt;يعني مثلا كده Best React.js book for beginners Reddit&lt;/p&gt;
&lt;p&gt;هتلاقي في اللينكات اللي فتحتها في Reddit ناس بتطلب ترشيح كتب تقرأها وناس بتجاوب عليهم، فهتاخد الترشيحات دي وتعمل بيها قائمة وهنا انت بدل ما كان عندك مئات الكتب اصبح عندك قائمة فيها عشر كتب او اقل، وهتلاقي في اسماء كتب بتتكرر حط الكتب دي في الأولويات.&lt;/p&gt;
&lt;h2&gt;طب ليه Reddit بالذات؟&lt;/h2&gt;
&lt;p&gt;عشان اغلب الناس هناك هتلاقيهم بيرشحوا كتب هم فعلا قرأوها وشايفين انها فادتهم والموضوع مش هيكون بغرض التسويق زي ما الموضوع ده منتشر على Quora مثلا وبالتالي تضمن انك تلاقي افضل الخيارات بدون تحيز او محاولة تسويق، وطبعا مش عايز اقولك فكك من اي مقالة ناشرة مجموعة من الكتب ومرتبينهم لان مية في المية الموضوع تسويق وبياخدوا عمولة.&lt;/p&gt;
&lt;h2&gt;نيجي للمرحلة التانية:&lt;/h2&gt;
&lt;p&gt;هتاخد اسماء الكتب دي وتكتبها على جوجل وتشوف لو ليها موقع رسمي او موقع دار النشر بتاعها او حتى امازون وتدخل تقرأ الوصف بتاع الكتب، الوصف ده ممكن يساعدك بشكل كبير جدا على اختيار الكتاب المناسب هتلاقي مثلا صاحب الكتاب بيوضحلك ان الكتاب ده مختلف عن الباقي وانه بيعالج مشكلة معينة، مثلا كتاب Pure React لما قرأت الوصف بتاعه لاقيت صاحب الكتاب بيوضح المشكلة الموجودة في الكورسات والكتب اللي على الانترنت وازاي كتابه بيعالج المشكلة دي، يعني واضح ان الراجل ده مش عامل الكتاب وخلاص هو بيحاول فعلا يحل مشكلة.&lt;/p&gt;
&lt;h2&gt;هنا انت ممكن تلاقي في الأخر ان بقى قدامك كتاب ولا أتنين محتار ما بينهم طب تعمل ايه؟&lt;/h2&gt;
&lt;p&gt;اختار اي واحد فيهم وابدأ على طول، ممكن لو مش عايز تضحي وتشتري الكتاب ويطلع نص كوم، ففي طرق كتير شرعية ورسمية انك تقرأ الكتب بشكل مجاني من دار النشر الخاصة بيهم، وفي ناس بتسمحلك تقرأ اول شابترين ولا حاجه مجانا ممكن الطريقة دي تستخدمها بردو عشان تعرف الكتاب ده يناسبك ولا لأ.&lt;/p&gt;
&lt;p&gt;حاجه مهمة تخلي بالك منها هي تاريخ اصدار الكتاب وله تحديثات ولا لأ خصوصا في كتب التكنولوجي لان في تكنولوجي بتطور بشكل كبير جدا وممكن الكتاب يكون قديم.&lt;/p&gt;
</content></entry><entry><title>مراجعة كتاب Pure React</title><link href="https://mhmdsalah.vercel.app/posts/%D9%85%D8%B1%D8%A7%D8%AC%D8%B9%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8-pure-react/"/><updated>2022-05-01T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D9%85%D8%B1%D8%A7%D8%AC%D8%B9%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8-pure-react/</id><content type="html">&lt;p&gt;بفضل الله انتهيت من قراءة كتاب Pure React، الكتاب ده افضل كتاب بيشرح تكنولوجي قرأته في حياتي، وده بسبب انه بيتبع فلسفة معينة مختلفة عن اللي بيستخدمها باقي الناس اللي بتشرح الـReact بالذات، لو انت لسا بادئ تتعلم React او بدأت وحاسس انك تايه وفي حاجات كتير مش فاهمها، فغالبا ده بسبب الطريقة اللي بتتشرح بيها الـ React هتلاقي معظم الكورسات والكتب لما بتيجي تشرحلك الـ React بتشرح معاها حاجات تانية كتير زي Webpack, Babel, Redux, React Router, Next.js, Gatsby, Firebase, Docker!!&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/yJQh8a1-o_-400.avif 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/yJQh8a1-o_-400.webp 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/yJQh8a1-o_-400.gif 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Pure React Book&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/yJQh8a1-o_-400.jpeg&quot; width=&quot;400&quot; height=&quot;520&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;لو جبتلك فرخة وقولتلك كلها، هل معقولة تحاول تشيلها كلها زي ما هي بعضمها وتحاول تحطها في بوقك مرة واحدة؟ مستحيل، أكيد هتاخد حته حته لحد ما تخلصها، كذلك نفس الأمر لو عايز تتعلم React لازم تاخد حته حته تتعلم اساسيات المكتبة اول وتفهم الدنيا ماشية ازاي وبعد كده تنقل على الإضافات والحاجات الجانبية، الكتاب ده من اسمه هو معمول عشان يحل المشكلة دي Pure React! هتتعلم React فقط، وبسبب الفلسفة دي المؤلف اصبح عنده اريحيه وبيشرح كل حاجه بالتفصيل الممل&lt;/p&gt;
&lt;p&gt;كمثال بسيط لما جه يشرح الـ Components هيبدأ معاك من الصفر ويحاكي معاك الـprocess اللي هتم بشكل كامل يعني لو افترضنا مثلا عندك جزء معين في الموقع بتاعك عايز تعمله فهو هيشرحلك انك في البداية هترسم الجزء اللي انت عايز تصممه على ورقة وبعدين تبدأ تشوف ايه الأجزاء اللي مفروض تختارها كـcomponent وهيقولك تختار ده على أساس ايه وبعدين تدي لكل واحد فيهم إسم وبعدين تبدأ تكتب الكود وتـ implement الكلام ده كله، وبيشرح الموضوع ده كله بمثال عن ازاي تصمم tweet، ومش بس كده هيكلمك كمان عن مفروض تبدأ بأيه الأول هل تبدأ بالأب وبعدين الـ children بتوعه ولا العكس (Top-Down, or Bottom-Up) وهيقولك امتى تختار دي وامتى تختار دي وعيوب كل طريقة، هتيجي تبص تلاقي انه بيرتب أفكارك وبيعرفك هتمشي ازاي عشان متحسش بتوهان.&lt;/p&gt;
&lt;p&gt;هيشرحلك ازاي تفكر وتطور الـ Declarative Thinking وخصوصا لو انت كنت شغال imperative programming قبل كده فأنت محتاج تغير من طريقة تفكيرك وهيديك شوية أمثلة عملية وازاي تفكر في حلها وهيقارن بين الطريقة العادية في الحل والـ declarative way أمثلة بقى زي Notifications و Animating a Change..إلخ&lt;/p&gt;
&lt;p&gt;بردو في حاجه تانية كويسة وهو انه بيشرح Class Component و Functional Component وHooks بالتفصيل، معظم الكورسات والكتب بتطنش الClass component لدرجة ان انا كنت مفكر انها deprecated، لكنها مدعومة في كل إصدارات الـ React من البداية ووارد انك تقابلها في بروجكيت قديم.&lt;/p&gt;
&lt;p&gt;حاجه تانية بردو تخلى الكتاب ده ممتاز انه بيشرح امثلة وبيدي Exercises كتير وعنده فلسفة فيها كويسة بردو اللي هي لا إفراط ولا تفريط مش هتلاقيه مثلا بيشرحلك امثلة او يديك Exercises عيانة زي انك تعمل counter وخلاص كده ولا بردو هتلاقيه بيقولك يلا نعمل الفيس بوك! لكن هتلاقيه مثلا بيستخدم اجزاء من المواقع المشهورة ويشتغل فيها على أساس انك تتعلم وتتدرب على الحاجه اللي بتتدرسها وفي نفس الوقت متخشش في حاجه كبيرة اوي تتوهك وتحتاج منك معلومات تانية، يعني مثلا هتلاقيه شغال على الـ Github File list يجبلك صفحة من Reddit يجبلك صفحة من Pinterest يجبلك حته من تويتر وهكذا.&lt;/p&gt;
&lt;p&gt;في حاجات تانية كتير بيتكلم عنها زي Component Lifecycle وغيرها، الكتاب عبارة عن 21 شابتر كلهم عن الـ React وحجمه حوالي 250 صفحة.&lt;/p&gt;
</content></entry><entry><title>ملخص المحاضرة الأولى وأول شابتر من كورس وكتاب Mathematics for computer science</title><link href="https://mhmdsalah.vercel.app/posts/%D9%85%D9%84%D8%AE%D8%B5-%D8%A7%D9%84%D9%85%D8%AD%D8%A7%D8%B6%D8%B1%D8%A9-%D8%A7%D9%84%D8%A3%D9%88%D9%84%D9%8A-%D9%88%D8%A3%D9%88%D9%84-%D8%B4%D8%A7%D8%A8%D8%AA%D8%B1-%D9%85%D9%86-%D9%83%D9%88%D8%B1%D8%B3-%D9%88%D9%85%D9%83%D8%AA%D8%A7%D8%A8-mathematics-for-computer-science/"/><updated>2022-04-30T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D9%85%D9%84%D8%AE%D8%B5-%D8%A7%D9%84%D9%85%D8%AD%D8%A7%D8%B6%D8%B1%D8%A9-%D8%A7%D9%84%D8%A3%D9%88%D9%84%D9%8A-%D9%88%D8%A3%D9%88%D9%84-%D8%B4%D8%A7%D8%A8%D8%AA%D8%B1-%D9%85%D9%86-%D9%83%D9%88%D8%B1%D8%B3-%D9%88%D9%85%D9%83%D8%AA%D8%A7%D8%A8-mathematics-for-computer-science/</id><content type="html">&lt;p&gt;ملخص المحاضرة الأولي وأول شابتر من كورس وكتاب Mathematics for computer science لمعهد الـMIT بعنوان Introduction and Proofs.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/BvrJpkIe8H-400.avif 400w, https://mhmdsalah.vercel.app/optimized/BvrJpkIe8H-800.avif 800w, https://mhmdsalah.vercel.app/optimized/BvrJpkIe8H-1280.avif 1280w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/BvrJpkIe8H-400.webp 400w, https://mhmdsalah.vercel.app/optimized/BvrJpkIe8H-800.webp 800w, https://mhmdsalah.vercel.app/optimized/BvrJpkIe8H-1280.webp 1280w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/BvrJpkIe8H-400.gif 400w, https://mhmdsalah.vercel.app/optimized/BvrJpkIe8H-800.gif 800w, https://mhmdsalah.vercel.app/optimized/BvrJpkIe8H-1280.gif 1280w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;MIT Mathematics for computer science lecture 1&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/BvrJpkIe8H-400.jpeg&quot; width=&quot;1280&quot; height=&quot;720&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/BvrJpkIe8H-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/BvrJpkIe8H-800.jpeg 800w, https://mhmdsalah.vercel.app/optimized/BvrJpkIe8H-1280.jpeg 1280w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;في البداية أيه هو الـ Proof؟ الـProof او البرهان هو طريقة للتحقق من حقيقة شيء ما او إثبات حقيقة شيء ما. في المجتمع في طرق كتير للتحقق من حقيقة شيء ما زي مثلا الملاحظة والتجربة، القضاة، الدين، رئيسك في الشغل، في مجال التجارة مثلا في مثل بيقول الزبون دايما على حق.&lt;br /&gt;
طيب ايه هو ال mathematical proof؟&lt;br /&gt;
&lt;code&gt;a Mathematical proof is a verification of a proposition by a chain of logical deductions from a set of axioms.&lt;/code&gt;&lt;br /&gt;
خد بالك ان في التعريف ده في 3 حاجات مهمين جدا وهم اللي هتدور حواليهم المحاضرة دي وهم الـ proposition و logical deductions و axioms.&lt;/p&gt;
&lt;p&gt;تعالى نبدأ بأول جاجه يعني ايه proposition؟&lt;br /&gt;
الـ proposition هي جملة يا أما تكون &lt;code&gt;true&lt;/code&gt; او تكون &lt;code&gt;false&lt;/code&gt;، مثال على كده &lt;code&gt;2+3 = 5&lt;/code&gt;، دي statement اهي وقيمتها &lt;code&gt;true&lt;/code&gt;، طيب &lt;code&gt;1 + 1 = 7&lt;/code&gt; دي بردو statement ولكن &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;عندي حاجه تانية اسمها &lt;code&gt;Predicate&lt;/code&gt; ودي بتكون عبارة عن statement لكن فيها متغير والـ &lt;code&gt;truth value&lt;/code&gt; بتاعتها بتعتمد على المتغير ده معنى كده ان في طريقتين عشان احول الـ &lt;code&gt;predicate&lt;/code&gt; دي لـ &lt;code&gt;proposition&lt;/code&gt; يا أما اعوض عن المتغير بقيمة حقيقية، او حاجه تانية اسمها &lt;code&gt;quantification&lt;/code&gt; مثال على كده:&lt;br /&gt;
&lt;code&gt;∀ n ∈ N (n^2 + n + 41) is a prime number&lt;/code&gt;&lt;br /&gt;
حرف الـ &lt;code&gt;A&lt;/code&gt; المقلوب ده أسمه &lt;code&gt;universal quantifier&lt;/code&gt; وبيتنطق كده &lt;code&gt;for all&lt;/code&gt; يعني ترجمه الجملة اللي فوق دي: For every nonnegative integer, &lt;code&gt;n&lt;/code&gt;, the value of &lt;code&gt;n^2 + n + 41&lt;/code&gt; is prime. والـ &lt;code&gt;N&lt;/code&gt; هنا اسمها &lt;code&gt;universe of discourse&lt;/code&gt;.&lt;br /&gt;
معنى كده ان ال &lt;code&gt;statement&lt;/code&gt; دي ترو لكل الأعداد الغير السالبة، وبالتالي عشان نقدر نثبت الكلام ده محتاجين نجرب كل الأرقام الغير سالبة!&lt;br /&gt;
تعالى نجرب كده &lt;code&gt;0&lt;/code&gt; هيطلعلك &lt;code&gt;41&lt;/code&gt; وده فعلا عدد أولي، طب تعالى نجرب &lt;code&gt;1&lt;/code&gt; هيطلعلك &lt;code&gt;43&lt;/code&gt; وده بردو عدد أولي، افضل جرب كده لحد &lt;code&gt;39&lt;/code&gt; هتلاقي كل اللي هيطلعلك أعداد أولية، يعني شكل كده ال &lt;code&gt;statement&lt;/code&gt; ده هتطلع صح ولا ايه! طب تعالى نجرب &lt;code&gt;40&lt;/code&gt; كده، هيطلعلك &lt;code&gt;1681&lt;/code&gt; بس ده مش عدد أولي!&lt;br /&gt;
إذا بما ان ال &lt;code&gt;statement&lt;/code&gt; اللي فوق دي بتقول ان المعادلة دي &lt;code&gt;true&lt;/code&gt; لكل الأعداد الغير سالبة وانت لقيت عدد الـ &lt;code&gt;statement&lt;/code&gt; عنده بـ &lt;code&gt;false&lt;/code&gt; إذا الجملة دي غير صحيحة والرقم اللي انت لقيته اللي اسمه &lt;code&gt;40&lt;/code&gt; ده بيسموه &lt;code&gt;counter example&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;مثال آخر:&lt;br /&gt;
&lt;code&gt;a^4 + b^4 + c^4 = d^4&lt;/code&gt; has no solution when &lt;code&gt;a&lt;/code&gt;, &lt;code&gt;b&lt;/code&gt;, &lt;code&gt;c&lt;/code&gt;, &lt;code&gt;d&lt;/code&gt; are positive integers.&lt;br /&gt;
بيقولك من الأخر كده مستحيل تلاقي 4 ارقام غير سالبة تحقق العلاقة دي، وده كان &lt;code&gt;conjecture&lt;/code&gt; من Euler في سنة 1769، و&lt;code&gt;conjecture&lt;/code&gt; ده معناها انها statement لسا مقدرناش نعرف اذا كانت &lt;code&gt;true&lt;/code&gt; ولا &lt;code&gt;false&lt;/code&gt; يعني لا ترقي انها تكون theory لان منقدرش نجرب كل الأعداد الغير سالبة لان ملهاش نهاية وفي نفس الوقت لم نجد &lt;code&gt;counter example&lt;/code&gt; ليها عشان نثبت انها خطأ، الكلام ده فضل قرنين لحد ما أخيرا حد قدر يـ&lt;code&gt;disprove it&lt;/code&gt; ووجد فعلا &lt;code&gt;counter example&lt;/code&gt; ليها وكانت الأرقام كده:&lt;br /&gt;
&lt;code&gt;a = 95800&lt;/code&gt;, &lt;code&gt;b = 217519&lt;/code&gt;, &lt;code&gt;c = 414560&lt;/code&gt;, &lt;code&gt;d = 422481&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;مثال آخر:&lt;br /&gt;
&lt;code&gt;z^3 = 313(x^3 + y^3)&lt;/code&gt; has no solution when &lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt;, &lt;code&gt;z&lt;/code&gt; are positive integers.&lt;br /&gt;
مش عايز أفاجئك بس اول &lt;code&gt;counter example&lt;/code&gt; وجدوه كان رقم بيحتوي على اكتر من ألف digits!&lt;/p&gt;
&lt;p&gt;نيجي بقى للسؤال المهم، وأنا أيه اللي يخليني احاول الاقي حلول لحاجات زي دي؟ وليه في ناس ممكن تقضي وقت كبير جدا من حياتها في محاولة إيجاد حلول لحاجات زي دي؟&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;الموضوع ده مهم عشان ال &lt;code&gt;factoring&lt;/code&gt; اللي هو الطريق عشان تقدر تكسر &lt;code&gt;crypto systems&lt;/code&gt; زي &lt;code&gt;RSA&lt;/code&gt; واللي هو بيستخدم في كل حاجه بتقوم بيها إلكترونيا النهاردة من الشراء أون لاين والـ &lt;code&gt;SSL&lt;/code&gt; وده كله معتمد على الـ &lt;code&gt;Number theory&lt;/code&gt; وبالتحديد الـ &lt;code&gt;factoring&lt;/code&gt;. أنت لو تقدر تكسر الـ &lt;code&gt;Crypto Systems&lt;/code&gt; اه مش هتحكم العالم بس هتكون قريب من كده :)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;احنا شوفنا اكتر من مثال لحد دلوقتي وكل واحد فيهم له حل، لكن في حاجات حتى النهاردة ملهاش حل، مثلا &lt;code&gt;goldbach conjecture&lt;/code&gt;، بيقولك ان اي رقم موجب زوجي معادا الـ &lt;code&gt;2&lt;/code&gt; تقدر تمثله عن طريق جمع عددين أوليين الكلام ده من 1742 لحد النهاردة محدش قدر يعرف اذا كانت &lt;code&gt;true&lt;/code&gt; او &lt;code&gt;false&lt;/code&gt;! ودي مصنفة كواحدة من أعظم الألغاز الغير محلولة على الإطلاق.&lt;/p&gt;
&lt;p&gt;في نوع مهم جدا من الـ &lt;code&gt;statements&lt;/code&gt; وهيكون مبني عليها حاجات كتير بعد كده وهي الـ &lt;code&gt;conditional statement&lt;/code&gt; واللي هي على الشكل ده:&lt;br /&gt;
افترض ان عندك أتنين &lt;code&gt;propositions&lt;/code&gt; وليكن &lt;code&gt;p&lt;/code&gt;, &lt;code&gt;q&lt;/code&gt;، الـ &lt;code&gt;statement&lt;/code&gt; بتاعتك بتكون على الشكل ده &lt;code&gt;If p, then q&lt;/code&gt; وبالرموز هتكون كده &lt;code&gt;p → q&lt;/code&gt; والـ &lt;code&gt;statement&lt;/code&gt; دي بتكون &lt;code&gt;false&lt;/code&gt; في حالة واحدة فقط وهي لو الـ &lt;code&gt;p&lt;/code&gt; قيمتها &lt;code&gt;true&lt;/code&gt; والـ &lt;code&gt;q&lt;/code&gt; قيمتها &lt;code&gt;false&lt;/code&gt;. يعني لو عملت &lt;code&gt;truth table&lt;/code&gt; فدي الحالة الوحيدة بس اللي هيكون فيها &lt;code&gt;p → q&lt;/code&gt; بـ &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/Qd46Qva3PT-400.avif 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/Qd46Qva3PT-400.webp 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/Qd46Qva3PT-400.gif 400w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;Conditional Statment Truth Table&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/Qd46Qva3PT-400.jpeg&quot; width=&quot;400&quot; height=&quot;261&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;الحاجة التانية اللي كانت في اول تعريف اخدناه الخاص بالـ &lt;code&gt;mathematical proofs&lt;/code&gt; وهي الـ &lt;code&gt;Axioms&lt;/code&gt; ودي عبارة عن &lt;code&gt;propositions&lt;/code&gt; بردو لكن احنا بنفترض انها &lt;code&gt;true&lt;/code&gt; ملهاش إثبات يعني، حاجه انت شايفها منطقية جدا عشان تفترض انها &lt;code&gt;true&lt;/code&gt;، على سبيل المثال &lt;code&gt;a = b&lt;/code&gt;, &lt;code&gt;b = c&lt;/code&gt; إذا &lt;code&gt;a = c&lt;/code&gt;، وخد بالك ان في ناس بتقول ان في الرياضيات مينفعش تعمل إفتراضات وده كلام غلط طبعا لازم تبدأ بإفتراضات وإلا مش هتقدر توصل لحاجة أساسا. حاجه مهمة انك تحدد الـ &lt;code&gt;axioms&lt;/code&gt; بتاعتك عشان اي حد بيقرأ ال &lt;code&gt;proof&lt;/code&gt; بتاعك يشوفها وبالتالي لو هو متفق مع الـ &lt;code&gt;axioms&lt;/code&gt; دي فهيتفق مع الـ &lt;code&gt;conclusion&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;تالت حاجه والأخيرة في التعريف وهي الـ &lt;code&gt;Logical Deductions&lt;/code&gt; او الـ &lt;code&gt;Rules of inference&lt;/code&gt; ودي بستخدمتها عشان اثبت &lt;code&gt;propositions&lt;/code&gt; جديدة بإستخدام &lt;code&gt;proposition&lt;/code&gt; انا أثبتها قبل كده، يعني تعالى كده على سبيل المثال نمسك الـ &lt;code&gt;conditional statement&lt;/code&gt; اللي اتكلمنا عنها فوق:&lt;br /&gt;
لو قولتلك ان عندك &lt;code&gt;proposition&lt;/code&gt; اسمها &lt;code&gt;p&lt;/code&gt; وقيمتها &lt;code&gt;true&lt;/code&gt; وقولتلك ان عندك &lt;code&gt;p → q&lt;/code&gt; كمان &lt;code&gt;true&lt;/code&gt; تقدر تستنتج ايه من الكلام ده؟ الإستنتاج ان الـ &lt;code&gt;q&lt;/code&gt; كمان &lt;code&gt;true&lt;/code&gt;، طب ازاي؟ لان احنا قولنا فوق ان الحالة الوحيدة ان &lt;code&gt;p → q&lt;/code&gt; تكون بـ &lt;code&gt;false&lt;/code&gt; وهي لو الـ &lt;code&gt;p&lt;/code&gt; ترو والـ &lt;code&gt;q&lt;/code&gt; بـ &lt;code&gt;false&lt;/code&gt; بس هنا انا قولتلك ان &lt;code&gt;p → q&lt;/code&gt; بـ &lt;code&gt;true&lt;/code&gt; وبالتالي الـ &lt;code&gt;q&lt;/code&gt; مستحيل تكون &lt;code&gt;false&lt;/code&gt; فإذا لازم تكون &lt;code&gt;true&lt;/code&gt;.&lt;br /&gt;
مثال تاني لو قولتلك ان ال &lt;code&gt;proposition&lt;/code&gt; دي &lt;code&gt;p and q&lt;/code&gt; ترو، يبقى إذا تقدر تستنتج ان الـ &lt;code&gt;p&lt;/code&gt; بترو والـ &lt;code&gt;q&lt;/code&gt; كمان بترو.&lt;br /&gt;
تقدر تبحث عن باقي الـ &lt;code&gt;Rules of inference&lt;/code&gt; على جوجل.&lt;/p&gt;
&lt;p&gt;وبكده ده يكون ملخص المحاضرة الأولى والشابتر الأول في الكتاب الخاص بالـ MIT&lt;/p&gt;
</content></entry><entry><title>مراجعة كورس Discrete Mathematics لدكتور وليد يوسف</title><link href="https://mhmdsalah.vercel.app/posts/%D9%85%D8%B1%D8%A7%D8%AC%D8%B9%D8%A9-%D9%83%D9%88%D8%B1%D8%B3-discrete-mathematics-%D8%AF%D9%83%D8%AA%D9%88%D8%B1-%D9%88%D9%84%D9%8A%D8%AF-%D9%8A%D9%88%D8%B3%D9%81/"/><updated>2022-03-20T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D9%85%D8%B1%D8%A7%D8%AC%D8%B9%D8%A9-%D9%83%D9%88%D8%B1%D8%B3-discrete-mathematics-%D8%AF%D9%83%D8%AA%D9%88%D8%B1-%D9%88%D9%84%D9%8A%D8%AF-%D9%8A%D9%88%D8%B3%D9%81/</id><content type="html">&lt;p&gt;بفضل الله أنتهيت من كورس الـ Discrete Mathematics الخاص بدكتور وليد يوسف وما يعادله من قراءة شابترز وحل مسائل من كتاب &lt;em&gt;Discrete Mathematics and its Applications&lt;/em&gt; لـ Rosen. الكورس ده غير كتير من طريقة تفكيري وأخذ مني وقت كبير أكتر ما كنت متوقع.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/5kxOx6N2ud-400.avif 400w, https://mhmdsalah.vercel.app/optimized/5kxOx6N2ud-800.avif 800w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/5kxOx6N2ud-400.webp 400w, https://mhmdsalah.vercel.app/optimized/5kxOx6N2ud-800.webp 800w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/5kxOx6N2ud-400.gif 400w, https://mhmdsalah.vercel.app/optimized/5kxOx6N2ud-800.gif 800w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;DR Walid Yousseff Discrete Mathematics&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/5kxOx6N2ud-400.jpeg&quot; width=&quot;800&quot; height=&quot;403&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/5kxOx6N2ud-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/5kxOx6N2ud-800.jpeg 800w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;أولا كنت مقتنع أن الكتب فيها كل اللي أنا محتاجه وأن الفيديوهات مجرد تضييع وقت، يعني ليه أروح أشوف فيديو لحد بيشرح معلومات من كتاب لما ممكن أقرأ من الكتاب على طول؟ وبما أني كنت بقرأ الكتاب بالتوازي مع المحاضرات يعني أخلص الفيديو وبعدين أقرأ الجزء الخاص به من الكتاب (وأوقات عملت العكس)، اكتشفت أن المحاضر بيقول حاجات كتير جدا مش موجودة في الكتاب وبيركز على مفاهيم وحاجات كتير لو كنت قرأت الكتاب بس مكنتش هعرفها زي أنه طول الكورس بيأكد على أنك لازم تكون rigorous، مينفعش تأخذ حاجة كده زي ما هي وتقول إنها واضحة مش محتاجه إثبات! طالما واضحة وسهلة كده خلاص إثبتها!&lt;/p&gt;
&lt;p&gt;المحاضر خلال الكورس بيأكد على الـ Applications والـ Motivation، ودي حاجة ناقصة في طريقة التدريس اللي شفتها طول حياتي مع الرياضيات لأننا بندرسها بدون أدنى ربط بالتطبيقات والحياة العملية. لكن هنا الموضوع مختلف، حتى المحاضر مختار كتاب من اسمه تعرف إنه هيتكلم عن التطبيقات مش بيرمي لك رياضيات كده في وشك وخلاص.&lt;/p&gt;
&lt;p&gt;المحاضر بردو هينصحك تشوف أول محاضرة في كورس الـ Digital Design اللي هو عامله. في المحاضرة دي هيوريك العلوم مرتبطة ببعض إزاي، هيربطلك بين الرياضيات والـ Electronics والـ Logic Gates. حاجة فوق الخيال لما تشوف 3 أو 4 مواد وربطهم ببعض هتعرف قيمة كل حاجة بتدرسها. أتحداك لو الإبتسامة مترسمتش على وشك بعد المحاضرة دي، خصوصا لو كان عندك فكرة عن المواد دي بس كنت بتدرسها بطريقة عيانة.&lt;/p&gt;
&lt;p&gt;حاجة تانية مهمة بردو أن المحتوى ده نضيف جدا ودسم ومحترم. وللمقارنة، ممكن بعد ما تشوفه روح شوف أول محاضرتين من كورس MIT بتاع Mathematics for Computer Science وده مفروض محتوى عالمي، بس مشرحش الجزء الخاص بالـ Propositional Logic والـ Predicates and Quantifiers وحاجات في الـ Proofs وحاجات تانية كتير بنسبة 5% من اللي اتشرح في الكورس ده. والجميل أنه محتوى عربي لكن مستواه عالمي ويتفوق على العالمي كمان.&lt;/p&gt;
&lt;p&gt;العيب الوحيد للأسف أن كان مخطط يتشرح الكتاب تقريبا في 3 كورسات، متعملش منها غير واحد بس اللي هو ده، لإن دكتور وليد مسافر دلوقتي ومشغول بأمور تانية. ربنا يوفقه، يعني هتكمل لوحدك للأسف بدون المحتوى الجميل ده.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;أهم المواضيع اللي أتعلمتها من الكورس:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Propositional Logic&lt;/li&gt;
&lt;li&gt;Predicates and Quantifiers&lt;/li&gt;
&lt;li&gt;Rules of Inference&lt;/li&gt;
&lt;li&gt;Introduction to Proofs&lt;/li&gt;
&lt;li&gt;Proof Methods and Strategy&lt;/li&gt;
&lt;li&gt;Sets&lt;/li&gt;
&lt;li&gt;Functions&lt;/li&gt;
&lt;li&gt;Sequences and Summations&lt;/li&gt;
&lt;li&gt;Cardinality of Sets&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;لينك الكورس:&lt;/strong&gt; &lt;a href=&quot;https://www.youtube.com/playlist?list=PLoK2Lr1miEm_WKBBBHUQJRXaumduqkM4S&quot;&gt;كورس Discrete Mathematics&lt;/a&gt;&lt;/p&gt;
</content></entry><entry><title>مراجعة كتاب The Object Oriented Thought Process</title><link href="https://mhmdsalah.vercel.app/posts/%D9%85%D8%B1%D8%A7%D8%AC%D8%B9%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8-the-object-oriented-thought-process/"/><updated>2022-01-01T00:00:00Z</updated><id>https://mhmdsalah.vercel.app/posts/%D9%85%D8%B1%D8%A7%D8%AC%D8%B9%D8%A9-%D9%83%D8%AA%D8%A7%D8%A8-the-object-oriented-thought-process/</id><content type="html">&lt;p&gt;بفضل الله أنتهيت من كتاب &lt;em&gt;The Object Oriented Thought Process&lt;/em&gt; ودي مراجعة بسيطة هحاول أقنعك بيها ليه انت محتاج تقرأ الكتاب ده.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/cc2yIAko6c-400.avif 400w, https://mhmdsalah.vercel.app/optimized/cc2yIAko6c-526.avif 526w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/cc2yIAko6c-400.webp 400w, https://mhmdsalah.vercel.app/optimized/cc2yIAko6c-526.webp 526w&quot; sizes=&quot;auto&quot; /&gt;&lt;source type=&quot;image/gif&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/cc2yIAko6c-400.gif 400w, https://mhmdsalah.vercel.app/optimized/cc2yIAko6c-526.gif 526w&quot; sizes=&quot;auto&quot; /&gt;&lt;img alt=&quot;The Object Oriented Thought Process Book&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; src=&quot;https://mhmdsalah.vercel.app/optimized/cc2yIAko6c-400.jpeg&quot; width=&quot;526&quot; height=&quot;689&quot; srcset=&quot;https://mhmdsalah.vercel.app/optimized/cc2yIAko6c-400.jpeg 400w, https://mhmdsalah.vercel.app/optimized/cc2yIAko6c-526.jpeg 526w&quot; sizes=&quot;auto&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;الكتاب أولا حجمه صغير حوالي 180 صفحة (الإصدار الخامس)، هدفه إنه يخليك تفكر بطريقة Object Oriented. في بداية الكتاب المؤلف بيتكلم عن الخطأ اللي بيقع فيه معظم الناس (واللي أنا كنت واحد منهم) وهو أنك تبدأ تتعلم وتتعرض للغة برمجة OO قبل ما تفهم الObject Oriented Concepts أو تدخل في كتب الـ OO Analysis/Design/Programming قبل ما تبني Foundation قوي وتعرف ازاي تفكر بطريقة OO. وادى مثال عن انتقال كثير من مطورين الـC للغة الـC++ بدون فهم الOO Concepts ولا أتعلموا ازاي يفكروا بطريقة OO، وده اللي خلى ناس كتيرة منهم لما بتدعي إنهم C++ programmers في أي interview كان بيبان أنهم مجرد C programmers بيستخدموا C++ compilers!&lt;/p&gt;
&lt;p&gt;أول 9 شابترات بيتكلموا عن الـ Classical OO Concepts اللي هم: Encapsulation, Inheritance, Polymorphism, and Composition. هيتكلم عن Class Design Guidelines، وهيركز على ازاي تصمم OO System اللي هو عبارة عن مجموعة من الـ Classes بتـ Interact مع بعضها. كمان هيتكلم عن الـ Interface, Abstract Class والفرق الحقيقي ما بينهم وازاي الأتنين دول بيلعبوا دور كبير في تصميم الـ OO Systems.&lt;/p&gt;
&lt;p&gt;ومن المواضيع المهمة في الكتاب هو &amp;quot;How Inheritance Weakens Encapsulation؟&amp;quot; وإزاي أتنين من أساسيات الـ OO يكونوا incompatible مع بعض بحيث إن الـ Inheritance يكسر الـ Encapsulation!&lt;/p&gt;
&lt;p&gt;وهيتكلم عن مواضيع تانية زي Composition over Inheritance وغيرها.&lt;/p&gt;
&lt;p&gt;شابتر 10 هيتكلم عن الـ Design Patterns والشابتر ده ما هو إلا مقدمة بسيطة هيعرفك إن في حاجة اسمها Design Patterns ووضعها مع شرح بسيط لكام Pattern منهم.&lt;/p&gt;
&lt;p&gt;شابتر 11 تحت عنوان &amp;quot;Avoiding Dependencies and Highly Coupled Classes&amp;quot; هيحط الأساس اللي هيبني عليه بعد كده في الشابتر اللي بعده الخاص بالـ SOLID Principles.&lt;/p&gt;
&lt;p&gt;شابتر 12 والأخير هيتكلم عن الـ SOLID بشرح بسيط عن كل مبدأ ومثال مع ربطهم بالـ Classical OO Concepts اللي اتكلم عنهم طول الكتاب.&lt;/p&gt;
&lt;p&gt;من الحاجات الجميلة في الكتاب إنه بيقتبس كلام من كتب تانية مهمة وهو بيشرح وبيحطهم كمرجع في نهاية كل شابتر عشان لو عايز تتعمق أكتر في الموضوع، واخدت منه شوية أسماء كتب حلوين. الكتاب صغير وجميل وبيقدم حاجة مختلفة عن باقي الكتب والكورسات اللي على اليوتيوب. أنا رأيي المتواضع إن بداية تعلم الـ Object Oriented لازم تكون من هنا.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;خد بالك بردو من شوية حاجات لو أشتريت الكتاب وقررت تقرأه:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;الكتاب فيه أخطاء سواء في الأكواد ودي حاجة تافهة يعني أو في الكلام، يعني كان في جملة نفى فيها جزء وأثبت جزء تاني ولففني حوالين نفسي شوية، والعجيب إنه عمل خمس إصدارات ومصلحش الأخطاء دي.&lt;/li&gt;
&lt;li&gt;تأكد إنك هتقرأ النسخة الخامسة لأن هي اللي فيها الـ SOLID.&lt;/li&gt;
&lt;/ul&gt;
</content></entry></feed>