احمي موقعك من الاختراق: هجوم SQL Injection

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

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

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

فعلى سبيل المثال لو قمت بكتابة الأمر التالي في موقعك:-

 

String str="Select count(*) from users where username=' " + txtuser.Text + " ' and password=' " + txtpassword.Text + " ' ";
Int x;
SqlCommand cmd=new SqlCommand(str,con);
X=(int) cmd.ExecuteScalar();
If (x>0){
FormsAuthentication.RedirectFromloginPage(txtuser.Text,false);
}
else{
lblMsg.Text="Login attempt failed";
}
Con.Close();


 

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

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

' or 1=1 - -

فتصبح جملة الاستعلام كالتالي وذلك لأن - - تقوم بحذف جميع ما بعدها :
 

Select count(*) from users where username = ' ' or 1=1 --

وهنا الشرط سيتحقق حيث 1 = 1 والطرف هذا مسبوق ب ( أو )

أترى خطورة الأمر...أنت الآن قدمت موقعك للمخترق على طبق من ذهب

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

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

فلحماية موقعك من هجوم ال SQL Injection، يتطلب منك فقط تحسين أسلوبك البرمجي بإتباع التالي:

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

•   لا تستخدم أبدا طريقة تمرير قيم المستخدم مباشرة في جملة الاستعلام كما في المثال الذي طرحته سابقا، ولكن يجب عليك استخدام الوسيطات ( SQL Parameters) أو الإجراءات المخزنة (Stored Procedures)

ولنكتب المثال السابق بطريقة آمنة ولكن لا تنسى قبل استخدام الوسيطات التحقق من القيم الممررة:

 

String str="Select count(*) from users where username=@username and password= @password";
cmd.Parameters.AddWithValue("@username", txtuser.Text);
cmd.Parameters.AddWithValue("@password", txtpassword.Text);
Int x;
SqlCommand cmd=new SqlCommand(str,con);
X=(int) cmd.ExecuteScalar();
If (x>0){
FormsAuthentication.RedirectFromloginPage(txtuser.Text,false);
}
else{
lblMsg.Text="Login attempt failed";
}
Con.Close();


 

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


 


CREATE PROCEDURE sp_getUser
@username varchar(200) = NULL AS
DECLARE @sql nvarchar(4000)
SELECT @sql = ' SELECT [name], [address] ' + ' FROM [USERS] Where [username] = "' + @username + ""
EXEC (@sql)


 

في هذا المثال يتم أخذ قيمة المتغير @username مباشرة من المستخدم ويدمج مع النص @sql والدالة EXEC تستخدم لتعطي النص كوسيط لتنفيذ الاستعلام وهذا الإجراء قابل للاختراق بالرغم من أخذ قيمة المستخدم كوسيط

فالمشكلة تكمن في أن الوسيط بدلا من أن يكون هو النص المستخدم للبحث من خلاله في الاستعلام سيكون جزء من الاستعلام نفسه

ولجعل هذا الإجراء أكثر أمنا بالشكل التالي:
 


 


CREATE PROCEDURE sp_getUser
@username varchar(200) = NULL
AS
DECLARE @sql nvarchar(4000)
SELECT @sql = ' SELECT [name], [address] ' + ' FROM [USERS] Where [username] = '
SELECT @sql = @sql + ' [username] LIKE @username'
EXEC sp_executesql @sql, N'@username varchar(200)', @username


 

•   لا تستخدم حساب المدير للاتصال بقاعدة البيانات بل استخدم حساب محدود.

•   لا تخزن معلومات حساسة في ملفات واضحة بل قم بتشفير كلمات السر وجميع البيانات الحساسة وأيضا يجب تشفير جملة الاتصال إذا كانت تحتوي على كلمة سر

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


الآن وبعد توضيح طريقة هجوم ال SQL Injection وإعطاءك الحلول اللازمة لتفادي هذا الهجوم والحفاظ على موقعك بشكل آمن

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

 

مشروع Mono : شغل الدوت نت على اللينكس أو أي نظام تشغيل تحلم به

إن أكثر ما يتمناه المبرمج دائما هو أن يعمل برنامجه على كل أنظمة التشغيل ، وعند الحديث عن الدوت نت ، كانت أمنيتنا أن تعمل كافة فروع الدوت نت وتقنياتها على أنظمة تشغيل أخرى غير نظام تشغيل Microsoft Windows ، ومع مشروع Mono™  تحقق هذا الحلم.

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



