حمقى في ثوب أحبابك!


يتجلى البؤس أحيانا في تعليقٍ على أحدِ مناشيرك على الفيسبوك، يأتي به إليك من تَخَالُهُ صديقا، والحقيقة المؤلمة أن من خِلْتَهُ صديقا ليس صادقا وإلا لأدرك أن كلمة انتقاص واحدة منه في حقك قد تأتي على مالديك من طموح فتجتثه من جذوره، لتحيلك إنسانا من رماد، تذروه أي رياح!
وأحيانا أخرى يتجلى في كلمة عابرة يلفظها أحد أقربائك في حضرتك، فتفهم منها أنت أكثر مما أراده هو، لأن اللفظ دابة المعنى، وبعض المعنى يَحِيكُ في صدرك وَمَارِدُكَ ينتظر على أحر من الجمر أي لفظ يدانيه ليركبه، ثم يصيح بك بعد سماعك له: خذ يا حبيبي، أنت على خطأ! وهذا دليل يدعم موقفي!
وهل يليق بمن يرى نفسه سيبويه أن يفتح كناشة ألفية مالك؟
الحقيقة يا أحباب أن الضعف أصدق مافينا، وأننا مهما أظهرنا الاستماتة والصمود، إلا أننا في دواخلنا نَخِرُّ صَرْعَى في لحظة من اللحظات!
والحقيقة أن ضعفنا مناط قوتنا، فمن شاء أن يسمو فلابد له أن يصم أذنيه عن كل نداءات التثبيط، مهما كان مصدرها داخليا أو خارجيا.
ولابد له أن يضع هدفه نصب عينيه، لا يذعره عنه شيء حتى يبلغه، وإلا فإن الإصغاء لكل ناعق سبب رئيس للتعجيل بك إلى هوة الفشل، الهوة السحيقة التي لن تخرج منها إلا إن أدركت أنك سقطت فيها! أما إصرارك على أنك لست فاشلا فلن ينتشلك منها، وهل يليق بمن يرى نفسه سيبويه أن يفتح كناشة ألفية مالك؟ القياس هو هو! فتمعن واعترف بسقطتك ثم التمس أسباب النهوض منها دون مكابرة، وأولى خطواتك بعد الإقرار وترك الإصرار: المثابرة!
وما أجمل المثابرة بعد المكابرة! إنها سيل جارف يحول طاقتك السلبية إلى طاقة إيجابية!
ثم تخلص من كل هؤلاء الحمقى الذين يأتونك في ثوب أحبابك، تارة على مواقع التواصل الاجتماعي، وتارة في الشارع، وتارة في الشغل، وتارة يصدر صوتهم من داخلك!
تبرأ منهم جميعا وصح بهم: لا أستحمل غباءكم! 
واشغل نفسك بما يلي تظفر بما خططت له:

  • تأكد من هدفك إن كان شريفا، فامض ولا تلتفت، وإلا فَقَبِّلْ جبين من أسميناهم حمقى في ثوب أحبابك، ثم حدد هدفا شريفا واقلب لهم ظهر المجن، لا بأس أن تكون براغماتيا :)
  • نظم وقتك، وأعد الأدوات اللازمة لبلوغ هذا الهدف، وادرس آليات الوصول إليه باستفاضة وتفصيل
  • راجع المكتسبات في كل فرصة ترى أنك حققت جديدا، سواء كان هذا الجديد لبنة جديدة في صرح بلوغ هدفك، أو نزع لبنة وضعتها في غير مكانها، لا بأس في ذلك فإن بعض الهدم دعامة للبناء السليم!
  • النجاح ليس نقطة تبلغها، قد يكون استيقاظا من غفلة!
  • اطلب العلم الموصل إلى هدفك من مظانه، ولا تطلبه حيثما اتفق فتكون بذلك أحمق من رجلة كما تقول العرب (الرجلة نبتة تنمو في مجاري السُّيول فيمر السيل بها فيقتلعها‏) 
  • تنظيم ساعات اليقظة خير من تقليل ساعات النوم
  • البؤس يتجلى في أكثر من مكان وبأكثر من شكل، لكن رائحته واحدة، فحيثما وجدتها فاصرف وجهك عنها وعن من بَثَّهَا !
عدا ذلك، دام لك البشر والفرح!


المختصر المفيد في Razor مع ASP.NET MVC 5


السلام عليكم ورحمة الله وبركاته،
أتمنى لكم الاستفادة الكاملة من المحاضرة أسفله.
دام لكم البشر والفرح!

المختصر المفيد في تقنية Entity Framework مع MVC 5



السلام عليكم ورحمة الله وبركاته،
في هذه المحاضرة القيمة سوف نتعرف بحول الله على تقنية Entity Framework مع نمط الويب ASP.NET MVC 5، وسنركز في المقدمة على مزايا Entity Framework وعلى أنماط اشتغالها الثلاثة:

  • Entity Framework Code First
  • Entity Framework Model First
  • Entity Framework Database First
ثم بعد ذلك سندخل في صلب الموضوع عبر إجراء مثال تطبيقي.
أترككم مع المحاضرة، وكلي دعاء لكم بالتوفيق والسداد.
ودام لكم البشر والفرح

نموت نموت، ويحيى Xamarin !


مقدمة زائدة:

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

قبل الولادة كان المخاض:

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

