عالم برمجةوتقنية الحاسوب C. P. W
766 subscribers
493 photos
53 videos
260 files
476 links
عالم الحاسوب برمجه وتقنيه وتطوير شرح كل ما يتطلب في مجال علوم الحاسوب والبرمجة
https://t.me/programming_C_w
قنات الجرافيكس @l_d_gh
#Digitalmarketing
#programming
#AI #CPA
#learn
التواصل معي @Eng_sharaf1
Download Telegram
اظهار البروفيلات المخفيه
/tool user-man profile profile-limitation print
حذف البروفايل المكرر
/tool user-man profile profile-limitation remove numbers=اكتب اسم البروفايل
1
طريقة مبسطه لكيفية حفظ نسخة إحتياطية للمايكروتيك

1- الطريقة الأولى: الذهاب الى الوينبوكس وفتح Files ثم الضغط على Backup واضافه اسم للنسخه ثم الضغط على موافق
هذه الطريقه لحفظ إعدادات المايكروتيك بشكل عام ويشمل الفايروول ومستخدمي الهوت سبوت وكل شي برمجته عن طريق الوين بوكس
سيتم حفظ النسخه في الفايل Files بالاسم الذي وضعته مسبقا.. ولاستعاده هذه النسخه فقط حدد الملف ثم اضغط على RESTORE ثم موافق
_____
2- الطريقة الثانية: عن طريق New Terminal وتكتب الكود التالي
export file=fullbackup
ثم الضغط على انتر ENTER
سيتم حفظ نسخه في قائمه الفايل Files باسم fullbackup
ويمكن فتحه عبر برنامج المفكره في الابتوب ومميزه هذه الطريقه نسخ كل شي برمجته عن طريق الوينبوكس على شكل سكربتات منفصله
__
الط
ريقه الثالثه: نقل بيانات وإعدادات ومستخدمي اليوزر منجر وبكامل البيانات حتى الوقت المتبقي لكل مستخدم:

تفتح New Terminal وتكتب الكود التالي

tool user-manager database save name=fullusermanager
ثم اضغط انتر
افتح Files ستجد ملف جديد بإسم fullusermanager.umb

ولاستعاده هذا الملف كل ماعليك عمله هو فتح New Terminal وأكتب
tool user-manager database load name=fullusermanager.umb
ثم اضغط حرف y
__سكربتات اخرى__

ل
معرفة البروفايلات المخفية والمتكررة

/tool user-man profile profile-limitation print

---------------------
لحذف البروفايلات المخفية والمتكررة

/tool user-man profile profile-limitation remove numbers=
ثم اكتب رقم البروفايل المخفي

------------------------
لحذف تسجيلات النظام

:foreach i in=[/tool user-manager log find ] do={
:local ahmedalimi [/tool user-manager log remove $i];
}

---------------------
لعمل اعادة بناء من الونبوكس
rebuild

/tool user-manager database rebuild
2
تنويه
*كهرباء الشبكه*

العامل الرئيسي لتحسين خدمة الانترنت لديك عند
المستخدمين

بضعف الكهرباء الأجهزه البث تفقد جزء كبير من أدائها لذالك يجب الحذر من هاذي النقطه
عند البعض الانترنت
في
* اول الخط الانترنت قوي

* وسط الخط الانترنت مقبوب

* نهاية الخط الانترنت معدوم

السبب والعامل الرئيسي هي الكهرباء

لذالك يجب على كل فني صيانه شبكات اخذ جهاز الأفوميتر وفحص الخط من المنتصف و نهاية الخط يشوف القيم *الفولت* المعطاه له

* 220 ممتاز
* 180 جيد
* 177 مقبول
* 156 مرفوض
2
الهجمات التي تستهدف أجهزة
Routers و Switches
حيث تتنوع وتعتمد على مجموعة من الأساليب والتقنيات.

هجمات القوة الغاشمة
(Brute Force Attacks)....
تُستخدم لتخمين كلمات المرور الخاصة بإدارة الأجهزة حيث يقوم المهاجم
بتجربة مجموعة من كلمات المرور حتى يتمكن من الوصول إلى الجهاز.

الهجمات عبر بروتوكول
SNMP (Simple Network Management Protocol)...
يتم استغلال الثغرات في بروتوكول SNMP للوصول إلى معلومات الشبكة الحساسة أو التلاعب في إعدادات الجهاز.

