مشروع التخرج ونصائح جانبية

في البداية هذه التدوينة مقدمة لكل طلاب وطالبات تخصصات الحاسب سواء كنت بالسنة الأولى أو الأخيرة.

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

مراحل مشروع التخرج

ينقسم مشروع التخرج عادةً على فصلين دراسيين كل مستوى يضم عدداً من المراحل

أولاً: الفصل الدراسي الأول: 

  • اختيار الفريق

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

 

  • اختيار الفكرة والمشرف

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

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

 

  • البدء بمرحلة البحث النظري

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

  • كتابة الجزء النظري من المشروع

(في هذا الجزء سأشرح نموذج مشروع التخرج في الجامعة التي درست بها)

Screen Shot 2018-08-31 at 6.48.22 PM

  • الفصل الأول:المقدمة

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

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

Screen Shot 2018-08-31 at 6.48.35 PM

  • الفصل الثاني: الدراسات السابقة

هذا الفصل يتناول مقدمة شاملة عن الموضوع الذي سيتم دراسته/تنفيذه بشكل عام، وأهم الدراسات البحثية والمشاريع التي تناولت الفكرة بشكل عام والتحدث عنها وعن أقسامها، ومن ثم التحدث بشكل خاص عن الدراسات السابقة المرتبطة بالمشروع والفكرة وفي الأخير ملخص للدراسات التي تمت بمميزاتها وعيوبها ورأيكم بكل دراسة وعلاقتها بالمشروع الخاص بكم.

Screen Shot 2018-08-31 at 6.49.12 PM

  • الفصل الثالث: تحليل النظام

يبدأ هذا الفصل بتحليل لنظام أو أكثر في نفس نطاق الفكرة، ومن ثم التحدث عن متطلبات النظام بأقسامه، وأخيراً تحليل النظام الخاص بالمشروع وخطوات تنفيذه، بدئاً برسم الـ Use Case الخاصة بالنظام، ومن ثم Methodology المتبعة في تخطيط النظام وهيكلته، والـ Life cycle الخاصة به، وشرح أقسام المشروع والمهام الخاصة بكل قسم وطريقة كيفية تنفيذ كل مهمة، ينصح وبشدة أن تشرح هذا الفصل برسومات لتسهيل عملية الفهم للقارئ ولك أنت عندما تبدأ بمرحلة التنفيذ.

Screen Shot 2018-08-31 at 6.49.20 PM

  • الفصل الرابع: تصميم النظام

ستناقش في هذا الفصل طريقة تصميم النظام باستخدام عدة Diagrams درستها مسبقاً في مادة هندسة البرمجيات وتحليل النظم والبرمجيات كل Diagram يختص بشرح أمر ما يخص المشروع.

في البداية ستصمم System Context و Architectural design مبدئي يعرض الصورة والهيكلة العامة للنظام أو المشروع بأقسامه بشكل high level.

ومن ثم ستبدأ بالغوص في تفاصيل كل قسم، من layout وكيفية تفاعله وارتباطه مع بقية الأقسام الأخرى، من أشهر الـ diagrams التي ستستخدمها:

Static Models: Class diagram, Data flow diagram, Entity Relationship diagram.

Dynamic Model: Sequence diagram.

Data Modeling: Database Design, Developed Algorithm.

وأخيراً ستعرض التصاميم الخاصة بالواجهات للنظام/التطبيق/الموقع الخاص بالمشروع (هذا القسم سيتم تصميمه في الفصل الدراسي الثاني).

ثانياً: الفصل الدراسي الثاني:

الفصلين الخامس والسادس سيتم كتابتها بالفصل الدراسي الثاني

Screen Shot 2018-08-31 at 6.49.56 PM

  • الفصل الخامس: التنفيذ واختبار النظام

هذا الفصل سيتم كتابته في نهاية الفصل الدراسي الثاني بعد تنفيذ المشروع، ستتحدث عن أهم الأدوات واللغات التي استخدمتها في تنفيذه، كيف استطعتم تنفيذ التصميم الذي خططتم له الفصل الأول (في هذه المرحلة أمر عادي جداً اذا حذفتم بعض الأمور المتعلقة بتصميم النظام أو أضفتم أشياء أخرى، لأنه مع التنفيذ ستطرأ عليكم أمور كثيرة)، وأهم الأكواد في المشروع والتي لها أهمية كبيرة في تنفيذه، وأخيراً اختبار النظام بأنواع اختبار البرمجيات المختلفة مثل: Unit test, Integration test, Usability test، وأهم النتائج التي صنعتموها والمتعلقة أساساً بحل المشكلة من البداية هل النتيجة تتماشى مع الحل الذي كُتب سابقاً أم لا؟

Screen Shot 2018-08-31 at 6.50.08 PM

  • الفصل السادس: الخاتمة والاضافات المستقبلية

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

 

  • يوم (البوستر)

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

 

  • المناقشة

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

نصائح جانبية:

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

https://twitter.com/omniay223/status/961641000287506432

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

 

أخيراً أتمنى لكم كل التوفيق والنجاح والمتعة في هذا المشوار، وبإذن الله تحصلون على الفائدة والمتعة والـ +A.

 

(TOC 1) اللغات والقواعد والآلات نظرياً

 في هذه السلسلة – ان شاء الله – سأشرح أهم المواضيع في منهج نظرية الحوسبة  في أكثر من مقالة ولمن أراد الاطلاع أكثر فمرجعي الرئيسي هو كتاب

An Introduction to FORMAL LANGUAGES and AUTOMATA

للكاتب

PETER LINZ

المنهج مهم جداً لطلاب علوم الحاسب فهو يناقش مجموعة من المفاهيم النظرية البحتة والتي ساعدت في انشاء علوم الحاسب والخوارزميات وعلم المنطق والتي يجب على كل طالب استيعابها وفهمها .

هناك ٣ محاور رئيسية لا بد من التحدث عنها قبل أن نسترسل في شرح أنواع القواعد والآلات الموجودة .

أولاً : اللغات : 

أغلب القواميس في جميع اللغات تعرف لنا اللغة بأنها نظام من التعبيرات لمجموعة من الأفكار والمفاهيم والحقائق وتضم عدداً من الرموز والقواعد لانشاء الجمل والكلمات بشكل صحيح تحت هذه اللغة .

