مقدمة إلى بايثون

Tuesday, December 22, 2009 | | 7 comments |

بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .


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


بداية :


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


كيف أحمل البايثون :


في اوبنتو ستجد أغلب البرامج التي تطلبها موجودة في System->Administration->Synaptic Package Manager :

الآن تحتاج لاضافة مكتبات البايثون ، يمكنك اختيارها من البرنامج أو يمكنك تحميلها من خلال ال Terminal بالأمر التالي :

sudo apt-get install python


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



برنامجي الأول :


بعد أن تكون قد قمت بتحميل مكتبات البايثون ، ومن خلال Terminal قم بكتابة الأمر التالي :


python

ثم جرب كتابة كودك الأول بالشكل التالي ثم اضغط انتر :

s='Welcome Ahmed';
print s

والنتيجة :




وللخروج اطبع exit().





احفظ ملفاتك :






يمكنك فتح ملف نصي جديد وكتابة نفس الأوامر فيه ، ومن ثم حفظه بامتداد .py .

في هذه الحالة ومن التيرمنال يمكنك الوصول للملف


cd /home/ahmed/Desktop


ومن ثم :


python a.py


وستؤدي نفس النتيجة ، فقط ستحصل على الأكواد ملونة



اللغة :

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

الشروط :

x = int(raw_input('Enter Number : '))
if x == 100:
print '100%'
elif x < 50:
print 'So bad :('
else:
print 'it is ok.'

حلقات التكرار :

# exit from loop if x=10
while running:
x = int(raw_input('Enter Number : '))
if x == 10:
print 'it is exit now'
running = False
else:
print 'The while loop is over.'

تعريف الدوال

   def funcHello():
‫‪print 'Hello'
‬‬
‫‪funcHello()

ماذا عن تصميم الواجهات :

يمكنك استخدام برامج خارجية لتصميم الواجهات ، هذا الرابط مفيد جداً :

http://arabicfoss.blogspot.com/2009/01/pyqt4.html


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

الآن لنجرب هذا الكود مثلاً - منقول من كتاب لتصميم الواجهات - :

import pygtk;
pygtk.require('2.0');
import gtk;
def delete_event(widget,data):
False;
def destroy(widget,data=None):
gtk.main_quit();
window = gtk.Window(gtk.WINDOW_TOPLEVEL);
window.set_title("Hello");
window.connect('delete_event',delete_event);
window.connect('destroy',destroy);
hello_world_button = gtk.Button("Hello");
hello_world_button.show();
window.add(hello_world_button);
window.show();
gtk.main();


الآن جرب وطالع النتيجة .

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

والويب :



تحتاج لاستخدام framework خاص بالويب ، أشهرها هو django ، يمكنك البدء من هنا :

http://wiki.python.org/moin/WebFrameworks


مصادر :

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

http://www.maastaar.com/books/pygtk/Building-Applications-With-PyGTK-and-SQLite.pdf

شكراً لكاتبه وجعل الله جهده في ميزان حسناته .

ختام :
كل الشكر لمحمد نبيل على تعبه معي الفترة الماضية


والسلام عليكم ورحمة الله وبركاته .



Read more ...

كتاب .net 2008 بصورة ورقية – تجربة النشر الحر

Friday, December 4, 2009 | | 3 comments |

منذ بضعة أسابيع ، قرأت كتاباً نشره الأستاذ رؤوف شبايك بعنوان ( انشر كتابك بنفسك ) والموجود على هذا الرابط ( انشر كتابك بنفسك )

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

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

وبالفعل بدأت في الإجراءات التي نصح الكاتب بالسير عليها ، والمحصلة النهائية ، ها هو كتابي جاهز للطبع :http://www.lulu.com/content/hardcove...y-step/8016570

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

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


لذا لو كنت تود الحصول على نسخة الكترونية فهذا رابط النسخة القديمة من الكتاب ذات الإخراج المتميز :http://www.4shared.com/zip/ietoeAMc/dotNet_2008_Old.html
أما لو كنت مصر على الحصول على النسخة بعد التعديلات فإليك هذه النسخة للتحميل :
http://www.4shared.com/file/164058191/5beddfb0/net_2008_2nd.html
وأخيراً ، هذا هو رابط الكتاب على موقع Lulu :
http://www.lulu.com/content/hardcove...y-step/8016570

كيف أشتري من موقع لولو ؟


باستخدام الرابط السابق ، أو من القائمة العلوية Buy والتي تتيح لك البحث بين الكتب واختيار الكتاب الأنسب لك .http://www.lulu.com/content/hardcove...y-step/8016570

إذا قمت بالضغط على الرابط السابق ، ستجد في الأعلى Add To Cart ، سعر الكتاب 30.10 دولار وهو تكلفة طباعة 604 ورقة مع غلاف من النوع الفاخر يتحصل عليها موقع لولو مقابل عملية الطباعة ، ستتم اضافتها لسلة التسوق ، بعد انتهائك من التسوق ستجد زر باسم Check out >>> ، سيطلب منك تسجيل ايميلك وكلمة مرور خاصة بك ليتم طلبك كعضو جديد أو سجل دخولك بعضويتك الحالية .

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