فكان سالك هذا السبيل يصل إلى ملتقى طرق عليه لافتات كما يلي:
1. إذا أردت برمجة تطبيقات أندرويد فاحمل ضمن زادك لغة جافا
2. إذا أردت برمجة تطبيقات iOS فاحمل ضمن زادك لغة Objective C أو Swift
3. إذا أردت برمجة تطبيقات Windows Phone فاحمل ضمن زادك لغة  C#
وبعض الأنظمة الضعيفة بقيت لافتتها تبهت حتى ضاعت حروفها، فلا يكاد مطالعها يتبين لوازم السفر إلا بعد جهد، وحديثي عن  Symbian ومن حذا حذوه !
عموما، دفعت هذه التعددية أهل البرمجة إلى الركون إلى حيز الراحة، فكل مبرمج يتجه صوب اللغة التي يعرفها، فكان من النادر أن تجد مبرمج جافا ينشىء برامج يستهدف بها نظام الويندوز فون أو مبرمج سي شارب يستهدف تطبيقات iOS...
أما إذا أراد المبرمج أن ينشىء تطبيقا يعمل على الأنظمة الثلاثة، فكان لزاما عليه أن يقطع الطريق التالية:
1. تعلم اللغات البرمجية اللازمة لكل نظام
2. التمرن على بيئة التطوير الخاصة بكل نظام
3. إنشاء التطبيق بجميع اللغات
الخطوات قد تبدو سهلة في العد، لكن وقعها كالعض!
فليس من السهل أن تتقن كل اللغات الآنفة إلى حد إبداع ما تجود به قريحتك، وشتان بين أن تكون مبدعا، وبين أن توهم نفسك أنك كذلك، كدأب المتنطعين الذين يظنون أن طباعة جملة Hello World بجميع اللغات دليل تميزهم، وكلامي للفهم لا للهدم، فَاعْقِلْ!
فكان من أولى البشائر ظهور ما يعرف بالتطبيقات الهجينة Hybrid Applications، وهي تطبيقات تُبرمج مرة واحدة وتعمل على مختلف الأنظمة، بحكم أنها مصممة بلغات عامة HTML و CSS و Javascript من خلال إحدى بيئات التطوير التي تجعل هذا التطبيق قادرا على الاشتغال في مختلف الموبايلات،ومن أبرز بيئات التطوير التي تسمح بإنتاج تطبيقات هجينة نجد بيئة Cordova و PhoneGap وغيرهم...
سيرا على نفس المنوال، قام مؤسسو شركة Ximian سنة 2011 بإصدار منصة Xamarin لكن هذه المرة برؤية مختلفة، حيث أن التطبيقات الناتجة لن تكون هجينة Hybrid وإنما ستكون أصلية Native كما لو أنها برمجت باللغات البرمجية الأصلية لكل نظام.
بدت الفكرة مغرية جدا، لا سيما وأن المبرمج لن يحتاج أكثر من لغة سي شارب لكي يقوم بإنشاء تطبيقات موبايل أصلية لمختلف أنظمة تشغيل الموبايلات،
وفي عام 2016 قامت شركة ميكروسوفت بشراء منصة Xamarin وجعلتها مجانية لمستخدمي الفيجوال ستوديو، وقد سبق وتحدثنا عن ذلك في المقالة التالية:

حول شراء ميكروسوفت لمنصة Xamarin

بعد الولادة، كثر السؤال

مئات الآلاف من المبرمجين اليوم يستعملون منصة Xamarin لبناء تطبيقات موبايل متعددة البيئة Cross-Platform Mobile Applications، لأسباب عدة، أبرزها سهولة تعلم لغة سي شارب، ومجانية منصة Xamarin، والقدرة على إنتاج تطبيقات تشتغل بكفاءة كما لو أنها برمجت بلغاتها الأصلية.
فلما كان الإقبال متزايدا على Xamarin، كثرت الأسئلة حوله، فكان من جملة الأسئلة التي راجت ما سنسعى إلى الإجابة عليه أسفله بحول الله وقوته.

ماهو Xamarin؟

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

لماذا Xamarin دون غيره؟


  • لأنه يوفر علينا الوقت في بناء تطبيقات الموبايل ثلاث مرات، فبدل استغراق ثلاثة أشهر لبناء نفس التطبيق على ثلاث منصات، سنستغرق فقط شهرا واحدا.
  • لأنه مجاني
  • لأنه يعفينا من تعلم عدة لغات برمجية لاستهداف باقي منصات الموبايل
  • لأنه يسمح بإنشاء تطبيقات أصلية Native Applications تعمل بكفاءة عالية.
  • لأنه يسمح لنا ببناء التطبيقات بلغة سي شارب الغالية على قلوبنا جميعا.
  • لأنه يسمح لنا بتضمين مجتابت مبرمجة بلغات أخرى كجافا و Objective C، الشيء الذي سيعفينا بشكل كامل من تعلم هذه اللغات، وحتى إذا ما احتجناها فكل ما علينا هو جلبها للمشروع والعمل عليها بلغة سي شارب.
  • لأنه يسمح لنا باستعمال الفيجوال ستوديو كبيئة للتطوير، وبما أننا نحن مبرمجو الدوت نيت معتادون عليه فلن نجد مشاكل في تطوير التطبيقات باستعمال Xamarin.

ما الذي سأحتاجه لأبدأ Xamarin؟

كل ما ستحتاجه هو برنامج فيجوال ستوديو أو برنامج Xamarin Studio لكي تبدأ عملك.