هل يمكنني تشغيل برامج الدوت نت بصدق على أنظمة غير نظام تشغيل Windows ؟
نعم يمكنك تشغيل أغلب برامجك على أنظمة تشغيل  أخرى ولكن تحتاج أولا للتأكد من الأمر بفحص البرنامج باستخدام أداة Mono Migration Analysis ، ولكن أغلب برامجك بالإصدار الثاني 2.0 من منصة العمل دوت نت ستعمل بدون مشاكل والمرحلة التطويرية الآن لدعم الإصدار 3.5 بالكامل

ما هي أنظمة التشغيل المدعومة ؟
هذه قائمة من موقع الشركة بالمنصات المدعومة

Operating Systems

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

والجميل في الأمر أن مشروع مونو يتطور باستمرار فتجد أنه قريبا سيدعم ال MVC ، ومن ضمن الخطط دعم الدوت نت الإصدار 4.0 في إصداره الجديد Mono 2.8 ، وهذا ما يدفعك لاستخدام مشروع مونو بدون أدنى تردد.



تحميل مشروع مونو ؟
يمكنك تحميل آخر إصدار 2.4.2.1 من مشروع مونو والعمل مباشرة على أنظمة التشغيل المختلفة من خلال هذه الصفحة
http://www.go-mono.com/mono-downloads/download.html


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


ماذا عن هذه البرامج ؟
ليس هدفي الحديث عن توافق بعض البرامج ولكن ، بعض البرامج ضرورية لمطورو الدوت نت فمثلا حزمة Microsoft Office لن تعمل على منصة مونو والسبب أنها لم تكتب بالدوت نت ويلزمها آليات أخرى كمشروع واين the Wine Project  ، مثلا حزمة برامج Microsoft Expression ستعمل بالكامل لأنها مبنية بنسبة 100% بالدوت نت ، اما برنامج WebMatrix فلن يعمل لأنه ليس مبني بالكامل بالدوت نت.
قامت الشركة بصنع بيئة عمل متكاملة تسمى MonoDevelop وهي شبيهة بحد ما بالفيجوال ستوديو حيث يمكنك كتابة شيفراتك للبرامج أو للمواقع بسهولة ويسر ومن ثم تنفيذها ويمكن تحميل هذه البيئة عبر هذا الرابط the MonoDevelop



Moonlight!! ألم يكن Silverlight ?!
صراحة الاسم أعجبني كثيرا، ويستحق صاحبه جائزة فالأساس هو الضوء الفضي ثم جاء الاسم القريب منه ضوء القمر حيث لهما نفس الضوء ونفس التلألؤ والجمال، فالموون لايت  ببساطة هو السيلفر لايت ولكن النسخة الخاصة باللينكس، فحتى تلاقي تقنية السيلفر لايت النجاح الكامل مثل الفلاش ، يجب عليها أن تعمل على كل الأنظمة والمتصحفات ، وحيث أن السيلفر لايت بإصداراته يستخدم منصة الدوت نت وخصوصا في الإصدار الثانية وما بعده ، فنحن بحاجة لكي تعمل الدوت نت على اللينكس، وكان مشروع مونو هو السبيل الوحيد والقائم لحل هذه المعضلة والتي كانت ستودي بحياة السيلفر لايت  ، لأن الفلاش يعمل على كل الأنظمة والمتصفحات، فقامت شركة نوفل بتخصيص فرع كامل باسم Moonlight لتضمين السيلفر لايت على اللينكس.
ويمكنك باستخدام ال Moonlight تشغيل تطبيقات السيلفر لايت بسهولة ، بل وأيضا استخدام أداة التطوير SDK لتطور مشاريعك الخاصة في ظل وجودك تحت نظام التشغيل لينكس.
يمكنك الشروع والتطوير في المون لايت عبر هذا الرابط http://go-mono.com/moonlight.



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

بالتوفيق للجميع

Microsoft تصلح خطأ ثان اكتشفته شركتنا في فيجوال ستوديو 2010

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

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

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

 

وقامت شركة Microsoft  بتأكيد هذه الشائبة ، وأكدت أنها ستقوم بإصلاحها في النسخة الجديدة التالية من فيجوال ستوديو 2010 وهي الإصدار Beta2

وهذا الرابط في  Microsoft Connect لمن أراد متابعة الخطا وما قد يلحقه من إضافات مستقبلية

Drag and Drop files to vs2010 does not work

 

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

Microsoft تشكر شركة مطورو دوت نت على الخطأ الذي اكتشفته في فيجوال ستوديو 2010

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

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

 وهذا ما دعى Microsoft  إلى تأكيد هذه الشائبة وإرسال رسالة بالشكر ، وأيضا وعدت مايكروسوفت بأن تحل هذه المشكلة سواء في هذه  النسخة أو في الإصدارات التاللية من Visual Studio 2010 كالنسخة النهائية .