بعد الضغط على save & continue سينقلك إلى شاشة الدفع الالكتروني ، ادخل بياناتك وسيتم التأكيد وانهاء العملية ، والآن عليك انتظار النسخة

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

يقدم الكتاب للنسخة الجديدة من فيجوال ستوديو من خلال C# و Vb.net عبر 22 باباً تتحدث عن الفيجوال ستوديو ابتداء باصدارته وطرق تحميله ، مروراً بعرض مفاهيم بيئة .net الرئيسية ، أساسيات كتابة الكود ولغة البرمجة ، Classes And Interfaces ، الأخطاء Debuginig ، المجموعات COLLECTIONS ، وسائل الادخال والاخرج IO ، واجهات Windows Forms ، عالم GDI+ و WPF ، قواعد البيانات من خلال ADO.net ، ثم LINQ و WWF و WCF وبرمجة ال Pocket PC ثم الانتهاء بالاطلاع على برمجة المواقع من خلال ASP.net .
تعقيب بعد استلام الكتاب :
للأسف بعد الانتهاء من كافة الخطوات واجهت مشكلة في دعم اللغة العربية عندهم ، حيث قاموا بطباعة الكتاب بالمقلوب برغم أني التزمت بارساله لهم معكوساً لكي تتم الطباعة بصورة صحيحة ، لكن برغم ذلك يبدو انهم اجتهدوا واعادوا ترتيب الكتاب حسب ارقام الصفحات ، وبعد عدة مراسلات توقف الدعم نسبياً منهم برغم اقرارهم بإن الخطأ من جهتهم . لذا وجب التنويه .

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

Read more ...

مدونة جديدة باللغة الإنجليزية

Saturday, October 31, 2009 | Labels: | 1 comments |

english

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

السلام عليكم ورحمة الله وبركاته

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

http://ahmedgamal-net.blogspot.com/


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


ستظل هذه المدونة تعمل بالتوازي مع المدونة الإنجليزية

وبالله التوفيق

Read more ...

عمل تطبيق Asp.net من البداية وحتى رفع الموقع - ملف فيديو

Thursday, September 17, 2009 | Labels: , , , | 1 comments |



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


بالاشارة إلى الإعلان السابق ، وضمن فعاليات اليوم المميز الذي اختتم في المنتدى على هذا الرابط :http://vb4arab.com/vb/forumdisplay.php?f=122


تم تجهيز خطوة بخطوة عمل تطبيق Asp.net ، التطبيق لموقع قديم على شكل مستعرض منتجات بسيط .

لغة الموقع : Asp.net من خلال .net 2008 .


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

http://vb4arab.com/vb/showthread.php?t=18391 - http://vb4arab.com/vb/showthread.php?t=18397 - http://vb4arab.com/vb/showthread.php?t=18454 - http://vb4arab.com/vb/showthread.php?t=18528 - http://vb4arab.com/vb/showthread.php?t=18573 - http://vb4arab.com/vb/showthread.php?t=18586


النقاط التي تم شرحها في الفيديو :


1- انشاء قواعد البيانات والعلاقات .

2- انشاء Stored Procedure.

3- انشاء طبقات البيانات .

4- انشاء الماستر بيدج .

5- البدء بانشاء الصفحات .

6- انشاء Custom Control.

7- التعامل مع بعض الادوات .

8- نشر الموقع على مستضيف مجاني .


الفيديو التعليمي هنا :

http://vb4arab.com/vb/popup/Final.html

وذلك على مدار ساعة كاملة ، من المفترض بعدها أن تكون قادراً على تصميم تطبيق Asp.net متكامل .


التطبيق النهائي هنا :

http://aspspider.info/ahmedgamal2/


لتحميل المشروع النهائي - سورس كود - :

http://www.vb4arab.com/vb/uploaded/3/01250221571.rar

ملف قاعدة البيانات :

http://www.vb4arab.com/vb/uploaded/3/01250583424.rar


** هناك بعض المشاكل في التسجيل الصوتي لذا هذا التسجيل الصوتي مؤقت ، وسيتم اعادة التسجيل قريباً إن شاء الله .


خطوات رفع الموقع على مستضيف مجاني Aspspider بعد الإنتهاء :


- ادخل إلى موقع Aspspider.net .

- قم بانشاء حساب جديد .

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

- عند تسجيل الدخول بعد هذه الفترة ، ستجد لديك الصورة التالية :




- اختر مركز لوحة التحكم ، رفع الملفات ، ثم webroot ، وقم برفع ملفاتك واحد تلو الآخر .

- بعد الإنتهاء ، عد مرة أخرى إلى مركز رفع الملفات ، ثم Database ، ومن ثم قم برفع ملف قاعدة البيانات mdf فقط لو سكول أو mdb لو أكسيس .

- بعد الانتهاء عد مرة أخرى إلى لوحة التحكم ، واختر Database Manager .- ستجد قاعدة بياناتك التي قمت برفعها موجودة ، اضغط Attach Database ، واتبع الخطوات .

- بعد الانتهاء ، ادخل على الرابط التالي ، قم بتعديل ال Connection String الخاصة بك في web.config للطريقة الموضحة في هذه الصفحة :


- مبروك ، جرب الدخول إلى موقعك :)

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