من أين أتعلم Xamarin؟

إذا أسعفنا الوقت سنحاول أن نسجل دورة متكاملة إن شاء الله لتعلم Xamarin من الصفر إلى الاحتراف، أما الآن فأفضل مكان يمكنك أن تتعلم Xamarin منه هو المصادر الرسمية له عبر الموقع التالي:
https://developer.xamarin.com/guides/
كما يمكنك متابعة دورة الأخ الفاضل حسين الربيعي من هنا:
رابط الدورة على قناة بغداد الجديدة
ورأيي فيها أنها دورة جميلة وتفتح العيون على منصة Xamarin لكنها ليست كافية.

ويمكنك أيضا متابعة قناة أخينا الحبيب حسام الدلاعي، من تونس الحبيبة، أغلب المحاضرات باللغة الانجليزية لكنها جيدة في رأيي:
قناة حسام

إلى هنا أدعو لكم جميعا بالتوفيق والسداد، ودام لكم البشر والفرح!

دورة إنشاء برنامج إدارة الطلبة باستخدام MySQL و VB.NET 2015

تمثل هذه الدورة الأسلوب الواجب على المبرمج اتباعه في بداية مشواره البرمجي، إذ تبين له من أين يبدأ وأين ينتهي، كل ذلك بطريقة سلسة، سهلة الاستيعاب والتطبيق.
في ختام هذه الدورة، ستتمكن من إنشاء برنامج يدير الطلبة وبياناتهم وكيفية إعطائهم النقاط حسب المواد الدراسية.
بالتوفيق والسداد:
1. دورة برنامج إدارة الطلبة باستخدام MySQL و VB.NET 2015 - إعداد MySQL
2. دورة برنامج إدارة الطلبة باستخدام MySQL و VB.NET 2015 - إنشاء قاعدة البيانات
3. دورة برنامج إدارة الطلبة باستخدام MySQL و VB.NET 2015 - واجهة الدخول
4. دورة برنامج إدارة الطلبة باستخدام MySQL و VB.NET 2015 - تصميم الواجهة الرئيسية
5. دورة برنامج إدارة الطلبة باستخدام MySQL و VB.NET 2015 - إضافة الطلبة وحل مشكلة العربية في MySQL
6. دورة برنامج إدارة الطلبة باستخدام MySQL و VB.NET 2015 - العرض والبحث عن الطلبة
7. دورة برنامج إدارة الطلبة باستخدام MySQL و VB.NET 2015 - تعديل وحذف الطلبة
8. دورة برنامج إدارة الطلبة باستخدام MySQL و VB.NET 2015 - المواد الدراسية
9. دورة برنامج إدارة الطلبة باستخدام MySQL و VB.NET 2015 - تسجيل النقاط 
10. دورة برنامج إدارة الطلبة باستخدام MySQL و VB.NET 2015 - الدرس الختامي

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


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

توكل على الله وابدأ هذه الدورة:



هكذا يربح المبرمجون !


ولقد رقبت فيك ذلك الناجح الذي قال للفشل: انصرف!
فَلَمَّا لم ينصرف، صرف وجهه عنه ومضى في نجاحه غير آبِهٍ بِهِ..
هكذا سبيل الناجحين، ما لا ينصرف نَصْرِفُ وجوهنا عنه..
دُمْتَ ناجِحًا يا خليلي..
لقد اشْتَقْتُ إليك على فكرة، وأعلم أنك أيضا اشتقت إلي، فاسمح لي بداية أن أعتذر منك عن تأخري (المتعمد) في إمدادك بالجزء الثاني من مقالة: عن تلك القصة التي بطلها أنت، والتي تطرقنا فيها إلى أهمية التقييم قبل التقويم.
لماذا تعمدتُ التأخير؟
لأعطيك فرصة للتقييم ثم للتقويم، فلا قيمة لما ستقرؤه الآن إن لم تكن قد أديت المطلوب منك...
سأفترض مسبقا أنك تمكنت من أدوات البرمجة، وصرت - شيئا ما - قادرا على صياغة حلول برمجية لاحتياجات الناس، وذلك بعد أن قيمت نفسك، وأدركت مواطن الخلل، وعملت بِتَأَنٍّ على تقويمها، فهنيئا لك (قبلة على الجبين) !
الآن تعال معي لنتعرف على سُبُلِ الربح من البرمجة، واصبر معي صبرا جميلا !
قبل ذلك، خُذْهَا مني بصدق، مصادر الرزق لا حدود لها إلا في أذهان العاجزين، وما دُمْتَ لست منهم فَأَبْشِرْ بِفَيْضِ الرزق عند بذلك لأسبابه، ولا تعتقد أن الوارد أدناه هو محصور طرق الربح من البرمجة، فما سأتلوه لك ليس سوى مما لاح لي بعد طول مِرَاسٍ وكثرة مزاولة للعمل البرمجي، وبعض العاملين في هذا القطاع يلجؤون إلى أساليب أخرى كالتسويق الالكتروني، أو الإشهار، أو شراء الأسهم والمضاربات، ولأنني من أولئك الذين يؤمنون بأن البرمجة حرفة كافية إن لم تُغْنِ صاحبها صانته عن مَدِّ اليد، فقد اكتفيتُ بها وعددتُ لك بعض طرق الربح منها بعيدا عن التسويق والإشهار والمضاربات.