التلاعب بجدول التوجيه
(Routing Table Manipulation).....
يمكن للمهاجم إرسال معلومات خاطئة إلى الراوتر تؤدي إلى تغييرات في جدول التوجيه، مما يوجه حركة المرور إلى مسارات غير صحيحة.

الهجمات باستخدام DHCP Spoofing....
يقوم المهاجم بإنشاء خادم DHCP زائف، مما يجعله يتحكم في إعدادات الشبكة ويستطيع توجيه حركة المرور.

هجمات ARP Spoofing....
يستغل المهاجم بروتوكول ARP لتغيير عنوان MAC المرتبط بعنوان IP معين، مما يسمح له بالتقاط البيانات المتدفقة بين الأجهزة.

هجمات DoS و DDoS....
تستهدف إيقاف تشغيل جهاز Routers و Switches كن خلال طريق إغراقه بطلبات زائدة، مما يؤدي إلى تعطيل الخدمة.

تحديث البرامج الضارة (Malware)....
يمكن للمهاجمين تثبيت برامج ضارة على الأجهزة عن طريق استغلال نقاط ضعف في البرمجيات، مما يعرض الشبكة للخطر.

الهجمات عبر شبكات Wi-Fi غير المأمونة....
تستهدف أجهزة الراوتر التي تعمل على شبكات Wi-Fi غير المؤمنة من خلال تقنيات مثل Evil Twin حيث يقوم المهاجم بإنشاء نقطة وصول مزيفة.

التلاعب بالإعدادات
(Configuration Manipulation)....
يمكن للمهاجم الوصول إلى واجهة الإدارة وتغيير الإعدادات، مثل تغيير كلمات المرور أو تعطيل ميزات الأمان.

استغلال الثغرات في البرمجيات....
تستهدف الثغرات المعروفة في أنظمة التشغيل أو البرمجيات المستخدمة في الراوترات والمفاتيح.

تتطلب حماية أجهزة Routers و Switches اتخاذ تدابير أمان قوية تشمل تحديث البرمجيات بانتظام، استخدام كلمات مرور قوية، وتفعيل ميزات الأمان مثل SNMPv3 و802.1X..
2
إذا قام أحدهم بتهديدك بصور أو مقاطع فيديو خاصة… لا تخف، فالحل موجود وآمن!

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

اسم الموقع هو: StopNCII.org
وهو مبادرة عالمية تعمل بالتعاون مع منصات كبرى مثل "فيسبوك" و"إنستغرام"، وتستخدم تقنيات الذكاء الاصطناعي لحماية خصوصيتك ومنع نشر أي صور أو مقاطع حساسة.

كيف يعمل؟

لا يتم رفع أي صور أو مقاطع فيديو إلى الإنترنت.

بدلاً من ذلك، يقوم الموقع بتحويل المحتوى إلى "بصمة رقمية" خاصة وفريدة من نوعها (تشبه رقمًا تسلسليًا).

يتم إرسال هذه البصمة فقط إلى المنصات المختلفة لتعقب المحتوى ومنع نشره إن وُجد.

يواصل الموقع مراقبة المنصات لمنع أي محاولة لإعادة نشر نفس المحتوى مستقبلاً.

الخدمة مجانية، وآمنة تمامًا، ولا تُعرض ملفاتك للخطر.

إذا كنت تعرف شخصاً تعرض للابتزاز الرقمي، شارك معه هذا الرابط فوراً:
https://stopncii.org

ربما تكون سبباً في إنقاذ شخص من محنة كبيرة.
#حماية_الخصوصية #StopNCII #لا_للابتزاز #ذكاء_اصطناعي
3
🖥️ تختبر مايكروسوفت قائمة ابدأ جديدة بملء الشاشة في نظام التشغيل Windows 11!

لا مزيد من الملفات الموصى بها - فقط جميع التطبيقات ولوحة التحكم بالهاتف الذكي في المقدمة والوسط.

📅 موعد الإصدار؟ لا يزال مجهولاً.

للاشارة فاني من مستخدمي ويندوز 11 واسوء مشكله تواجه معظم مستخدمي هذا النظام في العالم باسره وهي مشكله انقطاع الاتصال بالانترنت يعني ان النظام يقوم بقطع الاتصال بالانترنت فورا قيامك بعمليه رفع ملفات بسرعه او بطريقه غير عاديه وكانه يشتبه في ان هناك رفع لملفات بطريقه سريه فيقوم على الفور بقطع الانترنت وهذه المشكله لا حل لها بالرغم من جميع الفيديوهات المنتشرة على الانترنت.
👍2
✍️ 7 تطبيقات لتعلم اللغة الإنجليزية بالذكاء الاصطناعي :