ولمن يملك حساب على Microsoft Connect يستطيع الدخول على هذا الرابط لرؤية التبليغ عن الشائبة

GridView TemplateField: bad in desinger mode

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

حل مشكلة: عدم إمكانية تعديل قاعدة البيانات في فيجوال ستوديو 2010

عند استخدام الفيجوال ستوديو 2010 ستواجه مشكلة، أنك لو حاولت التعديل على أي جدول في قاعدة البيانات من خلال Server Explorer فإنك لن تستطيع وسيتطلب الأمر إنشاء جدول من جديد، ولكن الحل بسيط وهو كالتالي:

هذه المشكلة نفسها موجودة في SQL Server 2008 Management Studio وتطرقت لها سابقا

وحل المشكلة في فيجوال ستوديو 2010 هو نفسه

هذا هو نص رسالة الخطأ

Saving changes is not premitted.....

.

والحل بسيط وهو يجب عليك تعطيل الخيار الموضع في نهايةالرسالة

سواء في فيجوال ستوديو 2010 أو سكول سيرفر 2008 فالحل هو نفسه، اذهب إلى خيارات ثم اتبع ما في الصورة، وارفع الصح عن الخيار الموضح

 

 

 

بالتوفيق للجميع مع فيجوال ستوديو 2010

الجديد في فيجوال ستوديو 2010

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

قامت مايكروسوفت - كالمعتاد - بإضافة بعض الإضافات لبيئة التطوير الجديدة وسأقوم بعرض أغلبها هنا:
Visual Sudio 2010

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

Visual Sudio 2010

2- موضع النوافذ Enhanced Docking Behavior
الجديد هنا أنك تستطيع وضع النوافذ مثل مستعرض ملفات المشروع أو أي نافذة أخرى كلسان (Tab) داخل مشروع العمل أو حتى يمكنك أن تضعها خارج الفيجوال ستوديو بدون مشاكل، وستجد بالصورة الخيارات الجديدة في موضوع النوافذ.

Visual Sudio 2010

3- العرض الهرمي Call Hierarchy
هذه الميزة يمكن رؤيتها إذا كنت تستخدم السي شارب، وهي تقوم بعرض الكود بطريقة مرتبة وجميلة لتسهيل الوصول إلى أي منطقة منه.

Visual Sudio 2010

4- الإنشاء اللحظي Generate From Usage
هذه الإضافة من أجمل الإضافات التي رأيتها، لنفرض مثلا أنك تكتب كود وفجأة حاولت استدعاء دالة لم تقم بإنشاءها بعد أو تعريف متغير من فئة غير موجودة أو نسيت أن تنشئها، كل ما عليك هو الوقوف على الخطأ الظاهر واستخدام توليد أو إنشاء جديد وسيقوم الفيجوال ستوديو بإنشائه لك

Visual Sudio 2010
Visual Sudio 2010

5- IntelliSense Consume-First Mode
إضافة جديدة تسمح لك بتحديد IntelliSense  وذلك بإظهار كافة الأنواع أو بعضها، وهذا يؤخذ عند النية بالعمل على أن الأنواع معرفة مسبقا أم لا، حيث قمت بالتجربة ووجدت أن ال IntelliSense  تقوم باختزال الاقتراحات عند استدعاء اجراءات أو فئات .
هنالك وضعان لل IntelliSense  الأول : standard mode وهو ما المعتاد ، أو وضع الختزال consume-first mode وتستطيع التنقل بينهم عبر CTRL+ALT+SPACEBAR.

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

8- Drag-and-Drop Data Binding for WPF Controls
تستيطع الآن استخدام ربط البيانات بأدوات ال WPF وذلك بالسحب والإفلات كالسابق، مثلا استخدام DataSet>

9- Connecting to Data in Multiple Objects
من اسمها .. باستخدام معالج الربط تستطيع الآن ادراج أكثر من كائن في ال Data Source

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

Visual Studio 2010 Beta 1 جاهزة للتحميل

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

حاليا سأضع لكم رابط النسخة وقد وضعت مايكروسوفت نسختين، ولكل نسخة وصغت مايكروسوفت طريقتين للتحميل ، نبدأ باسم الله:
1- Visual Studio Team System 2010
- Web Installer
- ISO File

2- Visual Studio 2010 Professional
Web Installer
- ISO File


نسخة الويب حجم الملف 5 ميغا وسيقوم بتحميل اللازم من الإنترنت
أما نسخة  الصورة الكاملة فهي ما بين 1100 ميغا بايت إلى 1300 ميغا بايت .

