كمبرمج Back-end لازم تكون سمعت بمشكلة قواعد البيانات N+1 Query وخاصة لو عم تشتغل بإطار العمل Laravel (لا تخاف منشور مختلف عن المنشور يلي كل فترة بينتشر على Linkedin 🤣)
أول شي شو نتائج هل مشكلة 🤔؟
يعني لو واجهتني شو بتكلفني 🌚؟ إذا مفكر بس استجابة أبطء 🐢 فانت أصلاً ما بتعرف المشكلة الحقيقية 😅؛ فالتكلفة هي:
- إستعلامات كثيرة على نظام قواعد البيانات 🤯، اي شو يعني؟ عادي عندي 🙂 !
عادي على Local يا صديقي 😅 بس وقت تنشر مشروعك على بيئة production ممكن يتوقف موقعك بسببها ! في بعض الإستضافات تقدملك عدد محدود من الإستعلامات بالساعة (ممكن المشروع صغير وميزانيته قليلة، مشان ما تحل المشكلة ليش لتضيف تكلفة ترقية الإستضافة ! أو الانتقل لسيرفر وتصير الميزانية اكبر بكثير !) وبس تصل للحد الأقصى بالساعة بدك تنتظر حوالي الساعة ليشتغل الموقع 😐 إذا موقع فيه دفع الكتروني وعميل شافه توقف فجاءة لا تتوقع يفكر يشوف شوفي منتجات عندك 😶
- زيادة الحمل على سيرفر قواعد البيانات، استهلاك موارد على الفاضي 😶 وخاصة لل CPU و Storage Device
- مشكلة البطء أيضاً 😅 وإذا موقعك خلال ثانيتين ما كان معروض للعميل فلح يتحول من عميل محتمل لمجرد زائر لم يصل لهدفه - تخيل أن 38% من زبائن متاجر shopify تغادر الموقع في حال لم يعرض خلال 5 ثواني ! (https://www.shopify.com/blog/website-load-time-statistics) - ، وانت كمبرمج موجود لتحل مشكلة وحل المشكلة لازم تحاول بكل الامكانيات ان ما ترتكب مشكلة ثانية - بكل الامكانيات؟ اي نعم؛ ممكن أنت محدد ب memory معينة تضطر تعمل chunk للبيانات؛ وعدد الإستعلامات بدل N+1 يصير 1+N/200 مثلاً -
طب شو هي المشكلة بالضبط 😅؟
اولاً إذا ما بتعرف شو يعني N+1 أو O(n) فوضعك حرج 😅، بعالم الخوارزميات يلي لازم تكون متعلمه قبل ما تصير back-end 👨💻 بيتم قياس سرعة تنفيذ الخوارزمية من خلال ال Space وال Time بشيء اسمه Big O Notation، بحيث يكون معتمد عند الكل (أنك تقيس بالثانية شقد تستغرق الخوارزمية مثلاً بتكون عم تضيع وقتك 😅، لان الخوارزمية نفسها نفسها بيختلف زمن تنفيذها بحسب الهاردوير يلي شغالة عليه) ووحدات القياس هي: - من الأفضل -
O(1) - O(LogN) - O(N) - O(NLogN) - O(N^2) - O(2^N) - O(N!)
- أشهرهم، في غيرهم مثل جذر ال N - والمقصود ب N عدد التكرار الغير معروف (يعني ممكن يكون عندك حلقة تكرار لل 100 وممكن لل مليون 🫠)
أما المشكلة يلي هي N+1 فتعني استدعاء استعلام واحد يؤدي لجلب N استعلام بحسب العلاقات او الإستعلامات المرتبطة
تمام، ممكن مثال واضح للمشكلة؟ 🙂
اي لعيونك 😁 ومثالين كمان:
مثال 1: - مثال الشعب 😂 -
عنا جدول الكتب، وجدول التصنيفات والعلاقة بينهم One To One (كل قسم له كتاب وحيد) بدك تعرض هل كتب وبنفس الوقت تعرض تصنيف كل كتاب لح تجلبهم من خلال:
جلب كامل الكتب (1) -> لكل كتاب لح تجلب التصنيف الخاص به باستعلام منفصل (n)
لعرض 1000 كتاب، ستحتاج ل 1001 استعلام؛ الاستعلام يستغرق 0.1 ملي ثانية ستحتاج ل 0.1 ثانية لمعالجة جدول بسيط فقط ! (وقت قليل 🙂، مو مشكلة تابع معي المثال الثاني)
- المشكلة تواجهك بأي نوع من العلاقات ! ليست عبء على علاقة One To One -
مثال 2: - مثال حقيقي 😉 -
عنا جدول للمنتجات، جدول لمزودين المنتجات، جدول للأقسام، وجدول الاوردرات، جدول صلاحيات المستخدم ، وجدول إعدادات عامة أحد الحقول يحوي على مفتاح معين لسعر الصرف وقيمة السعر؛ تريد عرض اسم المنتج، كميته، مرات البيع، سعره الاساسي والسعر المحلي، الأقسام التابع لها؛ لح تجلبهم من خلال:
جلب المستخدم الحالي (1) + جلب كامل المنتجات (1) -> جلب المزودين (n) + جلب الأقسام (n) + جلب الكمية المباعة (n) + جلب قيمة سعر الصرف بكل مرة (n) + جلب صلاحية المستخدم الحالي (n)
لعرض 1000 منتج ستحتاج لـ (5002) الاستعلام يستغرق 0.1 ملي ثانية، ستحتاج 0.5 ثانية ! ونفرتض عم تستخدم برمجية بتاخد وقت بالمعالجة (كلوحة تحكم filamentphp التي تستغرق 0.2-0.4 ثانية للمعالجة) أنت هون لح تحتاج لقرابة الثانية فقط معالجة داخل السيرفر ! يعني لسا في زمن تحميل الصفحة بالمتصفح ومعالجتها 🫠
ملاحظة: الاستعلام يستغرق 0.1 ملي ثانية هو مجرد مثال
هذا كان الجزء الأول من المشكلة الشهيرة 😉 اسف كنت بدي ارسله كامل بس 4096 حرف مابكفو 🥲
أول شي شو نتائج هل مشكلة 🤔؟
يعني لو واجهتني شو بتكلفني 🌚؟ إذا مفكر بس استجابة أبطء 🐢 فانت أصلاً ما بتعرف المشكلة الحقيقية 😅؛ فالتكلفة هي:
- إستعلامات كثيرة على نظام قواعد البيانات 🤯، اي شو يعني؟ عادي عندي 🙂 !
عادي على Local يا صديقي 😅 بس وقت تنشر مشروعك على بيئة production ممكن يتوقف موقعك بسببها ! في بعض الإستضافات تقدملك عدد محدود من الإستعلامات بالساعة (ممكن المشروع صغير وميزانيته قليلة، مشان ما تحل المشكلة ليش لتضيف تكلفة ترقية الإستضافة ! أو الانتقل لسيرفر وتصير الميزانية اكبر بكثير !) وبس تصل للحد الأقصى بالساعة بدك تنتظر حوالي الساعة ليشتغل الموقع 😐 إذا موقع فيه دفع الكتروني وعميل شافه توقف فجاءة لا تتوقع يفكر يشوف شوفي منتجات عندك 😶
- زيادة الحمل على سيرفر قواعد البيانات، استهلاك موارد على الفاضي 😶 وخاصة لل CPU و Storage Device
- مشكلة البطء أيضاً 😅 وإذا موقعك خلال ثانيتين ما كان معروض للعميل فلح يتحول من عميل محتمل لمجرد زائر لم يصل لهدفه - تخيل أن 38% من زبائن متاجر shopify تغادر الموقع في حال لم يعرض خلال 5 ثواني ! (https://www.shopify.com/blog/website-load-time-statistics) - ، وانت كمبرمج موجود لتحل مشكلة وحل المشكلة لازم تحاول بكل الامكانيات ان ما ترتكب مشكلة ثانية - بكل الامكانيات؟ اي نعم؛ ممكن أنت محدد ب memory معينة تضطر تعمل chunk للبيانات؛ وعدد الإستعلامات بدل N+1 يصير 1+N/200 مثلاً -
طب شو هي المشكلة بالضبط 😅؟
اولاً إذا ما بتعرف شو يعني N+1 أو O(n) فوضعك حرج 😅، بعالم الخوارزميات يلي لازم تكون متعلمه قبل ما تصير back-end 👨💻 بيتم قياس سرعة تنفيذ الخوارزمية من خلال ال Space وال Time بشيء اسمه Big O Notation، بحيث يكون معتمد عند الكل (أنك تقيس بالثانية شقد تستغرق الخوارزمية مثلاً بتكون عم تضيع وقتك 😅، لان الخوارزمية نفسها نفسها بيختلف زمن تنفيذها بحسب الهاردوير يلي شغالة عليه) ووحدات القياس هي: - من الأفضل -
O(1) - O(LogN) - O(N) - O(NLogN) - O(N^2) - O(2^N) - O(N!)
- أشهرهم، في غيرهم مثل جذر ال N - والمقصود ب N عدد التكرار الغير معروف (يعني ممكن يكون عندك حلقة تكرار لل 100 وممكن لل مليون 🫠)
أما المشكلة يلي هي N+1 فتعني استدعاء استعلام واحد يؤدي لجلب N استعلام بحسب العلاقات او الإستعلامات المرتبطة
تمام، ممكن مثال واضح للمشكلة؟ 🙂
اي لعيونك 😁 ومثالين كمان:
مثال 1: - مثال الشعب 😂 -
عنا جدول الكتب، وجدول التصنيفات والعلاقة بينهم One To One (كل قسم له كتاب وحيد) بدك تعرض هل كتب وبنفس الوقت تعرض تصنيف كل كتاب لح تجلبهم من خلال:
جلب كامل الكتب (1) -> لكل كتاب لح تجلب التصنيف الخاص به باستعلام منفصل (n)
لعرض 1000 كتاب، ستحتاج ل 1001 استعلام؛ الاستعلام يستغرق 0.1 ملي ثانية ستحتاج ل 0.1 ثانية لمعالجة جدول بسيط فقط ! (وقت قليل 🙂، مو مشكلة تابع معي المثال الثاني)
- المشكلة تواجهك بأي نوع من العلاقات ! ليست عبء على علاقة One To One -
مثال 2: - مثال حقيقي 😉 -
عنا جدول للمنتجات، جدول لمزودين المنتجات، جدول للأقسام، وجدول الاوردرات، جدول صلاحيات المستخدم ، وجدول إعدادات عامة أحد الحقول يحوي على مفتاح معين لسعر الصرف وقيمة السعر؛ تريد عرض اسم المنتج، كميته، مرات البيع، سعره الاساسي والسعر المحلي، الأقسام التابع لها؛ لح تجلبهم من خلال:
جلب المستخدم الحالي (1) + جلب كامل المنتجات (1) -> جلب المزودين (n) + جلب الأقسام (n) + جلب الكمية المباعة (n) + جلب قيمة سعر الصرف بكل مرة (n) + جلب صلاحية المستخدم الحالي (n)
لعرض 1000 منتج ستحتاج لـ (5002) الاستعلام يستغرق 0.1 ملي ثانية، ستحتاج 0.5 ثانية ! ونفرتض عم تستخدم برمجية بتاخد وقت بالمعالجة (كلوحة تحكم filamentphp التي تستغرق 0.2-0.4 ثانية للمعالجة) أنت هون لح تحتاج لقرابة الثانية فقط معالجة داخل السيرفر ! يعني لسا في زمن تحميل الصفحة بالمتصفح ومعالجتها 🫠
ملاحظة: الاستعلام يستغرق 0.1 ملي ثانية هو مجرد مثال
هذا كان الجزء الأول من المشكلة الشهيرة 😉 اسف كنت بدي ارسله كامل بس 4096 حرف مابكفو 🥲
👍3❤1
مشكلة قواعد البيانات N+1 Query (جزء 2)
كيف يمكن حل هذه المشكلة 🤔؟
- بشكل أساسي ويمكن استخدامه بأي برمجية تدمج النتائج لتجلب باستعلام واحد من خلال: inner join وإخواته، union، وحتى من خلال الـ subqueries؛ طب صار عنا مشكلة ثانية كود الاستعلام (SQL) جداً كبير ! كل مرة بدي كرره واكتبه 🫠، صحيح بس ال view شو عم يعمل 😁 - بس ملاحظة زكاتك 😅 ما تقول أنا هيك قلتلك تروح تدحش مليون استدعاء باستدعاء واحد 😅، يعني عادي ولو كان في 10 استعلامات بشرط ال 10 منفصلين بشكل تام، وإذا كان في حد (limit) للعرض لو رفعته ما بيزداد الرقم؛ يعني عم تعرض 10 مستخدمين إذا سويتهم 50 مستخدم بضل عدد الاستعلامات 10 -
- من خلال Laravel فيك تستخدم توابع لهل مهمة مثل with (عملية "eager load" للإستعلام بتشتغل من خلال جلب العلاقة المرفقة باستعلام منفصل وبتخزنهم بالـ memory يعني بدل ما يكون عنا n+1 استعلام بيكون عنا 1+r؛ شو قصدك ب r؟ يعني عدد العلاقات وغالباً بتكون عم تستدعي علاقة لل 10 كحد أقصى، وفي طرق بشكل تلقائي يتعرف إذا في علاقات يحمل العلاقات ك "eager load" طلعت بإصدار 12.8 بس هذا ما يعني تكب المشكلة ! ممكن تشتغل على اصدار قبل 12.8 يلي دعمت هل فكرة)
- بالخوارزميات 🌚، ممكن يكون عندك علاقات هرمية تجلب كامل البيانات المشتركة وتظبطهم ب hash table خفيف نضيف لترجعهم كبنية هرمية، مثال:
لنفترض عنا جدول تصنيفات، في تصنيفات فرعية إلى مالا نهاية (في نهاية حسب ال data type 🙃) وافترض عندك هي التصنيفات: 10 رئيسي، 20 بقلبهم، 30 بقلبهم، 40 بقلبهم
بالطريقة التقليدية والسهلة حتكون كالتالي:
نجلب التصنيفات الرئيسي (1) -> يلي بقلبهم (10) -> يلي بقلبهم (20) -> يلي بقلبهم (30) -> يلي بقلبهم (خلصوا 😂، بس بالحقيقة بدك ترجع تتأكد ان مافي شي بقلبهم !، يعني 40)
في هل الحالة انت بحاجة 246 الف و 211 استعلام ! يعني إذا الاستعلام بياخذ 0.1 ملي ثانية بدنا 24 ثانية ننتظر بس تفتح القائمة العلوية يلي فيها هل قائمة 😐 ولسا ما عرضنا شي بالموقع 😅، بينما بالخوارزميات وقت لا يقاس ! (بشرط الخوارزمية المستخدمة فعالة)
كيف ممكن القط هل مشكلة 🤔؟
- من خلال تأخر الإستجابة بشكل كبير بس تبلش قاعدة البيانات تنملأ ببيانات بتنحط كأحد الاحتمالات المسببة للبطء
- أدوات ال debug مثل laravel-debugbar يلي بتظهرلك معلومات تفصيلية للاستجابة (عدد الاستعلامات - الاستعلامات يلي صارت - سرعة تنفيذ كل استعلام - الاستعلامات المكررة)
- عمل debug بشكل يدوي للكود
كيف يمكن حل هذه المشكلة 🤔؟
- بشكل أساسي ويمكن استخدامه بأي برمجية تدمج النتائج لتجلب باستعلام واحد من خلال: inner join وإخواته، union، وحتى من خلال الـ subqueries؛ طب صار عنا مشكلة ثانية كود الاستعلام (SQL) جداً كبير ! كل مرة بدي كرره واكتبه 🫠، صحيح بس ال view شو عم يعمل 😁 - بس ملاحظة زكاتك 😅 ما تقول أنا هيك قلتلك تروح تدحش مليون استدعاء باستدعاء واحد 😅، يعني عادي ولو كان في 10 استعلامات بشرط ال 10 منفصلين بشكل تام، وإذا كان في حد (limit) للعرض لو رفعته ما بيزداد الرقم؛ يعني عم تعرض 10 مستخدمين إذا سويتهم 50 مستخدم بضل عدد الاستعلامات 10 -
- من خلال Laravel فيك تستخدم توابع لهل مهمة مثل with (عملية "eager load" للإستعلام بتشتغل من خلال جلب العلاقة المرفقة باستعلام منفصل وبتخزنهم بالـ memory يعني بدل ما يكون عنا n+1 استعلام بيكون عنا 1+r؛ شو قصدك ب r؟ يعني عدد العلاقات وغالباً بتكون عم تستدعي علاقة لل 10 كحد أقصى، وفي طرق بشكل تلقائي يتعرف إذا في علاقات يحمل العلاقات ك "eager load" طلعت بإصدار 12.8 بس هذا ما يعني تكب المشكلة ! ممكن تشتغل على اصدار قبل 12.8 يلي دعمت هل فكرة)
- بالخوارزميات 🌚، ممكن يكون عندك علاقات هرمية تجلب كامل البيانات المشتركة وتظبطهم ب hash table خفيف نضيف لترجعهم كبنية هرمية، مثال:
لنفترض عنا جدول تصنيفات، في تصنيفات فرعية إلى مالا نهاية (في نهاية حسب ال data type 🙃) وافترض عندك هي التصنيفات: 10 رئيسي، 20 بقلبهم، 30 بقلبهم، 40 بقلبهم
بالطريقة التقليدية والسهلة حتكون كالتالي:
نجلب التصنيفات الرئيسي (1) -> يلي بقلبهم (10) -> يلي بقلبهم (20) -> يلي بقلبهم (30) -> يلي بقلبهم (خلصوا 😂، بس بالحقيقة بدك ترجع تتأكد ان مافي شي بقلبهم !، يعني 40)
في هل الحالة انت بحاجة 246 الف و 211 استعلام ! يعني إذا الاستعلام بياخذ 0.1 ملي ثانية بدنا 24 ثانية ننتظر بس تفتح القائمة العلوية يلي فيها هل قائمة 😐 ولسا ما عرضنا شي بالموقع 😅، بينما بالخوارزميات وقت لا يقاس ! (بشرط الخوارزمية المستخدمة فعالة)
كيف ممكن القط هل مشكلة 🤔؟
- من خلال تأخر الإستجابة بشكل كبير بس تبلش قاعدة البيانات تنملأ ببيانات بتنحط كأحد الاحتمالات المسببة للبطء
- أدوات ال debug مثل laravel-debugbar يلي بتظهرلك معلومات تفصيلية للاستجابة (عدد الاستعلامات - الاستعلامات يلي صارت - سرعة تنفيذ كل استعلام - الاستعلامات المكررة)
- عمل debug بشكل يدوي للكود
❤2
ب Laravel جلب قيمة واحدة من خلال تابع value أفضل من first لأسباب مهمة
طبعاً للوهلة الأولى لح تقول نفس الشي الاثنين بروجعو ايميل 🫠 ليش الفزلكة 😒
ببساطة:
بتابع first (مثل الصورة) عم تجلب كامل الصف، يعني لح تجلب أعمدة مانك بحاجتها 🌚 تؤدي لإستهلاك memory على الفاضي واستعلام أبطء
🙃 ممكن تحلها بأنك تضيف العامود المطلوب ك argument للتابع حتى يجلب العامود المطلوب فقط كبديل لتابع value لكن صار الكود أطول 😅؛ نتيجة SQL
ملاحظة: الفروقات مالح تحسها كبيرة إذا مافي استعلامات كثيرة 🫠
#laravel #php #sql
طبعاً للوهلة الأولى لح تقول نفس الشي الاثنين بروجعو ايميل 🫠 ليش الفزلكة 😒
ببساطة:
بتابع first (مثل الصورة) عم تجلب كامل الصف، يعني لح تجلب أعمدة مانك بحاجتها 🌚 تؤدي لإستهلاك memory على الفاضي واستعلام أبطء
select * from `users`
🙃 ممكن تحلها بأنك تضيف العامود المطلوب ك argument للتابع حتى يجلب العامود المطلوب فقط كبديل لتابع value لكن صار الكود أطول 😅؛ نتيجة SQL
select `email` from `users`
ملاحظة: الفروقات مالح تحسها كبيرة إذا مافي استعلامات كثيرة 🫠
#laravel #php #sql
❤3
قرار الغاء حظر خدمات Github عن الشعب السوري
قد يحتاج إلى اسابيع وقد يصل إلى أشهر 🥲 للإلغاء بشكل فعلي
يرجى التحلي بالصبر 🫠 وعدم محاولة تجاوز الحظر من خلال خدمات ال VPN
في النهاية كل الشكر والتقدير لكل المساهمين في تسريع عملية الغاء الحظر ❤️
قد يحتاج إلى اسابيع وقد يصل إلى أشهر 🥲 للإلغاء بشكل فعلي
يرجى التحلي بالصبر 🫠 وعدم محاولة تجاوز الحظر من خلال خدمات ال VPN
في النهاية كل الشكر والتقدير لكل المساهمين في تسريع عملية الغاء الحظر ❤️
❤1❤🔥1
Forwarded from Muhammad Alush
تم إطلاق أول SDK رسمي لـ MCP (بروتوكول الذكاء الاصطناعي) بدعم من Symfony وAnthropic!
https://github.com/modelcontextprotocol/php-sdk
فرصة ممتازة تتعلم وتدخل عالم AI من خلال PHP!
t.iss.one/MuhammadAlush0997
تابعني على :
Telegram | instagram | facebook | Twitter | YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Yhya Nesb
احصائية اللغات البرمجية المستخدمة في بناء مواقع الويب من جهة السيرفر back-end ➖➖➖➖➖ للمزيد من المنشورات ♻️ : تصفح قائمة المنشورات #back_end #php #python #asp_net #aspnet #dotnet #java #javascript
إحصائية تظهر اللغات البرمجية المستخدمة ك backend للمواقع
ملاحظة: هذا ليس مقياس ليدل على أن هذه اللغة هي الأفضل للويب فلكل منها نقاط قوى وضعف 🙂
ملاحظة: هذا ليس مقياس ليدل على أن هذه اللغة هي الأفضل للويب فلكل منها نقاط قوى وضعف 🙂
1❤4🤣2❤🔥1
Yhya Nesb
الشعب ناطر تنرفع بشكل فعلي من الشركات 🤣 وخاصة التقنية بعض المواقع يلي ناطرينها تفتح 🔥 ب IP سوري 🙂: https://www.paypal.com/us/home https://cloud.google.com/ https://hub.docker.com/ https://www.coursera.org/ https://chatgpt.com/ https://ipinfo.io/ https://c…
لم يتم التأكيد بشكل رسمي لكنDocker يعمل في سوريا الان ❤️🔥
الإقبال على مشاريع ال Open Source يزداد يوم بعد يوم 🔥
قبل يومين الكل سمع بالمشكلة يلي صارت ب AWS وتوقف خدمات كثيرة مثل postman 🫠
هي المشكلة خلت بعض المبرمجين 👨💻 يتوجهو لتطبيق yaak كبديل ل postman بشكل مؤقت
وبيومها دخل بقائمة الترند الخاصة ب github
لكن المفاجئة هي استمراره ليومين على التوالي 🤯 وبكل يوم ال stars عم تزيد أكثر على المستودع الخاص فيه 🏆 - دليل على نجاح المشروع -
والأن ما صار الوقت لتعطي مشاريع ال open source فرصة 😉
قبل يومين الكل سمع بالمشكلة يلي صارت ب AWS وتوقف خدمات كثيرة مثل postman 🫠
هي المشكلة خلت بعض المبرمجين 👨💻 يتوجهو لتطبيق yaak كبديل ل postman بشكل مؤقت
وبيومها دخل بقائمة الترند الخاصة ب github
لكن المفاجئة هي استمراره ليومين على التوالي 🤯 وبكل يوم ال stars عم تزيد أكثر على المستودع الخاص فيه 🏆 - دليل على نجاح المشروع -
والأن ما صار الوقت لتعطي مشاريع ال open source فرصة 😉
❤3
قربت 2025 تخلص، وبلشت تفكر شو بدك تعمل ب 2026 🤔
تجهز الكورسات يلي بدك تتابعها، والتقنيات يلي بدك تتعلمها
لكن هل فكرت تقوي حالك بشي أنت أساساً بتتعامل معه يومياً لكن انت مانك منتبهله 😶
مثل لو أنت BackEnd مستحيل ما يمرق يوم بدون ما تكتب استعلام SQL على الأقل 🙂 ولو بشكل غير مباشر ب ORM
أنا شخص أول ما اتعلمت قواعد البيانات بطريقة غير صحيحة كنت دائماً عاني من بطء بمشاريعي 😢 لحتى صادفت كورس SQL غيرلي نظرتي كاملة على قواعد البيانات بعدها بلشت قلب بهل كورسات 😅 ما صادفني مرجع منظم وبيحوي كل الأمور الأساسية مثل roadmap.sh
هل مرجع يلي بتشوفه بأغلب الصفحات يلي بنزلو محتوى تقني بشكل عام 🫠 وممكن نفسك بتعتبره مرجع؛ لكن هل جربت تتعلم منه؟ شو رأيك تضيفه بخطتك للسنة الجديدة 😉
ملاحظة:
تجهز الكورسات يلي بدك تتابعها، والتقنيات يلي بدك تتعلمها
لكن هل فكرت تقوي حالك بشي أنت أساساً بتتعامل معه يومياً لكن انت مانك منتبهله 😶
مثل لو أنت BackEnd مستحيل ما يمرق يوم بدون ما تكتب استعلام SQL على الأقل 🙂 ولو بشكل غير مباشر ب ORM
أنا شخص أول ما اتعلمت قواعد البيانات بطريقة غير صحيحة كنت دائماً عاني من بطء بمشاريعي 😢 لحتى صادفت كورس SQL غيرلي نظرتي كاملة على قواعد البيانات بعدها بلشت قلب بهل كورسات 😅 ما صادفني مرجع منظم وبيحوي كل الأمور الأساسية مثل roadmap.sh
هل مرجع يلي بتشوفه بأغلب الصفحات يلي بنزلو محتوى تقني بشكل عام 🫠 وممكن نفسك بتعتبره مرجع؛ لكن هل جربت تتعلم منه؟ شو رأيك تضيفه بخطتك للسنة الجديدة 😉
ملاحظة:
أفضل وقت تبلش فيه هو الأن 😁 لا تنتظر السنة الجديدة تبلش
❤🔥2
منشور سريع؛ بقلم بشري بعصر كتابات ال AI 😅
وقت يقرب ال Deadline لتسليم أي مشروع بتبلش العجلة بالتنفيذ 😥 وللأسف البعض بينسى أهم الأمور يلي لازم يعملها وقت رفع المشروع على ال production؛ وهي قائمة بأهم الأمور 😁:
- لا تنسى تفعل وضع ال production 🙂
- مشروع Laravel ال root web بكون مجلد public 📂
- عطل عرض الأخطاء 🛑
- مشروع wordpress ضروري ضروري تغير مسار الأدمن wp-admin
- مشروع Laravel وعم تشتغل على Livewire (ولو بشكل غير مباشرة 🙃 كاستخدام لوحة تحكم filamentphp) ضروري تنشر ال
assets + config:
وبعد ما نشرنا ملف ال config لل livewire لا تنسا تغير ال temporary_file_upload.disk إلى local وتضيف ال rule الافتراضية وتعدل على حجم الملفات يلي ممكن تنرفع 📤 (الافتراضي 12M)
- مشروع php لا تنسا تعدل ب php.ini قيم:
upload_max_filesize, post_max_size
- لا تنسا تعمل ratelimit لتسجيل الدخول 🙂؛ بالنسبة ل wordpress في plugins لهل شي 😉
- صفحات الأخطاء مهم يتم تصميمها، بتبين الاحترافية بالشغل 😎 بدل ما تظهر صفحة من Apache2 🙈
- المسارات الحساسة اعمل قيود عليها؛ عميلك ألماني احصر الدخول للوحة التحكم من المانيا فقط ‼️
- ضيف موقعك بشي خدمة uptime أو اعملك work flow ب n8n تخبرك وقت الموقع تصير فيه مشكلة ⚠️، اعرف المشكلة وحلها قبل ما الزوار يشكتو من تعطل الخدمة 😉
- مشروع Laravel لا تنسا امر storage:link 😁 حتى ما تطلعلك مشكلة بالملفات المرفوعة
- امنع اي اتصال بملفات تنفيذة بمسارات الرفع مثل
wp-content/uploads + storage/
- فعل cache للملفات ال statics؛ تزيد سرعة وتخفف ضغط على السيرفر 🔥
- امنع الوصول لأي ملفات حساسة مثل .env .htaccess .log 📁
ملاحظات بسيطة بس بتعمل فرق 😊
وقت يقرب ال Deadline لتسليم أي مشروع بتبلش العجلة بالتنفيذ 😥 وللأسف البعض بينسى أهم الأمور يلي لازم يعملها وقت رفع المشروع على ال production؛ وهي قائمة بأهم الأمور 😁:
- لا تنسى تفعل وضع ال production 🙂
- مشروع Laravel ال root web بكون مجلد public 📂
- عطل عرض الأخطاء 🛑
- مشروع wordpress ضروري ضروري تغير مسار الأدمن wp-admin
- مشروع Laravel وعم تشتغل على Livewire (ولو بشكل غير مباشرة 🙃 كاستخدام لوحة تحكم filamentphp) ضروري تنشر ال
assets + config:
php artisan livewire:publish --assets
php artisan vendor:publish --tag=livewire:config --ansi --force
وبعد ما نشرنا ملف ال config لل livewire لا تنسا تغير ال temporary_file_upload.disk إلى local وتضيف ال rule الافتراضية وتعدل على حجم الملفات يلي ممكن تنرفع 📤 (الافتراضي 12M)
- مشروع php لا تنسا تعدل ب php.ini قيم:
upload_max_filesize, post_max_size
- لا تنسا تعمل ratelimit لتسجيل الدخول 🙂؛ بالنسبة ل wordpress في plugins لهل شي 😉
- صفحات الأخطاء مهم يتم تصميمها، بتبين الاحترافية بالشغل 😎 بدل ما تظهر صفحة من Apache2 🙈
- المسارات الحساسة اعمل قيود عليها؛ عميلك ألماني احصر الدخول للوحة التحكم من المانيا فقط ‼️
- ضيف موقعك بشي خدمة uptime أو اعملك work flow ب n8n تخبرك وقت الموقع تصير فيه مشكلة ⚠️، اعرف المشكلة وحلها قبل ما الزوار يشكتو من تعطل الخدمة 😉
- مشروع Laravel لا تنسا امر storage:link 😁 حتى ما تطلعلك مشكلة بالملفات المرفوعة
- امنع اي اتصال بملفات تنفيذة بمسارات الرفع مثل
wp-content/uploads + storage/
- فعل cache للملفات ال statics؛ تزيد سرعة وتخفف ضغط على السيرفر 🔥
- امنع الوصول لأي ملفات حساسة مثل .env .htaccess .log 📁
ملاحظات بسيطة بس بتعمل فرق 😊
❤4
منشور عادي 🙂 مدير تنفيذي بشركة عم يأكد خلال 6-12 شهر حيتم استبدال مهندسي البرمجيات ب AI 🙂
نظرة سريعة لبيانات الشركة: عندها 130-150 مهندس برمجيات 🫣 وبموقع التوظيف الخاص فيهم عندهم 100 فرصة عمل لمهندس برمجيات 🙂 يعني زيادة 75% بالعدد الموجود
هيك شركات بتاخد فترة وسطية 6 شهور لتوظيف موظف واحد
اي عند انتهاء عملية التوظيف سيتم استبدال كاملة مهندسي البرمجيات ب AI 😄 طبعا الكلام لو صحيح ليش ليدخلو بمرحلة توظيف لح تكلفهم كثير 🙂
فنصيحة مني عزيزي المبرمج كفي تعليمك ولا تقول ال AI اخد شغلي 😁
المصدر:
mmeshref Linkedin
نظرة سريعة لبيانات الشركة: عندها 130-150 مهندس برمجيات 🫣 وبموقع التوظيف الخاص فيهم عندهم 100 فرصة عمل لمهندس برمجيات 🙂 يعني زيادة 75% بالعدد الموجود
هيك شركات بتاخد فترة وسطية 6 شهور لتوظيف موظف واحد
اي عند انتهاء عملية التوظيف سيتم استبدال كاملة مهندسي البرمجيات ب AI 😄 طبعا الكلام لو صحيح ليش ليدخلو بمرحلة توظيف لح تكلفهم كثير 🙂
فنصيحة مني عزيزي المبرمج كفي تعليمك ولا تقول ال AI اخد شغلي 😁
المصدر:
mmeshref Linkedin
رمضان مبارك 🌙✨
كل عام وإنتم بألف خير
تقبّل الله منكم الصيام والقيام وصالح الأعمال،
وجعله شهر خير وبركة عليكم وعلى أحبابكم 🤍
لا تنسو أخوتنا في غزة من صالح دعائكم ❤️
كل عام وإنتم بألف خير
تقبّل الله منكم الصيام والقيام وصالح الأعمال،
وجعله شهر خير وبركة عليكم وعلى أحبابكم 🤍
لا تنسو أخوتنا في غزة من صالح دعائكم ❤️
❤5
Forwarded from Yhya Nesb (ᯓ ˹𝚈𝙷𝚈𝙰 𝚂𝚈𝚁𝙸𝙰𝙽˼ ༆)
منشور من سلسة #CleanCode لمعرفة التفاصيل انقر هنا 🔗
الجزء التاسع في هذه القناة9️⃣
تجنب التحقق من الأنواع الجزء الأول:
بمعنى أصح لماذا تريد التحقق من الأنواع type بنفسك في حال كانت php تدعم هذا الخيار😁 ، الفرق هنا بأن وضع النوع المحدد في المعامل (Parameter) سيفيد المطور أكثر بحيث لن يجبر لقراءة الكود البرمجي أو حتى إجراء عملية تجربة للتحقق من النوع بأنه مقبول 😊
الاستخدام السيء:
الاستخدام الجيد:
تجنب التحقق من الأنواع الجزء الثاني:
في حال كنت تستخدم أنواع البيانات الأساسية مثل int - string فقم بإضافتها للمعامل (Parameter) فهي تفيد أيضاً لعملية الإختبار الأولية أيضاً🧑💻
الاستخدام السيء:
الاستخدام الجيد:
احذف الكود البرمجي القديم:
حذف الكود البرمجي القديم والغير مستخدم ضروري🙂 للأسف قابلت البعض ممن يظنون أن وضع التعليقات هي الطريقة السليمة لهذا 🤦♂️ لكن العكس فأنت بكل يوم تتعلم شيء جديد وكتابتك للكود ستختلف حتماً من يوم لأخر فعند إعادة كتابتك لكود جديد فسيكون مختلف وأفضل من القديم 🔥
بالإضافة لماذا تريد أن نضيع بأسماء هذه البرمجيات 🙂 v1 و v2 و new و old🤦♂️ كلما كانت برمجياتك نظيفة كلما زاد تقديرك لمن طور بعدك 🫡
الاستخدام السيء:
الاستخدام الجيد:
هذا كل شيء لليوم 😁 في حال أعجبك هكذا نوع من المنشورات لا تنسا مشاركته مع أصدقائك☺️
للمزيد من هذه الشروحات يمكنك متابعتي⬅️ @YhyaNesb 🔥
#php
الجزء التاسع في هذه القناة
تجنب التحقق من الأنواع الجزء الأول:
بمعنى أصح لماذا تريد التحقق من الأنواع type بنفسك في حال كانت php تدعم هذا الخيار
الاستخدام السيء:
function travelToTexas($vehicle): void
{
if ($vehicle instanceof Bicycle) {
$vehicle->pedalTo(new Location('texas'));
} elseif ($vehicle instanceof Car) {
$vehicle->driveTo(new Location('texas'));
} else {
throw new Exception("Error Type");
}
}
الاستخدام الجيد:
function travelToTexas(Vehicle $vehicle): void
{
$vehicle->travelTo(new Location('texas'));
}
تجنب التحقق من الأنواع الجزء الثاني:
في حال كنت تستخدم أنواع البيانات الأساسية مثل int - string فقم بإضافتها للمعامل (Parameter) فهي تفيد أيضاً لعملية الإختبار الأولية أيضاً
الاستخدام السيء:
function combine($val1, $val2): int
{
if (! is_numeric($val1) || ! is_numeric($val2)) {
throw new Exception('Must be of type Number');
}
return $val1 + $val2;
}
الاستخدام الجيد:
function combine(int $val1, int $val2): int
{
return $val1 + $val2;
}
احذف الكود البرمجي القديم:
حذف الكود البرمجي القديم والغير مستخدم ضروري
بالإضافة لماذا تريد أن نضيع بأسماء هذه البرمجيات 🙂 v1 و v2 و new و old
الاستخدام السيء:
function oldRequestModule(string $url): void
{
// ...
}
function newRequestModule(string $url): void
{
// ...
}
$request = newRequestModule($requestUrl);
inventoryTracker('apples', $request, 'www.inventory-awesome.io');
الاستخدام الجيد:
function requestModule(string $url): void
{
// ...
}
$request = requestModule($requestUrl);
inventoryTracker('apples', $request, 'www.inventory-awesome.io');
هذا كل شيء لليوم 😁 في حال أعجبك هكذا نوع من المنشورات لا تنسا مشاركته مع أصدقائك
للمزيد من هذه الشروحات يمكنك متابعتي
#php
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
https://youtu.be/5fFuMEELRnc
ليش ضروري تحذف منشوراتك غير المهمة او تعليقاتك بالسوشيل ميديا ؟ 🤔
ببساطة كله محفوظ ومخزن ونسبة منيحة من هل محتوى هو عام معروض للعامة 🙂
طب انا مثلا حسابي ال Facebook مسكر عامله خاص 😏، تمام 😅 انت خفيت منشوراتك بس تعليقاتك؟ المنشورات المشاركة مع الأصدقاء🤔
طب شو بتفيد هي المعلومات؟ معرفة اكبر قدر ممكن من المعلومات عنك 🙂 ليتم ابتزازك او القيام بهندسة عكسية الك او لشخص بيعرفك 😶
ليش ضروري تحذف منشوراتك غير المهمة او تعليقاتك بالسوشيل ميديا ؟ 🤔
ببساطة كله محفوظ ومخزن ونسبة منيحة من هل محتوى هو عام معروض للعامة 🙂
طب انا مثلا حسابي ال Facebook مسكر عامله خاص 😏، تمام 😅 انت خفيت منشوراتك بس تعليقاتك؟ المنشورات المشاركة مع الأصدقاء🤔
طب شو بتفيد هي المعلومات؟ معرفة اكبر قدر ممكن من المعلومات عنك 🙂 ليتم ابتزازك او القيام بهندسة عكسية الك او لشخص بيعرفك 😶
❤2