البرمجة الشخصية

أهلاً ،

بعد تعلم أول لغة برمجة في حياتك، ألا تشعر بأن كل مشاكل العالم تستطيع حلها بكتابة بضعة سطور برمجية؟ حينما كنت أدرس لغة الجافا في الجامعة، كنت – و مازلت- أحتفظ بمفكرات تحتوي على حلول لمشاكل كثيرة و في مشكلة أتّبع نفس المنظومة، الحل دائما في جمل التحكم أو عداد ما.

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

و لكن هنالك وجه آخر للبرمجة، أن تبرمج لنفسك ، لا يبدو الأمر أنانياً كما يبدو، اذا أيقنّا بأن البرمجة ما هي الا طريقة لحل المشاكل ، لما لا نحل مشاكلنا الشخصية؟

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

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

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

app

ؤ أخيراً، أتمنى لكم يوماً برمجياً سعيداً

دورات حياة تطوير البرمجيات: النموذج التزايدي

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

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

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

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

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

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

و أخيراً، أتمنى لكم يوماً برمجياً سعيداً.

العلم على بعد متصفح

images

أهلاً

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

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

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

لماذا نتعلم؟ يبدو السؤال فلسفياً أكثر مما يجب ، لكن إذا أردنا اجابته بنقاط عملية فبرأيي :

١- نتعلم حتى نتطور، العصر يكاد يكون تطوره لحظي ، و المواكبة باتت ضرورية ، يمكنك التعلم أجدّ ما هنالك لتعلمه بكل سهولة وبذلك تضمن كفائتك.

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

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

طبعاً يبقى السبب الرئيسي لما يجب علينا أن نتعلم ، لأن الرب لم يخلقنا ذباباً.

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

١- كورسيرا

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

الموقع يقدم مناهج ممتعة في أغلب العلوم كما يوجد مناهج مُعدّة بالعربية  ، لكن المناهج بشكل عام لا تكون متوفرة على الدوام و يمكنك إضافة منهج ما إلى قائمتك بحيث يتم تنبيهك في حال بدئه.

٢- يوديمي

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

٣- أكاديمية خان

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

٤- اليوتيوب.

الأب العظيم لكل الفيدوهات التعليمية، لا أذكر مرة خيّب ظني فيها حينما كنت أبحث عن طريقة عمل أو محاضرة  شرح بسيط لأشياء معقدة ، جامعات عريقة بدأت بوضع كاميرات لتسجيل المحاضرات  في قاعاتها مثل هارفرد و اكسفورد لتنقل لك تلك التجربة الجامعية المميزة ، أن تستطيع السماع لمحاضرات تُقام بأكثر الجامعات حداثةً فهو ميزة لا ريب فيها، هل ذكرت أنه بالمجان؟!

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

و أخيراً ، أتمنى لكم يوماً علمياً سعيداً.

دورات حياة تطوير البرمجيات – نموذج الشّلال

images

أهلاً

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

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

ما سأقوم به هنا هو شرح أحد أشهر و أقدم دور الحياة هذه و المعروف باسم Waterfall Model و الذي يُترجم إلى ” نموذج الشلال” ، و الذي لا يبدو أفعوانيّاً كما يقترحه الإسم على الإطلاق.

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

الشلال

 و كما ترون فإنه يتكون من خمسة مراحل:

١- المتطلبات:

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

يتم تجميع هذه المتطلبات في مستند يسمى مواصفات متطلبات البرمجيات (Software Requirement Specification)  و بهذا تنتهي هذه المرحلة ، يُلاحظ هنا أن العميل يحتاج للحضور في هذه المرحلة فقط لأن فريق العمل سيبدأ بالتصميم لوحده.

٢- التصميم:

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

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

٣- التطبيق:

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

٤- التحقق:

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

٥- الصيانة: 

هذه ليست مرحلة منهية المدة بالضرورة ، إن تطويرك لبرنامج ما يجعله في مسؤوليتك و تربيته ( إصلاحه) يظل في مسؤوليتك ، لذا يُشاع بالقول بأن هذه المرحلة في مجتمع هندسة البرمجيات بأنها مفتوحة للأبد.

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

أتمنى لكم يوماً برمجياً سعيداً.

سبعة

logo

مرّ وقت طويل!

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

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

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

أطلقنا شركة سبعة في الساعة السابعة ، كان الإطلاق افتراضيا – رغم أني أرى العالم الافتراضي واقعي أكثر مما تحتمل الافتراضية- عبر تويتر:

Screen Shot 2014-01-12 at 7.19.39 AM