Read more ...

الجديد في C# 4.0

| Labels: | 2 comments |


بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .

ما الجديد في C# 4.0 ؟

في الوقت الذي لا زلنا نحارب من أجل انتقال البعض إلى تقنية الدوت نت ، ما زالت عجلة التطور مستمرة ، وكل يوم نجد تقنية جديدة واصدار جديد ، سنحاول في هذه المقالة السريعة التعرف على بعض النقاط التي سنجدها مع C# 4.0 .
الخصائص الاضافية مقسمة لاربع اقسام رئيسية هي :

1- البارميترات الاختيارية Optional Parameters.
2- استخدام Dynamic - Dynamic Support
3- التعامل مع COM - COM interop.
4- Variance.


1- البارميترات الاختيارية Optional Parameters :

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

public void functionname( string param1="Ahmed", bool param2 = false, int param3 = 24 ){
}

*** تسمية المتغيرات عند الإرسال Named Parameters :
في المثال السابق ، لنفترض اننا نريد الاستفادة من الخاصية الافتراضية للمتغير المنطقي param2 ولكننا نريد ارسال قيمة رقمية ل param3 بالشكل التالي
functionname("Ali",25);


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

functionname("Ali",param3: 25);


2- استخدام Dynamic - Dynamic Support

لنفترض أن لدينا دالة نرسل لها متغير معين فتعين لنا إما كائن من نوع طالب ، أو كائن من نوع مدرس ، بالشكل التالي مثلاً :

public object functionname(param a){if(a==0) return new Student();else return new teacher();}


الآن ، لو كان لهما خاصية مشتركة FirstName ونريد تعديلها بناء على الدالة التي تمت اعادتها ، فلدينا الحل التالي :
if(condition==0){Student s=functionname(condition) as Student;s.FirstName="Ahmed";}else{Teacher s=functionname(condition) as Teacher s.FirstName="Ahmed";}


الحل البديل الآن مع dynamic ، يمكنك كتابة الكود السابق بالشكل التالي :

dynamic s=functionname(condition) s.FirstName="Ahmed";


وفي حالة عدم وجود الخاصية بصورة مشتركة ، فسيتم رمي الاستثناء RuntimeBinderException
كما يمكنك لاحقاً اعادة تعيينها إلى Class معين بالشكل التالي :

Student newone=s;


*** أي قيمة byref عائدة من dynamic سيكون نوعها dynamic أيضاً .

3- التعامل مع COM - COM interop.

باستخدام نفس الميزة الجديدة dynamic ، اصبح التعامل مع ال COM Components أسهل وأسرع .
ابسط مثال على ال Com Components هي ادوات التعامل مع مجموعة برامج الاوفيس Ofice ، سابقاً كنا نكتب كود كالتالي للقراءة من خلية اكسل :
((Excel.Range)excel.Cells[1, 1]).Value2 = "Hello";

الجديد الآن ، هذا السطر كافي :

excel.Cells[1, 1].Value = "Hello";4- Variance


لو فرضنا أن لدينا الكود التالي :

IList strings = new List();IList<object> objects = strings;


في الواقع وعلى الرغم من ان أي String هو Object ، إلا أن الجملة السابقة ليست صحيحة بسبب أن String لا يحتوي على نفس عناصر ال Objects . مثال ذلك :

objects[0] = 5;string s = strings[0];


هذه الجملة خاطئة ، وادخالنا ل 5 كرقم واعادتها كنص يعد خرقاً لقواعد الأمان ، فقط باستخدامنا الانترفيس Interface التالي في C# 4.0 يمكن أن نمنع المستخدم من ادخال بيانات خاطئة :


IEnumerable<object> objects = strings;


والذي يتم تعريفه في C# 4.0 بالشكل التالي :


public interface IEnumerable : IEnumerable{ IEnumerator GetEnumerator();}public interface IEnumerator : IEnumerator{ bool MoveNext(); T Current { get; }}


أخيراً : العلاقة مع فيجوال بيسك - التحديثات الجديدة - :

1- خاصية القيم الافتراضية للبارميترات موجودة منذ زمن في الفيجوال بيسك .
2- بالنسبة لـ Variance و dynamic فتم تطبيقهم في نفس الوقت للغتين .

للاستزادة :
http://code.msdn.microsoft.com/Proje...ownloadId=3550

والسلام عليكم ورحمة الله وبركاته .

Read more ...

تم تحديث جميع الروابط

| Labels: | 0 comments |

تم تحديث جميع الروابط ، ومعذرة على التأخير .

Read more ...

خطوة بخطوة مع .net 2008

Wednesday, November 19, 2008 | | 4 comments |

بسم الله الرحمن الرحيم .
بحمد الله تم الانتهاء من كتاب خطوة بخطوة مع عالم Visual Studio 2008 .

يقدم الكتاب للنسخة الجديدة من فيجوال ستوديو من خلال C# و Vb.net عبر 22 باباً تتحدث عن الفيجوال ستوديو ابتداء باصدارته وطرق تحميله ، مروراً بعرض مفاهيم بيئة .net الرئيسية ، أساسيات كتابة الكود ولغة البرمجة ، Classes And Interfaces ، الأخطاء Debuginig ، المجموعات COLLECTIONS ، وسائل الادخال والاخرج IO ، واجهات Windows Forms ، عالم GDI+ و WPF ، قواعد البيانات من خلال ADO.net ، ثم LINQ و WWF و WCF وبرمجة ال Pocket PC ثم الانتهاء بالاطلاع على برمجة المواقع من خلال ASP.net .


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