العمل الحر:

ليس أَطْيَبَ للنفس من العمل بحرية، عِلْمًا أن الحرية لا تعني إطلاقا التقاعس أو التكاسل، وإنما تعني حرية اختيار ما يناسبك من مشاريع، وحرية تحديد الوقت الذي يكفيك لإكمالها.
إن كنت من هذا الصنف فسوف تجد ضَالَّتَكَ عند مواقع العمل الحر أو العمل المستقل كما يسميها البعض Freelance websites، وهي مواقع تسمح للمبرمجين بالانخراط فيها، ومن ثم يستطيعون البحث عن المشاريع المطلوبة والتي تقع في نطاق المقدور عليه (أي المشاريع التي يملكون أدواتها)، هذه المواقع تلعب دورا كبيرا في ترقية المبرمجين ماديا ومهنيا، إِذْ مع كثرة إنجاز المشاريع ستزداد الأرباح وتتراكم الخبرة.
لكن قبل أن تنخرط في أي موقع من مواقع العمل الحر، أنشئ لك حسابا على بايبال Paypal أو احصل على بطاقة بنكية لتحويل مستحقاتك إلى حسابك.
تذكر: ابدأ بهذه الخطوة أولا، لأن بعض المواقع تستلزم منك تسجيل الحساب الذي سيتم تحويل العائدات إليه.
توجد عدة مواقع خاصة بالعمل الحر، أشهرها موقع Freelancer ، وموقع UpWork، وموقع Toptal، وغيرهم..
دون أن نغفل عن ذكر بعض المواقع الخاصة بالخدمات الصغرى ك Fiverr، و Khamsat، إِذْ يكفي أن تقوم بتعريف الخدمة التي تستطيع تقديمها مقابل أجر صغير، وإن كانت خدمتك مطلوبة فسوف تستقبل الطلبات.
مواقع العمل الحر تستلزم صَبْرًا حتى تظفر بأول مشروع، وتستلزم صِدْقًا حتى تضمن ثقة العملاء، دون الصبر والصدق اِلْغِ حسابك من مواقع العمل الحر فلن تبلغ مقصدك إلا بهما، وتستلزم أيضا أن تخصص لها بعض الوقت لتتابع العروض، فإن بدا لك أن العروض لا علاقة لها بحقل تخصصك، فلا بأس أن تواكب احتياجات العملاء عبر الانتقال إلى التخصصات المطلوبة وتعلمها.

العمل في الشركات:

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

العمل لوحدك:

وهي من الخيارات المفضلة عندي شخصيا، ويتمثل في إنشاء برامج متعددة الطلب Generic Softwares وتسويقها، كأن تنشئ موقعا لكراء السيارات، ثم تقوم بتسويقه عند وكالات كراء السيارات في منطقتك، أو أن تبني موقعا تعريفيا تضع عليه كافة منتجاتك، ثم تقوم بإشهارها.
ونصيحة مني، حاول أن تنشئ من المنتوج الواحد عدة أصناف بمقاييس متنوعة حسب القدرة الشرائية للعميل، وحتى تُمَكِّنَ الزبناء من اختيار ما يناسبهم، وحتى تعطي لعملك طابع الاحترافية (النسخة الذهبية بكامل المزايا، النسخة الفضية بالمزايا الأساسية، وما إلى ذلك..أما النسخة الخشبية فلا أريدها )
وَاحْرِصْ أن تتفادى البرامج التي يطلبها منك شخص واحد فقط Bespoke Softwares، لأنك ستضيع وقتك معها ولن تتمكن من إعادة تسويقها لأنها ستموت عند تسليمها لصاحبها، فإن كُنْتَ لَا بُدَّ فاعلا، فاحرص أن تقبل البرامج التي يكون مردودها كافيا، واتفق دائما مع العميل على حيثيات المشروع صغيرها وكبيرها حتى لا تقع معه في مشاكل عند الانتهاء خاصة مسألتي الوقت ومكونات المشروع.
وَلَكَمْ أتمنى أن تضع مع عميلك عقدا يضم ما اتفقتما عليه، حتى إذا عَنَّ أَمْرٌ جديد وَاجَهْتَهُ بمحتوى العقد، أو تَكَاسَلْتَ أنت عن شيء قد طلبه منك، واجهك به فإن مرور الأيام مُرٌّ، وكم من صغيرة غضضنا الطَّرْفَ عنها كَرَّهَتْنَا في البرمجة (وْفِي اللِّي خَلَّفُوهَا) فَاعْقِلْ بارك الله فيك.

برمجة الألعاب والتطبيقات:

بعض المبرمجين يركزون جهودهم على سوق الموبايل، فلا يشغلون بالهم مع باقي أصناف المشاريع، وهم دُهَاةٌ يعلمون من أين تؤكل الكتف، يحتفظون بأعصابهم سليمة من ضغوط العميل، فعلاقتهم به ليست علاقة مباشرة قائمة على الأخذ والرد والشرط والجواب، وإنما قائمة على هذا تطبيقي إن أعجبك فَهَاتِ مقابله، وإن لم يعجبك فَفِي السوق غيره.
هؤلاء المبرمجون الدهاة، يأتون بالفكرة التي قد تحظى بالقبول على مستوى رواد سوق الموبايل، فَيُفَكِّكُونَهَا ذهنيا ثم يقومون بصياغتها برمجيا، ويرفعونها على السوق المستهدف وَرَبُّكَ يرزق من يشاء.
عمود الربح في تطبيقات الموبايل يكون عبر إدراج إشهارات فيها، أو عبر عرضها بشكل غير مجاني، أو بشكل مجاني جزئي، ومن شاء كامل المزايا فليدفع!
تريد مثالا؟
لعبة فيها عدة مستويات Levels، المستوى الأول والثاني بالمجان، وما بعدهما مُغْلَقٌ دَرَاهِمُ العميل سِمْسِمُهَا!