1ـ ELSA Speak

تحسين النطق

2ـ HelloTalk

محادثة مع مستخدمين

3ـ Busuu

تعليم لغات تفاعلي

4ـ Speaky

محادثة مع متحدثين أصليين

5ـ italki

مدرسين أو ممارسين

6ـ Fluentland

منتديات لغوية

7ـ Interview Practice

تدريب على المقابلات

اذا كنت مهمًا لتعلم البرمجة انضم للقناة 👇👇

@programming_C_w
👍3
من يحتاج مشاريع يكلمني. @Eng_sharaf1
# تحويل التاريخ من ميلادي إلى هجري (مثال بسيط)
import hijri_converter
print(hijri_converter.Hijri.today())

تثبيت المكتبة:
pip install hijri-converter
🚀 **Welcome to Galaxy of Devs!**  

🌌 Your cosmic hub for: 
Ready-to-use **code snippets** 
Quick **dev tips** that save hours 
**Tech news** in bite-sized posts 

💡 **Try this Python one-liner today:** 

```python
# Generate QR code in one line!
import pyqrcode; pyqrcode.create("Hello Galaxy!").png("qr.png", scale=8)`


Install:
pip install pyqrcode
🚀 كود سحري بسيط سيذهلك!

import this

💡 جرب هذا الكود الآن في بايثون وشاهد المفاجأة!
OOP ( Object-Oriented Programming ):
أحد أهم المفاهيم التي يجب على المبرمجين فهمها وتطبيقها بشكل جيد.
يتميز بتنظيم البرامج والربط بين الأشياء الحقيقية أو الكائنات الافتراضية (objects).

بالنسبة للغة الجافا، فإن OOP يعتمد على ثلاثة مبادئ أساسية وهي:

1. التوريث (Inheritance): يسمح لنا بإنشاء كائن جديد يستند إلى كائن موجود من مجموعة أو نوع معين. بمعنى آخر، يمكنك تعريف كائن جديد يحصل على كل الميزات والخواص من الكائن الأصلي.

2. التجريد (Abstraction): هذا المفهوم يهدف إلى إخفاء الجزئيات المعقدة المرتبطة بالكائن عن المستخدم النهائي، بحيث يمكن استخدام الكائن بسهولة دون الحاجة لفهم كل التفاصيل الدقيقة.

3. التعددية (Polymorphism): هو المفهوم الذي يسمح للمستخدم باستخدام كائن واحد في عدة سياقات، أو باستخدام مجموعة من الكائنات بنفس الوقت، وكل كائن يقوم بعملية مختلفة نوعًا ما حسب السياق الذي يتم استخدامه.

باستخدام هذه المفاهيم وغيرها من المفاهيم المرتبطة بال OOP، نستطيع القيام بعملية برمجة مرنة وفعالة للغاية والتي تساعد على تسريع وتسهيل عملية كتابة البرامج في الجافا.
يتحرك المغضوب عليهم مؤخرًا باتجاه جديد ملحوظ: زيادة الارتباط بأباطرة المال والتكنولوجيا حول العالم - وأبرزهم الشركات التقنية - كنوعٍ من زيادة المدد وتعزيز قوتهم وثقلهم، والاستفادة من أموال الضرائب والإيداعات والاستثمارات التي تأتيهم.

هذا جلي بعد أن اشترت جوجل شركة Wiz الصهيونية مقابل 32 مليار دولار رغم أن جميع المحللين متفقون على أنها لا تساوي نصف هذه القيمة. منها نحو 4 مليارات دولار ستذهب للمغضوب عليهم كضرائب، كما أنهم يأملون أن تحرّك هذه الأموال قطاع العقارات عندهم لأن المستثمرين في تلك الشركة وأصحابها مهتمون بذلك القطاع:

https://www.calcalistech.com/ctechnews/article/h1d7iir2kl

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

https://x.com/paulbiggar/status/1902329587050148068

وهو جليّ بعد أن ترى كيف أن شركة نيفيديا تزيد من استثمارها في إسرائيل وتطوّر عدة تقنيات منبعها هناك هي الأخرى:

https://www.calcalistech.com/ctechnews/article/q6xp0usy6

وهو جليّ عندما تعلم أن شركة Comcast وهي من أكبر شركات الاتصال في أمريكا ستتعاقد مع شركة إسرائيلية لتقديم خدمات شبكية لها وبنية تحتية، مما يمكنها من الوصول إلى بيانات جميع الأمريكيين الذين يستعملونها:

https://www.calcalistech.com/ctechnews/article/bkg5g0rnje

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

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

وتستحق هذه الأخبار والمواضيع أهم تغطية إخبارية يمكن أن تعملها المواقع التقنية العربية، وليس أخبار الجالكسي وإشاعات الآيفون وأخبار أسهم آبل كما يفعل أغلبهم للأسف.

يجب على المحللين والمهتمين بالشأن العام العربي والإسلامي أن يصلتوا الضوء على هذه التحرّكات، وأن يحاول الناشطون عرقلتها بحملات المقاطعة والمقالات الصحفية، لا أن يمر الموضوع مرور الكرام.

اللهم هل بلغت؟ اللهم فاشهد.
السلام عليكم ورحمة الله وبركاته

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

معمارية البرمجيات ، هي قرارات التصميم المتعلقة بهيكل النظام .

ماذا يعني ذلك ، كل مافي الامر ان معمارية البرمجيات تشير الى كيفية تنظيم الأشياء اثنا بناء النظام . وهي مجرد قرارات لكنها حاسمة لانتاج المشروع .
عندما تحدد كيف سيتم تنظيم ملفات الفئات class في مشروعك فانت تحدد الان نوع من انواع معمارية البرمجيات واهم الاشياء التي نحدد معماريتها هي :
- تفاصيل التنفيذ : اي الملفات البرمجية كما ذكرنا الفئات مثلاً وتنظيم الصور والخطوط وغيرها .
- قرارات تصميم التنفيذ : في هذا الجزء نحدد هل سنجعل النظام يعمل في جانب العميل ام في جانب الخادم ، ونعني بالعميل اي هل سيكون النظام على جهاز المستخدم مثل برنامج Word او على الخادم ونوصل اليه عبر الانترنت مثل Wikipedia . وهناك نوع افضل وهو نوع (الخادم و العميل) تكون فيه نسخة الواجهة في جهاز المستخدم و المنطق في الخادم مثل Telegram .
ايضاً نحدد ما نوع قاعدة البيانات التي سنستعملها هل علائقية ام غير علائقية .
- التقنيات المختارة : نحدد ما اللغة او اطار العمل الذي سنستعمله ، ما نوع قاعدة البيانات Mysql ام Oracle .
- قرارات تصميم النظام : هنا نحدد كيف سنبني النظام هل سنبنيه مرة واحدة ككتله واحدة monolith ام سنقسمه الى خدمات اصغر microservices ونبني كل جزء بشكل منفصل .
قرارات البنية التحتية : هنا نحدد اين سيعمل النظام ، او اين سيتم استضافته هل محلياً ام في خدمة سحابية .

الكثير والكثير من الاهمية لمعمارية البرمجيات ، وهي امر حاسم ويجب دراسة وفهم النظام الذي نريد ان نبنيه بشكل جيد لكي نستطيع اتخاذ القرار المناسب ، فالمعمارية تعتبر اصعب الامور القابلة للتغير فهي غير قابلة للتغير وقد يودي تغييرها الى اعادة بناء النظام من الصفر .
لك ان تتخيل انك شارفت على الانتها من بناء نظام بسيط بلغة Java استغرق منك اسبوعين ثم اكتشفت ان Java ليست الحل الامثل ويجب عليك ان تستخدم لغة Python ، قد يسعفك Chat GPT في هذه الحالة لكن عندما يكون لديك مشروع او نظام كبير فسيرفض مساعدتك .

تعرف على المزيد في هذا المقال .
بسم الله الرحمن الرحيم ، والصلاة والسلام على اشرف المرسلين .

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

بالتاكيد ، حيث تكمن قوة لغة Java بقوة قواعدها فلا يمكنك ارتكاب الاخطاء بسهولة من دون ان تنتبه ، فلغة Java تتحمل المسؤولية كثيراً .
اعتقد ان مطوري لغة جافا شعرو بالغيرة من اللغات الاخرى مثل Python و php و JavaScript حيث ان انواع البيانات فيها لا يتم احترامها ، فكما نعرف اننا نستطيع اسناد اي قيمة كالتالي
<?php

