الاثنين، 16 مايو 2011

إدارة المكتبات البرمجية NuGet

ربما إحدى أهم المميزات التي تعجب المطورين الذين يستكشفون عالم لغة روبي هي عملية إدارة المكتبات البرمجية في نظامك فهناك ما يسمى بال Gem وهي  كال package في جافا أو DLL في الدوت نت حيث هناك موقع واحد يحتوي أحدث المكتبات التي تحتاجها وهو يدار من قبل مجتمع مطوريي روبي و هو موجود على هذا الموقع http://rubygems.org/.

nuget-229x64

لذا حاول الكثيرين نقل هذه التجربة لعالم دوت نت و كان هناك مشروع مثل HornGet الذي كتبت عنه في مدونتي الإنجليزية آو مشروع آوبن راب OpenWrap و مشروع نو Nu وهذا الأخير كان نال إعجاب العديد من مطوري الدوت نت لذا قامت مايكروسوفت بتوظيف الفريق القائم على المشروع و وضع المشروع تحت مظلة CodePlex.org و تم إعادة تسميتة بعد الإطلاق ب Nu Get.

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

كيف يعمل NUGET

  • قم بزيارة الموقع التالي http://nuget.org/ و إضغط على هذا الزر installnugetسيقوم يتحميل إضافة تعمل على أ نسخة من الفيجوال ستديو 2011
  • الأن قم بإنشاء مشروع جديد من File=> New => Project  و إختر Console Application و إختر الإعدادات كما يلي.nuget1
  • تم من Solution Explorer تقوم بإختيار المشروع الذي أتشأته و تختار Add Library Package Reference كما يلي .nuget2
  • فيخرج لك الصندوق التالي إختر Online من يسار الصندوق ثم إبحث عن المكتبة التي تريدها تم إضغط Install فسيتم إضافة المكتبة في ال Referances الخاصة بمشروعك وكمثال أنا قمت بإضافة NLog أداة تعقب سير عمل البرنامج المعروفة.nuget3
  • الطريقة الأخرى لتنزيل المكتبة هو بالذهاب إلى View => Other Windows => package manager console فستظهر لك نافذة بأسفل الفيجوال ستديو و هي سطر أوامر للتعامل مع NuGet كما في الشكل التالي.nuget4

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

image

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

السبت، 30 أبريل 2011

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


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

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

اليوم مثلا كنت أريد أن أعيد تسمية ملف قمت بتحميله من الإنترنت تتفاجئ أنك لن تجد أمر إعادة تسمية في قائمة أوامر النقرة اليمين من الماوس و لا يوجد هذا الأمر في برنامج فايندر Finder و هو الشبية بمستكشف ويندوز  Windows Explorer !! فماذا سأفعل ؟ بحثت فوجدت طريقة لعمل ذلك في هذه التدوينة لكنها لم تعمل معي لكني أستفتد من التعليقات التي قالت أن كل ما تريد هو إختيار الملف المراد إعادة تسميته ثم أضغط زر الرجوع Enter كي تتمكن من إعادة تسميته.

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


حقا أريد أن أفهم لما السير في عكس أساليب الإستخدام في ربما ٨٠ ٪ من برامج العالم ؟!!

يبدو أن رحلتي معه ستكون مؤلمة بلا شك :s 

الأحد، 20 فبراير 2011

ضبط جودة البرمجيات من دوت نت عربي

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

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

السبت، 16 أكتوبر 2010

حكاياتي مع الإنتخابات , أو لماذا لن أنتخب

بقي أقل من شهر على موعد الإنتخابات البرلمانية لعام 2010 , و ها نحن نشاهد الصراع المحموم نحو قبة البرلمان بشعارات طنانة رنانة نعلم يقينا أنها لن تتحقق, نفس الوجوه نراها من شارع إلى شارع, نفس مقرات الدعم والمؤازة لا يوجد شئ جديد إلا أن حزب جبهة العمل مقاطع للإنتخابات هذه المرة.

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

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

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

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

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

فما رأيكم دام فضلكم هل أنا على حق في عدم المشاركة .

الأربعاء، 6 أكتوبر 2010

إعتراف … إلى والدي