نبدأها بمجموعة منتهية غير فارغة نسميها آلفابت Alphabet ويرمز لها برمز سيجما ∑ ومن خلال رمز واحد من الآلفابت يمكننا تكوين كلمة String والكلمة عبارة عن سلسلة منتهية من الرموز في الآلفابت .

مثال : لدينا الآلفابت التالية

∑ = {a, b}

فيمكننا انشاء كلمة ( نرمز لها بالرمز w ) تسمى abba أو a أو ba لأنها كلمات ضمن الألفابت الموجودة ، اذاً يمكننا عمل مجموعة لانهائية من الكلمات تحت آلفابت معينة .

طول الكلمة يرمز له بالرمز |w| وهو رقم يساوي عدد الحروف في تلك الكلمة واذا كان طول الكلمة يساوي الصفر فيعني ذلك أن تلك الكلمة تسمى (ايبسلون أو لمدا ) ونرمز لها بالرمز  λ .

λ|=0| .

ثانياً : القواعد :

تُعرَف القاعدة Rule عن طريق الرموز التالية

G =(V, T, S, P)

1- V : مجموعة من المتغيرات .

2- T : مجموعة من الرموز المنتهية التي ننهي بها الكلمة .

3- S : رمز البداية وهو ضمن T .

4- P : القواعد التي نتبعها في صنع أي كلمة ضمن آلفابت معينة وهي قلب وأساس أي قاعدة .

نفرض أن كل القواعد تأتي بهذا الشكل

x -> y

بحيث أن x تعني جميع المتغيرات والرموز المنتهية و y تحتوي على الرموز المنتهية والمتغيرات + الكلمة الفارغة λ .

مثال توضيحي :

G = { {S},{a,b},S,P}

و القواعد في هذه اللغة P

S -> aSb

S -> λ

أمثلة على الكلمات التي يمكننا اشتقاقها من هذه القاعدة

ab , aabb , aaabbb وهكذا ، اذاً اللغة الخاصة بهذا القاعدة عباره عن مجموعة من a تتبعها مجموعة من b بنفس العدد .

يمكننا كتابة اللغة بهذه الصيغة :

screen-shot-2017-01-30-at-9-09-43-pm

 ثالثاً : الآلات :

 الآلات Automata هي عبارة عن نموذج نظري للكمبيوترات الرقمية ، كل آلة لها ميكانيكا خاصة لقراءة المدخلات لكن لا تغيرها ويمكنها أيضاً تحديد نهاية وبداية كل كلمة أو مُدخل ويمكن أن يكون لها أجهزة تخزين وتحتوي على مجموعة من وحدات التحكم التي تتغير حالتها ومجموعة من دوال التغير المرتبطة بالمدخل والحالة الحالية للمدخل .

بإذن الله في المقالات التالية سوف نناقش ٤ أنواع من الآلات وطريقة عملها والقواعد التي تقبلها ومايخصها بشكل مخصص .

أدوات ومصادر مجانية لطلاب الحاسب

بسم الله الرحمن الرحيم

في البداية أبارك لكل الطلاب المقبولين في كلية الحاسب وأتمنى للجميع سنوات دراسية ممتعة لكم .

هذه تدوينة بسيطة تعريفية لأي طالب حاسب مستجد أو غيره عن أهم البرامج والأدوات المتوفرة من شركات كثيرة تقدمها للطالب مجاناً عن طريق الإيميل الجامعي .

في البداية :

نصيحة جانبية صغيرة : حاول خلال الأربع سنوات الدراسية في الكلية أن تطور من لغتك الإنجليزية وخصوصاً في مصطلحات الحاسب ، بحيث تتخرج وأنت عالأقل لديك معرفة باللغة الإنجليزية بنسبة ٦٠٪ .

أولاً : أهم المواقع التي تساعد طلاب الحاسب بتوفير أدوات مجانية أو خصومات :

١- Student Developer Pack

 بعض أهم الخدمات التي توفرها الحقيبة :

١- محرر Atom ( على الرغم آنه اليوم مجاني للجميع ) .

٢- الوصول إلى خدمات Amazon web services .

٣- تعلم أساسيات تطوير الويب مع معلم خاص بك لمدة أسبوعين في موقع Thinkful .

٤- شهر مجاني في موقع Udacity لبرامج Nanodegree .

٢- Jetbrains 

الحقيبة توفر

screen-shot-2016-09-24-at-5-48-57-pm

٣- DreamSpark

تحدثت عن هذه الخدمة في تدوينة كاملة لكن أهم الخدمات التي توفرها :

١- برامج Microsoft office .

٢- Visual studio .

٣- اشتراك لبعض خدمات Azure السحابية مجاناً والتي تحدثت عنها في ثلاث تدوينات .

والكثيير حسب مايحتاجه الطالب .

ثانياً : أهم المواقع في التعلم الذاتي من تجربتي الشخصية :

١- جامعات عريقة متخصصة :

١- Massachusetts Institute of Technology

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

٢- Stanford university

جامعة ستانفورد العريقة والمتميزة جداً توفر المحاضرات الجامعية للجميع .

٢- مواقع تعليمية

١- Udacity 

هذا الموقع في رأس القائمة ، دورات الأندرويد في الموقع مرتبة والأجمل أن بعضها من تقديم وشرح مطوري قوقل نفسهم .

٢- Udemy

الموقع يوفر دورات مجانية ومدفوعة في أكثر مجالات الحياة ، فقط ابحث في قسم development أو Database وتجد دورات لكل المستويات .

٣- Edx

هذا الموقع يقدم دورات مجانية بالتعاون مع عدة جامعات عريقة .

٤- codecademy

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

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

تجربة المستخدم لتطبيقات الجوال

بسم الله الرحمن الرحيم

تابعت قبل فترة هذا الكورس اللطيف جداً من موقع Udacity ومن باب نشر العلم والفائدة أحببت أن أخلص أهم النقاط وأشرحها بأسلوبي في هذه التدوينة لعل من لم يجد وقتاً للمشاهدة تساعده أو تفيده .

UX Design for Mobile Developers

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

Screen Shot 2016-08-11 at 9.40.48 PM

أولاً : الفرق بين تجربة المستخدم وواجهة المستخدم 

واجهة المستخدم : هي الواجهة التي تصممها ليتعامل معها المستخدم وهي ظاهرة له .