خاتمة

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

عن تلك القصة التي بطلها: أنت ! (الجزء الأول)


حتى تنتهي القصة ب "وعاش في سلام" لابد أن يترك البطل ذراعه في الحرب، وهل كنت فعلا تظن أن الحظ يحالف الهوى؟ بل خذها يقينا مني أنه يخالف الهوى، ولا تسألني عن الدليل..
فإن السماء لا تمطر ذهبا..
كما أن الدنانير تتساقط بقدر قطرات العرق..
وهل بعد قول المولى تبارك وتعالى ﴿ وَأَن لَّيْسَ لِلْإِنسَانِ إِلَّا مَا سَعَىٰ ﴾ قول آخر؟!
خليلي..
مَنَّ الله عليك أن صَيَّرَكَ مبرمجا، فأنت في نعمة لو أمعنت النظر..
فإن كُنتَ متعثرا في تحصيل ثمار حِرْفَتِكَ فلأنك أَحَدُ اثنين:
لم تتمكن بعد من تخصصك في البرمجة..
أو أنك متمكن حقا، لكنك لم تجد مرشدا..
إن كنت من الصنف الأول فَاصْغِ إلي جيدا، واعمل بكلامي، فإنني أحببتك منذ أن جلست تقرأ كلامي هذا، ولست ببخيل حتى أحرم حبيبي سبيل التقويم..
لكن قبل أن أدلك على سبيل التقويم، هلا دللتك على سبيل التقييم؟
بلى، فإن التقويم بلا تقييم تنويم، ولن ترقى إلى ما تصبو إليه إن أسأت التقويم، وهل يصلح العلاج إلا بعد التشخيص؟!
ركز معي..
خذ ساعة من وقتك، تتفرغ فيها لنفسك، ثم فكر مَلِيًّا في تخصصك البرمجي الذي قررت أن تزاوله، ولا تشتت بالك بكثرة التخصصات، فإن الكثرة تدفع إلى الانتقائية، والانتقائية مدعاة إلى القبوع في ذيل التخصص.
حدد تخصصا وحيدا فقط، أ تريد احتراف برمجة الويب؟ برمجة سطح المكتب؟ برمجة تطبيقات الموبايل؟ أم ماذا تريد؟
ولا تسألني عن أيها أكثر مردودية، وأشدها طلبا؟ لأن الحال ما يزال مبكرا..
بعد أن تضرب الأخماس للأسداس، وتقدر المصالح والفوائد، حدد تخصصك واصنع قصتك، ولا تُدخل أحدا في قرارك، حتى أنا لا تشركني فقد أخذلك، لأنني مستغرق في تخصصي..
قَرِّرْ واصنع قصتك، ثم انتقل إلى مرحلة تحديد النقص..
بصيغة أخرى: ما الذي تستصعبه في تخصصك؟ ما الذي تهرب منه دوما؟ مالذي ينغص عليك عيشك إن مَرَّ طيفه ببالك؟
قد يكون واحدا أو أكثر، اجمعهم وسجلهم في دفترك..
ثم ابدأ بهم واحدا واحدا، لا تغادر منهم أحدا حتى يستحيل في ذهنك كالعصا في يد الأعمى..
ثم بين الفينة والأخرى راجع مرحلة تحديد النقص، حتى يستقيم حالك في تخصصك، ثم انتقل إلى مرحلة النسخ البَنَّاء..
أَ وَ تدري ما النسخ البناء؟
أن تأخذ مشروعا أعجبك، وتنسج على غراره مشروعا آخر من صنعك..
تريد مثالا: أعجبتك لعبة Flappy Bird، لما لا تصنع مثلها بنفسك؟
ستكون تجربة فريدة صدقني، لأنك ستدخل في تَحَدٍّ مع نفسك، وستواجه صعوبات وإكراهات، وهي مسألة طبيعية جدا، فلا تستسلم يا خليلي، فأنت بطل، وهذه قصتك، ولا أحد سواك سيصنعها، فاصنعها ولو كلفك ذلك أن تشتري سورس كود اللعبة وتنقب فيه، فَلِسُمُوِّ الهدف تَذِلُّ الوسائل..
ها قد ساويتك يا خليلي بثاني الاثنين: ذاك الذي يملك الأدوات لكنه لم يجد مرشدا يدله على سبيل الربح..
فتنفس بعمق، وتعال معي لنواصل في الجزء الثاني من هذه المقالة، سُبُلَ الربح من البرمجة، على أن تعدني بشيء واحد، أو بشيئين، بل بثلاثة !
أما الأول: أن تضع في اعتباراتك معاني الحرام والحلال، فلا تطاوع نفسك في توظيف ما حباك الله من معارف في الحرام وإن زينته لك نفسك، فإن الدنيا غمضة عين.
وأما الثاني: أن تدرك يقينا أن الله عز وجل كرمك بالعقل، فلا تصدق من يقول لك: أن هذا الأمر أو ذاك صعب ولا يمكنك بلوغه، فهو كاذب، وبعون الله أنت قادر على تحقيق كل ما تريد، فقط: ثق أنك قادر، ثم بادر !
وأما الثالث: ألا تفشل في مراحل التعلم، وخذ كامل وقتك في المدارسة والممارسة، ولا تزدري حالك بالمقارنة مع غيرك، فإنك نسيج وحدك، وليس ببعيد أن تتجاوزنا جميعا.
فاصنع قصتك يا خليلي، دام لكم البشر والفرح!