بعض الأشياء التي أحبها في والدي أنه لم يكن مباشرا في الإنتقاد أو التأديب و أذكر مرة كان لا يعجبه حالي فما وجدت منه إلا أن كتب بضعة أبيات على ورقة صغيرة يقول فيها

يا ولدي .. يا نطفة من دمي

و بضعة من حلمي الشاعري

تراك تغدو فارسا ملهما؟

أم تنطوي كالسراب العابر؟

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

هذه الأبيات أثقلت كاهلي دوما و كنت أخشى أن أخيبت أمله.

وضعت تلك الورقة في محفظتي بقيت مع كل ذلك الوقت (أكثر من عشر سنين) تجبرني على أسير دوما للأمام.

فإلى والدي شكرا لأنك جعلتني ما أنا علية.

شكرا لتفهمك و حبك و عطفك اللا مشروط.

الثلاثاء، 16 فبراير 2010

إستخدام Using Block في سي شارب

تتميز الدوت نت .NET كغيرها من البيئات عالية المستوى بأننا لا نحتاج لإدارة الذاكرة فيها إذ يعمل ما يسمى بال Garbage Collector أو GC “ترجمتة الحرفية جامع النفايات” كل فترة من الوقت و يزيل الكائنات التي لم تعد تستخدم.

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

و في حالة و جود هذه الكائنات غير المدارة أو كائنات مدارة تستخدم كائنات غير مدارة نحتاج في تعريفيها إلى الوراثة من واجهة IDisposable التي توجب عليك إضافة دالة Method بإسم Dispose و بهذه الدالة نكتب الكود اللازم لتحرير هذه الكائنات و احد الامثلة الشهيرة في هذه المجال هو كتابة الكود المسؤل عن الإتصال بقواعد البيانات حيث يكتب كما يلي

//نقوم بوارثة واجهة IDisposable
public class DataAccess:IDisposable
{
//نعتمد على الواجهات في إنشاء الكائنات الخاصة بنا حتى لا تكون عملية تغير البرنامج
//إلى أي قواعد بيانات أخرى عملية صعبة
public IDbConnection DbConnection { private set; get; }

public DataAccess()
{
//الحصول على إعدادات الوصول إلى قواعد البيات من ملف الإعدادات
var connectionString = ConfigurationManager.ConnectionStrings["SqlConnection"].ConnectionString;
// إنشاء كائن الأتصال بقاعدة بيانات SQL
DbConnection = new SqlConnection(connectionString);
}
// دوال أخرى

//الدالة التي تفرضها علينا واجهة IDisposable
public void Dispose()
{
// سيتم تنفيذ الكود الموجود هنا عند منادة هذه الدالة أو عند إستخدامها مع Using Block
DbConnection.Close();
//نقوم هنا بكتابة الكود المسؤل عن تحرير المصادر غير المدارة مثل إغلاق الإتصال بقواعد البيانات
DbConnection.Dispose();
}
}



عندها نستطيع إستخدام ال Using Block إذ أننا لا نستطيع أستخدامة إلا إذا كان الفئة Class  التي نستخدمها معه قد و رثت من واجهة IDisposable  و لأريكم كيف يتم إستخدامه تابعو الكود التالي:




class Program
{
static void Main(string[] args)
{
//ننشئ كائن من الفئة التي ترث IDisopoable
using (var Db = new DataAccess())
{
//نكتب العمل الذي نريده
// Do Some Code Here
}// عن الخروج من هذه المنطقة ستجبر الدوت نت الفئة على مناداة دالة Disopose
// حتى لو حدث أي عطل خارج عن إرادتنا
}
}



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

الجمعة، 22 يناير 2010

من وحي المقابلات

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

ما دفعني لهذا التعميم أجابات المحترفين الذين اقابلهم في الشركة من اجل التوظيف و إجاباتهم الغريبة و هذه عينة منها

تسال أحدهم : كيف ترى نفسك في  OOP “مفاهيم البرمجة الكائنية” ؟

فيجيب : جيد

نساله : كم تعطي نفسك من عشرة ؟

يقول : 7 من عشرة

…

…

…

أسأل : ما هي الInterface  أو ربما أساله عن أي شي أخر؟

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

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

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

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

 

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