-
المساهمات
3560 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
34
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
أجوبة بواسطة سمير عبود
-
-
مرحباً ياسين ،
يمكنك إستخدام إضافة select2 مع خيار التعدد (multiple) و هذا مثال بسيط عن إستخدامها.و بخصوص الbackend سيتم إرسال مصفوفة مع الطلب تضم القيم التي إختارها المُستخدم.
بالتوفيق.-
1
-
-
مرحباً @Ahmed Edress
هناك العديد من المجالات التي يُمكنك العمل فيها على منصات العمل الحر سواء الأجنبية أو العربية لكن أنصحك في بداية الأمر الدخول إلى المنصات العربية و أشهرها منصة مستقل و خمسات لكن تأكد أن المنافسة على المشاريع شديدة و فُرصة الحصول على مشروعك الأول صعبة لكن الأمر ليس مُستحيل فكما حصل المستقلين السابقين على أول عمل لهم يُمكنك أنت أيضاً، لكن هناك بعض النقاط ضرورية تزيد من فرصك للحصول على أول مشروع لك:- إختيار مجال على المنصة هناك عدة مجالات: أعمال وخدمات استشارية، برمجة، تطوير المواقع والتطبيقات، تصميم وأعمال فنية وإبداعية، تسويق الكتروني ومبيعات،كتابة ، تحرير، ترجمة ولغات، دعم، مساعدة وإدخال بيانات، تدريب وتعليم عن بعد ...
- عليك إكتساب خبرة كافية تُخولك لإنجاز مشاريع بالجودة التي يريدها صاحب المشروع في المجال الذي اخترته و هذا الشيء ضروري يُمكنك إلقاء نظرة عن عينة من المشاريع و التأكد من ذلك هل أنت فعلاً قادر على إنجازها أم لا؟
- الإهتمام بملفك الشخصي و معرض أعمالك لأنه واجهتك بالنسبة لصاحب المشروع و هو الدليل على خبرتك في المجال
- تقديم عروض إحترافية و مُقنعة و غير مبالغ فيها على المشاريع و عند وتقديمك للعرض ضع نفسك مكان صاحب المشروع و اسأل نفسك هل صاحب هذا العرض هو الشخص المُناسب أم لا.
ستجد على مدونة مُستقل و مدونة خمسات العديد من النصائح و المقالات التي ستكون مفيدة لك أذكر منها:
أتمنى لك التوفيق
-
1
-
مرحباً @الشيخ المختار الشنقيطس
أنماط التصميم (Design Patterns) هي عبارة أساليب أو طرق مٌبتكرة يتم إستخدامها لحل مشاكل مُتكررة أي صادفت العديد من المُطورين من قبل. ويُمكن تقسيم هذه الأنماط إلى عدة أنواع يُمكن إختزالها في ثلاثة أنواع:- أنماط التصميم الإنشائية
- أنماط التصميم الهيكلية
- أنماط التصميم السلوكية
لكن قبل الدخول و الغوص في هذا المجال عليك معرفة أن هذه الأنماط ليست متعلقة بلغة برمجة مُعينة و إنما يُمكن تطبيق النمط بأي لغة برمجة. أيضا حتى تستطيع فهم النمط و أين تستخدمه و ماهي الحالات التي تستعمل فيها النمط عليك أن تدرس و تفهم البرمجة الكائنية جيدا وتفهم الأسس الأربعة التي بُنيت عليها:
- Abstraction
- Encapsulation
- Inheritance
- Polymorphism
بعد فهم هذه المبادئ جيداً أدرس العلاقات بين الكائنات ك Association ، Composition Aggregation و ماهو الفرق بينها، بعدها أدرس مبادئ التصميم و هي 5 و تُسمى SOLID principles بعد الفهم الجيد لهذه الأشياء ستتمكن من فهم أنماط التصميم و كيفية تطبيقها و متى تُطبقها.
- يُمكنك متابعة هذه السلسلة من خلال هذا الرابط: SOLID Principles بالعربى
- ثم هذه السلسلة: Creational Design Patterns بالعربى
- ثم هذه السلسلة: Structural Design Patterns بالعربى
إذا كنت تستخدم لغة PHP فستُفيدك هذه السلسلة جيداً كما قلت سابقاً فالأنماط ليست تابعة للغة مُحددة يُمكنك تطبيقها بأي لغة كانت: إضغط هنا
كما يُمكنك الإعتماد على توثيق موسوعة حسوب بخصوص أنماط التصميم من: هنا
كما يوجد بعض المقالات حول أنماط التصميم على الأكاديمية يُمكنك الوصول لها من خلال هذا الرابط: إضغط هنا
بالتوفيق.-
1
-
مرحباً بك
المطلوب منك إكمال شيفرات التوابع الموجودة في الصنف ConcordanceBuilderC هذا الصنف سيقوم بإنشاء فهرس كامل للكلمات المُكونة لجُملة ما لذلك ستقوم بتمرير الجُملة التي تريد أن تعمل لها فهرس كمُعامل أو كوسيط للدالة البانية لهذا الصنف. و ذلك عند إنشاء كائن من الصنف ConcordanceBuilderC و بعدها تقوم بتنفيذ التابع buildConcordance على الكائن الذي أنشأته، هذا التابع المفروض يقوم بالمرور على كلمات الجُملة كلمة تلو الأخرى و يقوم بإضافتهم إلى الArrayList المُسماة concordance بشرط عدم تكرار الكلمة و إذا وجد أن الكلمة تمت إضافتها من قبل يقوم برفع عدد تكرار الكلمة ب 1 أو عدد تواجد الكلمة في الجُملة كما يقوم بإضافة موضع الكلمة إلى الArrayList المُسماة whereOccurence و هكذا حتى إنتهاء كلمات الجُملة.
و في الأخير يقوم بطباعة الفهرس و ذلك من خلال إستدعاء التابع displayConcordance على الكائن المنشأ و هذا ما تم كتابته في الصنف ConcordanceMain و عند تنفيذ البرنامج سيتم تنفيذ الدالة main الموجودة في هذا الصنف و يوجد خطأ في الدالة main فالمفروض تكون بهذا الشكل:public class ConcordanceMain { public static void main(String[] args) { // TODO Auto-generated method stub String sentence1 = "Hello dear I am a student and I love Programming " + "My name is Ahmed " +"Ahmed likes java and Programming"; String sentence2 = "Hi Hi"; ConcordanceBuilderC con = new ConcordanceBuilderC(sentence2); // كان لديك خطأ في إسم الكلاس هنا con.buildConcordance(); con.displayConcordance(); } }
قم بمحاولة إكمال الشيفرات البرمجية بنفسك و إذا لم تستطع يُمكنك البحث أكثر أو طلب المُساعدة بطرح إستفساراتك هنا و سنقوم بمُساعدتك للوصول إلى المطلوب.
بالتوفيق. -
مرحباً @عبد الواحد الحدادي
يُمكنك مُشاهدة هذا الفيديو لإنشاء قائمة جانبية تتحرك من اليسار إلى اليمين:و مع بعض التعديلات في التنسيقات كتغيير قيمة الخاصية float من left إلى right و أيضا التعديل في قيم تموضع بعض العناصر ستتمكن من تغيير تحرك القائمة من اليمين إلى اليسار إذا لم تتمكن من ذلك يُمكنك مُشاهدة هذه الpen:
بإمكانك مشاهدة المثال التالي: إضغط هنا فيه ستجد قائمة جانبية تم إنشاؤها بإستخدام bootstrap و مكتبة jQuery كما يُمكنك الإطلاع على الأكواد البرمجية الخاصة بها.
بالتوفيق.-
1
-
-
مرحباً @Barmaja Barmaja
نحن كمربمجين أو كمطورين لسنا مُلزمين بحفظ الأكواد أو الشيفرات البرمجية إنما علينا إيجاد حلول برمجية للمشاكل وفهم الأسس و المبادئ على سبيل المثال يُمكننا نسيان طريقة كتابة حلقة for في لغة جافاسكربت لكن لا يُمكننا نسيان مفهوم الحلقة و ماهي فائدتها و لماذا نستخدمها فإذا نسينا طريقة الكتابة يُمكننا ببساطة الرجوع إلى توثيق اللغة أو درس من دورة ما أو مقال و سنتذكر طريقة الكتابة لكن إن نسينا المفهوم في حد ذاته هنا المشكلة.
بما أنك في بداية المشوار فهذا الأمر طبيعي لكن بالممارسة و التطبيق العملي و إنشاء مشاريع كثيرة ستتعود على كتابة الشيفرات البرمجية حتى و إن نسيت يُمكنك المراجعة حينها فنحن لسنا في إمتحان.
الخلاصة ببساطة يمكنك أن تنسى طريقة تطبيق المفهوم، لكن لا يليق بك أن تنسى المفهوم نفسه.
بالتوفيق.-
3
-
-
مرحباً @salahkr
نعم بإمكانك الإعتماد على إطار Bootstrap أو أحد الأطر الأخرى ك Foundation أو Bulma أو Materialize ... أو يُمكنك إستخدام tailwind الذي يُعتبر أيضاً إطار عمل من المستوى المنخفض خاص بالcss فعِوض أن تكتب خصائص css ستقوم بكتابة مجموعة من الأصناف (classes) تُعبر عن كل خاصية في كل عنصر و هذا التوثيق الخاص بكل إطار:
لكن قد تجد نفسك أحياناً في حالات تُحتم عليك تعديل بعض الأشياء و في هذه الحالة سيتوجب عليك كتابة css العادي أحياناً المشروع ككل عبارة عن صفحة واحدة لعرض مُنتج أو صفحة نزول لتطبيق إلكتروني يُمكنك في هذه الحالة إستخدام الcss العادي لأنك بطبيعة الحال لن تحتاج لكافة الكلاسات و الخصائص التي يُوفرها إطار العمل. عند إستخدامك لإطار العمل ستجد نفسك مقيد بالقيم التي يوفرها بعكس عند إستخدامك للcss العادي فستكون لديك الحُرية الكاملة لإستخدام القيم التي تريد.
بالتوفيق.-
2
-
-
بتاريخ 5 ساعات قال Abderahman Benchalel:
الحمد لله فهمت الفكرة
أنت قلت لكي يكون الكود دقيق (الشرط في loop الداخلية يكون w أقل أو يساوي coun )، عشان إذا كان hgt = 3 نحصل على ثلاث أعمدة، ممتاز، طبقتها وكلام ما عليه غبار.
السؤال، بما أننا نريد w يساوي coun في مرحلة ما لكي يطبع 3 من #، كيف خلينا coun يساوي 3 أصلا بما أن hgt = 3، فالشرط في loop الخارجية أن يكون coun أقل من hgt وإلا نخرج من loop، وسامحنا تعبناك

العداد coun يبدأ من 0 إلى الإرتفاع بمعنى إذا كان hgt == 3 فسيكون تكرار الحلقه الخارجية 3 لأن العداد يبدأ من 0 و سيأخذ القيم 0، 1، 2 و هو ما يوافق عدد الصفوف أو الإرتفاع 3
العداد w يأخذ قيما متعلقة ب coun فعندما يكون coun == 0 سيتم الدخول إلى الحلقة الداخلية و تنفيذ محتواها و هذا إذا كان الشرط فيها أقل أو يساوي و بالتالي سيتم طباعة # مرة واحدة. أما عندما يكون coun == 2 فتكرار الحلقة الداخلية سيكون 3 و w سيأخذ القيم 0، 1، 2 و بالتالي سيتم طباعة ### 3 مرات و بهذا الشكل نكون قد حققنا الهرم المطلوب:
hgt == 3
coun == 0, 1, 2 : ثلاثة لفات تقابلها 3 صفوف في الهرم
w في اللفة الأولى للحلقة الخارجية سيكون 0 و بالتالي طباعة # مرة واحدة ثم الإنتقال إلى سطر جديد
w في اللفة الثانية للحلقة الخارجية سيكون 0 ثم 1 و بالتالي طباعة ## مرتين ثم الإنتقال إلى سطر جديد
w في اللفة الثالثة للحلقة الخارجية سيكون 0 ثم 1 ثم 2 و بالتالي طباعة ### ثلاث مرات ثم الإنتقال إلى سطر جديد و في هذا الوقت سيكون coun == 2 و عند رفع قيمته ب 1 سيُحقق شرط الخروج من الحلقة الخارجية لأن hgt == 3 ثم إنهاء البرنامج و النتيجة ستكون
#
##
###
بالتوفيق.
-
1
-
-
بتاريخ 54 دقائق مضت قال هشام عثمانيه:
شكرا.. حيرتني يا أخي.!!! ¿¿¿. ممكن معك الحق فيما قلته...
Hsoub.com.. عاملين كل الدورات.. تتلاقى مع مستوى المبتدئين...
خير إن شاء الله..
نعم هذا صحيح فالدورات تبدأ معك من البداية لكن أنا نصحتك بدراسة مسار مدخل إلى علوم الحاسوب لأنه سيُسهل عليك فهم دروس لغة روبي كثيراً .
اتمنى لك التوفيق
-
1
-
-
مرحباً @هشام عثمانيه
إذا كنت مبتدئ و مهتم بلغة روبي أنصحك قبل كل شيء بدراسة المسار الأول من دورة علوم الحاسوب لأنه عند إشتراكك في أي دورة من دورات الأكاديمية ستستطيع الوصول إلى المسارات الأولى من بقية الدورات الأخرى. لذلك عند إشتراكك في دورة روبي إبدأ بمسار مدخل إلى علوم الحاسوب لأنه يشرح أساسيات البرمجة و الخوارزميات و التفكير المنطقي بأسلوب سهل و مُبسط وشيق. بعد إنهاء هذا المسار ستتمكن من فهم مسار أساسيات لغة روبي و ذلك بمساعدة المدربين أيضاً لأن الأكاديمية توفر لك مجموعة من المدربين لمساعدتك و الرد على إستفساراتك في أي وقت من خلال طرحها في صندوق التعليقات المخصص لكل درس.
بالتوفيق.
-
بتاريخ 7 ساعات قال Abderahman Benchalel:
@ياسين عناية، @عزام عبد الحافظ، @عبود سميربارك الله فيكم جميعا،
سؤال أخير، في منطق البرمجة الحلقة التكرارية for loop، هل تقوم بتكرار الأمر بمقدار قيمة المتغير أم بمقدار الزيادة في قيمته، بمعنى، إذا كان المتغير x قيمته 3 هل يتكرر 3 مرات، أم أنه يتكرر بمقدار زيادة واحدة في قيمة المتغير، بحيث إذا أصبحت قيمة المتغير x تساوي 4 ف loop يتكرر مرة واحدة 1، شكرا جزيلا.
أولا عليك فهم طريقة كتابة الحلقة for:
for ( init; condition; increment ) { // code here }
init: يتم تنفيذه مرة واحدة في البداية ويتم فيه تهيئة المتغيرات
condition: هو شرط يتم التحقق منه في كل لفة إذا كان الشرط صحيح يتم تنفيذ ما بداخل الحلقة من تعليمات إذا كان خاطئ يتم الخروج من الحلقة.
increment: في هذا الجزء يُمكنك تغيير قيمة متغيرات التحكم في الحلقة و يتم تنفيذه كل مرة بعد تنفيذ التعليمات التي بداخل الحلقة و بعده يتم التحقق من الشرط ثانية.
لذلك فمقدار التكرار مُعتمد على هذه الأجزاء الثلاثة لكن وجودها ليس ضروري لكن وجود الفاصلة المنقوطة التي تفصل بين هذه الأجزاء ضروري فمثلاً يُمكن أن نجد شيء هكذا:
#include <stdio.h> int main() { int i = 2; // init for( ; ; ) { if(i >= 10) { // condition break; } printf("%d\n", i); i += 2; // increment } return 0; }
و هذا المُخطط يُوضح طريقة عمل حلقة for:
بالتوفيق.
-
مرحباً @Abderahman Benchalel
فلتأخذ البرنامج خطوة بخطوة:أولا:
int hgt;
هنا قمنا بتعريف متغير من النوع العددي(int)
ثانياً:do{ hgt = get_int("height:\n"); } while(hgt < 1 || hgt > 8);
في هذا الجزء نقول للبرنامج كرر ما بداخل الحلقة ما دام الإرتفاع الذي يُدخله المُستخدم أصغر تماماً من 1 أو أكبر تماماً من 8 بمعنى إذا أدخل المستخدم عدداً صحيحا من المجال [1,8] سيمر إلى التعليمة التي بعد حلقة do .. while غير هذا سيبقى يسأل المُستخدم عن إدخال الإرتفاع.
ثالثاً:for(int count = 0; count < hgt; count++) { // التعليمات التي بداخل هذه الحلقة ستتكرر حسب الإرتفاع for(int w = 0; w < count; w++) { printf("#"); } printf("\n"); }
لفهم هذين الحلقتين فلنأخذ مثال و لنجعل hgt = 3
الحلقة الأولى العداد count سيأخذ القيم التالية: 0, 1, 2
من أجل كل قيمة من القيم الثلاثة سنقوم بعمل حلقة سيأخذ العداد w فيها قيماً متعلقة بقيمة العداد الأول بمعنى- عندما يكون count == 0 لن يتم تنفيذ الحلقة الثانية و سيتم تنفيذ فقط أمر الطباعة
printf("\n");
و هو يعني أترك السطر الحالي و إنتقل إلى سطر جديد
- عندما يكون count == 1 الحلقة الثانية ستتكرر مرة واحدة و السبب أن w سيأخذ قيما من هذا المجال [0, 1[ أي سيأخذ قيمة واحدة و هي 0 و بالتالي سيتم طباعة # مرة واحدة ثم يخرج من الحلقة الداخلية و بالتالي سيجد أمر الإنتقال إلى سطر جديد.
- عندما يكون count == 2 الحلقة الثانية ستتكرر مرتين و السبب أن w سيأخذ قيما من هذا المجال [0, 2[ أي 0 ثُم 1 و بالتالي سيتم طباعة ##و بالتالي سيكون الناتج:
#
##
حتى نحصل على الشكل الصحيح على الحلقة الثانية ان تكون بهذا الشكل:
for(int w = 0; w <= count; w++) { printf("#"); }
حتى تفهم منطق الفكرة عليك أن تُفكر أنه لدينا جدول عدد صفوفه هو hgt و عدد أعمدته هو hgt و كل خانة مُحددة بإحداثيتن (count, w) بحيث count هو رقم الصف و w هو رقم العمود و نريد ملأ خاناته بهذا الرمز # نحتاج بشكل أساسي إلى حلقتين متداخلتين
1- إذا كنا نريد ملأ كافة الخانات فسيكون تكرار الحلقة الداخلية نفس تكرار الحلقة الخارجية من أجل كل قيمة لعدادها أي أن count سيأخذ قيما من 0 إلى hgt و من أجل كل قيمة له سيأخذ w قيماً من 0 إلى hgt أيضاً.2- إذا كنا نريد ملأ فقط الخانات التي تحت القطر أو الوتر: الخانات القُطرية هي التي تقع في (1, 1) , (2, 2) ... , (hgt, hgt) بمعنى أن الخانات القطرية يكون فيها الصف يُساوي العمود و في هذه الحالة سيكون تكرار الحلقة الداخلية متعلق بقيمة عداد الحلقة الأولى يعني أن عداد الحلقة الداخلية سيأخذ قيماً من 0 إلى قيمة عداد الحلقة الخارجية في تلك اللفة.
بالتوفيق .-
1
-
-
مرحباً @Bassel Ahmed
لغة البرمجة التي بنيت عليها هذه المكتبة هي لغة JavaScript لذلك تحتاج إلى تعلم أساسيات لغة JavaScript ثم تنتقل إلى تعلم معايير ES6 وما فوق و بعدها تتعلم أساسيات node.js.
من خلال الموقع الرسمي للمكتبة فهي تعتبر وحدة خاصة ب node.js للتعامل مع الBots
BOT: هو تطبيق برمجي يتم بناؤه لعمل بعض المهام الإعتيادية المتكررة و يعمل بشكل اوتوماتيكي و بشكل اسرع.
Node.js : هو نظام برامج مبني على محرك chrome JavaScript v8 و تم عمله لبناء تطبيقات انترنت قابلة للتوسع كخوادم ويب لأن لغة جافاسكربت تعمل فقط في المتصفح و بإستخدام node.js يمكننا إستخدامها في جهة الخادم أيضاً
Es6: هي عبارة عن معايير موحدة تم عملها من قبل منظمة متخصصة.
بالتوفيق
-
1
-
-
بتاريخ 4 ساعات قال Abdulhadi A Abou Samra:
شكراُ لك أ. عزام ..
الأن F1, F2 متغيران .. أستطيع إستبدالهم ب X و Z بدون مشكلة ..
وبذلك يُمكن للمستخدم أن يدخل القيمة بنفسهمرحباً بك
نعم يمكنك إستبدال أسماء المتغيرات بأي إسم آخر تراه مناسب لك وذلك وِفق قواعد تسمية المتغيرات لكن عليك تغيير كافة مواضع المتغيرين f1 و f2 بالمتغيرات الجديدة التي اخترتها.
بالتوفيق.
-
مرحباً @Momen Gamal
التعبير البرمجي الشرطي ( if statement ) متشابه في كافة لغات البرمجة و يُكتب بهذا الشكل:if (condition) { // في حالة تحقق الشرط } else { // في حالة عدم تحقق الشرط }
أما الشرط المٌختصر أو كما يُسمىConditional (ternary) operator فيُكتب بهذا الشكل:
condition ? exprIfTrue : exprIfFalse
بمعنى إن كان الشرط صحيح نفِذْ ما بعد علامة الإستفهام و إن كان خاطئ نفِذْ ما بعد النقطتين
مثلاً: نريد إنشاء دالة لإرجاع القيمة الأكبر (max) من قيمتين أي أننا سنقوم بإنشاء دالة تقبل وسيطين و ترجع الأكبر
1- بإستخدام if statement العادية:function max(n1, n2) { var max; if(n1 > n2) { max = n1; } else { max = n2; } return max; }
2- بإستخدام ال ternary operator:
function max(n1, n2){ var max = (n1 > n2) ? n1 : n2; return max; }
أو يُمكننا الإستغناء عن المتغير max بهذا الشكل:
function max(n1, n2){ return (n1 > n2) ? n1 : n2; }
مراجع:
1- MDN
2- موسوعة حسوب
3- javascript.info
كما يُمكنك إلقاء نظرة على هذا المقال:بالتوفيق.
-
1
-
-
مرحباً صالح
لا يُمكن معرفة صلاحية الكوبون من عدمه لذلك أنصحك بالتواصل مع فريق الدعم للإستفسار عن الأمر و سيردون عليك في أقرب وقت.يُمكنك زيارة مركز المساعدة من خلال هذا الرابط: إضغط هنا و قُمْ بفتح تذكرة للإستفسار و إن كان الكوبون صالح سيُعلِمونك بذلك.
و إن كان معك كوبون صالح يُمكنك إستعماله من خلال:
كما يُمكنك الإستفسار من فريق الدعم كيفية إستعماله و الإستفادة منه أيضاً. بالتوفيق.-
1
-
-
مرحباً فايزة .
بدايةً أدعوك للإطلاع على بعض من مقالات الأكاديمية بخصوص لغة روبي و فهمها من خلال الرابط التالي: إضغط هنا
و برأيي عدم التسرع في الإنتقال إلى المسارات القادمة و فهم الأساسيات جيداً لأن فهمها جيداً سيُسهل عليك باقي المسارات حتى ولو اظطررتي لإعادة المسار الأول ثانيةً .
إذا كانت الأمور تبدو صعبة الفهم عليك و هذا ما ألاحظه فأنصحك بمشاهدة المسار الأول من دورة علوم الحاسوب لأنه سيكون مفتوح لكِ كما أنه يشرح أساسيات البرمجة و الخوارزميات بأسلوب سهل و مُبسط بعد إنهاء هذا المسار ستتمكنين من فهم مسار أساسيات لغة روبي و ذلك بمساعدة المدربين أيضاً .
الصبر و التطبيق العملي مفتاح تعلم البرمجة لا تتسرعي في مُشاهدة الدروس و تخطيها بدون فهم لأن هدفنا ليس إتمام الدورة و إنما فهم فحواها و ما ترمي إليه حتى و لو أخذ منك المسار الأول وقتاً طويلاً. قد يأخذ منك درس واحد مدة 3 أيام لفهمه و هذا هو الأهم لا تكترثي لأي شيء آخر فأغلبنا مر بهذا الأمر في البداية.
أنصحك و أنت تشاهدين الدرس بوضع دفتر بجانبك لكتابة بعض الملاحظات المهمة التي يقولها المُدرب لأنكِ ستحتاجين لها للمراجعة في الدروس الموالية
أتمنى أن تأخذي هذه النقاط على مُحمل الجد لأنها ستكون مفيدة و مُساعدة لك.
دعني أعطيك مثال على درس المتغيرات و العمليات مثلاً: المدرب يعطيك مفاهيم و أمثلة بسيطة بعد مُشاهدة الدرس و كتابة ملاحظاتك و التطبيق مع المُدرب تأتي مرحلة التطبيق مع نفسك و في هذه المرحلة ستُخالفين المُدرب فيها و تجربين أشياء من عندك حتى و لو كانت هذه الأشياء خاطئة إذا ظهرت لك أخطاء ما يُمكنك الرجوع إلى ملاحظاتك أو حتى إعادة الدرس فمثلاً لو قام المُدرب في الدرس بجمع عددين و عرض الناتج ستقومين أنت بجمع 3 أعداد و طرح عدد رابع منها و تطبعين النتيجة و هكذا في الدروس القادمة و بهذا الشكل سيتطور مُستواك شيئاً فشيئاً .
أتمنى لكِ التوفيق-
1
-
-
-
مرحباً @خالد مجذوب
البدايات دائماً ما تكون صعبة فحتى تتعود على كتابة الأكواد بنفسك عليك أن تُطبق كثيراً لا تحفظ الأشياء و إنما تعلم كيفية عملها طبق وراء المُدرب كثيراً و أعطِ لنفسك وقت لفهم و إستيعاب الدرس جيداً و لا تنتقل إلى الدرس المُوالي قبل فهمك للدرس الحالي , لا تعتمد فقط على مقاطع الفيديو و الدروس المرئية هناك دروس و مقالات على الأكاديمية ستُفيدك أيضاً اعتمد على موسوعة حسوب فبها توثيق لمُعظم اللغات و التقنيات.
بعد إنهائك لمسار من المسارات لا تنتقل مباشرة إلى المسار القادم حاول التفكير في عمل مشروع صغير بالمعرفة و المعلومات التي كسبتها من خلال المسار و من خلال بحثك من هنا و هناك. لا تقلق إن نسيت شيء فيُمكنك الرجوع له في أي وقت و هذا ليس شيء خاطئ بالعكس فهذا شيء جيد فنحن لا نحفظ الشيفرات البرمجية. عند عملك لمشروعك الصغير ستواجهك بعض المشاكل هذه الأخطاء و المشاكل هي ما يجعلك مُحترف و يجعل مُستواك يرقا و يتطور حاول إيجاد حلول لها جرب الحلول التي تراها مناسبة و لا تخف منها جرب حتى ولو كان ما يمليه عليك عقلك خاطئ إبحث من خلال مُحرك البحث أو إسأل هنا في الأكاديمية أو في مجتمع حسوب.
ستُلاحظ بعد إنجازك لشيء أو فكرة من مخيلتك ببعض من الراحة و هذا ما سيُعطيك دافع للإستمرار في التعلم . طبق هذه المراحل على كافة مسارات الدورة و ستُلاحظ فرق في المُستوى.
في الأخير أريد أن أنوه لشيء و هو أن المرء لن يُصبح خبيراً بين ليلة و ضحاها يحتاج وقت و صبر ومثابرة وإرادة. عليك بالتطبيق العملي كثيرا حتى و لو كنت تٌطبق مع المُدرب أو من فيديو سيأتي وقت و تتعود و تتمكن من الإعتماد على نفسك حاول مُخالفة المُدرب قليلا و جرب بعض الأمور من عندك فهذا سيفيدك أيضاً.
آمل أن أكون قد أفدتك بشيء أتمنى لك التوفيق. -
مرحباً @Ali Kangooni
إذا كنت تريد عرض ثلاث صور مثلاً و عند الضغط على أحد هذه الصور تقوم بعرض صورة من 3 صور أخرى تكون مخفية و تريد عرض هذه الصورة عشوائياً يُمكنك إستخدام هذه الطريقة:
اولاً تقوم بإضافة كافة الصور إلى صفحة ال html الخاصة بك بهذا الشكل مثلا:<img id="img_1" src="https://via.placeholder.com/200?text=1" alt="صورة 1"> <img id="img_2" src="https://via.placeholder.com/200?text=2" alt="صورة 2"> <img id="img_3" src="https://via.placeholder.com/200?text=3" alt="صورة 3"> <img id="img_4" src="https://via.placeholder.com/200?text=4" alt="صورة 4"> <img id="img_5" src="https://via.placeholder.com/200?text=5" alt="صورة 5"> <img id="img_6" src="https://via.placeholder.com/200?text=6" alt="صورة 6">
هنا قمنا بإستعمال موقع placeholder لإضافة صور للصفحة كما قمنا بإعطاء كل صورة مُعرف id خاص بها و ستظهر الصور بهذا الشكل:
ثانياً نقوم بإخفاء الصور 4 و 5 و 6 و ذلك بإستخدام خاصية display و نقوم بإعطائهم الصنف المُشترك hidden كي نستطيع تحديدهم لاحقاً بالجافاسكربت بهذا الشكل:<img id="img_4" class="hidden" style="display: none;" src="https://via.placeholder.com/200?text=4" alt="صورة 4"> <img id="img_5" class="hidden" style="display: none;" src="https://via.placeholder.com/200?text=5" alt="صورة 5"> <img id="img_6" class="hidden" style="display: none;" src="https://via.placeholder.com/200?text=6" alt="صورة 6">
ثالثاً نقوم بإعطاء الصنف clicked_img للصور 1 و 2 و 3 لأننا سنستخدمه في الجافاسكربت أيضا بهذا الشكل:
<img id="img_1" class="clicked_img" src="https://via.placeholder.com/200?text=1" alt="صورة 1"> <img id="img_2" class="clicked_img" src="https://via.placeholder.com/200?text=2" alt="صورة 2"> <img id="img_3" class="clicked_img" src="https://via.placeholder.com/200?text=3" alt="صورة 3">
الآن الصفحة تحمل 6 صور 3 منهم معروضة و 3 مخفية .
رابعاً ننتقل إلى جزء الجافاسكرت و سنستخدم مكتبة jQuery لأنها ستُسهل كتابة الشيفرات لذلك سنقوم بتضمينها أولاً بهذا الشكل:<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
خامساً نحتاج إلى كتابة دالة بإستخدام لغة جافاسكربت تقوم بإرجاع كل مرة رقم عشوائي نحن نقوم بتحديد المجال فقط:function randomInteger(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }
هذه الدالة تقوم بإرجاع كل مرة رقم عشوائي يكون محصور بين min و max فلو حددنا عند منادة الدالة المعاملات 4 و 6 فستجلب كل مرة رقم عشوائي 4 أو 5 أو 6.سادساً نقوم بكتابة شيفرات الجافاسكربت التي تقوم بمعالجة حدث النقر على الصور الثلاثة الأولى و التي أعطيناها الصنف clicked_img بهذا الشكل:$('.clicked_img').on('click', function() { // clicked_imgبمعنى قم بالتسمع لحدث النقر على أي من العناصر التي تحمل الصنف $('.hidden').hide(); // في حالة حدوث الحدث قم بإخفاء أي عنصر يحمل الصنف hidden var rand = randomInteger(4, 6); // إستدعاء الدالة السابقة لجلب رقم عشوائي من 4 إلى 6 $('#img_' + rand).show(); // بالإستعانة بالرقم العشوائي نكون مُعرف أحد الصور المخفية و نقوم بتحديد العنصر و إظهاره })
سابعاً في حالة كان أحد الصور الثلاثة 4 أو 5 أو 6 ظاهراً و قمنا بالضغط عليه نقوم بإخفائه بهذا الشكل:
$('.hidden').on('click', function() { $(this).hide(); })
و هذه ال pen تطبيق للمثال و الشرح أعلاه:
بالتوفيق.
-
بتاريخ 2 دقائق مضت قال Momen Gamal:
شكر ليك علي المعلومات القيمة بس ممكن لو سمحت ازي انت بتجيب المعلومات ديه منين وازي بتخلي نفسك متمكن من اللغه
يُمكنك دائما قراءة التوثيق الرسمي للتقنية او لغة البرمجة فمثلا typescript: هذا التوثيق الرسمي الخاص بها: إضغط هنا أيضا هناك موسوعة حسوب مرجع المطورين العرب: رابط الموسوعة فهي توفر توثيقاً لمعظم لغات و التقنيات البرمجية. و حتى تكون مُحترف في تقنية ما عليك عمل مشاريع بها بعد تعلم أساسيات هذه التقنية.
بالتوفيق.-
1
-
-
بتاريخ 21 دقائق مضت قال Momen Gamal:
انا دلوقتي بدرس الجافا اسكريبت وبحول احترفها بس ايه typescript نوع من الجافا اسكريبت
ال typescript هي مجموعة عليا ( superset ) من جافاسكربت و يتم ترجمة الأكواد والشيفرات التي يتم كتابتها ب TypeScript إلى شيفرات برمجية بلغة JavaScript العادية و ذلك لأن المتصفحات تفهم فقط تعليمات JavaScript . أي أن Typescript هي لغة برمجة . تم تطوير هذه اللغة من قبل شركة Microsoft بهدف تحسين ورفع إنتاجية مطورين جافاسكربت و تعتبر أيضا توسعة للغة جافاسكربت تدعم العديد من ميزات EcmaScript 6 و أيضا تدعم الأنواع و البرمجة الكائنية بما فيها تعريف الأصناف ( classes ) و الواجهات ( interfaces ) ففي لغة جافاسكربت لا نستطيع تحديد نوع المتغيرات فجافاسكربت تتحقق من نوع المتغيرات أثناء تشغيل البرنامج ( runtime ) فهي تعتبر من اللغات Dynamic type checking و هناك لغات تسمى static type checking في هذه اللغات تتم عملية التحقق من الأنواع أثناء الترجمة ( compile time ) و من هذه اللغات نجد c و c++ . نجد أن معظم الأخطاء في كثير من الحالات تكون متعلقة بالأنواع. لذلك فدعم TypeScript للأنواع إضافة جيدة.
بالتوفيق.
-
1
-
-
مرحباً @Momen Gamal
أنصحك بالإطلاع على هذا المقال: إضغط هنا فهو يشرح مُعظم نقاط الإختلاف بين الثلاثة و الأمر راجع لك في الأخير فكل مُطور له وجهة نظره و أهدافه و طريقة تعلمه و مجاله. برأيي أن كل من react و vue طريقة تعلمهما أسهل مُقارنة ب angular.
ايضا يٌمكنك الإطلاع على هذا الفيديو:و هذا الفيديو باللغة الإنجليزية:
بالتوفيق.
-
1
-
-
مرحباً @Mohammed Aladimi
الخطأ يفيد أن الدالة mysqli_query تقبل مُعاملين المُعامل الأول يكون من النوع mysqli و الثاني هو الكويري أو الإستعلام و نوعه string و في الحقيقة أن الدالة تقبل معامل ثالث إختياري هو عبارة عن ثابت يأخذ أحد القيمتين التاليتين:1- MYSQLI_STORE_RESULT و هو الثابت الإفتراضي أي أننا إذا لم نُحدد سيكون هو المُستخدم
2- MYSQLI_USE_RESULT حسب التوثيق الرسمي أن هذا الثابت نستعمله عندما نريد استرداد كمية كبيرة من البيانات.
هناك طريقتين للإستعلام بإستخدام mysqli:
1- الطريقة الإجرائية: ( Procedural ):
<?php $connection = mysqli_connect("localhost", "user", "password", "database_name"); // إنشاء رابط الإتصال بقاعدة البيانات // فحص إذا حدثت أخطاء غير متوقعة أثناء الإتصال if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } // إذا تم تجاوز الفحص هذا يعني أن الإتصال تم بنجاح // إذن يُمكننا الإستعلام من قاعدة البيانات if ($result = mysqli_query($connection, "هنا ستقوم بكتابة الإستعلام الذي تريده")) { // نقوم هنا بطباعة النتيجة أو الشيء الذي نريده // code here // أخيراً نقوم بتحرير الذاكرة المرتبطة بالنتيجة mysqli_free_result($result); } // هنا نقوم بإغلاق الإتصال الذي فتحناه مع قاعدة البيانات mysqli_close($connection); ?>
2- عن طريق البرمجة الغرضية التوجه:
<?php $mysqli = new mysqli("localhost", "user", "password", "database_name"); // إنشاء كائن أو نسخة من الصنف mysqli // فحص الإتصال if ($mysqli->connect_errno) { printf("Connect failed: %s\n", $mysqli->connect_error); exit(); } // إذا تم تجاوز الفحص هذا يعني أن الإتصال تم بنجاح // إذن يُمكننا الإستعلام من قاعدة البيانات if ($result = $mysqli->query("هنا ستقوم بكتابة الإستعلام الذي تريده")) { // نقوم هنا بطباعة النتيجة أو الشيء الذي نريده // code here // أخيراً نقوم بتحرير الذاكرة المرتبطة بالنتيجة $result->close(); } // هنا نقوم بإغلاق الإتصال الذي فتحناه مع قاعدة البيانات $mysqli->close(); ?>
يُمكنك الإطلاع على التوثيق الرسمي: إضغط هنا
كما يُمكنك أيضا إستخدام PDO التي تعني PHP Data Objects و تُعتبر إضافة تُعرف واجهة خفيفة للتعامل مع قواعد البيانات المُختلفة و تُوفر هذه الإضافة طبقة تجريد للوصول إلى البيانات يعني أنك ستستخدم نفس الدوال في مُختلف أنواع أنظمة قواعد البيانات ك MySQL و غيرها.
بالتوفيق.


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