يسألونك عن: ASP.NET Routing


حول سلسلة "يسألونك عن"
سلسلة "يسألونك عن": عبارة عن مجموعة من المقالات التقنية الرامية إلى شرح بعض المسائل البرمجية التي لم يتناولها القلم العربي

المقدمة:

جرت العادة أن تؤشر عناوين URL إلى ملفات موجودة على السيرڤر، وكل ملف يمكن الوصول إليه عبر عنوان واحد يبرز مساره الفعلي Physical Path في مجلدات السيرڤر، كما يوضح الرابط التالي، الذي يحيل إلى صفحة اسمها Login.aspx:
Http://www.Website.com/Login.aspx
هذا التوجيه المعتمد من طرف نمط Web Forms، كان معتمدا قبل ذلك في Classic ASP، وكذلك في أغلب لغات برمجة الويب، قبل أن يظهر نمط MVC ويأتي معه بطريقة جديدة لتوجيه العناوين، وهي ما يعرف ب URL Routing، فماذا تكون؟ وكيف نستطيع استخدامها في مشاريع ASP.Net؟

في العمق:

بداية، ينبغي أن نعلم أن توجيه العناوين (وهي الترجمة التي سنعتمدها في هذه المقالة للتدليل على Routing) عبارة عن آلية تسمح باعتماد شكل أو عدة أشكال لعناوين URL، ومن ثم تسهيل عملية الوصول إلى محتويات المشروع دون الحاجة إلى التأشير إلى ملف فعلي Physical File وإنما يكون التأشير إلى Action داخل Controller.
في تقنية ASP.Net، نستطيع التحكم في نمط التوجيه Routing Pattern، عبر الذهاب إلى الكلاس RouteConfig الموجودة داخل المجلد App_Start، لكن قبل أن نغوص في أعماق الكود، تعالوا بنا نطالع الخطاطة التالية التي تبين لنا كيف تتم عملية التوجيه:
في الأول يأتي الطلب من المتصفح لعنوان ما، فيقوم محرك التوجيه Routing Engine داخل الويب سيرڤر، بمعالجة الطلب، ومقارنته بالأنماط المسجلة في جدول التوجيه Routing Table، فإن توافق العنوان المطلوب مع أحدها تم إستدعاء Action المطلوبة، وإلا فإنه يتم إرجاع الخطأ 404 دلالة على أن المورد المطلوب غير موجود.
افتراضيا في ASP.NET MVC يتم اعتماد نمط التوجيه التالي:

Http://www.Website.com/Controller/Action/1

بحيث Action تمثل اسم Action، و Controller تمثل اسم Controller، و Id يمثل البرامتر المراد تمريره إلى الصفحة المتوجه إليها، وغالبا ما يكون هذا البرامتر اختياريا حتى لا يتم إلزام بعض Actions التي لا تستعمل برامترات به.
لو دخلنا إلى الكلاس RouteConfig الموجودة داخل المجلد App_Start، سوف نجد بداخلها وظيفة اسمها RegisterRouters تستقبل برامتر اسمه routes من نوع RouteCollection، وهذا هو محتواها:

        public static void RegisterRoutes(RouteCollection routes)

        {

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");



            routes.MapRoute(

                name: "Default",

                url: "{controller}/{action}/{id}",

                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

            );

        }

هذه الوظيفة هي التي تسمح لنا بتعريف أنماط التوجيه، وافتراضيا تحتوي على نمط جاهز، يستقبل عدة برامترات، يظهر منها في الكود أعلاه ما يلي:
  • البرامتر name: من خلاله نعطي لنمط التوجيه اسما، حتى نميزه عن غيره من الأنماط التي نود تعريفها.
  • البرامتر url: من خلاله نحدد شكل نمط التوجيه، وهو هنا بنفس الكيفية التي تحدثنا عنها آنفا.
  • البرامتر default: من خلاله نعطي العناصر الافتراضية الموافقة للنموذج الذي تم تعريفه، بحيث ستتم إحالتنا عند تصفح المشروع إلى الرابط التالي:
Http//www.Website.com/Home/Index
بحيث Home هو اسم Controller الافتراضي المعرف في جدول أنماط التوجيه، و Index هو اسم Action الافتراضي، ولأن id اختياري Optional، فلن يحدث خطأ عند استدعاء الرابط أعلاه.
قبل تعريف نمط التوجيه داخل الوظيفة، ستلاحظون وجود السطر التالي قبلها:


            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

الوظيفة IgnoreRoute دورها هو منع الوصول إلى المسار أو الملف الممرر لها، في هذه الحالة، ستمنع الطلبات التي تريد ملفات بامتداد axd، بالمثل يمكننا منع الوصول إلى ملف معين أو Action ما، كما يلي:

public static void RegisterRoutes(RouteCollection routes)

        {

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");



            routes.IgnoreRoute("Books/Display");



            routes.MapRoute(

                name: "Default",

                url: "{controller}/{action}/{id}",

                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

            );

        }

في المثال أعلاه، لن يستطيع المستخدم الوصول إلى Action المسماة Display والموجودة داخل Controller المسمى Books، لأننا استثنيناها في Routing عبر استدعاء الوظيفة IgnoreRoute.

حتى يكون Routing شغالا لا بد من تسجيله عند انطلاق التطبيق داخل الحدث Application_Start التابع للملف (المخضرم) Global.asax، الذي لو انتقلنا إليه سنجد أنه بالفعل يحتوي مسبقا على السطر التالي الذي يقوم بتسجيل جدول أنماط التوجيه:

RouteConfig.RegisterRoutes(RouteTable.Routes);

داخل الوظيفة RegisterRoutes يمكننا التحكم في شكل عنوان url عبر تغييره من قيمة البرامتر url، وكذلك يمكننا تغيير Action و Controller الافتراضيين من البرامتر default، كما يبين المثال التالي:

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.IgnoreRoute("Books/Display");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Books", action = "List", id = UrlParameter.Optional }
            );
        }

خاتمة

إلى هنا أحبتي في الله، ينتهي الشطر الأول من مقالتنا حول توجيه العناوين في تقنية ASP.Net، نلتقي في المقالة الثانية إن شاء الله لشرح بعض الأمور المتعلقة بالتوجيه دائما، والتي سيكون موضوعها هو تمرير البرامترات بين Actions ودور جدول التوجيه Routing Table في ذلك.
دام لكم البشر والفرح.


على مائدة أَكْوَادٍ دسمة !

