19 نوفمبر، 2008

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

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

بحمد الله تم الانتهاء من كتاب خطوة بخطوة مع عالم 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 .

_net2008
تحميل الكتاب من هنا


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

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

Read More......

25 أغسطس، 2008

مدخل إلى WAP


مقدمة :
في هذا الدرس ، سوف نتعرف سوية على التقنية المعروفة باسم 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......

24 أغسطس، 2008

يوم ويكيبيديا العربية الرابع

Read More......

23 أغسطس، 2008

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

 

سوف نعتبر هذا الدرس هو نقطة الإنطلاق التي يستطيع المبتدئ من خلالها البدء في برمجة الأجهزة الكفية 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......

Expression Blend

 

ضمن التقنيات الجديدة التي ظهرت مع .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......

Microsoft Ajax Toolkit


في هذا الدرس سوف نستعرض سريعاً كيفية الاستفادة من خدمات تقنية الإنترنت المعروفة باسم 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......

13 يوليو، 2008

كتاب Speech SDK

 

كتاب تم ارساله لي بخصوص شرح مكتبة Microsoft Speech SDK ، في المقدمة الخاص بالكتاب يقول المؤلف :

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

pic

فهرس الكناب :

  1. تنزيل واعداد المكتبة .
  2. شرح بعض الاساسيات .
  3. شرح طريقة عمل فهم الأوامر المستقبلة صوتياً .
  4. شرح مكتبة الاملاء .
  5. شرح طريقة تحويل الكتابة إلى كلام .
  6. الاعدادات ولوحة التحكم .
  7. تدريب الحاسوب .
  8. تطبيق برنامج يقوم بنطق الساعة .
  9. برنامج تسجيل الدخول عن طريق نطق كلمة السر .
  10. برنامج رد التحية .
  11. برنامج محادثة مع الحاسوب .
  12. الة حاسبة باستخدام الأوامر الصوتية .
  13. برنامج املاء يقوم بحفظ النصوص إلى ملف نصي

وفي النهاية ، يمكنك تحميل الكتاب مرفق به الأمثلة من هنا .

Read More......

20 يونيو، 2008

التجمع الخامس لـ dotnetwork.org



الموعد :

28 يونية 2008 ،
12:00 - 16:00

الحضور مجاني =)

المتكلمون
ياسر مكرم
Software Architect - Santeon.

محمد سامي
Technical Architect, MVP - ITWorx.

جدول الاعمال
12:00 - 13:30 :
Delivering Rich User Experience Applications using Silverlight 2
ياسر مكرم.

13:30 - 14:00 : استراحه لتناول القهوه

14:00 -- 15:30 :
Patterns and Anti-patterns of SOA
محمد سامي.

15:30 - 16:00 : غداء

المكان :

الكليه الدولية الكنديه ، @ "التجمع الخامس"

الحافلات ستكون متاحة في : النادي السكة (11:00 صباحا -- 11:30 صباحا)
الرجاء ان تكون قبل ذلك ، 11:30 حيث سنغادرفي الموعد المحدد..


لمن يرغب في المزيد من الاخبار عن هذا الحدث و غيرها من الأحداث القادمة من dotnetwork.org ، يرجى التحقق من الروابط التالية :

ياهو! المجموعة :
http://tech.groups.yahoo.com/group/dotnetworkorg/

Facebook Event:
http://www.facebook.com/event.php?eid=15523324683
يفضل الانضمام الى الحدث المذكور اعلاه اذا كان لديك حساب فاس بوك حتى نتمكن من تقديرعدد الحاضرين..

Facebook Fan Page:
http://www.facebook.com/pages/netWorkorg/13135685545

Facebook Group:
http://www.facebook.com/group.php?gid=2409268236

ارجو الا تترددوا في الاتصال بي اذا كان لديك اي اسئله اخرى..
القاكم هناك...

Read More......

17 يونيو، 2008

IComparable Interface

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

كما هو واضح من الاسم ، يستخدم هذا ال 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......

05 يونيو، 2008

FileSystemWatcher


تعتبر هذه الفئة مفيدة جداً في حالة رغبتنا في مراقبة سلوك ملف معين ومعرفة اي تغيير يطرأ عليها من التغييرات الموجودة في ال 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......

04 يونيو، 2008

- إالغاء جميع البيانات من الادوات الموجوده في جميع الشاشات النشطه :