$x = "Asem";
$x = 100;

وكذا في Pyhton
x = "Asem"
x = 100

الامر افضل هكذا فلا حاجة لتحديد نوع البيانات في كل مرة انشئ بها متغيراً جديداً .
لكن دعنا نحكم بالمشاعر ، ما موقفك لو كنت انت المتغير x ؟ لا احد يحترمك !!

نحن نحب Java لانها تحترم انواع المتغيرات ولكن هناك متغيرات ليست محترمة لنفسها ، لذا ظهرت في الاصدار العاشر من لغة Java الكلمة المفتاحية var ويمكن استعمالها كالاتي
public class AsemNajeeVarKeyWord {
public static void main(String[] args) {
var x = "Asem";
var y = 100;
}
}

لاحظ ان النوع var يقبل اي نوع من البيانات ، هل تعتبر قفزة نوعية ؟
لا تفرح كثيرا فاذا حاولت تغيير قيمة المتغير x في Java من "Asem" الى 100 فسيظهر لك خطا . السبب ان اللغة تحدد نوع البيانات على حسب نوع اول قيمة يتم اسنادها الى المتغير . لذا فنوع المتغير x هو String ونوع المتغير y هو int .

الفائدة من var لا تقتصر على العبث بنوع البيانات فقط ، انظر المثال التالي الذي يشرح كيف يتم التعامل مع Anonymous class
public class AsemNajeeVarKeyWord {
public static void main(String[] args) {
CanDo cd = new CanDo(){
public void doIt(){
System.out.println("I will do it .");
}
public void doItLocaly(){
System.out.println("I will do it localy .");
}
};
cd.doIt();
}
}
interface CanDo{
public void doIt();
}

انظر المثال جيداً هللا تحاول استدعاء الدالة doItLocaly() !!
لن تستطيع ولكي تستطيع ان تستدعيها فقط حول نوع الكائن cd من CanDo الى var

في النهاية ، مهما حاولت لغة Java ان تقلد بقية اللغات وتتهرب من مسؤوليتها فلن تستطيع .
عالم برمجةوتقنية الحاسوب C. P. W
السلام عليكم ورحمة الله وبركاته بعد الانقطاع طوال الفترة السابقة لانشغالي بامور اخرى سنفهم اليوم ماهي معمارية البرمجيات ، موضوع لطالما كان محبوكاً ولا يمكن فهمه ببساطة ليس لصعوبته فهو امر بسيط وستعرف ذلك في الاسطر التالية من هذا المنشور . معمارية البرمجيات…
بسم الله الرحمن الرحيم ، والصلاة والسلام على اشرف المرسلين .

ذكرنا في منشور سابق لمحة عن معمارية البرمجيات ، وذكرنا ان تنظيم الملفات يعتبر تحديد المعمارية الخاصة بتفاصيل التنفيذ ، اليوم سنتعرف على امثلة لاشهر انماط المعماريات وهو نمط معمارية MVC (Model , View , Controller) .

في معمارية MVC نقوم بتقسيم المشروع الى ثلاث وحدات ، لكن لماذا ؟

لنعد قليلاً ولا نستخدم MVC ، اذا اخبرتك ان تبني نظاماً بسيطاً لادارة الكتب ، دعنا نبسط الامور ونجعله يحتوي على كيان واحد فقط وهو الكتاب وفيه (اسم ، اسم المؤلف ، تاريخ الاضافة الى النظام ، عدد الصفحات) .
استطيع ان اتنبأ بما ستفعله ، ستقوم بعمل فئة Book فيه بضع وظائف (functions) وهي كالاتي :
addBook(name, auther,...)
getBook(id)
getBooks()
updateBook(id, name,...)
deleteBook(id)
ستكتب في addBook شروط تحقق من المدخلات و استعلام يُدخل البيانات الى قاعدة البيانات ، وفي updateBook كذلك . اما DeleteBook فسيكون لديك استعلام حذف كتاب من قاعدة البيانات . والدالتين getBook و getBooks فيهما استعلامان لجلب بيانات الكتب .
ملاحظة : مجموعة الدوال السابقة تسمى CRUD اختصاراً ل Create Read Update Delete . وذلك لانها تقوم باضافة وجلب وتعديل وحذف البيانات من قاعدة البيانات .
سيكون لديك ايضاً واجهة تظهر للمستخدم كي يدخل بيانات الكتاب .
ستكون معمارية مشروعك كالتالي :
📁 Project
     📄 Book.php
     📄 Index.php
  