نحن الآن في الثاني عشر من الشهر و قاربنا على الانتهاء من أحد المشاريع و نعمل على عدد آخرمن المشاريع ولله الحمد.

 في سبعة نحن نتبع المنظومة الرشيقة Agile Management  ( عليّ أن أعترف أن الترجمة هنا فاجئتني ..) هذه المنظومة تعني أن كل فريق العمل يتحمل مسؤولة خاصة وكما لكل عضو فريق منصب معين لكن كل القرارت تتم بالمشاركة ، هذه الطريقة في ادارة المشاريع لها فاعلية كبيرة خاصة في مجال تطوير البرمجيات ، لأنها تجعل من العميل فرداً من فريق العمل و يناقش و يتفاعل مع فريق التطوير حتى نصل الى منتج متكامل حسب رغبته، و تجعل من فريق العمل يعمل بسهولة في بيئة وديّة.

41Np7RGJmDL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_

من الكتب التي قرأتها والتي تتحدث بالتفصيل عن الادارة الرشيقة هو كتاب Agile Project Management: Creating Innovative Products .

الكتاب يتحدث عن مزايا هذه الطريقة بالتفاصيل  كما يقارن بالطريقة التقليدية من مناظير مختلفة .

 

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

و أخيراً،

أتمنى لكم يوماً برمجيّاً حافلاً.

سلاف تتعلم البايثون، تدوينة ٤

Screen Shot 2013-11-08 at 1.33.06 AM

أهلاً !

لمحة سريعة:

تدوينة اليوم ستتناول بايثون و كيفية إنشاء ، كتابة و قراءة الملفات النصية.

بايثون تتعامل مع نوعين من الملفات، الملفات النصية ( التي تنتهي بـ .txt ) و الملفات الثنائية

(Binary files)، في هذه التدوينة سأتناول الملفات النصية.

١- إنشاء و كتابة الملف النصي:

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

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

 file = open("newfile.txt","w")

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

لكتابة نص الملف:

 file.write("this is a string")

لكتابة متغير:

name="sulaf"
file.write(name)

لكتابة متغيرات غير نصية، كأن تكون رقم أو مصفوفة ، يجب تحويلها أولا الى متغير نصي عبر استخدام وظيفة str.

num = 7
str_num=str(num)
 file.write(str_num)

٢- لقراءة الملف النصي:

read_file = open("newfile.txt","r")
print ( read_file.read())
 

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

أتمنى لكم يوماً باثونياً سعيداً

ورشة عمل: ماتلاب و معالجة الصور

matlablogo

أهلاً، مرّ وقت طويل!

أقمت في الثلاثاء الماضي ورشة عمل تابعة للمجموعة البحثية SKERG تناولت بيئة التطوير ماتلاب و معالجة الصور.

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

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

لذلك بدأت بقراءة بعض الكتب التي تتناول معالجة الصور مصممة خصيصاً لماتلاب و استفدت منها في ورشة العمل التي أقمتها، و من بعض الكتب التي قرأتها:

1- A Guide to MATLAB: For Beginners and Experienced Users.

2- Digital Image Processing Using MATLAB.

3- MATLAB Introduction Applications.

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

بخصوص ورشة العمل، يمكنكم الاطلاع على عرض الوسائط من هنا.

سلاف تتعلم البايثون- تدوينة ٣

Screen Shot 2013-10-05 at 5.36.08 PM

أهلاً

لمحة سريعة:

في هذه التدوينة سنتعامل مع القوائم (Lists) و الوظائف المعتاد تطبيقها عليها.

القوائم (Lists):

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

١- إنشاء قائمة:

– نعم إنه بهذا البساطة..-

Screen Shot 2013-10-05 at 5.17.25 PM

٢- إضافة عناصر للقائمة:

بإستخدام وظيفة append ، أضفت ٣ عناصر لقائمتي، وهي ٣ من مسلسلاتي البريطانية المفضلة.

Screen Shot 2013-10-05 at 5.23.46 PM

٣- طول القائمة:

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

Screen Shot 2013-10-05 at 5.26.22 PM٤- عرض ( طباعة) القائمة:

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

Screen Shot 2013-10-05 at 5.28.40 PM

٥- حذف عنصر من القائمة:

بإستخدام وظيفة pop، التي تستقبل مكان العنصر (index) كمدخل، تُرجع هذه الوظيفة العنصر المحذوف، وكما هو متعارف عليه فإن القوائم تبدأ من ٠ كرقم للمكان الأول.

Screen Shot 2013-10-05 at 5.30.34 PM

٦- البحث عن عنصر داخل القائمة:

وظيفة index تستقبل العنصر نفسه و تبحث عنه و تُرجع رقمه.

Screen Shot 2013-10-05 at 5.33.40 PM

المرفقات

صممت أداة بسيطة لتدوين المهام (TO DO list) وظيفة الأداة هي حفظ المهام و عرضها و إتاحة شطبها ( حذفها) من القائمة، إستخدمت أداة التحكم while و التي لم أذكرها من قبل في تدويناتي لأنها مقاربة للشكل المعروف، يمكنكم تحميلها عبر الضغط على الزر في الأسفل.

pay_button

أتمنى لكم يوماً باثونياً سعيداً.

ما جاء في مجالات تطوير البرمجيات

images (1)