استدعى مدير الشركة أفضل أربعة مبرمجين عنده، وقال لهم: لقد أَبْهَرْتُمُونِي بما تحققونه من نجاح منقطع النظير في كل ما أكلفكم به، ولا أملك إلا أن أقف لكم وقفة إجلال وإكبار لَعَلِّيَ بها أُوَفِّيكُمْ بعض أفضالكم، وما أحوجني - وأنا مديركم - أن أجالسكم على هذه المائدة وأستفيد من خبراتكم وتجاربكم، لعلي أصطنع بها يدا جديدة في البرمجة، أو أُزِيحَ بها ركام الجهل الذي يعوقني على أن أكون مثلكم!
ابتسم أكبر المبرمجين سنا في خجل وهو يقول:
هذا تواضع منك يا حضرة المدير، وما دام جلوسنا معك على هذه المائدة سيضفي عليك بهجة وسرورا فَلْيَطِبْ خاطرك إذا، فإن لك عندنا أياد بيضاء، ونتودد إليك برد بعض جمائلك!
أطرق المدير برأسه، ثم رفعه مبتسما وهو يقول:
على مائدة أكواد دسمة إذن!
فجلسوا أربعتهم، خامسهم مديرهم، وَخَيَّمَ على القاعة صمت طويل قبل أن يكسره أصغر المبرمجين قائلا:
إن كنت ذاكرا سببا من أسباب تطويع الكود في يدي، فلن أغفل عن سبب الحفظ، ولست أعني بالحفظ كتابة الكود على ورق واستظهاره، أبدا..
فإن الكود يُحفظ بالممارسة، وكثرة المدارسة..
وإذا تحقق رسوخ الكود في الذهن، كان حل المعضلات المتعلقة به أو القريبة منه من أيسر ما يكون، ألا ترى معي قدرة الحلاق على قص الشعر والمقص في يده؟ فكذلك حيازة الكود في الذهن، فهو أداة المبرمج، ووسيلته لبلوغ غايته..
ولا أزيد على سبب الممارسة في ترسيخ الحفظ إلا سبب البحث والتنقيب، فإنني كلما واجهت مشكلة بحثت عنها، وما خذلتني محركات البحث أبدا ما دمت أكتب المشكلة على الوجه الذي ينبغي!
هذا سر براعتي: ترسيخ الكود عبر الممارسة، وتجاوز المشكلات عبر آليات البحث!
ابتسم المدير في إعجاب، ثم التفت إلى المبرمج الثاني آذنا له بالكلام، فقال بهدوء:
أما أنا يا حضرة المدير، فقد طَوَّعْتُ الكود عبر حيازتي للأساس المعرفي المتين، فما خضت غمار مشروع إلا وقدمت له بالدراسة والاجتهاد، وأذكر جَلِيًّا أنك حينما كلفتني بمشروع ويب بتقنية ASP.NET MVC، وكان من ضمن مكونات المشروع مجزوءة متعلقة بالمراسلات السريعة بين الدعم الفني وبين زوار الموقع، وأبلغتك حينها أنني أمام خيارين:
1. إن كنا في حرج وضيق من الوقت، اعتمدت على المراسلات بواسطة قاعدة بيانات، وهو أمر سهل لكنه غير فعال!
2. وإن كان أمامنا وقت فاسمح لي بالبحث عن الحل الأنسب!
وقد أذنت لي حينها بالبحث عن الحل الأنسب، فوجدت مكتبة تسمى SignalR، لم أكن قد سمعت بها، لكنني وسعت صدري، ودرستها من كتاب، حتى فهمتها، فأقحمتها في المشروع فكانت النتيجة كما رأيتها، عمل مشرف وبالتقنية المناسبة!
ولا أزيد على سبب القراءة والدراسة في تطويع الكود وبلوغ المساعي إلا سبب تقليل الموارد، فلو حملت أكثر من كتاب، ما كنت لأنجز شيئا، لأن الكثرة تدفع إلى الانتقائية، والانتقائية مدعاة إلى المماطلة!
حملت كتابا واحدا فقط يا سيدي، فالتهمته وأسقطت ما جاء فيه على المشروع فكان على ما كان عليه!
وإنني لأذكر نصيحتك جيدا حينما قلت لي مؤكدا:
أصعب من بدئك من الصفر: شعورك بأنك صفر!
ابتسم المدير من جديد مفتخرا، وأدار وجهه ناحية المبرمج الثالث وأومأ له بالكلام، فقال بصوت دافئ:
أما أنا فقد نفعتني لما صفعتني!
كنتُ مبرمجا محترفا، حُزْتُ طَرَفَيْ البرمجة: تنظيرا وتطبيقا..
لكنني كنت متهاونا، لا أعير للوقت بالا، أنغمس في المشروع غير جاد، فيمضي الوقت ويغضب العميل...
فأترنح أنا وأميل!
أذكر جيدا حينما صفعتني بكلام قاس، قلت لي حينها:
كن أنت وكفى، فإذا بدر الخطأ قل: مني، وإن برز الخلل قل: أنا السبب!
كفاك تهربا، وتحميلا للجن الأزرق مسؤولية تقصيرك، فتكون بذلك كتلك التي "خانها ذراعها فقالت مسحورة" على حد تعبير إخوتنا في ليبيا..
وذكرتني بمقولة نابليون بونابرت المؤلمة: "لا تفسر بالفأل السيء قلة كفاءتك"!
كان كلامك جارحا حينها لكنه كان بصدق وسيلة نجاة، علمت يومها أنها قسوة كقسوة الأب، وإنما جنحتَ إليها لمصلحتي..
فَغَيَّرْتُ من حالي، وبدأت أُقَسِّمُ عملي على الوقت المتاح، واشتغلت بجد واجتهاد، فكان من نجاحي ما رأيت يا حضرة المدير..
وأعود وأقول:
نَفَعْتَنِي لما صَفَعْتَنِي!
حرك المدير ثغره بابتسامة عريضة، ثم أومأ للمبرمج الرابع وكان أكبرهم سنا مشيرا إليه بالكلام فقال:
حضرة المدير، لقد وظفتني عندك وأنا كبير السن..
قد اشْتَدَّ عودي، وَضَعُفَ كودي..
كنت أبرمج بلغات أكل الدهر عليها وشرب، لكن مع ذلك وضعتَ ثقتك فِيَّ، وقلت لي:
كن نوحا، واجعل أعداء نجاحك قومه.. ولسوف تنجح وسيغرقون!
زرعت كلماتُك فِيَّ حماسا رهيبا، فكنت أصل الليل بالنهار من أجل تحصيل مستجدات التقنية، لكنني كنت لا أتقدم قيد أنملة..
فبدأت أفقد الثقة في نفسي، وصرت ألجأ إلى زملائي في البرمجة، كلما وقعت في مشكلة اعتمدت عليهم وأتيت إليهم..
فَكَثُرَ زَلِّي وَتَقَلَّصَ ظِلِّي..
لأن كثرة السؤال مذلة، وماذا لدى فاقد الأداة إلا السؤال؟!
نسيت أنني مبرمج وفقدت ثقتي في نفسي، فكان كل العمل الذي أقوم به قوامه دعم زملائي، بل إنني كنت في كثير من الأحيان أكتب الكود على ورق، وأمضي في الباحة جيئة وذهابا مستظهرا..
فلما يئست وقررت ترك البرمجة..
جاءت كلمتك الباعثة..
كلمتك التي انتشلتني من براثن الفشل، ووضعت على رأسي تاج الثقة..
أ تذكر حينما وجدتني أعتمد على أحد الزملاء في عملي فقلت لي باقتضاب:
لا تعتمد على أحد، اعتمد على الأحد!
بهذه الكلمة صنعتني، وأردفتها بكلمة أخرى قائلا:
إنْ تاجُك قَل، إنتاجُك قَل..
فسألتك عن معناها، فأجبتني: إذا قَلَّتْ ثقتك بنفسك قل إنتاجك!
فحددتُ حينها حقل تخصصي، وانكببتُ عليه متعلما، لا يذعرني عن هدفي شيء حتى بلغته، وما بلغته إلا باعتمادي على الحي الذي لا يموت، ثم بثقتي في نفسي وإيماني بمقدرتي على بلوغ الرغاب وتذليل الصعاب..
وكذلك كان!
فإن كنت في القمة فَلِأَنَّ كلماتك كانت سلالم..
وطوبى لمن وجد من يغرس في سويداء قلبه معاني التعلق بالله واليقين التام أَنْ لا غايةَ تُنْشَد إلا بمشيئته ولا تُبْلَغ إلا بإرادته ولا تُدْرَك إلا بتوفيقه..
ولن أنسى كلماتك ما حييت:
لا تعتمد على أحد، اعتمد على الأحد..
وإن تاجك قل..
إنتاجك قل!
فَلِلَّهِ دَرُّكَ مِنْ مُديرٍ، فإن قضينا مساعيك فنحن صنائعك، وما توفيقنا إلا بالله!