سوف نقوم بتقسيم المشكله الى قسمين :
اولا : حذف جميع البيانات الموجوده في الcontrols في الشاشه الاساسيه
ثانيا : الوصول الي باقي الشاشات الفعاله وتكرار الخطوه الاولى
ولكن اولا , قم باضافه    ( button ( clear button ) , textbox , combo box ,button ( clear all) ,label and button ( show f2

اولا : حذف جميع البيانات الموجوده في الcontrols في الشاشه الاساسيه (شاشه واحده فقط ) :
- قم ياضافه الكود في Clear button :

untitled1 

ثانيا : الوصول الي باقي الشاشات الفعاله وتكرار الخطوه الاولى 
-قم باضافه الكود السابق في Clear all button :
سونف نقوم بالغاء الcomment من على الكود السابق واضافه comment على الكود :
cc= this.Controls
الكود Application.OpenForms للوصول الى كل الشاشت الفعاله في البرنامج
وبالطبع في الزر show f2 سوف تقوم بكتابه الكود المسؤول عن فتح نافذه جديده
 

Read More......

الفرق بين const و static readonly

لو كنت قد جربت التعامل مع الثوابت بكثرة ، فلا بد انك تساءلت ، ما هو الفارق بين تعريف ثابت const او تعريفه باستخدام static readonly ، فكلاهما كما تعلم لا يمكن تغيير قيمتهما .

الفارق بسيط جداً ، هو ان ال const يتم تعريف قيمتها وقت ال compile time ، اما قيمة ال static readonly فيتم تعريفها وقت ال run time .

لهذا سنجد مزية اضافية لل static readonly ، وهو اننا يمكن ان نقوم بتعريفة في ال static constructor بالشكل التالي مثلاً :

 

class Program
    {
        public static readonly Test test = new Test();
        static void Main(string[] args)
        {
            test.Name = "Program";
}

 

Read More......

الفرق بين التعريف باستخدام overridde و new

من المبادئ العامة في ال OOP استخدام مفهوم ال override ، في برامجك من خلال .net يمكنك تحديد الدالة لتكون قابلة لعمل override لها لاحقاً بالشكل التالي :

C#:

public class Base
{
    public virtual void SomeMethod()
    {
    }
}

 

vb.net:

Public Class Base
    Public Overridable Sub SomeMethod()
    End Sub
End Class

 

ومن ثم لعمل override لهذه الدالة في فئة Class آخر نقوم بكتابة الكود التالي :

C#:

public class Derived : Base
{
    public override void SomeMethod()
    {
    }
}

 

vb.net:

Public Class Derived
    Inherits Base
    Public Overloads Overrides Sub SomeMethod()
    End Sub
End Class

 

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

C#:

Base b = new Derived();
b.SomeMethod();

vb.net:

Dim b As Base = New Derived()
b.SomeMethod()

 

التعريف باستخدام new أو Shadows :

اما لو قمنا بتعريف ال  override باستخدام new أو Shadows في vb.net فكل ما سيحدث هو عملية اخفاء مؤقت hide ، لذا فإن الأمر التالي مثلاً :

C#:

public class Base
{
    public virtual void SomeOtherMethod()
    {
    }
}

public class Derived : Base
{
    public new void SomeOtherMethod()
    {
    }
}

Base b = new Derived();
Derived d = new Derived();
b.SomeOtherMethod();
d.SomeOtherMethod();

vb.net:

Public Class Base
    Public Overridable Sub SomeOtherMethod()
    End Sub
End Class

Public Class Derived
    Inherits Base
    Public Shadows Sub SomeOtherMethod()
    End Sub
End Class

Dim b As Base = New Derived()
Dim d As New Derived()
b.SomeOtherMethod()
d.SomeOtherMethod()

سوف يقوم باستدعاء الدالة الأولى في السطر الثالث ، فيما يقوم باستدعاء الدالة الثانية فقط في السطر الرابع .

المصدر :
http://blogs.msdn.com/csharpfaq/archive/2004/03/12/88453.aspx

Read More......

31 مايو، 2008

Nullable Types

 

في عرف المتغيرات التقليدية تعد القيمة Null غير مقبولة اطلاقاً ، فالمتغير من نوع Boolean مثلاً لا بد ان يحتوي على True أو False ، المتغير Short لا بد ان يحتوي على ارقام ما بين الصفر و 32767 مثلاً ... وهكذا ، في حين كانت القيم النصية مثلاً String تستطيع استيعاب القيمة null لإنها من نوع reference .

لكننا في بعض الاحيان نضطر لأن يحمل متغير منطقي Boolean قيمة (لا قيمة - Null ) بمعنى اننا غير قادرين على تحديد فيما إذا كان True أو False ، ابسط امثلة ذلك هي المشكلة التقليدية التي تواجه اغلب مبرمجي قواعد البيانات في حالة عدم ادخال المستخدم لقيمة في حقل ما وليكن حقل (متزوج) ، ولنفرض ان المستخدم لم يحدد كون الشخص متزوجاً من عدمه ، في هذه الحالة سيظل الحقل يحتفظ بقيمة null ، وهو ما كان يستلزم عمل Check على انها ليست Null قبل وضعها في اي متغير من نوع bool مثلاً .

لكن ومع الاصدارة الثانية من .net framework اصبح بالامكان تعريف متغير مخصص ليسمح بتقبل القيمة null اضافة للقيم الاساسية له ، كما في المثال التالي :

bool? ismarried = null;

 

في هذه الحالة يمكننا اسناده لقراءة قيمة مباشرة من قاعدة البيانات دون القلق من كون القيمة الحالية هي Null .

 

هناك عدة طرق اخرى لتعريف متغير يقبل Null مثل الطريقة التالية ايضا :

Nullable<bool> nullableBool = null;

 

حيث ان ? هي فعلياً اختصار لل generic المسمى System.Nullable<T> ، وهو ما سنتعرف على معناه في مراحل قادمة من الدورة .

وبنفس الطريقة فيما لو اردنا تعريف دالة يكون ال return لها Nullable فسيكون ذلك بالشكل التالي :

public bool? functionName()

 

خصائص ال Nullable :

اهم خصائص ال nullable هي خاصية HasValue والتي تحدد فيما إذا كان المتغير به قيمة ام انه يحتفظ بقيمة Null بالشكل التالي :

if (ismarried.HasValue)

 

يمكن كتابتها باستخدام وسائل المقارنة ايضاً != أو <> في الفيجوال بيسك بالشكل التالي :

C#:

if (ismarried!=null)

 

VB.net:

if ismarried<>nothing then



*** حيث ان nothing خاصة بالفيجوال بيسك بدلاً من null في السي شارب .

المعامل ؟؟ :

يمكن استخدام المعامل ؟؟ مع القيم ال nullable لكي نخبره بوضع قيمة ما في حالة وجودها ب null ، لنفترض مثال حالة الزواج السابق ، وسنفترض ان اي شخص لم يقم بادخال بيانات الزواج فهو شخص اعزب بمعنى ان القيمة ستصبح False مباشرة ، سنقوم بكتابة الكود التالي من اجل ذلك :

int? ismarried = returnvaluefromdatabase() ?? False;

 




Read More......

أكبر رقم في العالم

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

هذا المقال ترجمة لمقال محمد نبيل ، كان قد وضعه على البلوج الخاص به منذ أكثر من سنتين على هذا الرابط :
http://mohnabil.blogspot.com/2006/02/biggest-number-used-in-mathematics.html

أكبر رقم في الرياضيات .

هو رقم اصغر من ما التعبير الرياضي ما لا نهاية (infinity) ولكنه في نفس الوقت اكبر من أي رقم تخيلته ، يعرف باسم Graham's Number

قبل البدء بالحديث عن هذا الرقم ، سنتحدث عن رقم مشابه ولكنه اصغر منه قليلاً ، هو رقم Googol الذي استمد محرك البحث الشهير Google اسمه منه .

رقم Googol اكبر من عمر الكون بالثواني ست مرات وهو الرقم 10 مرفوع للاس 100 ، اي الرقم واحد وبجانبه 100 صفر فقط  .

رقم googol اكبر من عدد الجزيئات الموجودة في الكون والتي تم توقعها بحوالي 10 مرفوعة لأس بين 72 إلى 87 .

إذا قمت برسم شكل مضلع هندسي عدد جوانبه هو رقم googol والذي هو 10 اس 27 ضعف الكون المعروف فسيظل هذا الشكل يظهر كدائرة حتى على مقياس Planck الذي يمثل 10 مرفوعة للاس -39 من المتر - السم جزء من 100 جزء من المتر اما ال Planck فهو جزء من الرقم 1 وبجانبه 39 صفر من المتر - .

هناك رقم آخر وهو Googolplex وهو ما يساوي رقم 1 وبجانبه رقم googol من الاصفار ، هناك ايضاً Googolduplex والذي هو رقم 1 وبجانبه رقم Googolplex من الاصفار ، Googoltriplex هو واحد وبجانبه الرقم Googolduplex من الأصفار ، وأخيراً Googolquadriplex هو الرقم 1 وبجانبه الرقم Googoltriplex من الأصفار  .

لو اردنا كتابة اصغر واحد من الارقام السابقة وهو ال googolplex على صفحة تستطيع طباعة 100 صف بكل صف 100 حرف ، بمعنى انها تطبع في الصفحة الواحدة 10 الاف حرف ، في هذه الحالة سوف نحتاج إلى بليون طابعة ، تطبع كل واحدة منها بليون صفحة في الثانية ، بهذه الطريقة وبعد سنة كاملة سنجد ان هذا العدد من الطابعات تمكن فقط من طباعة 10 مرفوعة للاس 29 فقط ، وبعد بليون سنة أخرى سنجد انها استطاعت طباعة 10 مرفوعة للاس Googol-38 فقط من الارقام . بليون سنة اخرى لتصبح 37 وبليوني سنة لتصبح 36 ثم اربع بلايين سنة لتصبح 36 ثم 8 بلايين سنة لتصبح 35 - نتكلم هنا عن الاس لذا فهناك تضاعف - .

لنفكر بطريقة أخرى ، لو افترضنا اننا سنطبع هذه الارقام بخط رقم 1 والذي يحتل حوالي 3 مليمتر لكل حرف ، سنجد ان حجم الصفحة التي تكفي لطباعة كل هذا تساوي 3.5 * 10 مرفوعة للاس 98 متر ، في حين ان كامل مساحة الكون المعروف حتى الآن 7.4 * 10 مرفوعة للاس 26 . ايضاً لا ننسى عامل الوقت في الطباعة حتى لو افترضنا ان نقل البيانات يتم بسرعة الضوء .

كل هذا وما زلنا نتحدث عن googolplex ، فما بالك بما بعده . ثم لا تنسى ان هذا الرقم هو صغير جداً مقارنة برقمنا Graham's Number والذي لا يمكن كتابته في صيغة exponentiation اي رقم مرفوع للاس رقم ، بل لا بد من طريقة خاصة لكتابته لإن لا احد يستطيع كتابته بهذا الشكل ،

يمكنك الاطلاع على المزيد هنا :
http://www-users.cs.york.ac.uk/~susan/cyc/g/graham.htm

ولكن لماذا Graham's Number ؟؟؟
في الواقع جاء هذا الرقم كأكبر رقم في الكون حالياً لحل مشكلة رياضية اسمها Ramsey theory والتي تقول :

Consider an n-dimensional hypercube, and connect each pair of vertices to obtain a complete graph on 2n vertices. Then colour each of the edges of this graph using only the colors red and black. What is the smallest value of n for which every possible such coloring must necessarily contain a single-colored complete sub-graph with 4 vertices that lies in a plane?

بالرغم من ان هذه المشكلة لم تحل إلى الآن ، Graham's Number هو الحد الأعلى الأصغر حالياً .
في الختام ، اكثر اسم مسلي لرقم قرأته في حياتي ، هذا الاسم هو :
Novemnonagintanoncentinonmillinovamyriadecemyrilli on

المصادر:
http://en.wikipedia.org/wiki/Graham_number
http://en.wikipedia.org/wiki/Googol#Trivia
http://en.wikipedia.org/wiki/Other_names_of_large_numbers
http://en.wikipedia.org/wiki/Moser%27s_number
http://www-users.cs.york.ac.uk/~susan/cyc/g/graham.htm
http://en.wikipedia.org/wiki/Knuth%27s_up-arrow_notation
http://en.wikipedia.org/wiki/Hyper_operator
http://en.wikipedia.org/wiki/Conway_chained_arrow_notation
http://en.wikipedia.org/wiki/Skewes%27_number
http://home.earthlink.net/~mrob/pub/math/largenum-2.html
http://mathworld.wolfram.com/GrahamsNumber.html
http://www.madsci.org/posts/archives/oct98/905633072.As.r.html
http://en.wikipedia.org/wiki/Googolplex
http://wiki.tcl.tk/13471

إلى هنا انتهت الترجمة

في الواقع وجدت هذا الرابط لاسماء الارقام ، ستجدون الكثير من الاسماء الغريبة :
http://www.nationmaster.com/encyclopedia/Xonillion

Read More......