تجربة المستخدم : هي تجربة المستخدم مع تلك الواجهة ، اما أن تكون جيدة واما أن تكون سيئة .

ثانياً : كيف تستطيع أن تطور من مهاراتك لتصنع تجربة مستخدم جيدة لتطبيقك .

١- دائماً تخلص وابتعد عن نماذج التسجيل خصوصاً اذا كانت غير مهمة ولا تصنع فرق للتطبيق لديك لأن ذلك قد يكون أمراً مملاً ومنفراً للكثير من المستخدمين .

Screen Shot 2016-08-11 at 9.55.35 PM

استبدلها بتسجيل الدخول بحساب google , facebook , linkedin على حسب نوع تطبيقك وماتحتاجه ومن بعدها يمكن للشخص أن يعدل على بياناته بالتطبيق متى ما سمح له بذلك .

وفي هذا فائدة للمستخدم وفائدة لك بأن تبتعد عن مشاكل الـ user/password idintity وتستخدم تطبيقات جاهزة وفرت لك هذه الخدمة بسهولة .

٢- اذا كان تطبيقك يتضمن شراء / بيع وتريد صنع تجربة سهلة وبسيطة للمستخدم هو أن تستخدم pre-built payment مثل خدمات payPal أو Amazon وغيرها ، فأنت توفر الكثير من الوقت لنفسك وللمستخدم .

٣- قبل كتابة تطبيقك فكر بصورة أكبر واكتب كل الاحتمالات الممكنة التي قد يتعامل معها المستخدم ، مثلاً هل هذه المرة الأولى التي يستخدم فيها تطبيقي ؟ فهنا تكون الأمور مختفلة عن لو كان المستخدم قد استخدمه مرات عديدة .. مثال :

لنفترض أنك صعنت تطبيق لطلب البيتزا ، الاحتمالات الممكنة لديك :

أ- شخص يستخدم التطبيق أول مرة ، فهنا لابد للشخص أن يسجل موقعه ويكتب رقم حسابه البنكي ويحدد نوع طلبه المفضل للبيتزا .

ب- شخص استخدم التطبيق من قبل ، فهنا لا بد أن تكون قد حفظت كل بيانات المستخدم من قبل لتسهل له عملية الطلب وتكون لديه قائمة بما يفضله من طلب فيصبح تطبيقك حل سريع له وسهل بدلاً من أن يكتب معلوماته كل مرة يطلب فيها .

لذلك دائماً اكتب كل الخطوات التي سيتبعها المستخدم في استخدام التطبيق لكل احتمال تفكر فيه ، فمن شأن ذلك أن يساعدك ويرشدك .

٤- تطبيقك لموجه لمن ؟ هذا السؤال مهم لمساعدتك في فهم ماذا يريد ومالايريده المستخدم من التطبيق وكيف ستساعده لصنع تطبيق جيد سهل مفيد له ، والكثير يغفل عن ذلك الأمر لفرط الحماس ممكن ؟؟ 🙂

أ- حدد جمهور تطبيقك ، مالمشكلة التي حللتها لهم ؟ أو مالذي أضاف لهم تطبيقك ؟ هل حقاً سيساعدهم أم سيكون أمراً وجوده مثل عدمه ؟

ب- تخيل شخصية معينة من الفئة التي استقطبتها وفكر بها وهي تستخدم التطبيق ، حللها وفكر بكل الأمور البسيطة التي قد تخطر لهم فهذه الأمور من الممكن أن تصنع فارقاً كبيراً لتطبيقك فلا تستهن بها .

ثالثاً : القيود التي تواجه مطور تطبيقات الجوال وكيفية حلها 

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

٢- مستخدم الجوال مشتت لكثرة التطبيقات التي يتنقل إليها في الجوال أو حتى مشتت بالأمور التي ينشغل بها في الوقت الحالي ، مثلاً لنتخيل طالب جامعي يمشي لمحاضرته متأخراً في يده كوب قهوة ويحمل بيده الأخرى كتبه وجواله فبالطبع عقله مشغول بتأخره وجسده مشغول بالأشياء التي يحملها وفي نصف الطريق وصله تنبيه من تطبيق المكتبة التي استعار منها كتاباً بأنه قد تأخر في تسليم الكتاب عن الوقت المحدد فكيف نصمم تنبيه بشكل يساعد المستخدم ويسهل عليه حياته ؟

Screen Shot 2016-08-11 at 10.38.31 PM

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

٣- كيفية حمل المستخدم لجواله وكيف يسستخدم أصابعه على الشاشة ( Handness ) ، نعم هذا الأمر مهم جداً جداً ويغفل عنه الكثير من المطورين ، برأيك أي صورة تخدم المستخدم بشكل أفضل ؟

Screen Shot 2016-08-11 at 10.41.57 PM

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

في هذه الصورة ملخص لأهم الأماكن في الشاشة التي قد تساعدك في تصميم تطبيقك

Screen Shot 2016-08-11 at 10.45.39 PM

٤- شاشة صغيرة ، لذلك مصممي الواجهات والمطورين لديهم حلول جيدة لتغيير شكل واجهة التطبيق من Tablet لـ phone بما يسمى الـ combination كما في الصورة التي قد تشرح الأمر

Screen Shot 2016-08-11 at 10.47.56 PM

أو الـ Macro Reflow

Screen Shot 2016-08-11 at 10.48.12 PM

أو الـ Micro Reflow

Screen Shot 2016-08-11 at 10.50.05 PM

لن أشرح الأمر بالتفصيل لأنها تتطرق لأمور برمجية طويلة ، ولكن من الممكن أن تبحث عنها لتستفيد منها .

رابعاً : استخدم الـ Sensors والـ APIs التي تتوفر لمساعدتك في صنع تجربة ناجحة لتطبيقك 

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

الحل هنا الذي قد يستخدمه المطور لحل هذه المشكلة هو استخدام light sensor لمعرفة نسبة الاضاءة في الغرفة فلو لم توجد اضاءة لا يرسل التطبيق أي اشعار للمستخدم ويزعجه ، وهكذا .

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

SQL Azure

توفر خدمة آجور السحابية خدمة قواعد بيانات لك بكل سهولة وسرعة , توفر لك الخدمة أداء سريع وتوسع كبير جداً بحسب السعة التي تختاره وباستمرارية وبدون تعطل أو توقف مع سهولة وبساطة ادراتها من لوحة تحكم يستطيع أي شخص فهمها .