Read more ...

باقي من الزمن

Sunday, November 9, 2008 | | 1 comments |

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

msn


مقعد ؟؟؟ ممكن معقد بس أكيد مش لدرجة إني أعد بالثواني أكيد :) ، لكن قلت اهوه اعمل حاجة ليها علاقة بالجيش ، اصلي شفت برنامج حلو برضو اتعمل على شكل Gadgets طبعاً برنامج معقد أكتر ، دي صورة منه :

image

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

*** علشان البرنامج يشتغل لازم تغير خاصية في MSN Options اسمها Show song Information form Windows Media Player as a personal message إلى صح علشان الرسالة تتعرض .

** وطبعاً مننساش ان يكون في .net framwork على الجهاز علشان ال exe يشتغل .

برمجة :

prog

الموضوع بسيط جداً ، في كلاس اسمه Microsoft.Win32 هنضيفه عندنا ، وبعدين نكتب الفنكشن دي :

private void SendMSNMessage(bool enable, string category, string message)
{
try
{

string buffer = "\\0" + category + "\\0" + (enable ? "1" : "0") + "\\0{0}\\0" + message + "\\0\\0\\0\\0\0";
int handle = 0;

data.dwData = 0x0547;
data.lpData = VarPtr(buffer);
data.cbData = buffer.Length * 2;

handle = FindWindowEx(0, handle, "MsnMsgrUIManager", null);
if (handle > 0)
SendMessage(handle, WM_COPYDATA, 0, VarPtr(data));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

وبس ، وبعد كده علشان نظهر اي رسالة هنكتب :

SendMSNMessage(true, "Office", myString);

وعلشان نلغيها نكتب :

SendMSNMessage(false, "Office", "");

بعد كده برنامج عادي طرحت الوقت الحالي من الوقت اللي اليوزر بيدخله في DateTimePicker ، وصلى الله وبارك ...

يا ريت تدعولنا الأيام اللي فاضلة لينا تعدي على خير إن شاء الله ...

Read more ...

دورة ASP.net 3.5

Monday, October 20, 2008 | Labels: , | 0 comments |


تفاصيل الدورة هنا

Read more ...

مدخل إلى WAP

Monday, August 25, 2008 | Labels: , , , | 1 comments |


مقدمة :
في هذا الدرس ، سوف نتعرف سوية على التقنية المعروفة باسم Wireless Application Protocol والتي تعرف اختصاراً باسم WAP ، كما سنتطرق في الجزء الثاني من هذا الدرس إلى كيفية التعامل مع هذه التقنية من خلال .net .

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

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

ما هو ال WAP ؟
كما اسلفنا سابقاً فكلمة WAP هي اختصار لكلمة Wireless Application Protocol ، وكما هو واضح من الاسم فإن هذا يعني ان WAP هي معيار أو Standerd عالمي يهدف إلى ربط أجهزة الهواتف النقالة Mobiles بالإرتباط بالإنترنت ، وتم تطويره في النصف الثاني من تسعينات القرن المنصرم .
وقد جاء هذا البروتوكول الموحد ليلم شتات أفكار شركات المحمول الكبرى والتي كانت كل منها تعمل منفردة وفي اتجاه مختلف عن الآخرين .


....

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

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

ما هي WML ؟
هي طريقة لوصف البيانات مشابهة جداً لطريقة عمل HTML ولكنها على معايير XML ، وتختلف عن HTML في عدد من النقاط منها :
- الوسم Tag الرئيسي هو <wml> بدلاً من <html>
- ينقسم المستند إلى بطاقات Cards لتسهيل العرض حيث تبدأ كل بطاقة بـ <card> وتنتهي أيضاً بـ <card/> .

الجزء الثاني من الدرس : تعليم WML باختصار ...

بداية سنعرض مثالاً يوضح كيفية كتابة WML وذلك بالشكل التالي مثلاً - من ويكيبديا - :

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//PHONE.COM//DTD WML 1.1//EN"
"
http://www.phone.com/dtd/wml11.dtd" >
<wml>
   <card id="main" title="First Card">
     <p mode="wrap">This is a sample WML page.</p>
</card>
</wml>

 قراءة القيم المختلفة وتخزينها وعرضها للمستخدم :
بكل بساطة يمكنك تعريف المتغيرات واسناد قيم لها بالشكل التالي :

<setvar name="First_Name" value="Ahmed"/>
<setvar name="Age" value="21"/>

ولاحقاً يمكنك عرضها بالشكل التالي مثلاً :

<p>First Name: $(First_Name)</p>

ويمكن ايضاً قراءة قيمة مربع نص أو Select بنفس الطريقة تماماً حيث يتم وضع اسم الأداة بدلاً من اسم المتغير ...
مثال لقراءة قيم أداة اختيار وعرضها للمستخدم - المثال منقول من موقع فرعون - :

<card id="card1" title="Tutorial">
<do type="accept" label="Answer">
<go href="#card2"/>
</do>
<p>
<select name="name">
<option value="HTML">HTML Tutorial</option>
<option value="XML">XML Tutorial</option>
<option value="WAP">WAP Tutorial</option>
</select>
</p>
</card>
<card id="card2" title="Answer">
<p>
You selected: $(name)
</p>
</card>
</wml>

الجزء الثالث والأخير من الدرس : أريد برمجة موقع ASP.net يدعم ال WAP ...

إذا قمنا بتحويل التطبيق الذي عرضناه في أول المقالة - المنقول من ويكيبيديا - والذي كان بالشكل التالي :

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//PHONE.COM//DTD WML 1.1//EN"
"
http://www.phone.com/dtd/wml11.dtd" >
<wml>
   <card id="main" title="First Card">
     <p mode="wrap">This is a sample WML page.</p>
</card>
</wml>

 وقمنا بتحويله إلى .net فسوف يكون بالشكل التالي :

<%@ Page Inherits="System.Mobile.UI.MobilePage" Language="C#" %>
<%@ Register TagPrefix="mobile" Namespace="System.Mobile.UI" %>
<mobile:Form runat="server">
<mobile:Label runat="server">
This is a sample WML page.
</mobile:Label>
</Mobile:Form>

في حالة رغبت في التعامل بواسطة VB.net غير السطر الأول فقط ليصبح بالشكل التالي :

<%@ Page Inherits="System.Mobile.UI.MobilePage" Language="C#" %>


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

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

Read more ...

Expression Blend

Saturday, August 23, 2008 | | 0 comments |

 

ضمن التقنيات الجديدة التي ظهرت مع .net كانت تقنية WPF ، ومن اجل تطبيق اوسع لهذه التقنية قامت مايكروسوفت بتوفيرمجموعة من البرامج لتساعد في انتاج أكواد WPF ، واحد من هذه المجموعة كان Expression Blend  لتصميم واجهات برنامجك المختلفة ، حيث يوفر لك وسائل متعددة للتصميم ، سنحاول معرفة المزيد عنه بتفصيل في هذا الدرس ...


سنحاول الآن عمل تطبيق بسيط من خلال Expression Blend قم بتحميله أولاً من الروابط السابقة ، قم بتشغيله ومن ثم اختيار New Project ومن ثم WPF Application (*.exe) بالشكل التالي :

يمكنك اختيار اللغة التي تريد العمل عليها وال framework اضافة للاسم ومكان التخزين بالطبع .
من View اختر Active Document View ومن ثم اختر الوضع Split لتتمكن من عرض XAML و العرض العادي في نفس الوقت بالشكل التالي :

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

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

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

<Canvas>
<Canvas x:Name="MainImageCanvas" Canvas.Left="40" Canvas.Top="120">

الآن قم باضافة MediaElement ولنضع فيه صورة مثلاً ، سيكون ناتج XAML بالشكل التالي :

<MediaElement x:Name="MainImage" Source="c:/example/futex.jpg" Width="300" Height="300" ></MediaElement>

والآن سنقوم بتطبيق بعض التأثيرات على ال Canvas حيث نطبق عملية الميل من خلال الخصائص ، سيكون ناتج XAML بالشكل التالي :

<Canvas.RenderTransform><TransformGroup>
<SkewTransform x:Name="MainSkewTransform" AngleY="-19" AngleX="0" CenterX="0" CenterY="0"/> <ScaleTransform x:Name="MainScaleTransform" ScaleY="1" ScaleX = "1" CenterX="0" CenterY="0"/></TransformGroup></Canvas.RenderTransform></Canvas>

الآن قم بالضغط على F5 لتجربة العرض والذي سيكون بالشكل التالي :

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

<Canvas x:Name="ReflectionImageCanvas" Canvas.Left="260" Canvas.Top="640">

<MediaElement x:Name="ReflImage" Source="c:/example/futex.jpg" Width="300" Height="300" Volume="0">

</MediaElement>

<Canvas.RenderTransform>

<TransformGroup>

<SkewTransform x:Name="ReflectionSkewTransform" AngleY="19" AngleX="-41" CenterX="0" CenterY="0" />

<ScaleTransform x:Name="ReflectionScaleTransform" ScaleY="-1" ScaleX="1" CenterX="0" CenterY="0" />

</TransformGroup>

</Canvas.RenderTransform>

</Canvas>

وسيكون الناتج للصورة بالشكل التالي :

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

<Canvas x:Name="ReflectionImageCanvas" Canvas.Left="260" Canvas.Top="640">

<MediaElement x:Name="ReflImage" Source="c:/example/futex.jpg" Width="300" Height="300" Volume="0">

</MediaElement>

<Canvas.RenderTransform>

<TransformGroup>

<SkewTransform x:Name="ReflectionSkewTransform" AngleY="19" AngleX="-41" CenterX="0" CenterY="0" />

<ScaleTransform x:Name="ReflectionScaleTransform" ScaleY="-1" ScaleX="1" CenterX="0" CenterY="0" />

</TransformGroup>

</Canvas.RenderTransform>

<Canvas.OpacityMask>

<LinearGradientBrush StartPoint="0.5,0.0" EndPoint="0.5,1.0">

<GradientStop Offset="0.345" Color="#00000000" x:Name="ReflGradientStop1" />

<GradientStop Offset="1.0" Color="#CC000000" x:Name="ReflGradientStop2" />

</LinearGradientBrush>

</Canvas.OpacityMask>

</Canvas>

قم بضبط بعض اعدادات ال Left وال Top يدوياً او من الكود لجعل صورة الظل منطبقة على الصورة الاصلية ، سيكون ناتج الصورة :

الكود الكامل XAML :

<Canvas>
            <Canvas x:Name="MainImageCanvas" Canvas.Left="40" Canvas.Top="120">

                <MediaElement x:Name="MainImage" Source="c:/example/FUTEX.JPG" Width="300" Height="300" >
                </MediaElement>
                <Canvas.RenderTransform>
                    <TransformGroup>
                        <SkewTransform x:Name="MainSkewTransform" AngleY="-19" AngleX="0" CenterX="0" CenterY="0"/>
                        <ScaleTransform x:Name="MainScaleTransform" ScaleY="1" ScaleX = "1" CenterX="0" CenterY="0"/>
                    </TransformGroup>
                </Canvas.RenderTransform>
            </Canvas>
            <Canvas x:Name="ReflectionImageCanvas" Canvas.Left="267" Canvas.Top="645">
                <MediaElement x:Name="ReflImage" Source="c:/example/futex.jpg" Width="300" Height="300" Volume="0">
                </MediaElement>
                <Canvas.RenderTransform>
                    <TransformGroup>
                        <SkewTransform x:Name="ReflectionSkewTransform" AngleY="19" AngleX="-41" CenterX="0" CenterY="0" />
                        <ScaleTransform x:Name="ReflectionScaleTransform" ScaleY="-1" ScaleX="1" CenterX="0" CenterY="0" />
                    </TransformGroup>
                </Canvas.RenderTransform>
                <Canvas.OpacityMask>
                    <LinearGradientBrush StartPoint="0.5,0.0" EndPoint="0.5,1.0">
                        <GradientStop Offset="0.345" Color="#00000000" x:Name="ReflGradientStop1" />
                        <GradientStop Offset="1.0" Color="#CC000000" x:Name="ReflGradientStop2" />
                    </LinearGradientBrush>
                </Canvas.OpacityMask>
            </Canvas>
        </Canvas>

 

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

بالتوفيق ...

Read more ...

مدخل إلى برمجة ال Pocket PC من خلال .net

| Labels: , , | 0 comments |

 

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


قبل البداية ، ما هي الأجهزة الكفية Pocket PC ؟
هي مجموعة من أجهزة الهواتف المتنقلة تتميز باستخدام نظام تشغيل متقدم اضافة إلى هاردوير يمكنها من تشغيل مهام هذا النظام ، ويشكل نظاما التشغيل Windows Mobile ونظام التشغيل سيمبان اضافة لنظام Windows CE 2003 وما قبله أشهر نظم التشغيل التي تعمل على الأجهزة الكفية .
أما على صعيد الهاردوير فالأجهزة الكفية لا تمتلك هارد ديسك Hard Disk بالمعنى المشهور ، لكن بعضاً منها يستخدم جزء من ال RAM كهارد ديسك لا يتم مسح البيانات من عليه بعد اعادة تشغيل الجهاز ، وهناك أنوع أخرى تستخدم ROM لتخزين البرامج ونظام التشغيل وما شابه .


وماذا يمكنني عمله للأجهزة الكفية Pocket PC من خلال .net ؟
تستطيع من خلال لغة البرمجة اضافة برامج تستخدم أجزاء معينة من الجهاز لتحقيق خدمات للمستخدم سواء أكان استخدام بسيط (استخدام الذاكرة) لتخزين البرامج وتنفيذها وتخزين قواعد البيانات ، أو كان الأمر يختص باستخدام الكاميرا مثلاً والأجهزة الصوتية في الجهاز .
كيف أبدأ ؟
بكل بساطة ، سنقوم بعمل برنامج يظهر رسالة ترحيب عن الضغط على زر أمر .
1- قم بتشغيل الفيجوال ستوديو Visual Studio .net .
2- قم باختيار C# أو VB أو اللغة التي تود البرمجة من خلالها .
3- قم باختيار Smart Device ، ومن ثم قم باختيار Pocket PC 2003 أو Smartphone 2003 أو Windows CE 5.0 حسب الجهاز الذي تود العمل عليه .
4- بعد اختيار القسم المناسب قم باختيار Device Application .
5- قم بسحب Button من الأدوات ، وقم بكتابة هذا الكود في داخله :

MessageBox.Show("Welcome...")

فقط قم باضافة ; في حالة كونك مبرمج C# .

6- قم بالضغط على F5 اختار نوع ال deploy الذي ترغب فيه حسب الجهاز الذي تود العمل عليه ، أو قم باختيار نوع يعمل على الـ PC للتجربة فقط .
7 - مبروك ، لقد قمت بعمل برنامج الأول ، يمكنك أيضاً نقل الملف التنفيذي exe إلى الجهاز وتشغيله مباشرة ، لا بد في هذه الحالة ان يكون .net framework موجوداً على الجهاز الكفي Pocket PC .
كيف اكمل البرمجة من خلال .net ؟
بكل تأكيد فإن البرنامج السابق يعد من أبسط الصيغ الممكنة لبرنامج يعمل على Pocket PC ، فيما ستتضطر لاستخدام التخزين في البرامج الجدية والتعامل مع قواعد البيانات حيث يمكنك استخدام الملفات النصية كقواعد بيانات ، أو ملفات XML وحتى قواعد البيانات من نوع SQL Server CE .
كما يمكن ان تضطر للتعامل مع الملفات ، أو الصوتيات والشاشة ، أو حتى مع الأجهزة الملحقة مثل الكاميرا وخلافه .


بكل بساطة كل ما عليك هو الدخول إلى هذا الموقع : www.msdn.com وستجد فيه كل ما تريد ، يمكنك الدخول أيضاً مباشرة على هذا الرابط : http://msdn2.microsoft.com/en-us/library/aa458721.aspx

هل هناك أدوات مساعدة ؟
بكل تأكيد هناك العديد من الأدوات التي تساعدك على بناء تطبيقاتك وجعلها أفضل بطريقة أسهل - لكن لا تنشغل بالأدوات دون ان تعرف ولو بصورة عابرة كيف يمكنك العمل يدوياً - ، ومن أحدث هذه الأدوات Windows Mobile 6 Developer Resource Kit :
http://msdn.microsoft.com/windowsmob...t/default.aspx

هل هناك طرق أخرى غير .net لبرمجة الأجهزة الكفية ?
بكل تأكيد . نعم ، وبالعكس فإن لغة مثل سيمبان تعد أقدم من لغات مايكروسوفت ، كمان أن لغة مايكروسوفت لا زالت غير قادرة على اقتحام عالم الموبايلات التي لا تزال تسيطر عليه شركتي سيمبان وجافا .
http://www.ce4arab.com/vb7/index.php

أخيراً ، درس بسيط يحتوي على مجموعة أكواد مفيدة في عالم برمجة ال Pocket PC :

http://vb4arab.com/vb/showthread.php?t=2738

Read more ...

Microsoft Ajax Toolkit

| Labels: , | 0 comments |


في هذا الدرس سوف نستعرض سريعاً كيفية الاستفادة من خدمات تقنية الإنترنت المعروفة باسم AJAX من خلال .net ولكن قبل البداية دعنا نتعرف على ما هي أجاكس ؟


اجاكس AJAX
هي اختصار لكلمة Asynchronous JavaScript and XML ، وفي الواقع فهي ليست لغة برمجة جديدة أو تقنية جديدة قدر ما هي استخدام للموارد الموجودة بطريقة أخرى ، وببساطة ، تعتمد اجاكس على تجزيء الصفحة إلى عدة اقسام تتم معالجة كل قسم على حدة ، وفي هذه الحالة فإنه عند طلب العميل لجزء ما لن يكون مضطراً لانتظار تحديث الصفحة بالكامل .
ولعل أشهر أمثلة استخدام AJAX هو البريد الإلكتروني Gmail اضافة إلى النسخة الجديدة من البريد الإلكتروني لل Yahoo و Hotmail .
لمعرفة المزيد ربما تستطيع زيارة صفحة ويكيبديا عن هذه التقنية :
http://en.wikipedia.org/wiki/Ajax_%28programming%29

كيف أبدأ من خلال .net ؟

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


وللمزيد من التسهيل قامت مايكروسوفت باصدار Asp.net Ajax ToolKit ، وهي مجموعة من الأدوات المختلفة التي يمكن استعراضها من خلال هذا الرابط :
http://ajax.asp.net/ajaxtoolkit/

تستطيع زيارة الموقع وتحميل هذه الأدوات من خلال الرابط :
http://ajax.asp.net/

كما يوفر الموقع مكتبة ضخمة من المواد التعليمية لهذه الأدوات ول Asp.net عموماً ، يمكن الوصول إليها عبر هذا الرابط :
http://www.asp.net/learn/default.aspx?tabid=63

يمكنك البدء من خلال هذا الفيديو تحديداً :
http://download.microsoft.com/downlo...List-Video.zip
وسيقوم بالشرح منذ البداية عن كيفية استخدام Atlas .

وهناك دروس أخرى لشرح كيفية البدء باستخدام Ajax ToolKit مباشرة منها هذا الفيديو :
http://www.asp.net/learn/videos/view...tabid=63&id=75
http://www.asp.net/learn/videos/view...tabid=63&id=76

Read more ...

FileSystemWatcher

Friday, August 15, 2008 | Labels: , | 0 comments |


تعتبر هذه الفئة مفيدة جداً في حالة رغبتنا في مراقبة سلوك ملف معين ومعرفة اي تغيير يطرأ عليها من التغييرات الموجودة في ال System.IO.NotifyFilters enum والذي يراقب اي من التغييرات التالية :

public enum NotifyFilters {
Attributes, CreationTime, DirectoryName, FileName, LastAccess, LastWrite, Security, Size,
}

طبعاً بما اننا نتحدث عن events وتغييرات ، سنحتاج فوراً لتعريف دوال يتم تنفيذها مرتبطة بالاحداث ، اي دالة تستخدم لقراءة احداث مثل التعديل والتغيير وخلافه لا بد ان تكون على شكل delegate التالي :

void MyNotificationHandler(object source, FileSystemEventArgs e)


حدث تغيير الاسم لا بد أن يتبع لل delegate التالي :

void MyNotificationHandler(object source, RenamedEventArgs e)


الآن سنقوم بتعريف برنامج عادي ، يقوم بمراقبة حالة الملفات ، طبعاً ولإننا نرغب في ان نرى نتائج البرنامج فلا بد ان نجعل البرنامج يعمل حتى يضغط المستخدم حرف q مثلاً ، لو كنا في windows Forms كان بامكاننا المراقبة مباشرة طبعاً ، في مثالنا هذا سنراقب كافة الملفات النصية في القرص الصلب c:\ لحدثي الاضافة والحذف :

C#:

FileSystemWatcher watcher = new FileSystemWatcher();




// monitor files at:


watcher.Path = @"c:\";





// monitor files when


watcher.NotifyFilter = NotifyFilters.LastAccess NotifyFilters.LastWrite NotifyFilters.FileName NotifyFilters.DirectoryName;





// watch files of type


watcher.Filter = "*.txt";





// watch events:


watcher.Created += new FileSystemEventHandler(OnChanged);


watcher.Deleted += new FileSystemEventHandler(OnChanged);





watcher.EnableRaisingEventys = true;





Console.WriteLine("Press 'q' to quit app.");





while (Console.Read() != 'q') ;

vb.net:

Dim watcher As New FileSystemWatcher()




' monitor files at:


watcher.Path = "c:\"





' monitor files when


watcher.NotifyFilter = NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName





' watch files of type


watcher.Filter = "*.txt"





' watch events:


AddHandler watcher.Created, AddressOf OnChanged


AddHandler watcher.Deleted, AddressOf OnChanged





watcher.EnableRaisingEvents = True


Console.WriteLine("Press 'q' to quit app.")





While Console.Read() <> "q"C


End While

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

C#:

static void OnChanged(object source, FileSystemEventArgs e)

{


Console.WriteLine("File Changed, File Path: {0} , Change: {1}, DateTime: {2}", e.FullPath, e.ChangeType,DateTime.Now.ToString());


}

vb.net:
Private Shared Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs)




Console.WriteLine("File Changed, File Path: {0} , Change: {1}, DateTime: {2}", e.FullPath, e.ChangeType, DateTime.Now.ToString())


End Sub

والآن جرب البرنامج ...

الصورة التالية نتاج متوقع لحذف ملف من السي واعادته مرة أخرى ( من السي مباشرة ) :

Read more ...

IComparable Interface

| Labels: , | 0 comments |

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

كما هو واضح من الاسم ، يستخدم هذا ال interface للمقارنة ، ولذا من الطبيعي ان يكون شكل هذا ال interface بالشكل التالي :

C#:

public interface IComparable
{
int CompareTo(object o);
}

vb.net:

Public Interface IComparable
Function CompareTo(ByVal o As Object) As Integer
End Interface

يمكنك ملاحظة ان الدالة تعيد قيمة رقمية ، فعلياً هي تعيد في المعتاد القيم 0 في حالة التساوي ، القيمة 1 في حالة كون الطرف الأول اكبر ، و -1 في حالة كون الطرف الأول أصغر .

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

C#:

class Car
{

string Name;
int year;
}

vb.net:

Class Car
Private Name As String
Private year As Integer
End Class

والآن نرغب في ترتيب السيارات بناء على تاريخ الصنع year ، لذا أول خطوة لدينا هي جعل الفئة الخاصة بنا تطبق الفئة IComparable :

C#:

class Car:IComparable
{

string Name;
int year;
}


vb.net:

class Car:IComparable
{

string Name;
int year;
}

ثم نكتب بعض الاكواد في الدالة CompareTo ، لنفترض الشكل التالي مثلاً :

c#:

int IComparable.CompareTo(object obj)
{
Car temp = (Car)obj;
if(this.year > temp.year)
return 1;
if(this.year < temp.year)
return -1;
else
return 0;
}

vb.net:

Private Function CompareTo(ByVal obj As Object) As
Integer Implements IComparable.CompareTo
Dim temp As Car = DirectCast(obj, Car)
If Me.year > temp.year Then
Return 1
End If
If Me.year < temp.year Then
Return -1
Else
Return 0
End If
End Function

طبعاً لا داعي لتذكيرك بانك تستطيع اعادة -100 و 0 و 94 بدلاً من -1و0و1 ، لكن هذا لتسهيل المفهوم ، الدالة تعمل بدلالة رقم سالب يعني اصغر ، صفر يعني التساوي ورقم موجب يعني اكبر فقط دون ان يعنيها قيمة هذا الرقم الفعلية .

الدالة Sort :

لنفترض ان لدينا مصفوفة array من الارقام باسم myNumbers ، في هذه الحالة لو قمنا بكتابة الأمر التالي لكان الكود مفهوماً :
c#:

Array.Sort(myNumbers);


vb.net:

Array.Sort(myNumbers)

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

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

Read more ...