حسنا لا يوجد ابسط من ذلك . ولن اذكر لك سيناريوهات اخرى ، لكن تستطيع ان تتخيل ان يكون لديك اكثر من كيان ولنقل 20 كيان بدون مبالغة باعتبار المشاريع الحقيقية .
ان كنت قد جربت ذلك فانت لا شك انك قد غصت في وحل لا مخرج منه ، فكتابة الاستعلامات في الشفرة يصعب عملية التعديل كثيراً . وهذا لا يختص بالاستعلامات فقط وانما كتابة اكثر من لغة في مكان واحد يعتبر تطبيقاً سيئاً لخبرتك .

دعني اجعل لك الامور ابسط بقليل .
اذا استخدمنا معمارية MVC وهي تقسيم المشروع الى ثلاث طبقات وهن كالاتي:
Model : طبقة او فئة بشكل ادق نكتب فيها الاستعلامات الخاصة بقاعدة البيانات .
View : هذه الطبقة نكتب فيها اكواد الواجهة الامامية .
Controller : هنا نكتب منطق التطبيق .

اسمعك تقول "ماذا!! ، لم افهم شيئاً " .
دعني اوضح لك قليلاً ، ما رأيك الان ان نبني نفس المشروع بالطريقة الجديدة انشئ ملف باسم Controllers/BookController .
قم بانشاء ملف آخر باسم Model/Book
في النهاية ستكون معمارية مشروعك :
📁 Project
     📁 Controllers
          📄 BookController.php
     📁 Models
          📄 Book.php
📁 Views
📄 Index.php

ملف index سيكون لعرض البيانات ، لن نتطرق لبقية الصفحات مثل تعديل او اضافة كتاب .

الان في Model/Book قم بعمل دوال CRUD التي تعلمناها لكن هذه المرة ستكتب فقط الاستعلامات فمثلا في دالة addBook اجعلها تستقبل بيانات الكتاب و تخزنها مباشرة بدون اي تحقق . وكذا دالة updateBook ، deleteBook .
وفي Controllers/BookController اضف دوال CRUD زفيها اكتب اكواد التحقق من صحة البيانات فمثلاً addBook تتحقق هل اسم الكتاب اكبر من 3 احرف ، وهل عدد صفحاته اكبر من 0 ثم تقوم باستدعا الدالة التي في Model/Book لتقوم بتخزين البيانات .
ماذا ان اكنت تريد تعديل شكل الصفحة التي تعرض الكتاب ، ستذهب الى Views/ وهكذا ... .

الامر غاية التنظيم ، صحيح لكن لماذا نكثر من الفئات هكذا ، هل هذا يعتبر ذكاءً ؟ ام انها مجرد فوضى .

دعني اكمل واحكم بما شئت ، اذا اردت ان تمنع ادخال تاريخ اضافة الكتاب الى النظام من قبل المستخدم لانه بطبيعة الحال سيكون تلقائيا . ماذا ستفعل ؟
نعم بالضبط ، ستذهب الى ملف Model/Book لكي تعدل عليه لانه هو من يتعامل مع قواعد البيانات .
ماذا ان اردت ان يتم جلب كل بيانات الكتاب ماعدا عدد الصفحات ؟ سيكون من ملف ال Model/Book ايضاً .
ماذا ان اردت ان تقيد اسم الكتاب فلا يقل عن 4 احرف ، فالحل هو من Controllers/BookController  .

هل هذا كل ما في الامر؟ في الانظمة الحقيقية يوجد الكثير من السيناريوهات . يمكنك حماية كلمات المرور وتشفيرها قبل ان تخزنها و يمكنك قفل التعديل على بعض الحقول مثل حقل ال ID ، والمزيد ... ، كما ان استعمال هذه المعمارية يجعل الكود سهل الصيانة ، قابل لاعادة الاستخدام ، قابل للقراءة ، والافضل من كل هذا انه يمكن تقسيم العمل على اعضاء الفريق بسهولة .

هذه التقنية ليست مرمية على الرف بل تستعملها افضل اطر العمل منها Laravel, Express, Spring MVC .
بسم الله الرحمن الرحيم ، والصلاة والسلام على اشرف المرسلين .

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