يستطيع المستخدم التركيز على التطبيق / الموقع الخاص فيه والامور المهمة له بدون الانشغال بعملية تكوين قاعدة بيانات وحمايتها وما إلى آخره لأنها مبنية على محرك SQL server وتوفر لك أدوات ومكتبات و APIs لتسهل عملك .

قاعدة بياناتك دوماً على اتصال

11

يوجد لدى مايكروسوفت مئات من مراكز البيانات التي تبقي خدماتك على اتصال دائم 24/7 بذلك لا يهتم المستخدم بكيفية تصميم وبناء واستضافة قواعد بيانات التي قد تأخذ الكثير من وقته ومن الممكن أن تشغله عن هدفه الرئيسي من عمله .

واذا لا سمح الله تعرضت لهجوم أو ما يشابهه آجور توفر لك دعم وعملية recovery سريعة .

 الخدمات والأسعار

تتوفرالخدمة اما أنك أن تختار الحجم المناسب لك وهنا يكون المستخدم عالم بمتطلباته وتسمى Single database .

 أو توجد على ثلاث خدمات مقدمة كل خدمة تقدم مراحل من الأداء والسعة على حسب مايحتاجه المستخدم أو الشركة من قاعدة بيانات بسيطة إلى المليئة .

وأهم مايميز هذه الخدمة أنك تستطيع التوسع والانتقال من مرحلة إلى أخرى حسب تغير احتياجك بكل سهولة وبوقت قليل وبتكاليف لا تعد .

Basic

12

Standard

13

Premium

14

انشاء سيرفر خاص لقاعدة البيانات الخاصة بك

هذه الطريقة موجهة لمن يريد استضافة قاعدة بيانات جاهزة صنعها من قبل على سيرفر في آجور أو سيربطها بعد ذلك .

طبعاً كما في المقالة السابقة لابد قبل ذلك أن نقوم بالتسجيل في الموقع واذا كنت طالب بإمكانك الحصول على mySQL مجاناً

شرح عملية التسجيل

نأتي الآن لشرح عملية صنع سيرفر لقاعدة بيانات , بعد الدخول على صفحتك من

portal.azure.com

اتبع الآتي

1

2

3

بعدها نضع المعلومات الخاصة بالسيرفر الذي نريد انشائه

4

بعد الضغط على create سوف تتم عملية الانشاء وفالأخير سيخبرنا بنجاح العملية

5

انشاء قاعدة بيانات 

من New نختار Data + storage ومن ثم MySQL database بما انها هي الوحيدة المتوفرة لمن لديهم اشتراك دريم سبارك

7.PNG

ومن ثم ندخل البيانات الخاصة بها

8

هنا يظهر لنا تكلفة الخدمة صفر ريال لأننا مستخدمين اشتراك دريم سبارك

9.PNG

هنا تنبيه بنجاح العملية

10

هنا عندما دخلت على المعلومات الخاصة بقاعدة البيانات تظهر لنا السعة

11

عملية ربط قاعدة البيانات

اضغط على All resource وبعدها نختار قاعدة البيانات التي أنشأناها , فيهذه الصفحة سنجد جميع المعلومات الخاصة بربط قاعدة بيانات azure بخدمة أخرى .

12

ربط قاعدة البيانات ببرنامج الأوفيس إكسل

نتبع الخطوات التالية

17

18

هنا أتممنا عملية الربط وبعدها نبدأ العمل الخاص بنا .

Azure

استكمالاً للمقالة الأخيرة الحوسبة السحابية ستكون هذه المقالة عن آجور ومثال تطبيقي لرفع موقع عليها بطريقتين مختلفة في ثوان قليلة

Microsoft Azure

هي بيئة لدعم التطبيقات مفتوحة المصدر والمرنة تقدم العديد من الخدمات والتي لا تقتصر على كونها خدمات من الشركة الأم مايكروسوفت بل بإمكانك استخدام سيرفر Ubuntu مثلاً أو قاعدة بيانات أوراكل أو خدمات الموبايل مثل أندرويد و ios .

نسبة الأمان في آجور عالية جداً , بإمكانك أن تنشر تطبيقك على سيرفر خاص فيك وتربطها بآجور فالخدمات كثيرة والإمكانيات عالية جداً .

الخدمات على السحابة سواء للشركات وقطاع الأعمال أو للأفراد , توجد فيها العديد من الخدمات المتنوعة والمتوفرة والكثير من الشركات تستخدمها

companies

من أهم الميزات في آجور أنه يوجد لديها أكثر من 28 مراكز للبيانات Data centers حول العالم حيث أنها أكثر من مراكز البيانات لدى قوقل وأمازون مجتمعتان مع بعضهما

azureregions

تقدم لك آجور خدمة pay as you go حيث أنك ستدفع فقط مقابل الساعات والعمل الذي ستنجزه وهذا سيوفر عليك الكثير وخصوصاً للأعمال المؤقتة .

كيفية الحصول على اشتراك لمايكروسوفت آجور مجاناً كطالب

1- التسجيل في خدمة دريم سبارك DreamSpark.com

