This media is not supported in the widget
VIEW IN TELEGRAM
Forwarded from Codefajr_كود فجر
⏹️ من اهم النصائح لتحسين جودة الكود بإذن الله 📚
⬅️ لكتابة كود قابل للتوسع والصيانة بسهولة.
⬅️ حافظ على بساطة الكود واجعل أجزائه مفهومة و واضحة قدر الإمكان.
⬅️ قم بكتابة تعليقات توضيحية وتوثيق الأكواد لتسهيل فهمها من قبل الآخرين.
⬅️ اجعل الكود قابل لإعادة الاستخدام من خلال استخدام الدوال والوحدات او الفصول البرمجية.
⬅️ اتبع معايير التنسيق الموحدة للكود واستخدم أدوات مثل Prettier وESLint لتحسين تنسيق الكود.
⬅️ استخدم أسماء متناسقة ومعبرة للمتغيرات، والدوال، والوحدات او الفصول البرمجية.
⬅️ تأكد من اختبار الكود بانتظام باستخدام وحدات او فصول الاختبار بشكل مستمر لتجنب الأخطاء.
⬅️ اطلب من زملائك مراجعة كودك بانتظام لتحسين جودته واكتشاف الأخطاء المحتملة.
⬅️ تجنب تكرار الكود عن طريق استخدام الدوال والوحدات او الفصول البرمجية المشتركة.
⬅️ حلل أداء الكود وابحث عن طرق لتحسينه مثل تقليل استخدام الذاكرة وتحسين سرعة التنفيذ.
⬅️ استعن بأنماط التصميم المعروفة مثل Singleton وFactory وObserver لحل المشاكل المتكررة بطرق منظمة وفعالة.
⬅️ استمر في تعلم أفضل الممارسات والأدوات الجديدة من خلال قراءة الكتب والمستندات والمقالات وحضور الدورات التدريبية سواء كانت حضورية في الواقع او على مواقع تعليمية.
⏺️ تحسين جودة الكود يتطلب الالتزام بالممارسات الجيدة والاستمرار في التعلم والتطوير. باتباع هذه النصائح، ستتمكن من كتابة كود أكثر احترافية وفعالية بإذن الرحمن.
اتباع المبادئ الصلبة
(SOLID Principles)
⬅️ لكتابة كود قابل للتوسع والصيانة بسهولة.
كتابة كود نظيف ومنظم
(Clean Code)
⬅️ حافظ على بساطة الكود واجعل أجزائه مفهومة و واضحة قدر الإمكان.
التوثيق الجيد
(Documentation)
⬅️ قم بكتابة تعليقات توضيحية وتوثيق الأكواد لتسهيل فهمها من قبل الآخرين.
إعادة استخدام الكود
(Code Reusability)
⬅️ اجعل الكود قابل لإعادة الاستخدام من خلال استخدام الدوال والوحدات او الفصول البرمجية.
التنسيق الصحيح للكود
(Code Formatting)
⬅️ اتبع معايير التنسيق الموحدة للكود واستخدم أدوات مثل Prettier وESLint لتحسين تنسيق الكود.
التسمية الواضحة والمتناسقة
(Clear Naming Conventions)
⬅️ استخدم أسماء متناسقة ومعبرة للمتغيرات، والدوال، والوحدات او الفصول البرمجية.
إجراء الاختبارات الدائمة
(Continuous Testing)
⬅️ تأكد من اختبار الكود بانتظام باستخدام وحدات او فصول الاختبار بشكل مستمر لتجنب الأخطاء.
المراجعة الدورية للكود
(Code Reviews)
⬅️ اطلب من زملائك مراجعة كودك بانتظام لتحسين جودته واكتشاف الأخطاء المحتملة.
تقليل التكرار
(Avoid Code Duplication)
⬅️ تجنب تكرار الكود عن طريق استخدام الدوال والوحدات او الفصول البرمجية المشتركة.
تحسين الأداء
(Performance Optimization)
⬅️ حلل أداء الكود وابحث عن طرق لتحسينه مثل تقليل استخدام الذاكرة وتحسين سرعة التنفيذ.
استخدام أنماط التصميم
(Design Patterns)
⬅️ استعن بأنماط التصميم المعروفة مثل Singleton وFactory وObserver لحل المشاكل المتكررة بطرق منظمة وفعالة.
التعلم المستمر
(Continuous Learning)
⬅️ استمر في تعلم أفضل الممارسات والأدوات الجديدة من خلال قراءة الكتب والمستندات والمقالات وحضور الدورات التدريبية سواء كانت حضورية في الواقع او على مواقع تعليمية.
⏺️ تحسين جودة الكود يتطلب الالتزام بالممارسات الجيدة والاستمرار في التعلم والتطوير. باتباع هذه النصائح، ستتمكن من كتابة كود أكثر احترافية وفعالية بإذن الرحمن.
Forwarded from Codefajr_كود فجر
مقارنة قائمتين في WPS Office: مع حلول بديلة إذا لم تكن بعض الدوال مثل VSTACK / UNIQUE مدعومة.
---------------------------------------------------
سنعالج الأنواع الثلاثة المطلوبة:
البيانات الفريدة بين القائمتين (تظهر في قائمة واحدة فقط)
جميع البيانات الموجودة في القائمتين (اتحاد القائمتين)
البيانات المشتركة والمتكررة في القائمتين (التقاطع)
لنفرض:
القائمة 1 في A4:A50
القائمة 2 في B4:B50
✅ أولاً: إذا كان WPS عندك يدعم VSTACK و UNIQUE
1) استخراج البيانات الفريدة بين القائمتين (exclusive)
أي القيم الموجودة في قائمة واحدة فقط:
✔ هذه تعطي القيم التي لا تتكرر في القائمتين
✔ أي قيمة تظهر مرة واحدة فقط في أحدهما
2) جميع البيانات الموجودة في القائمتين (Union)
اتحاد القائمتين بدون تكرار:
3) استخراج البيانات المتكررة والمشتركة (Intersection)
أي القيم الموجودة في القائمتين معًا:
✔ هذه تعطي القيم المتكررة في القائمتين
✔ إذا أردتها مع التكرار بدون إزالة (أخبرني)
❗ إذا كان WPS عندك لا يدعم VSTACK / UNIQUE
لا تقلق… إليك البديل العملي:
1) اتحاد القائمتين (بدون UNIQUE)
ضع في C4:
واسحب حتى نهاية قائمة 1
ثم في C.. (بعد آخر صف) ضع:
واسحب حتى نهاية قائمة 2.
ثم لإزالة التكرار ➜ Data → Remove Duplicates
2) البيانات المشتركة بين القائمتين
في D4:
اسحب للأسفل.
ثم احذف الفراغات بالفلترة.
3) استخراج البيانات الفريدة بين القائمتين
في E4:
ثم اسحب للأسفل.
---------------------------------------------------
سنعالج الأنواع الثلاثة المطلوبة:
البيانات الفريدة بين القائمتين (تظهر في قائمة واحدة فقط)
جميع البيانات الموجودة في القائمتين (اتحاد القائمتين)
البيانات المشتركة والمتكررة في القائمتين (التقاطع)
لنفرض:
القائمة 1 في A4:A50
القائمة 2 في B4:B50
✅ أولاً: إذا كان WPS عندك يدعم VSTACK و UNIQUE
1) استخراج البيانات الفريدة بين القائمتين (exclusive)
أي القيم الموجودة في قائمة واحدة فقط:
=UNIQUE(FILTER(VSTACK(A4:A50; B4:B50); COUNTIF(A4:A50; VSTACK(A4:A50; B4:B50))=0 + COUNTIF(B4:B50; VSTACK(A4:A50; B4:B50))=0)) ✔ هذه تعطي القيم التي لا تتكرر في القائمتين
✔ أي قيمة تظهر مرة واحدة فقط في أحدهما
2) جميع البيانات الموجودة في القائمتين (Union)
اتحاد القائمتين بدون تكرار:
=UNIQUE(VSTACK(A4:A50; B4:B50)) 3) استخراج البيانات المتكررة والمشتركة (Intersection)
أي القيم الموجودة في القائمتين معًا:
=UNIQUE(FILTER(A4:A50; COUNTIF(B4:B50; A4:A50)>0)) ✔ هذه تعطي القيم المتكررة في القائمتين
✔ إذا أردتها مع التكرار بدون إزالة (أخبرني)
❗ إذا كان WPS عندك لا يدعم VSTACK / UNIQUE
لا تقلق… إليك البديل العملي:
1) اتحاد القائمتين (بدون UNIQUE)
ضع في C4:
=A4 واسحب حتى نهاية قائمة 1
ثم في C.. (بعد آخر صف) ضع:
=B4 واسحب حتى نهاية قائمة 2.
ثم لإزالة التكرار ➜ Data → Remove Duplicates
2) البيانات المشتركة بين القائمتين
في D4:
=IF(COUNTIF($B$4:$B$50; A4)>0; A4; "") اسحب للأسفل.
ثم احذف الفراغات بالفلترة.
3) استخراج البيانات الفريدة بين القائمتين
في E4:
=IF(AND(COUNTIF($A$4:$A$50; B4)=0; COUNTIF($B$4:$B$50; B4)=1); B4; "") ثم اسحب للأسفل.
Forwarded from Codefajr_كود فجر
مثالًا عمليًا جاهزًا وواضحًا
لتوزيع أسماء بشكل عشوائي على 4 مجموعات دون تكرار باستخدام RAND + SORTBY.
------------------------------------------------------------
✅ الهدف
لدينا قائمة أسماء،
ونريد توزيعها عشوائيًا إلى 4 مجموعات،
بدون تكرار،
وبطريقة قابلة للتحديث عند كل ضغط Delete.
------------------------------------------------------
📌 الخطوات العملية مع مثال
1) إعداد جدول البيانات:
- الأسم ( A ) ضع 20 اسم من الخلية A4:A23
- المجموعة ( B )
- عشوائي ( C ) "العمود المساعد"
-----------------------------------------------------
2) إنشاء العمود المساعد (C) (عشوائي)
وفي الخلية C4 ضع المعادلة التالية: =RAND()
ثم اسحب للأسفل حتى C23.
-----------------------------------------------------
3) لترتيب الأسماء عشوائيًا إستخدام الدالة SORTBY في الخلية F4 وضع المعادلة التالية:
=SORTBY(A4:A23; C4:C23)
وسيظهر لديك عمود مرتّب عشوائيًا دون تكرار.
-----------------------------------------------------
4) تقسيم القائمة إلى 4 مجموعات
بعد أن أصبحت القائمة عشوائية في العمود F، نقوم بتوزيعها على 4 مجموعات كالتالي:
-----------------------------------------------------
* المجموعة الاولى 1: ضع المعادلة التالية في الخلية G4:
=INDEX($F$4:$F$23; ROWS(G$4:G4))
-----------------------------------------------------
* المجموعة الثانية 2 : ضع في الخلية H4 المعادلة التالية:
=INDEX($F$4:$F$23; ROWS(H$4:H4)+5)
------------------------------------------------------
*المجموعة الثالثة 3: ضع في الخلية I4 المعادلة التالية:
=INDEX($F$4:$F$23; ROWS(I$4:I4)+10)
-----------------------------------------------------
* المجموعة الرابعة 4 : ضع في الخلية J4 المعادلة التالية :
=INDEX($F$4:$F$23; ROWS(J$4:J4)+15)
----------------------------------------------------
النتيجة : ستحصل على أربع مجموعات كل مجموعة تحصل فيها 5 أسماء. من الاسماء ال20 الذي لديك في عمود الاسم A ،
-----------------------------------------------------
🔁 لإعادة التوزيع العشوائي :لإعادة خلط الأسماء تلقائيًا.قم بأحدى العمليات التالية:
١- إضغط على Delete في أي خلية فارغة
٢- نفّذ عملية بسيطة (كتابة/مسح)
-----------------------------------------------------
💡 ملاحظة مهمة
ميزة هذه الطريقة:
لا يوجد تكرار إطلاقًا
التوزيع عادل
يمكن زيادة عدد المجموعات أو الأسماء بسهولة
يمكن استخدام SORTBY بمدى متعدد الأعمدة مثل A4:B23 إذا كانت لديك بيانات إضافية مع الأسماء
-----------------------------------------------------
📦 نسخة جاهزة مختصرة للدالة الرئيسية
=SORTBY(A4:A23; RANDARRAY(20;1))
(بدل العمود المساعد)-إن كان إصدار Excel يدعم RANDARRAY.
لتوزيع أسماء بشكل عشوائي على 4 مجموعات دون تكرار باستخدام RAND + SORTBY.
------------------------------------------------------------
✅ الهدف
لدينا قائمة أسماء،
ونريد توزيعها عشوائيًا إلى 4 مجموعات،
بدون تكرار،
وبطريقة قابلة للتحديث عند كل ضغط Delete.
------------------------------------------------------
📌 الخطوات العملية مع مثال
1) إعداد جدول البيانات:
- الأسم ( A ) ضع 20 اسم من الخلية A4:A23
- المجموعة ( B )
- عشوائي ( C ) "العمود المساعد"
-----------------------------------------------------
2) إنشاء العمود المساعد (C) (عشوائي)
وفي الخلية C4 ضع المعادلة التالية: =RAND()
ثم اسحب للأسفل حتى C23.
-----------------------------------------------------
3) لترتيب الأسماء عشوائيًا إستخدام الدالة SORTBY في الخلية F4 وضع المعادلة التالية:
=SORTBY(A4:A23; C4:C23)
وسيظهر لديك عمود مرتّب عشوائيًا دون تكرار.
-----------------------------------------------------
4) تقسيم القائمة إلى 4 مجموعات
بعد أن أصبحت القائمة عشوائية في العمود F، نقوم بتوزيعها على 4 مجموعات كالتالي:
-----------------------------------------------------
* المجموعة الاولى 1: ضع المعادلة التالية في الخلية G4:
=INDEX($F$4:$F$23; ROWS(G$4:G4))
-----------------------------------------------------
* المجموعة الثانية 2 : ضع في الخلية H4 المعادلة التالية:
=INDEX($F$4:$F$23; ROWS(H$4:H4)+5)
------------------------------------------------------
*المجموعة الثالثة 3: ضع في الخلية I4 المعادلة التالية:
=INDEX($F$4:$F$23; ROWS(I$4:I4)+10)
-----------------------------------------------------
* المجموعة الرابعة 4 : ضع في الخلية J4 المعادلة التالية :
=INDEX($F$4:$F$23; ROWS(J$4:J4)+15)
----------------------------------------------------
النتيجة : ستحصل على أربع مجموعات كل مجموعة تحصل فيها 5 أسماء. من الاسماء ال20 الذي لديك في عمود الاسم A ،
-----------------------------------------------------
🔁 لإعادة التوزيع العشوائي :لإعادة خلط الأسماء تلقائيًا.قم بأحدى العمليات التالية:
١- إضغط على Delete في أي خلية فارغة
٢- نفّذ عملية بسيطة (كتابة/مسح)
-----------------------------------------------------
💡 ملاحظة مهمة
ميزة هذه الطريقة:
لا يوجد تكرار إطلاقًا
التوزيع عادل
يمكن زيادة عدد المجموعات أو الأسماء بسهولة
يمكن استخدام SORTBY بمدى متعدد الأعمدة مثل A4:B23 إذا كانت لديك بيانات إضافية مع الأسماء
-----------------------------------------------------
📦 نسخة جاهزة مختصرة للدالة الرئيسية
=SORTBY(A4:A23; RANDARRAY(20;1))
(بدل العمود المساعد)-إن كان إصدار Excel يدعم RANDARRAY.
Forwarded from Codefajr_كود فجر
✅المرحلة الثانية💻
ربط قاعدة البيانات بالفيجوال استوديو
نفتح برنامج الفيجوال ونقوم بانشاء مشروع جديد باي اسم تريده سوف تظهر لك نافذة البرنامج
بعد انشاء مشروع جديد وكذلك انشاء قاعدة بيانات اكسس access نقوم بنقل قاعدة بيانات اكسس الى مسار المشروع الذي قمنا بنشائه ونضع قاعدة البيانات في ملف مشروع جديد كما يلي
bin/Debug
نرجع الى المشروع ونقوم بادراج الادوات
التاليه الى الفروم :
🔸اداة مجمع الادوات GroupBox عدد 3 وهي تلك الاطار الابيض الضاهر في الفروم التي تحيط بكل مجموعة
🔸اداة مربع النص TextBox عدد 5
🔸 اداة Button عدد 10
🔸اداة الداتا غريند فيو DataGridView عدد 1 وهي التي تظهر عليها البيانات
🔸اداة Label عدد 5
1️⃣نقوم بتسمية عدد 6 Button كما يلي
ـ➖New. تفريغ محتوى Textbox
ـ➖Add اضافة طالب جديد
ـDelete➖ حذف طالب من جدول
ـ ➖Edit. تعديل بيانات طلاب
ـ➖Find بحث عن معلومات طلاب
ـ➖Exit الخروج من البرنامج
نضع هذه الازرار في مجموعة GroupBox ونسميها Update
2️⃣ نقوم بتسمية عدد 4 Button البقية كما يلي
| |>>
>>>
<<<
>>| |
هذه الرموز التي قمنا بتسمية الازرار موجودة في الكيبورد ثم نضع هذه الازرار في مجموعة GroupBox ونسميها Navigation
3️⃣نقوم باعادة تسمية Label كما يلي
ld_student
first_name
last_name
Age
Adress
3️⃣ نقوم بتكبير اداة textbox كما في الصورة ثم نضغط على اول textbox ومن الخصائص لها نختار (Name) ونكتب TxtID
ثم نضغط على ثاني textbox ومن نفس الخصائص (Name) نكتب TxtFname
وكذلك نضغط على ثالث textbox ومن خاصية (Name) نكتب TxtLname
ونضغط على رابع textbox ومن خاصية (Name) نكتب TextAge
ونضغط على خامس textbox ومن خاصية (Name) نكتب TextAdress
#ملاحظه هذا تسميات لـtextbox تفيدنا عند كتابه الاكواد
بعد ادراج الادوات وتسميتها يصبح المشروع كما في الصورة رقم 1
📍مرحلة برمجة الازرار (الكود)
اول شي نعمله هو تعريف فضاء الأسماء كما قلنا سابقا نضغط على فروم لتفتح لنا صفحه الكود نكتب فوق public class Forml
الكود التالي : كما في الصوره رقم 2
Imports System.Data
Imports System.Data. OleDb
بعد ذلك نقوم بانشاء الاتصال مع قاعدة البيانات ، ولفعل ذلك نعلن على متغير اسمه con من نوع OleDbConnection
Dim Con As New OleDbConnection
ثم نكتب المسار التي توجد عليه قاعدة البيانات اكسس ويصبح الكود كاالاتي :
كما في الصورة رقم 3
Dim Con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=StudentBase.accdb")
#شرح_الكود
كما ترى فنص الاتصال
Connectionstring
له مجموعة من البارامترات وهي كما يلي :
ـ➖Provider هو مزود البيانات الذي نشتغل عليه وفي حالتنا هذه هو ميكروسوفت اكسس ذو النسخة 12.0
ـ ➖Data Source وهو المسار الذي توجد عليه قاعدة البيانات .
قمنا بانشاء سلسلة الربط بين البرنامج وقاعدة البيانات ، سنجلب الان بيانات جدول الطلاب ونظهرها في الداتا غريند فيو ، وللقيام بذلك نحتاج الى كائنين اثنين :
ـ ➖OledbDataAdapter ودورة هو تنفيذ استعلامات SQL
ـ➖DataTable وهي بمثابة جدول لتخزين ما سيقوم OledbDataAdapter بحلبه ،
سوف تكون شفرة الاعلان كما يلي :
كما في الصورة رقم 4
Dim Da As OleDbDataAdapter
Dim Dt As New DataTable
📍⚙ الان سنذهب الى الحدث
Form1_Load
ونجلب بيانات جدول الطلاب باستعمال
OledbDataAdapter
ثم نخزن ذلك في DataTable ونكتب الكود التالي : كما في الصورة رقم 5
Da = New OleDbDataAdapter
("Select * From Student", Con)
Da.Fill(Dt)
DGV.DataSource = Dt
#شرح_الكود : في السطر الاول قمنا بارسال استعلام جلب البيانات من القاعدة بالاعتماد على
OledbDataAdapter
وحددنا له سلسلة Con التي ينبغي ان يمر عبرها ، ثم بعد ذلك افرغنا ما قام بجلبة في
ـDataTable عن طريق الدالة Fill ، وفي الاخير قمنا بملء DataGridview من هذه
ـDataTable … .
✅اذا قمنا بتنفيذ البرنامج سوف تعرض لنا بيانات الجدول كما في الصورة رقم 6
الى هنا انهينا اتصال وربط قاعدة بيانات اكسس بالفيجوال 👍
ربط قاعدة البيانات بالفيجوال استوديو
نفتح برنامج الفيجوال ونقوم بانشاء مشروع جديد باي اسم تريده سوف تظهر لك نافذة البرنامج
بعد انشاء مشروع جديد وكذلك انشاء قاعدة بيانات اكسس access نقوم بنقل قاعدة بيانات اكسس الى مسار المشروع الذي قمنا بنشائه ونضع قاعدة البيانات في ملف مشروع جديد كما يلي
bin/Debug
نرجع الى المشروع ونقوم بادراج الادوات
التاليه الى الفروم :
🔸اداة مجمع الادوات GroupBox عدد 3 وهي تلك الاطار الابيض الضاهر في الفروم التي تحيط بكل مجموعة
🔸اداة مربع النص TextBox عدد 5
🔸 اداة Button عدد 10
🔸اداة الداتا غريند فيو DataGridView عدد 1 وهي التي تظهر عليها البيانات
🔸اداة Label عدد 5
1️⃣نقوم بتسمية عدد 6 Button كما يلي
ـ➖New. تفريغ محتوى Textbox
ـ➖Add اضافة طالب جديد
ـDelete➖ حذف طالب من جدول
ـ ➖Edit. تعديل بيانات طلاب
ـ➖Find بحث عن معلومات طلاب
ـ➖Exit الخروج من البرنامج
نضع هذه الازرار في مجموعة GroupBox ونسميها Update
2️⃣ نقوم بتسمية عدد 4 Button البقية كما يلي
| |>>
>>>
<<<
>>| |
هذه الرموز التي قمنا بتسمية الازرار موجودة في الكيبورد ثم نضع هذه الازرار في مجموعة GroupBox ونسميها Navigation
3️⃣نقوم باعادة تسمية Label كما يلي
ld_student
first_name
last_name
Age
Adress
3️⃣ نقوم بتكبير اداة textbox كما في الصورة ثم نضغط على اول textbox ومن الخصائص لها نختار (Name) ونكتب TxtID
ثم نضغط على ثاني textbox ومن نفس الخصائص (Name) نكتب TxtFname
وكذلك نضغط على ثالث textbox ومن خاصية (Name) نكتب TxtLname
ونضغط على رابع textbox ومن خاصية (Name) نكتب TextAge
ونضغط على خامس textbox ومن خاصية (Name) نكتب TextAdress
#ملاحظه هذا تسميات لـtextbox تفيدنا عند كتابه الاكواد
بعد ادراج الادوات وتسميتها يصبح المشروع كما في الصورة رقم 1
📍مرحلة برمجة الازرار (الكود)
اول شي نعمله هو تعريف فضاء الأسماء كما قلنا سابقا نضغط على فروم لتفتح لنا صفحه الكود نكتب فوق public class Forml
الكود التالي : كما في الصوره رقم 2
Imports System.Data
Imports System.Data. OleDb
بعد ذلك نقوم بانشاء الاتصال مع قاعدة البيانات ، ولفعل ذلك نعلن على متغير اسمه con من نوع OleDbConnection
Dim Con As New OleDbConnection
ثم نكتب المسار التي توجد عليه قاعدة البيانات اكسس ويصبح الكود كاالاتي :
كما في الصورة رقم 3
Dim Con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=StudentBase.accdb")
#شرح_الكود
كما ترى فنص الاتصال
Connectionstring
له مجموعة من البارامترات وهي كما يلي :
ـ➖Provider هو مزود البيانات الذي نشتغل عليه وفي حالتنا هذه هو ميكروسوفت اكسس ذو النسخة 12.0
ـ ➖Data Source وهو المسار الذي توجد عليه قاعدة البيانات .
قمنا بانشاء سلسلة الربط بين البرنامج وقاعدة البيانات ، سنجلب الان بيانات جدول الطلاب ونظهرها في الداتا غريند فيو ، وللقيام بذلك نحتاج الى كائنين اثنين :
ـ ➖OledbDataAdapter ودورة هو تنفيذ استعلامات SQL
ـ➖DataTable وهي بمثابة جدول لتخزين ما سيقوم OledbDataAdapter بحلبه ،
سوف تكون شفرة الاعلان كما يلي :
كما في الصورة رقم 4
Dim Da As OleDbDataAdapter
Dim Dt As New DataTable
📍⚙ الان سنذهب الى الحدث
Form1_Load
ونجلب بيانات جدول الطلاب باستعمال
OledbDataAdapter
ثم نخزن ذلك في DataTable ونكتب الكود التالي : كما في الصورة رقم 5
Da = New OleDbDataAdapter
("Select * From Student", Con)
Da.Fill(Dt)
DGV.DataSource = Dt
#شرح_الكود : في السطر الاول قمنا بارسال استعلام جلب البيانات من القاعدة بالاعتماد على
OledbDataAdapter
وحددنا له سلسلة Con التي ينبغي ان يمر عبرها ، ثم بعد ذلك افرغنا ما قام بجلبة في
ـDataTable عن طريق الدالة Fill ، وفي الاخير قمنا بملء DataGridview من هذه
ـDataTable … .
✅اذا قمنا بتنفيذ البرنامج سوف تعرض لنا بيانات الجدول كما في الصورة رقم 6
الى هنا انهينا اتصال وربط قاعدة بيانات اكسس بالفيجوال 👍
Forwarded from Codefajr_كود فجر
🔍 أنواع أوامر SQL
Types of SQL Statements 🔎
🔹 في عالم قواعد البيانات، أوامر SQL تنقسم إلى عدة أنواع رئيسية، كل منها يؤدي وظيفة محددة:
1️⃣ DDL – Data Definition Language
🔹 لإنشاء وتعديل هيكل الجداول وقواعد البيانات.
🛠 من أهم الأوامر:
CREATE
لإنشاء جداول أو قواعد بيانات جديدة.
ALTER
لتعديل هيكل جدول موجود (إضافة أو حذف أعمدة مثلاً).
DROP
لحذف جداول أو قواعد بيانات بالكامل.
TRUNCATE
لحذف جميع البيانات من الجدول بدون حذف الهيكل.
2️⃣ DML – Data Manipulation Language
🔹 لإدارة البيانات داخل الجداول (إضافة، تعديل، حذف).
📝 من أهم الأوامر:
INSERT
لإضافة سجلات جديدة.
UPDATE
لتعديل بيانات موجودة.
DELETE
لحذف بيانات من الجدول.
3️⃣ DQL – Data Query Language
🔹 لاستخراج البيانات من الجداول.
🔍 من أهم الأوامر:
SELECT
لجلب البيانات وفق شروط محددة.
4️⃣ DCL – Data Control Language
🔹 للتحكم في الصلاحيات والوصول للبيانات.
🔐 من أهم الأوامر:
GRANT
لمنح صلاحيات لمستخدم.
REVOKE
لسحب الصلاحيات.
5️⃣ TCL – Transaction Control Language
🔹 للتحكم في العمليات والمعاملات داخل قواعد البيانات.
📦 من أهم الأوامر:
COMMIT
لحفظ التعديلات بشكل دائم.
ROLLBACK
للتراجع عن التعديلات قبل الحفظ.
SAVEPOINT
لإنشاء نقطة استعادة داخل المعاملة.
SET TRANSACTION
لتحديد خصائص المعاملة.
Forwarded from Codefajr_كود فجر
عندنا اليوم فضيحة جديدة. من ستارتب Thinking Machines Lab (حق ميرا موراتي) طرد المؤسسين بارِت زوف ولوك متز.
بارِت كان الـ CTO. رسميًا يقولون إنه طلع “بمحض إرادته”، لكن بعض المصادر تتكلم إن الموضوع له علاقة بـ سلوك غير أخلاقي.
وبالتحديد، مصدر قريب من Thinking Machines قال لـ Wired إن بارِت كان يشارك معلومات سرّية عن الشركة مع منافسين.
والاثنين زوف ومتز الحين راجعين لـ OpenAI (نفس المكان اللي ميرا كانت ساحبتهم منه قبل). ومن جهة ثانية، منصب الـCTO في Thinking Machines صار عند سوميث تشينتالا واحد من أهم ناس PyTorch.
يعني خلال أقل من سنة على عمر الستارتب، طلعوا منه 3 من 6 مؤسسين (وقبل كم شهر Meta خطفت أندرو تالوك). نشوف نهايتها 😐
بارِت كان الـ CTO. رسميًا يقولون إنه طلع “بمحض إرادته”، لكن بعض المصادر تتكلم إن الموضوع له علاقة بـ سلوك غير أخلاقي.
وبالتحديد، مصدر قريب من Thinking Machines قال لـ Wired إن بارِت كان يشارك معلومات سرّية عن الشركة مع منافسين.
والاثنين زوف ومتز الحين راجعين لـ OpenAI (نفس المكان اللي ميرا كانت ساحبتهم منه قبل). ومن جهة ثانية، منصب الـCTO في Thinking Machines صار عند سوميث تشينتالا واحد من أهم ناس PyTorch.
يعني خلال أقل من سنة على عمر الستارتب، طلعوا منه 3 من 6 مؤسسين (وقبل كم شهر Meta خطفت أندرو تالوك). نشوف نهايتها 😐
Forwarded from تخاريف مبرمج
البوست ده كان المفروض ينزل من اسبوع بس خليني اقوله دلوقتي ، احنا كده عدي علينا سنتين من بداية المنتورشيب
بدانا في ديسمبر 2023 ولسه مكملين بفضل الله
من اول يوم كان هدفنا واضح مش عايزين ناس حافظه شوية فريموركس
احنا كنا عايزين نطلع شباب اشتغلوا علي مشاريع حقيقية زي الشركات بالظبط وده اللي حصل
فيه ناس اشتغلت وهم لسه في المنتورشيب
وفيه ناس اشتغلت بعد ما خلصت
وده مش صدفة
طريقة شغلنا من البداية كانت مختلفة
قبل ما نكتب سطر كود واحد كنا بنقعد شهر كامل في التخطيط
كنا بنبدأ بالاتي
* فهم البيزنس كويس من خلال ال analysis وال design
* وبعدها database design
* وبعدين api design first
* وبعدين uml
* وبعدين wbs وتقسيم التاسكات
* وبعدين estimation
* وبعدين نتخيل شكل الشاشات وال flow كله
كل ده كان بيحصل قبل اي كود وده كان ال plan الحقيقي للمشروع وده اللي بيتعمل مع ال AI Tools وبيسمي ال implementation plan
طيب ليه بقولك الكلام ده دلوقتي لان الشباب اللي اتخرجوا من المنتورشيب مش هيغرقوا في زمن ال AI
ولا هيبقوا تابعين ليه؟
ليه لان عندهم الاساس الصح دلوقتي لما اي حد عايز يعمل مشروع اول حاجه بيحتاجها هو الاساس وده اللي هما خدوه كمان بقوا قادرين يعملوا validation للي ال AI بيطلعه مش بياخدوا اي output ويسلموا بيه
هما فاهمين هو صح ولا غلط وليه بقوا يعرفوا المشكلة فين
هل في الكود ، ولا في التصميم ، ولا في فهم البيزنس
بقوا يعرفوا يعملوا testing صح سواء database
او load او logic
والاهم بقوا فاهمين ال flow ، فاهمين المشروع ك بيزنس ، ويقدروا يطلعوا يشرحوا شغلهم كأنه مشروع شركة مش انترنشيب
كل ده بفضل الله ثم مجهود الشباب ثم تعبنا معاهم خطوة بخطوة
حقيقي فخور بالمنتورشيب وفخور بكل واحد عدي من هنا
دمتم بخير
بدانا في ديسمبر 2023 ولسه مكملين بفضل الله
من اول يوم كان هدفنا واضح مش عايزين ناس حافظه شوية فريموركس
احنا كنا عايزين نطلع شباب اشتغلوا علي مشاريع حقيقية زي الشركات بالظبط وده اللي حصل
فيه ناس اشتغلت وهم لسه في المنتورشيب
وفيه ناس اشتغلت بعد ما خلصت
وده مش صدفة
طريقة شغلنا من البداية كانت مختلفة
قبل ما نكتب سطر كود واحد كنا بنقعد شهر كامل في التخطيط
كنا بنبدأ بالاتي
* فهم البيزنس كويس من خلال ال analysis وال design
* وبعدها database design
* وبعدين api design first
* وبعدين uml
* وبعدين wbs وتقسيم التاسكات
* وبعدين estimation
* وبعدين نتخيل شكل الشاشات وال flow كله
كل ده كان بيحصل قبل اي كود وده كان ال plan الحقيقي للمشروع وده اللي بيتعمل مع ال AI Tools وبيسمي ال implementation plan
طيب ليه بقولك الكلام ده دلوقتي لان الشباب اللي اتخرجوا من المنتورشيب مش هيغرقوا في زمن ال AI
ولا هيبقوا تابعين ليه؟
ليه لان عندهم الاساس الصح دلوقتي لما اي حد عايز يعمل مشروع اول حاجه بيحتاجها هو الاساس وده اللي هما خدوه كمان بقوا قادرين يعملوا validation للي ال AI بيطلعه مش بياخدوا اي output ويسلموا بيه
هما فاهمين هو صح ولا غلط وليه بقوا يعرفوا المشكلة فين
هل في الكود ، ولا في التصميم ، ولا في فهم البيزنس
بقوا يعرفوا يعملوا testing صح سواء database
او load او logic
والاهم بقوا فاهمين ال flow ، فاهمين المشروع ك بيزنس ، ويقدروا يطلعوا يشرحوا شغلهم كأنه مشروع شركة مش انترنشيب
كل ده بفضل الله ثم مجهود الشباب ثم تعبنا معاهم خطوة بخطوة
حقيقي فخور بالمنتورشيب وفخور بكل واحد عدي من هنا
دمتم بخير
Forwarded from تخاريف مبرمج
اللى انت شايفه ده مشروع ecommerce بسيط جدا ؛ معمول بال tech stack
- Node JS
- React Vite
- Flutter
- Docker
-لما تحب تقول الطبيعى ده ياخد وقت قد ايه من غير ال AI ك Backend and Frontend بنتكلم بس فى 20 يوم من غير تيست
ومحتاج Flutter هياخد 10 ايام يبقى دخلنا فى شهر بالظبط
ومحتاج تعمل تيست 3 ايام موبايل ومعاهم 7 ايام ل back + front
يبقى دخلت فى 40 يوم بالظبط
اللى انت شايفه ده بالظبط خد من ال AI antigravity IDE وخلصت كل ال free credit خد ساعتين ونص مع ال test يتاعه بال seeders كمان
تخيل بقى تبيع مشروع زى ده يتكلف كم مع ال AI
- Node JS
- React Vite
- Flutter
- Docker
-لما تحب تقول الطبيعى ده ياخد وقت قد ايه من غير ال AI ك Backend and Frontend بنتكلم بس فى 20 يوم من غير تيست
ومحتاج Flutter هياخد 10 ايام يبقى دخلنا فى شهر بالظبط
ومحتاج تعمل تيست 3 ايام موبايل ومعاهم 7 ايام ل back + front
يبقى دخلت فى 40 يوم بالظبط
اللى انت شايفه ده بالظبط خد من ال AI antigravity IDE وخلصت كل ال free credit خد ساعتين ونص مع ال test يتاعه بال seeders كمان
تخيل بقى تبيع مشروع زى ده يتكلف كم مع ال AI
Forwarded from تخاريف مبرمج
امبارح وأنا شغال مع الشباب في المنتورشيب على المشروع رقم 3
Food Delivery
كنا بنتكلم عن تصميم الداتابيز، وبالتحديد عن استخدام
JSONB
كـ data type لأحد الـ columns في table معين.
لما جينا نعدل في الـ JSONB سواء attribute واحد أو أكتر أو حتى array كاملة، لقيت الشباب شغالين بالطريقة دي
1. Fetch الداتا من الداتابيز
2. تعديل الـ object في الكود
3. Update للـ record تاني في الداتابيز
الصراحة استغربت شوية، خصوصا إننا شغالين بـ Prisma.
فقلت خلينا نرجع للـ documentation ونشوف هما نفسهم بيقولوا إيه.
وبالفعل لما رجعت للـ docs لقيت إن ده فعلا الأسلوب اللي هما موصيين بيه، وكاتبين السبب واستخداماتهم للطريقة دي بوضوح.
ساعتها قلت للشباب لا، في الحالة دي نشتغل Native Query أحسن، ومندخلش نفسنا في اللفة دي.
وده مثال بسيط جدا على قيمة إنك ترجع للـ documentation قبل ما تاخد قرار تقني مهم.
المهم بقى، وأنا بقلب في الـ docs، لقيت إن فريق Prisma عامل حركة ذكية جدا
عاملين ChatGPT جوه الـ documentation نفسها.
تفتحه، تسأله أي سؤال، يرد عليك بإجابات من نفس الـ documentation، ومعاها أمثلة، ونصوص واضحة ومحترمة جدا.
ودي تاني فايدة حقيقية ناخدها من الـ documentation وده بقى استخدام فعلي وذكي للـ AI مش مجرد كلام نظري.
دمتم بخير.
Food Delivery
كنا بنتكلم عن تصميم الداتابيز، وبالتحديد عن استخدام
JSONB
كـ data type لأحد الـ columns في table معين.
لما جينا نعدل في الـ JSONB سواء attribute واحد أو أكتر أو حتى array كاملة، لقيت الشباب شغالين بالطريقة دي
1. Fetch الداتا من الداتابيز
2. تعديل الـ object في الكود
3. Update للـ record تاني في الداتابيز
الصراحة استغربت شوية، خصوصا إننا شغالين بـ Prisma.
فقلت خلينا نرجع للـ documentation ونشوف هما نفسهم بيقولوا إيه.
وبالفعل لما رجعت للـ docs لقيت إن ده فعلا الأسلوب اللي هما موصيين بيه، وكاتبين السبب واستخداماتهم للطريقة دي بوضوح.
ساعتها قلت للشباب لا، في الحالة دي نشتغل Native Query أحسن، ومندخلش نفسنا في اللفة دي.
وده مثال بسيط جدا على قيمة إنك ترجع للـ documentation قبل ما تاخد قرار تقني مهم.
المهم بقى، وأنا بقلب في الـ docs، لقيت إن فريق Prisma عامل حركة ذكية جدا
عاملين ChatGPT جوه الـ documentation نفسها.
تفتحه، تسأله أي سؤال، يرد عليك بإجابات من نفس الـ documentation، ومعاها أمثلة، ونصوص واضحة ومحترمة جدا.
ودي تاني فايدة حقيقية ناخدها من الـ documentation وده بقى استخدام فعلي وذكي للـ AI مش مجرد كلام نظري.
دمتم بخير.
❤2
Forwarded from تخاريف مبرمج
لما تشتغل علي مشروع والعميل قالك عايز زي المشروع الفلاني
وانت متعرفش عنه حاجه
افتح الموقع بتاع المشروع الفلاني وشوف فيه الاتي
1. List of Features
2. List of functions in each feature
بعد كده بقي حدد ال scope اللي هتشتغل عليه متسبب الأمور عايمة تماما
تحديدك للكلام ده هيفرق جدا معاك عشان يبقي ال scope واضح وفي نفس الوقت تقدر تعمل estimation
للوقت
والتكلف
طب هتعمل ال scope ده ازاي
انت بقي هتشتغل هنا BA
روح لل ChatGPT خليه ياخد ال features and functions اللي طلعتها
وطلع منها
1. BRSD
Business Requirement specification document
2. User Stories and acceptance criteria
طلع من ال BRSD ال User Stories
3. QA Test Cases
هتطلعها من ال user Stories
بعد كد تطلب من لل ChatGPT انه يشتغل
ك expert product owner ويبدأ
يعمل review علي
1. BRSD
2. User stories
3. QA test cases
هنا ال BRSD بقي هو ال Scope وفي نفس الوقت
انت ك developer هتشتغل علي ال user Stories
الطريقة دي هيساعدك كتير جدا في شغلك انه يكون عندك awareness بالمشروع
تقدر كمان تطلع ال database Schema وتعملها design بناء علي
BRSD , User Stories
بعد كده بقي تاخد الكلام ده كله وتروح لل
Windsurf
Cursor
Google antigravity
Claude code
تخليه يعملك implementation plan بناء علي ال 3 ملفات اللي طلعتهم وتراجع معاه ال
Implementation plan
Tasks اللي هيكتبها
الطريقة دي مش بس هتخليك فاهم البيزنس ده كمان هتساعدك انك تنجز المشروع في وقت سريع جدا
انا اشتغلت علي مشروع بنفس الطريقة اللي انت شايفها فوق ال implementation = 40 min
Analysis and design = 1 hour
المشروع اتعمل docker
لسه طبعا قي في Security test , Load testing, Database Testing
دمتم بخير
وانت متعرفش عنه حاجه
افتح الموقع بتاع المشروع الفلاني وشوف فيه الاتي
1. List of Features
2. List of functions in each feature
بعد كده بقي حدد ال scope اللي هتشتغل عليه متسبب الأمور عايمة تماما
تحديدك للكلام ده هيفرق جدا معاك عشان يبقي ال scope واضح وفي نفس الوقت تقدر تعمل estimation
للوقت
والتكلف
طب هتعمل ال scope ده ازاي
انت بقي هتشتغل هنا BA
روح لل ChatGPT خليه ياخد ال features and functions اللي طلعتها
وطلع منها
1. BRSD
Business Requirement specification document
2. User Stories and acceptance criteria
طلع من ال BRSD ال User Stories
3. QA Test Cases
هتطلعها من ال user Stories
بعد كد تطلب من لل ChatGPT انه يشتغل
ك expert product owner ويبدأ
يعمل review علي
1. BRSD
2. User stories
3. QA test cases
هنا ال BRSD بقي هو ال Scope وفي نفس الوقت
انت ك developer هتشتغل علي ال user Stories
الطريقة دي هيساعدك كتير جدا في شغلك انه يكون عندك awareness بالمشروع
تقدر كمان تطلع ال database Schema وتعملها design بناء علي
BRSD , User Stories
بعد كده بقي تاخد الكلام ده كله وتروح لل
Windsurf
Cursor
Google antigravity
Claude code
تخليه يعملك implementation plan بناء علي ال 3 ملفات اللي طلعتهم وتراجع معاه ال
Implementation plan
Tasks اللي هيكتبها
الطريقة دي مش بس هتخليك فاهم البيزنس ده كمان هتساعدك انك تنجز المشروع في وقت سريع جدا
انا اشتغلت علي مشروع بنفس الطريقة اللي انت شايفها فوق ال implementation = 40 min
Analysis and design = 1 hour
المشروع اتعمل docker
لسه طبعا قي في Security test , Load testing, Database Testing
دمتم بخير