دعنا نذكر عيوب عدم تسمية المتغيرات باسماء معبرة ولنعتمد على ChatGPT لكي يسرد لنا هذه العيوب :
- صعوبة فهم الكود
- تقليل قابلية الصيانة
- زيادة احتمالية الأخطاء
- تعقيد عملية التتبع والتنقيح
- عدم وضوح وظيفة المتغير
- صعوبة التعاون داخل الفريق
- تقليل وضوح المنطق البرمجي
- تأثير سلبي على جودة التوثيق
- ضعف إمكانية إعادة استخدام الكود
- إعاقة التعلم للمبرمجين الجدد


من ميزات تسمية المتغيرات ان برنامج يصبح اكثر قابلية للقراءة وهذا يجعله اسهل اثناء الصيانة ، لكن كيف يتم التعبير عن اسماء المتغيرات ؟؟
قبل ان نذكر اسماء المتغيرات يجب ان ننوه الى قواعد التسمية حيث يوجد عدة قواعد اهمها
اولاً camelCase (الجمل) : حيث في هذه القاعدة نكتب اول كلمة بحروف صغيرة ثم نكتب اول حرف من كل كلمة بحالة كبيرة ، وهذه القاعدة مشهورة في تسمية الدوال في لغة جافا . كمثال thisExampleOfVariableName
ثانياً snace_case (الافعى) وفي هذه القاعدة نكتب كل الكلمات بحروف صغيرة ولا يسمح باستخدام حروف كبيرة ونفصل بين كل كلمة وكلمة بشرطة سفلية . مثال this_example_of_variable_name
ثالثاً PascalCase في هذه القاعدة نقوم بكتابة اول حرف من كل كلمة بحالة كبيرة . مثال ThisExampleOfVariableName ، هل يمكنك ان تفرق بينه وبين camelCase ؟
رابعاً UPPER_SNAKE_CASE (الافعى الكبيرة) : في هذه الحالة يتم الكتابة بالاحرف الكبيرة ويمنع استخدام الاحرف الصغيرة ويتم فصل الكلمات بشرطة سفلية .

هل عجبت من اسماء قواعد التسمية ، هذا غريب كانهم لم يجدو اسماء معبرة لقواعدهم !!
ملاحظة : يوجد قاعدة اسمها قاعدة الكباب ويتم فصل الكلمات بشرطة وتستخدم في html .

دعونا من الاسماء الغريبة فقد شعرت بالجوع بعد اسم القاعدة الاخيرة ، ولنعد الى سؤالنا وهو كيف نسمي المتغيرات والوظائف ؟
بكل بساطة الاجابة هي ان تسمي المتغير بما يدل عليه ، مثلاً متغير يخزن قيمة درجة الطالب الاول على مستوى جامعة تعز ، كيف ستسميه هل ستسميه x ؟!!
التسمية الصحيحة هي كالاتي ، المتغير يجب ان يدل على اسم لانه ليس فعل :( .
int degreeOfBestStudentInTaizUniversity;

هل هذا صعب؟ لا تختصر اسماء المتغيرات والدوال بل اجعلها تشرح نفسها بدلاً من كتابة تعليق بجانب اسم المتغير ، الكود التالي قد يسبب فصلك من العمل ...
// degree Of Best Student In Taiz University
int x;


هذا يسمى الكود النظيف ، اما الوظائف فاجعلها تدل على فعل كالاتي
int getDegreeOfBestStudentInTaizUniversity(){
return this.degreeOfBestStudentInTaizUniversity;
}

شرح بسيط عن قواعد التسمية ، ليس كافياً ليشمل كل شيء لكن القاعدة الذهبية هي ان لا تتحايل على نفسك وتسمي المتغيرات باسماء مختصرة او لا تدل على معناها .
ملاحظة : لا تستخدم الاسماء العامة مثل data , list , ... .

سؤال جانبي : ماذا تكتب في رسائل commit عند حفظ مشروعك في نظام التحكم بالاصدارات Git ؟ هل تكتب "final project" و "final project final" ؟؟!!
git commit -m "final project plz work"
git commit -m "final project works, dont touch"
الذي بي غادرو من القناة ماله علم ايش معنى ( int) عاد لما يعرف ايش المعلومات ما يغادرو الا الاغبياء🤫
😁1