قم بزيارة الرابط التالي (http://aka.ms/ia)

الجزء الأول: التسجيل في موقع دريم سبر؟

اضغط على الزر البرتقالي والذي مكتوب عليه “Sign in or Create your DreamSpark Account”:

في الصفحة التالية، قم بتسجيل الدخول باستخدام حسابك مايكروسوفت (وهو نفس الحساب الذي ربما تحتاج لاستخدامه في مايكروسوفت آوت لوك (Outlook.com).

بعد تسجيل الدخول، قم بالرجوع لصفحة الدريم سبارك (DreamSpark) لإنهاء خطوات إنشاء حسابك في مايكروسوفت.

في حقل البريد الإلكتروني (Email) قم بكتابة البريد الإلكتروني الخاص بك فعلى سبيل المثال (login@donnu.edu.ua) .

2- التحقق من سجلّك الأكاديمي

حان الآن التحقق من سجلك الأكاديمي، وأسهل طريقة للقيام بذلك هو استخدام بريدك الإلكتروني المدرسي أو الجامعي مثل (yourname@yourschool.edu).

قم بإدخال بريدك الألكتروني المدرسي أو الجامعي في الحقل أدناه وأنقر على زر “Verify”.

استخدام كود التحقق (Verification Code) الذي يمكنك طلبه من خلال إرسال ما يدل على أنك طالب، مثل صورة من البطاقة الجامعية أو جدول المواد لهذا الفصل على

sa_stud@microsoft.com

أو

Omnyyah.ibrahim@studentpartner.com

فبعد نقرك على زر “Verify” ستحصل على هذه الرسالة:

بعدها سيصلك بريد إلكتروني فيه الرسالة التالية: قم بزيارة الرابط الذي في بريدك لإكمال عملية التحقق من سجلك الإكاديمي

انقر على زر “Continue” لتنتقل للصفحة التالية

لقد أكملت الآن عملية التحقق من سجلك الأكاديمي ويمكنك الوصول إلى كافة البرامج والخدمات الموجودة على موقع الدريم سبارك (DreamSpark.com) دون أي تكلفة لمدة سنة.

3- الحصول على مايكروسوفت أجور

 انقر على “Software Catalog” الموجود في أعلى الصفحة وستجد مايكروسوفت أجور لدريم سبارك مدرج في قسم الخوادم والتطبيقات (Servers & Applications).

انقر على زر “Register Now”.

قم بملء هذا النموذج القصير.

في القسم الثاني من هذا النموذج وهو “Verification By Phone” ستحتاج لرقم هاتف إما لاستلام رسالة نصية أو مكالمة آلية للحصول على رمز التحقق الخاص بمايكروسوفت أجور.

سسيظهر لك حقل آخر، قم بملئه بالرمز الذي تلقيته إما عبر الرسالة النصية أو عبر المكالمة الآلية، بعدها قم بالنقر على مربع اتفاقية الاستخدام “Agreement” والذي يفيد بموافقتك على اتفاقية الاشتراك وتفاصيل العرض وكذلك بيان الخصوصية. وتذكر دائماً أن هذا العرض الخاص من مايكروسوفت لويندوز أجور هو حصري للطلاب ولايتطلب أي استخدام لبطاقة الإئتمان، لذا لن تقوم بدفع أي أموال. بعد الإنتهاء من هذا سيتغير لون زر “Sign Up” لذا يمكنك النقر عليه للمتابعة. ربما يكون هنالك تأخير قليل جداً حتى يتغير لون الزر.

بعد النقر على زر “Sign up” ستظهر لك هذه الصفحة:

عندما يكون كل شيئ جاهز، سترى الزر التالي (طبعاً في حال عدم إغلاق الصفحة السابقة):

بعد النقر على زر “Start Managing My Service” ستنتقل إلى بوابة أجور على الرابط التالي: /https://portal.azure.com

4- رفع موقع على منصة آجور

اتبعو معي هذه الخطوات التالية :

أولا ندخل على البوابة على الرابط ونختار web app

portal.azure.com

1

من بعدها ستظهر النافذه التي يطلب فيها اسم الموقع فمثلاً أنا اخترت أن يكون اسم موقعي omnia223.azurewebsite.com ونضغط create

2

بعدها سيظهر لنا الـ progress لإنشاء الموقع

3.PNG

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

44

لرفع الموقع نضغط على All resources ونعمل الآتي :

4

من هذه الصورة تظهر لنا عدة معلومات عن الموقع منها الرابط الخاص بالوقع ومعلومات أخرى سنستعملها لرفع الموقع .

 قبل ماننشر نجهز كلمة مرور للنشر كالآتي

33

طبعاً من المعروف عند برمجة المواقع سوف يكون لدينا ملف index.html وبقية ملفات الموقع ونضعها بمجلد خاص على سطح المكتب مثلاً باسم MyGitRepository , وسوف نقوم برفع هذا الملف على منصة آجور باستخدام طريقتين وهما :

1- Git repository

نتبع الخطوات التالية وبالاخير نضغط local Git repository ونضغط ok

5

وبعدها نذهب صفحة الموقع على لوحة التحكم وننسخ الـ Git clone URL

new5

نحتاج الآن نحمل Git bash للمرحلة الأخيرة من هنا وبعدها نفتحها وننسخ هالأوامر ونتأكد اننا في المسار الصحيح للملف

git init

git reomte add azure -URL // هنا الرابط اللي نسختوه

git add .

git commit -m “hi”

git push azure master

وهاذي صورة من الـ bash عندي قبل اكتمال العملية

7

2- FTB ( File Transfer Protocol )

هذه الطريقة جداً سهلة وبسيطة , من صفحة الخصائص ننسخ الثلاث أمور

FTP/Development User –FTP Host Name – FTPS Host Name.

بعدها نفتح صفحة مجلد جديدة عندنا ونلصق الـ FTP host name في المسار فوق وتظهر لنا نافذه تطلب اسم المستخدم وكلمة السر وندخلها

8

بعدها ندخل على مجلد site ومن ثم مجلد wwwroot ونغير الملف إلى ملف الموقع الخاص بنا .

طبعاً توجد طرق أخرى كثيرة لنشر الموقع من الممكن أن تكون أسهل وأفضل , أتمنى أن أكون وفقت في ايصال المعلومة بشكل جيد وشكراً لقرائتكم .

الحوسبة السحابية

happy-cloud-clipart-1384559312860560375happy-cloud-hi (1)

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

مفهوم الحوسبة السحابية

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

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

طرق تقديم خدمات الحوسبة السحابية

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

Screen Shot 2016-03-01 at 1.02.04 AM

المفهوم الأول : On Premises

نقصد به عندما تقوم الشركة أو المستخدم بشراء السيرفرات مثلاً ومن ثم تركيبها ومن بعدها يتم اعداد الشبكة ومن ثم تأتي مرحلة تركيب الـ hard desks ونظام التشغيل ، فكانت الشركة تبدأ من الصفر وهذا يكلف الكثير من المال والجهد والوقت والأيدي العاملة .

المفهوم الثاني :  Infrastructure as A Service

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

المفهوم الثالث : Paltform as A Service

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

المفهوم الرابع : Software as A Service

عندما تشترك في خدمة الحوسبة السحابية المستخدم لا يعمل شيء سوى أن يستمتع بالخدمات المتوفرة له مثال : Xbox , Microsoft online office .

اذا لم تستوعب معي هذه المفاهيم سوف أشرح لك هذه الصورة ومن بعدها بإذن الله ستفهمها تماماً

نعم سوف نربط المفهوم بالبيتزا وطريقة صنعها

Screen Shot 2016-03-01 at 1.02.23 AM

المفهوم الأول

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

المفهوم الثاني

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

المفهوم الثالث

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

المفهوم الرابع

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

لماذا نستخدم الحوسبة السحابية ؟

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

٢- التوسع ، حيث لو أردنا زيادة عدد RAM مثلاً أو زيادة الذاكرة أو حتى تقليلها الأمر جداً بسيط ولا يستهلك شيئاً مقارنة بالسابق .

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

٤- تستطيع الاعتماد عليها ، حيث لو حصل أي خطأ داخلي لايهمك الأمر لأن الشركة لديها طاقم دعم فني يصلحه مباشرة .

٥- سهولة الادارة ، حيث من صفحة تحكم واحدة تستطيع التحكم وادارة كل مايهمك وبواجهة رسومية سهلة لكل مستخدم فتسهل لدى البعض الكثير .

وبما ان لا شيء على وجه الأرض كامل الا وجهه ، لابد أن يكون للحوسبة السحابية بعض العيوب ولكن مقارنة بمميزاتها الكثير نجدها لا تساوي لدى البعض شيئاً

عيوب الحوسبة السحابية

١- من الممكن أن يتعطل لديك جاهزك أو تتعطل لديك خدمة الانترنت ومن هنا يكون صعباً جداً ادارة العمل عندك بما أن كل شي على الانترنت ولكن قد يحل البعض هذا الأمر من خلال توفر اتصال احتياطي وما إلى آخره .

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

٣- المحدودية ، وهذا قد يشكل عيباً كبيراً لدى الشركات التقنية البحتة ، حيث لا تستطيع الوصول إلى البنية التحتية للنظام ولا تستطيع التحكم فيه .

أمثلة على الشركات التي تقدم خدمة الحوسبة السحابية

في الختام موضوع الحوسبة السحابية مليئ بالمعلومات ، أتمنى أن يصل المفهوم الأساسي الأول من هذا الأمر وبإذن الله أحاول أن أكمل مايهم الموضوع لاحقاً .

Learning C# (2) Variables

88750_c444_7

بعد أن تحدثنا في التدوينة السابقة عن لغة #C  وبعض المعلومات البسيطة عن هذه اللغة , ستكون هذه التدوينة عن المتغيرات وأنواع البيانات .

 ماهي المتغيرات ؟

هو عبارة عن اسم نطلقه لنوع من البيانات التي نعرّفها لنسستخدمها في البرنامج لاحقاً

كل متغير لديه نوع بيانات خاصة فيه يحدد السعة والمساحة التي سوف يستهلكها المتغير في البرنامج .

لنتعرف في البداية على أنوع البيانات لدينا ومن ثم نأخذ مثال على متغير وكيف نكتب اسمه ونعطيه قيمة خاصة فيه .

أواع البيانات 

يوجد ثلاث أنواع للبيانات :

1- Value type

وهي بيانات جاهزة للاستخدام مشتقة من الـ class المسمى بـ System.ValueType حيث توجد به عدة أنواع يستخدمها المبرمج في تعريف المتغير .

قائمة بأهم الأنواع في هذا الـ class

  • int

 تستخدم في تعريف المتغيرات التي تخزن قيم عددية صحيحة 32 بت مثل 5 و6 و100 … الخ , حيث لا يكون العدد كسري أو عشري أبداً .

int x=50;

  • long

تستخدم في تعريف المتغيرات التي تخزن قيم عددية صحيحة  لكن بسعة 64 بت .

  • short 

تستخدم في تعريف المتغيرات العددية الصحيحة بسعه 16 بت .

  • byte 

تستخدم في تعريف قيم عددية صحيحة بسعه 8 بت .

  • double

تستخدم في تعريف قيم عددية عشرية ( فيها فاصلة ) بسعه 64 بت مثل 3485.45 .

  • float

تستخدم في تعريف قيم عددية عشرية بسعة 32 بت مثل 102.05 ولابد من كتابة الحرف f في نهاية العدد .

float f=96.03f

  • bool

تستخدم في تعريف متغيرات تحمل قيم منطقية اما صحيحة أو خاطئة وغالباً مانستخدمها في اتخاذ القرارت .

bool decision=true;

  • char

تستخدم في تعريف أي حرف أو رقم له خانة واحدة فقط , ولكن لو عرفنا بها رقم فلابد من معرفة أننا لن نستطيع عمل عمليات رياضية عليه لأن الـ compiler يراه كمتغير مثل الأحرف .

char h=’l’;

char num=’1′;

2- Reference type

هي عبارة عن أنواع يعرّفها المبرمج ولاتحمل سعة معينة مثل السابق ولكنها تؤشر على أماكن في الذاكرة  , وتوجد أنواع جاهزة ومبنية في اللغة من هذا النوع مثل :

  • object

المتغير من هذا النوع نستطيع تعيين قيمة له من القيم value types أو أي نوع نريده فمثلاً بالمثال أعطينا للـ object قيمة char .

object me;
me = 'h';
  • dynamic

هو نوع من أنواع الـ object type ولكنه static والمقصود بذلك أن قيمته تتشارك في كل الـ classes الموجودة داخل البرنامج , ويأخذ مكان في الذاكرة أثناء الـ Run time .

  • String 

وهي أيضاً نوع من الـ object ولكن لها تعامل خاص في اللغة بما انها تستعمل كثيراً , هذا النوع يسمح لنا بتخزين النصوص والأرقام وكل شي يريد المبرمج كتابته .

String hi=”thanks for reading this article number 4 “;

3- Pointer types

هي عبارة عن متغيرات تخزن عنوان الذاكرة لمتغيرات أخرى , مثال

int* var;

الاشارة * تدل على أن هذا المتغير من نوع pointer , الذي يستطيع الوصول لموفع المتغير int المؤشر من قبل هذا المتغير .

4- Constant 

نقصد بها الثوابت والقيم التي لا تتغير مثل ط π حيث أنّ قيمتها ثابتة وتساوي ٣.١٤ تقريباً

نعرّف الثوابت عن طريق كلمة const قبل اسم المتغير

using System;
namespace DeclaringConstants
{
    class Program
    {
        static void Main(string[] args)
        {
            const double pi = 3.14159;   
 
            Console.WriteLine(pi);
            Console.ReadLine();
        }
    }
}

تعريف المتغيرات في البرنامج 

<data_type> <variable_name>;

نبدأ أولاً بكتابة نوع المتغير ومن ثم نكتب الاسم الذي نود اعطائه لهذا المتغير .

int i, j, k;
char c, ch;
float f;
double d;

ونستطيع أيضاً اعطاء قيمة للمتغير في نفس الوقت بعد تعريفه

int i=60;
String i="Welcome";

لنشاهد هذا الكود البسيط الذي عدة متغيرات مع بعض

using System;
namespace Variables
{
   class Program 
   {
      static void Main(string[] args) 
      {
         short a;
         int b ;
         double c;

         a = 10;
         b = 20;
         c = a + b;
         Console.WriteLine("a = {0}, b = {1}, c = {2}", a, b, c);
         Console.ReadLine();
      }
   }
}

النتيجة من الكود السابق

a = 10, b = 20, c = 30

استقبال المتغيرات من المستخدم 

عرفنا الآن كيف نكتب المتغيرات وكيف نطبعها , ماذا لو أردنا أن نستقبل متغيرات يكتبها المستخدم من عنده , مثل الآلة الحاسبة .

توجد دالة تسمى ()ReadLine تهتم بهذا الأمر حيث تستقبل القيمة من المستخدم وتخزنها في المتغير الذي نريده .

Console.WriteLine("Type a string:");
string line = Console.ReadLine();                                             Console.WriteLine(line);

فمن خلال هذه الدالة يمكننا قراءة ماكتب المستخدم فمثلاً لو أدخل المستخدم كلمة

“hello world “

سوف تطبع على الشاشة الكلمة التي أدخلها .

إلى هنا أكتفي بهذا القدر , وبإذن الله سأحاول اكمال السلسة قريباً لكل مبتدئ يحتاجها .

Learning C# (1) “My notes”

student-849822_1920

بما أنني في أولى خطواتي  في تعلم هذه اللغة الجميلة أحببت أن أشارك العلم والفائدة هنا بإذن الله في هذه المقالة وسلسلة من المقالات المتتالية الأخرى التي سوف أتحدث من خلالها عن لغة البرمجة #C تحديداً الـ Console Applications حيث تظهر نتيجة البرنامج على شاشة سوداء

مقدمة عامة : 

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

٢- هذه اللغة مطورة من قبل مايكروسوفت على يد المطور آندريس هيزبرج وفريقه خلال عملية تطوير .Net   .

٣- اللغة object oriented ” اذا كانت لديك معرفة سابقة بلغات مثل الجافا وغيرها أظنك فهمت ما أقصد أما اذا لم تكن لديك ان شاء الله سوف نتطرق لها حين وصولنا لهذا الموضوع ” .

٤- أهم محرر تكتب به اللغة هو Visual Studio من مايكروسوفت .

من أهم البرامج والمواقع القائمة على لغة #C :

1- برنامج الرسام الشهير على نظام ويندوز .

2- موقع encyclopedia.com .

3- برنامج SharePoint .

4- موقع مطعم subway.com الغني عن التعريف .

الهيكلة العامة :

 ١- عند كتابة برنامج بلغة #C ستكون هناك هيلكة عامة لأي برنامج ، أي قبل كتابة أي برنامج بهذه اللغة لابد من كتابتها .

لنلق نظرة على هذه الشفرة ومن بعدها سنشرح الأمر خطوة خطوة

//1 
using System;
namespace //2 ConsoleApplication1
{
//3
    class Program
    {
       //4
          static void Main(string[] args)
        {
            //5 
            Console.WriteLine("Hello, world!");
            Console.ReadLine();
        }
    }
}

١- Using system تعني أننا سوف تسنخدم namespace لأنها مضمنة بداخلها و namespace تحتوي على مجموعة من الـ classes .

2- ConsoleApplication هنا مثلا اسم namespace التابع لبرنامجنا .

٣- كلمة class تعرّف لنا ال class الذي سوف نستخدمه و program هنا اسم الـ class ويتحكم المبرمج باسم الكلاس الذي يريده حيث يستطيع تسمية الـ class بأي اسم يريده ، الـ class يحتوي على مجموعة من الخصائص والدوال الخاصة به في البرنامج الذي تود كتابته .

٤- static void main هذه الدالة هي نقطة البداية لأي برنامج مهما كانت عدد classes الموجودة ، وكل برنامج يوجد فيه main method واحدة .

٥- هنا بداخل هذه الدالة تكتب جميع الخصائص والدوال التي تريد كتابتها وتستدعي ماتريد ….الخ .

ملاحظة :

١- لغة #C لغة تهتم بكيفية كتابة الحروف capital أو small حيث تغيير حرف من صغير لكبير قد يؤثر على برنامجك ، لذا لا بد أن تكون حريص ومهتم خلال كتابتك .

٢- في كل لغة برمجة توجد عدد من الكلمات التي لا تستطيع كتابتها كإسم class مثلاً أو متغير و” لكن لو اضطرت لإستخدامها لا بد أن تكتبها بهذا الشكل word @ ” وتسمى بـ Keyword وهذه قائمة بجميع الكلمات .

CSharpKeyword.jpg

المتغيرات والدوال :

١- كما ذكرت سابقاً لكل class يوجد عدة متغيرات “خصائص” خاصة به يستخدمها واذا عملنا منه object سيمتلك هذه المتغيرات بالطبع .

٢- المتغيرات تعني أن نخزن فيها قيم معينة خاصة بهذ الكلاس .

٣- الدوال وهي عبارة عن المهام التي سيقوم بها هذا class وتختلف هذه المهام من ناحية ماذا سيأخذ لبدء هذه المهام وتسمى ب parameters أو المتغيرات المعرفة مسبقاً في الـ class ، وماهي نتيجة هذه المهمة الـ return value ، أي ماذا سوف تكون النتيجة عندما ينتهي من هذه المهمة .

لنأخذ مثال لتسهيل الفهم 

لو عرفنا class person هذا class فيه خصائص وأعمال سيقوم بها الشخص ، مثلا نعرف متغير height فهنا نعني أن الانسان لديه خاصية الطول ولنخزن بداخل هذا المتغير قيمة ، فطول هذا الانسان مثلا 160 cm .

الانسان لديه مهام يومية يقوم بها ، لنأخذ مثلاً مهمة الطبخ ، قبل أن يطبخ لا بد أن  يكون عنده parameters وهنا نعني بالمقادير اللازمة لعمل الوجبة ، ثم سيقوم بداخل هذه المهمة بعدة أعمال وهذا يسمى بـ method body ومن ثم نتيجة هذه الطبخة وتسمى بـ return value لهذه الدالة .

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

Constructors

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

بدايةً : سبب كتابة المقال عن constructor 

كثير ممن بدأ بتعلم البرمجة يجد صعوبة في فهم ال constructor وحقيقة أنا كنت منهم ولكن مع التطبيق المتواصل لعدة أفكار برمجية فهمت الصورة لذلك لا تكتفي فقط بالقراءة وتظن انك استطعت استيعاب الموضوع كاملاً .

بعد قرائتك لهذا المقال افتح المحرر الموجود عندك وطبق مباشرة .

أولاً : ماهو constructor ؟ 

هو عبارة عن دالة من نوع خاص في لغات  Object Oriented حيث يتم تجهيز أي Object سوف نستخدمه من هذا الكلاس عن طريقه ونستطيع كتابة متغيرات فيه يستطيع الأوبجكت أن يستخدمها في كلاس آخر و عند عمل run لهذا ال object  يعمل ال constructor أولاً .

ثانياً : هناك نقاط مهمة لابد من معرفتها 

أولها : أن constructor يأخذ نفس اسم الكلاس وقد يكون في الكلاس الواحد أكثر من constructor  ولكن بمتغيرات مختلفة النوع أو العدد وهذا مايسمى ب overloading .

ثانيها : عند استخدام constructor يوجد بداخله متغيرات بنفس أسماء المتغيرات الموجودة في نفس الكلاس لابد أن نستخدم كلمة this تعبيراً عن أن القيمة التي تحملها الدالة هي نفسها القيمة في داخل الكلاس .

سؤال : مالذي سيحصل عند عدم استخدام كلمة this ؟

سوف يقوم المتغير داخل الدالة باخفاء قيمة المتغير الموجود بداخل الكلاس وهذا العملية تسمى Instance Variable hiding حيث يقوم المتغير بداخل أي دالة الذي اسمه بنفس اسم المتغير الموجود في الكلاس باخفاء قيمة المتغير الموجود بالكلاس .

للمعلومية : هذا يحصل حتى في الدوال الأخرى ليس constructor فقط .

public class ConstructorDemo{

String name;
public ConstructorDemo()

{
}

public ConstructorDemo(String name)

{
this.name=name;
}

في المثال السابق أنشأنا constructors 2 الأول كان فارغ من متغيرات ولا يوجد جمل بداخله .

أما الآخر فيحمل متغير بنفس اسم المتغير داخل الكلاس واستخدمنا كلمة this للدلالة على أنه يحمل نفس القيمة لكن لو كان اسم المتغير بالدالة مختلف فلا مشكلة من عدم استخدام this .

لمعلوماتك : 

  • المتغيرات داخل أي دالة تسمى 

Local Varaibles 

وهذه المتغيرات لا نستطيع استخدامها الا داخل الدالة فقط .

  • المتغيرات داخل أي كلاس تسمى

Instance variables 

ونستطيع اسخدامها في الدوال الخارجية والكلاسات الأخرى وأي block آخر مهما كان .

ثالثها : أن constructor لا يرجع قيمة ولا يمكن أن نكتب قبله كلمة void حتى .

رابعها : كل كلاس داخل الجافا يوجد به constructor حتى لو لم يعرفه المبرمج ، حيث يقوم الجافا بعمل constructor افتراضي .

خامسها : تستطيع استخدام أي Access modifier عند كتابة constructors

سواءاً كان ذلك public , private or protected أو تجعله افتراضي حيث يستخدام داخل packge فقط .

سادسها : ال constructors في الجافا لا يمكن أن تكون static , abstract , final or synchronized كلها غير مسموح بها .

سابعها : ال constructors تستطيع عمل ThrowsException في الجافا .

ثامنها : لا يوجد destructor في الجافا بعكس لغة ++c .

تاسعها : لا يمكن أبداً أن تنادي constructor مباشرة كالدوال الأخرى ، حيث لا تستطيع منادتها الا بكلمة new أي ال object .

ثالثاً : بعض أنواع دوال constructors : 

  • parameterized constructors :

من اسمه يدل على أن بداخله متغير أو أكثر واذا أنشأنا أوبجكت من هذا الكلاس فلابد من كتابة نفس نوع المتغيرات الموجودة في هذا constructor .

مثال : 

class Example
{
     int x, y;
  

 Example()
{
}

// parameterized constructor
Example(int a, int b)
{
     x = a;
     y = b;
}
}

وعند انشاء أوبجكت من هذا الكلاس يصبح كالتالي :

 Example e=new Example();
 Example e =new Example(0, 50); 

  • Default constructors :

اذا المبرمج لم ينشئ constructor ستقوم الجافا بانشاء كلاس افتراضي وسيقوم بانشاء متغيرات افتراضية فمثلاً

reference type = null

numreical type = 0 or 0.0 or 0.0f

boolean = false

مثال :

class Student3{
int id;
String name;

void display(){

System.out.println(id+” “+name);

}

public static void main(String args[]){
Student3 s1=new Student3();
s1.display();
}
}

output :

0 null
  • رابعاً : صيغة كتابة constructor :  

Access modifiers _ className()

{

Statement ;

}

  • خامساً : مالذي يحدث داخل الذاكرة ؟ 

عند انشاء constructor ثم انشاء object يتم تخزينه بتركيب بيانات يسمى heap الذي يقوم بتخزين جميع أنواع reference types التي تؤشر على قيمها ال primitive types في تركيب البيانات المسمى stack .

  • سادساً : مالفرق بين constructor و methods ؟ 

١- ال constructor يستخدم لتهيئة ال object أما الدوال فتقوم بوصف المتغيرات .

٢- ال constructor لاترجع أي قيم أما الميثود فقد ترجع قيم .

أخيراً : هل تقتصر وظيفة ال constructor على تهيئة objects فقط ؟ 

الجواب على هذا السؤال لا طبعاً ، ال constructor يقوم ببدء thread مثلاً وهذا موضوع آخر طبعاً ، أيضاً ال constructor يستطيع استدعاء دوال وإلى آخره .

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