ـ أشعر بأني عدت إلى العصر العباسي باختياري لهذا العنوان .. –

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

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

في هذه التدوينة سأستعرض ما جاء في كتاب بريسمان ( هندسة البرمجيات) في تقسيم هذه المجالات و الذي نتج عنه ٧ أقسام:

 

os

١- الأنظمة

و هي التي يكون الغرض منها خدمة برامج أخرى و إتاحة الفرصة لتطويرها،

يمكننا تخيلها إذاً كأم البرمجيات، تحت هذا المجال نجد أنظمة التشغيل و مترجم الآلة(compiler).

 

٢- التطبيقات

app

و هي التي تُصمم بناءاً على طلب الزبون، تسمى ب(stand alone applications) و هي إن ترجمت حرفياً فيعني أنها تقف لوحدها..

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

٣- تطبيقات الويب

web

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

٤- الأنظمة المضمنة

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

٥- أنظمة الذكاء الاصطناعي

ai

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

٦-الأنظمة العلمية و الهندسية

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

٧- خط-إنتاجيات البرمجيات 

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

حزمة أوفيس المكتبية، هي على تحديث مستمر بحيث تنزل نسخ جديدة كل ٣ سنين.

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

أتمنى لكم يوماً هندسياً سعيداً.

سلاف تتعلّم البايثون- تدوينة ٢

logo

 أهلاً

لمحة سريعة:

تدوينة اليوم سوف تتناول كيفية التعامل مع النصوص (Strings) و كيفية تعريف الوظائف (Functions) و أحد أساليب الاختبار (If / else ).

 

١. النصوص (Strings)

لدي عقدة برمجية تجاه النصوص، كنت أعاني – ومازلت- من برمجتها وقت استخدامي للجافا، كان الوضع يستغرق مني جهد عقلي عظيم لو وجهته تجاه أي جهاز الكتروني لتم شحنه في ٣ ثواني ( أليست الفكرة لطيفة؟ أن نشحن الأجهزة عبر تفكيرنا؟ ).

لكني انصدمت حقيقة في يسر و سهولة و”رقي” تعامل بايثون مع النصوص، بدءاً من عملية التعريف و انتهاءاً بالوظائف المدمجة والتي تسهل فعلياً معالجة النصوص.

١.١ تعريف النص

العملية لطيفة، أي شيء يقع بين علامتي التنصيص ” ” سيعتبر نصاً، بدون الحاجة الى تحديد نوعه كما أستطيع تغيير نوعه بتغيير قيمته – مثلما يتم في PHP-.

١.١

١.٢ معالجة النص

١.٢.١ طول النص 

1.2.12

١.٢.٢ تكبير و تصغير الأحرف

عبر مناداة وظائف مضمنة (Built-in functions)

١.٢.١

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

1232

١.٢.٣ تقسيم النص 

بايثون لديه طريقتان في “فهرسة” الحروف داخل النص ، من الأمام و من الخلف ، من الأمام و هي الطريقة المتعارف عليها حيث يبدأ من ٠ تصاعدياً ، من الخلف يتم بإستخدام الأرقام السالبة و يبدأ من -١ ( لأنه لا يوجد سالب صفر ، تبدو المعلومة مهمة هذه في هذا السياق و هذا السياق فقط..)

٨٧٣

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

٥٤٦

كما أيضاً يمكن تحديد المجال ، ستتم الطباعة من الحد الأول حتى قبل الحد الأخير ، مثلا اذا كان المجال [x,y] ستبدأ الطباعة من الحرف الواقع في موقع x و حتى موقع y-1 .

٨٧٦

١.٢.٤ جمع النصوص 

عبر استخدام علامة الـ “+” يمكنك الصاق أي نصين ببعضها البعض.

657

١.٢.٥ البحث داخل النص 

باستخدام مباشر لوظيفة find ، ستُرجع الوظيفة مكان أول ظهور للنص المراد البحث عنه، اذا كان النص غير متوفر داخل نصك فإنه سيرجع -١.

٢٢٢

١.٢.٦ إستبدال النصوص 

أيضاً باستخدم مباشر لوظيفة replace يمكن البحث و الاستبدال.

876

٢. الوظائف (Functions)

٢.١ تعريف الوظائف

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

شكل تعريف الوظيفة يكون كالتالي

wd

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

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

222

٢.٢ استقبال مدخلات من المستخدم 

عبر استخدام وظيفة input() ، لا نحتاج الى القصيدة التي نذكرها في الجافا ولا نحتاج الى استيراد أي حزمات (packages) ، الموضوع أبسط بكثير.

٧٦٧

٣. الاختبار (If/ else ) 

لا أحتاج إلى ذكر أهمية عبارة if في البرمجة، لذا سأقفز مباشرة الى نصها:

١١

ما نلاحظه أنه لا حاجة الى استخدام الأقواس عند ذكر الحالة و أيضا نستخدم المحاذاة هنا عوضاً عن الأقواس  {، } .

المرفقات

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

pay_button