وهذه هي  متطلبات التشغيل من مايكروسوفت
System Requirements
Supported Operating Systems: Windows Server 2003; Windows Server 2008; Windows Vista; Windows XP
Computer that has a 1.6GHz or faster processor
Visual Studio 2010 can be installed on the following operating systems:
Windows Vista (x86 or x64), all editions except Starter Edition
Windows XP (x86 or x64), Service Pack 2 or later, all editions except Starter Edition
Windows Server 2003 (x86 or x64), Service Pack 1 or later, all editions
Windows Server 2003 R2 or later (x86 or x64), all editions
Windows Server 2008 (x86 and x64) or later (all editions)
Windows Server 2008 R2 RC (x64) Enterprise Edition
Windows 7 RC (x86 and x64) Ultimate Edition
1024MB RAM
3GB of available hard disk space
5400 RPM hard disk drive
DirectX 9-capable video card that runs at 1280 x 1024 or higher display resolution
DVD-ROM drive

 

بالتوفيق للجميع وانتظرنا بالجديد في هذه النسخة كما وعدناكم

Microsoft Silverlight نور تطبيقاتك

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

ماذا قبل السيلفر لايت ؟
كان مطورو المواقع يستخدمون تقنيات شتى لجعل مواقع الويب أكثر تفاعلية RIA مثل استخدام Java Applet و Macromedia Flash وحيث كان الفلاش الأوسع والأكثر انتشارا لمزايا عديدة به على باقي التقنيات الأخرى.

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

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

ما هي إصدارات السيلفر لايت ؟
الإصدار 1.0
الإصدار 2.0
الإصدار 3.0 وهو بيتا
الإصدار 4.0 وهو قيد الدراسة من مايكروسوفت


هل يعمل السيلفر لايت على كافة الأنظمة والمتصفحات ؟
الأمر معقد نوعا ما ويحتاج لشرح تفصيلي مستقبلا إن شاء الله ، ولكن مايكروسوفت تشق هذا الطريق بنجاح والحمد لله، وهو جعل أغلب الأنظمة تدعم السيلفر لايت، وكذلك جميع المتصفحات، حتى أن متصفح جوجل كروم الجديد يدعم السيلفر لايت، على العموم الجدول هذا يوضح دعم أنظمة التشغيل والمتصفحات للسيلفر لايت بإصداراته.
Silverlight supported internet explorers and operation systems


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


ولكن لماذا صدرت السيلفر لايت متأخرة ؟
ماذا لم تقم مايكروسوفت بتنزيل السيلفر لابت من 5 سنوات مثلا.
 السبب هو قلة التقنيات السابقة فالدوت نت بحد ذاتها ليست مرنة في عمل الرسوم وتحريكها وانشائها رغم وجود مكتبة GDI+ ، وقد تم حل هذا الأمر بالإضافة لباقي المشاكل بعدة أمور:  الأولى منها صدرت منذ 4 سنوات وهي XAML ( زامل ) لوصف الرسم  eXtensible Application Markup Language

الزامل عبارة عن لغة وصفية ( كالإكس أم أل ) ولكن تم تحديدها لتصف الرسومات
ممثلا بالسي شارب لكي نرسم زر يتوجب كتابة التالي
Button Btn = new Button( );
 Btn.Background = Brushes.Blue;
 Btn.Text="Submit";
 Btn.........=......

ولكن لنرى الزامل
<Button Click="OnClickHandler" Background="Blue" Content="Hello" />

 

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

ثاني التقنيات الهامة هي Windows Presentation Foundation (WPF).
فهي آلية مايكروسوفت لاستخدام الزامل في الدوت نت مع طبعا بعض التقنيات الأخرى كاستخدام المتجهات Vectors بدلا من ال Pixels
الWPF بدأت مع الدوت نت 3.0 والمتوفر تلقائي في الفيستا نية من مايكروسوفت لتكون قاعدة لتسهيل عمل بعض الملحقات ولدعمها بكل يسر مستقبلا .
كما نرى من الاسم الكودي للسيلفر لايت كانت اسمها WPF في كل مكان ، وهذا هو الهدف منها ال WPF تستخدم في تطوير برمجيات الويب/ وسطح المكتب مع الأخذ بعين الاعتبار أن ليست كافة مزايا ال WPF متاحة لبرمجة الويب جزء صغير من مكتباتها لا أكثر متاح لبرمجة الويب.

ولنرى الآن ماذا لدينا:  لدينا تقنية لوصف الرسوم XAML ولدينا تقنية لتطبيقها في مجال الدوت نت WPF ، فالآن قمنا برسم رسومات وأشكال وادارتها والتحكم بها بمنتهى السهولة، ولكن مواقع الويب تحتاج لآلية للتفاعل عند تحريك الماوس أو النقر على أمر ( على جهاز العميل ) الجافا سكريبت تفي بالغرض ولكنها لا تعطي الشرارة للبدء وهنا يجب أن نذكر على التقنية الثالثة والتي قلبت الموازين ألا وهي الأجاكس AJAX

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

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


من أين أبدأ ؟
الويب مليء بالدروس والكتب والمواقع المختصة، ولكن أخص موقع السيلفر لايت نفسه http://silverlight.net فهو مليء بكل ما تتخيله وخصوصا الفيديوهات الجميلة.
أنصحك بالبدء بتعلم سيلفر لايت الإصدار الثاني وتترك الإصدار الأول لأن الإصدار الأول يختلف عن التطور  الجديد الذي طرأ على الإصدارات الأحدث.

البرامج اللازمة بسيطة  فإذا كنت مطور مواقع باستخدام الفيجوال استوديو فهو يكفي كمحرر للعمل ولكن تنقصه الكثير من المزايا لذلك أنصح باستخدم البليند Microsoft Blend لمطوري المواقع أو لأي شخص يريد البدء بتعلم السيلفر لايت فورا.
على العموم كل ما يلزمك للبدء تجده في هذا الرابط http://silverlight.net/GetStarted/

مشكلة عدم التخزين أو التعديل في قاعدة بيانات MS Access

الكثير منا يستخدم قواعد بيانات SQL Server أثناء برمجته وكود بتعديل بيانات معينة ببساطة سيكون كالتالي

 

Using conn As New SqlConnection(My.Settings.AwqafDBConnectionString1)
Dim cmd As SqlCommand = conn.CreateCommand()
cmd.CommandText="UPDATE students SET sname=@sname,birthdate=@birthdate,address=@address,tel=@tel,degree=@degree where sname=@sname"
cmd.Parameters.AddWithValue("@sname", Me.txtname.Text)
cmd.Parameters.AddWithValue("@birthdate", Me.txtbirthdate.Text)
cmd.Parameters.AddWithValue("@address", Me.txtaddress.Text)
cmd.Parameters.AddWithValue("@tel", Me.txtTel.Text)
cmd.Parameters.AddWithValue("@degree", Me.txtdegree.Text)
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
End Using

ولكن هذه الطريقة لن تنجح في حال تم استخدام قواعد بيانات Access، فهو لن يعطي خطأ برمجي ولكن لن يقوم بحفظ التعديلات في قاعدة البيانات ولحل هذه المشكلة سيتم إزالة المتغيرات واستبدالها ب ؟ مع مراعاة ترتيب القيم التي ستعطي للمتغيرات حسب الترتيب التي عليه في جمله الاستعلام وذلك بالطريقة التالية

 

Using conn As New OleDbConnection(My.Settings.AwqafDBConnectionString1)
Dim cmd As OleDbCommand = conn.CreateCommand()
cmd.CommandText="UPDATE students SET birthdate=?,address=?,tel=?,degree=? where sname=?"
cmd.Parameters.AddWithValue("@birthdate", Me.txtbirthdate.Text)
cmd.Parameters.AddWithValue("@address", Me.txtaddress.Text)
cmd.Parameters.AddWithValue("@tel", Me.txtTel.Text)
cmd.Parameters.AddWithValue("@degree", Me.txtdegree.Text)
cmd.Parameters.AddWithValue("@sname", Me.txtname.Text)
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
End Using

ويفضل التقليل من استخدام قواعد البيانات Access لأن إمكانياتها محدودة جدا فمن استخدم قواعد بيانات SQL و قواعد بيانات Access سيلاحظ هذا الأمر وسيقرر دائما اللجوء إلى قواعد بيانات SQL أثناء برمجته

حل مشكلة عدم تخزين البيانات في قاعدة البيانات

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

إذا سأعطيك الحل الأمثل لهذه المشكلة وهو كالتالي :
 يتم في البداية وضع قاعدة البيانات في مجلد Debug الموجود بداخل مجلد bin
وبعدها يتم الانتقال إلى خصائص قاعدة البيانات من خلال النقر عليها بالزر الأيمن للماوس واختيار properties وجعل خاصية Copy to Output Directory تأخذ القيمة Do not copy وهكذا تكون الطريقة وتستطيع أن تجربها الآن بنفسك وتحل مشاكلك السابقة