مدخل إلى WAP

Monday, August 25, 2008 | Labels: , , , | 0 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 ...

دورة : لنتعلم .net 2008

| Labels: , | 0 comments |

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

على منتدى فيجوال بيسك للعرب ، توجد دورة بعنوان

_net2008

رابط الدورة هنا

http://vb4arab.com/vb/forumdisplay.php?f=101

جدول مواضيع الدورة هنا

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

Read more ...

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

| Labels: , | 0 comments |

لو كنت قد جربت التعامل مع الثوابت بكثرة ، فلا بد انك تساءلت ، ما هو الفارق بين تعريف ثابت 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

| Labels: , , | 0 comments |

من المبادئ العامة في ال 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 ...

نظام الرواد لادارة شركات الكومبيوتر

| | 5 comments |

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

اسم المشروع : نظام لإدارة شركات الكومبيوتر (هاردوير)
وصف المشروع : مشروع مقدم ضمن مادة تحليل النظم System Anaylsis .
الفرقة الثانية بكلية الحاسبات والمعلومات - جامعة حلوان .
فريق العمل : Futex Group .

1- أحمد جمال خليفة .
2- أحمد سعيد أنور .
4- أحمد محمد عيسوي .
5- حسام الدين محمد صادق .
6- خالد عادل محمد سلامة .

اسم المشرف :
د.سيد عبدالجابر .
م. هالة أبو الحمايل .

مقدمة :

الهدف من المشروع في مادة ال System Anaylsis هو التعرف على كيفية تحليل متطلبات العميل المختلفة مروراً بمراحل التحليل المختلفة بدءاً من ال DFD مروراً بال Sheets المختلفة وصولاً إلى ال ERD وال Entitty Sheet وانتهاء بال Menu وال low level sheet .
وقم تم اختيار شركة (الأوائل - الرواد) والمتخصصة في مجال توريد واستيراد وبيع قطع الكومبيوتر المختلفة اضافة إلى عمليات الصيانة وخلافه لتطيبق هذا النظام حيث يعتبر مجال عمل الشركة متشعباً إلى حد ما اضافة لنظم الحسابات الموجودة ضمن الشركة .
المرحلة الأولى كانت في نزول الشركة والبدء في تجميع البيانات عن نظام ادارة وعمل الشركة ، ومن ثم بدأت مراحل التحليل المختلفة وهنا عرض بسيط لبعض صور هذه المرحلة .

نموذج من التحليل باستخدام DFD :

نموذج من ال DataStore Sheet :

نموذج من ال Process Sheet :

نموذج من ال Data Item Sheet :

نموذج من قاعدة البيانات باستخدام ERD :

نموذج من ال ERD Items :

نموذج من ال Entity Sheet :

نموذج من ال Context Diagram :

نموذج من ال System Diagram .

نموذج لل menu diagram :

نموذج لل low level diagram :

أما النظم الداخلية التي تضمنها نظام شركة الرواد فهي :


- نظام إدارة المحاسبات .
- نظام إدارة المبيعات .
- نظام إدارة الصيانة .
- نظام إدارة المخازن .
- نظام إدارة شؤون الموظفين .

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

عمل البرنامج :
تم عمل البرنامج من خلال Visual Basic 6 مع قواعد بيانات من نوع Microsoft Access باستخدام تقنية ADO .
المهام الأساسية التي يقوم بها البرنامج .

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


صورة رقم 1

3- رسائل تحذيرية ومؤشرات مستمرة بخصوص كميات البضائع ، الفواتير المستحقة ، الشيكات وايصالات الأمانة والتحصيلات - الشاشة الرئيسية للبرنامج .


صورة رقم 3 .

4- عرض كافة البضائع مع امكانية الطباعة ، التعديل والحذف وخلافه .


صورة رقم 4

5- عمليات اضافة العملاء والموردين والبحث عنهم والتعديل وخلافه .


صورة رقم 5

6- مستكشف المخازن وعمليات الجرد اليومي وكميات البضائع .
7- مستكشف وحدات البضائع بالسيريال الخاص بالقطعة .


صورة رقم 7

8- نظام تحويلات الفروع وادارة الأسعار .
9- نظام كامل لادارة الفواتير الصادرة والواردة آجل ونقداً .


صورة 9

10- نظام لادارة الشيكات وايصالات الأمانة ومواعيد الدفع والاستحقاق .


صورة 10

11- نظام ادارة الجزاءات والمكآفات والحضور والغياب اليومي للموظفين .
12- نظام ادارة مدخلات ومخرجات غير تجارية للشركة .
13- نظام ادارة التحكم بعقود الموظفين ، وتقارير موظفي المبيعات .


صورة 13

14- نظام تسليم الرواتب الشهرية والمكآفات والحوافز الإضافية .
15- نظام تسجيل عقود صيانة سنوية أو دائمة للشركة .
16- نظام ادارة عمليات الصيانة الدورية .


صورة 16

17- نظام ادارة المرتجعات وصيانة المبيعات :


صورة 17

18- العمل على الشبكة باستخدام سيرفر مركزي اضافة إلى Clients مع امكانية التواصل بين الموظفين من خلال البرنامج كبديل عن الاتصالات الهاتفية .


صورة 18

19- خدمات اضافية مثل الآلة الحاسبة ، المفكرة ، المنبه ، التحكم بتنسيق البرنامج والخلفية والألوان ... الخ .


صورة 19

في الختام . البرنامج موجود على هذا الرابط للتحميل بالسورس كود للبرنامج . مع ملف تنفيذي
http://www.4shared.com/file/133226960/37119893/Rowad.html

أتمنى للجميع الاستفادة .

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

Read more ...

كتاب استخدام DAO لبناء برنامج خطوة بخطوة

Thursday, August 14, 2008 | | 3 comments |



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










يمكن مراجعة الدروس والمراحل هنا



ولتحميل الكتاب والملفات المرفقة
الكتاب & ملف المشروع

Read more ...

كتاب تعليم الحاسب الآلي للمبتدئين - أساسيات الهاردوير ونظم التشغيل وأوفيس

| Labels: , | 5 comments |


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



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


للتحميل اضغط هنا

Read more ...

العدد الأول من مجلة منتدى فيجوال بيسك للعرب

| Labels: | 0 comments |

العدد الأول من المجلة الشهرية لمنتدى فيجوال بيسك للعرب


صورة الغلاف



العدد الأول كان باشراف : وليد بوالطمين
ولي عدة مشاركات في المجلة

Read more ...

كتاب مقدمة إلى التحكم بالأجهزة الخارجية - Physical Computing

Wednesday, August 13, 2008 | Labels: , , | 2 comments |

Untitled-2

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

http://vb4arab.com/vb/forumdisplay.php?f=57

المادة العلمية الاساسية قدمت في الاصل من FUTEX Group مشروع مادة Seminar في الفرقة الثالثة - كلية حاسبات ومعلومات حلوان .

محتويات الكتاب :

1- نظم الأرقام
2- المنافذ وتركيبھا وطريقة تعامل النظام معھا
3- منفذ الطباعة Parallel Port وطريقة التعامل معه بالتفصيل
4- برمجة منافذ الكومبيوتر
5- مدخل إلى الھاردوير - مقدمة .
6- مدخل إلى الھاردوير - وسائل الإخراج.
7- مدخل إلى الھاردوير - وسائل الإدخال .
8- مدخل إلى الھاردوير - وسائل المعالجة .
9- تطبيق تشغيل الأجھزة الكھربائية من خلال الكومبيوتر
10- قيادة عربة ريموت كنترول من خلال الكومبيوتر
11- مقدمة إلى عالم الروبوتات

لتحميل نسخة من الكتاب اضغط هنا

Read more ...

Nullable Types

| Labels: , | 0 comments |

 

في عرف المتغيرات التقليدية تعد القيمة 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 ...

كتاب مقدمة إلى Microsoft Access

| Labels: | 1 comments |

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

tt

محتويات الكتاب

مقدمة عامة لقواعد البيانات .
مقدمة لأكسيس .
النماذج Forms
العلاقات Relationships
بعض عمليات قواعد البيانات .
منوعات في أكسيس .
لغة الاستعلامات الهيكلية TSQL

 

للتحميل اضغط هنا

Read more ...

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

| Labels: | 0 comments |

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

هذا المقال ترجمة لمقال محمد نبيل ، كان قد وضعه على البلوج الخاص به منذ أكثر من سنتين على هذا الرابط :
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 ...

مقدمة إلى VBScript

| Labels: | 0 comments |


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


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

أولاً : ما هي ال VBScript ؟


هي لغة نصية Script تشبه في طريقة كتابتها ال Visual Basic ولكنها تقوم بالعمل على الانترنت حيث تعمل مباشرة على المتصفح .


ثانياً : لماذا نستخدم VBScript ؟


نستخدم هذه اللغة لنقوم بتنفيذ بعض الأوامر على جهاز المستخدم مثل التحقق الأولي من المدخلات وعمل بعض الميزات الاضافية للصفحة التي لا تستطيع HTML القيام بها ، أيضاً يمكنك من خلال هذه اللغة تشغيل المكونات الاضافية مثل ActiceX و بعض ال Java Applets ، كما انها تستخدم أيضاً كلغة للبرمجة على السيرفر بجانب ASP مثلاً .
والجدير بالذكر انه يعيب VBScript مقارنة ب JavaScript مثلاً انها أقل تحكماً منها وأقل امكانيات ، كما أن دعمها على المتصفحات الأخرى ( نتسكيب مثلاً قبل توقف اصداره مؤخراً ) أقل ، ولكنها تظل رغم ذلك أحد الحلول السهلة لمبرمجي Visual Basic .



ثالثاً : لكي نبدأ ...


قبل البداية يفترض من قارئ هذه الدروس ان يكون لديه خلفية ولو بسيطة بكيفية استخدام وسوم HTML كما يفترض ايضاً ان يكون مبرمج باستخدام فيجوال بيسك لإننا لن نتطرق لشرح أساسيات اللغة ، أيضاً سنقوم خلال هذه الدروس باستخدام المفكرة لتسهيل المهمة مع العلم أن بامكاننا استخدام برامج مثل FrontPage و Microsft Visual InterDev .


رابعاً : العناصر الأساسية للغة .


- بالنسبة للتصريح عن المتغيرات Variables فيتم باستخدام Dim كما في الفيجوال بيسك تماماً ، ويمكن اسناد القيم لها بنفس الطريقة ولكن لا يمكن تعريف نوع المتغير :

Dim X,Y 'true
Dim R as string
'false
Dim myname="ahmed gamal" ' true



- يمكن العناصر الأساسية للغة مثل الجمل الشرطية If statements ، والمصفوفات Arrays ، وجملة Select Case ، والدوال والإجراءات Sub & Functions بنفس الطريقة كما في الفيجوال بيسك .

- وكذلك الأمر بالنسبة للحلقات التكرارية Loops ما عدا انه في حالة For Next فسوف يكون الأمر بالشكل التالي :








For i=0 To 10

' do something here


Next





- الكائن الأساسي في اللغة هو Document والذي يمكن من خلاله الطباعة مثلاً :








Document.write "ahmed gamal"





- أو تغيير لون الصفحة :








Document.bgColor = "#ff00ff"






- أخيراً لكي تعمل هذه اللغة توضع الأوامر بين هذين العلامتين :








<Script Language="VBScript">

' code here

</Script>




 



خامساً : لنبدأ بعمل تطبيقات بسيطة ...


سنقوم خلال هذا القسم بوضع بعض الأمثلة البسيطة التي توضح كيفية عمل اللغة :





1- ادخال اسم المستخدم وعرضه في رسالة .







قم بفتح نسخة جديدة من المفكرة ، قم بكتابة الكود التالي :









<Script Language="VBScript">

Dim myname


myname = InputBox("فضلاً قم بادخال الاسم","ادخال الاسم")


Msgbox myname


</script>







ثم قم بحفظ الملف باسم myexample.htm أو .html - قم بتشغيل هذه الصفحة على المتصفح لديك .

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


2- ادخال اسم المستخدم وطباعته على الصفحة .





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








<form name="form1">

Enter Your Name:


<br>


<input type=text name=text1 value="">


<br>


<input type=button name=cmd1 value="Print Name">


</form>





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










<script language="vbscript">

sub cmd1_onClick()


End sub


</script>





والآن وفي وسط هذا الإجراء سوف نضيف أمر الطباعة بالشكل التالي :








Document.write form1.text1.value






3- تغيير لون الصفحة حسب اختيار المستخدم من بين ثلاثة ألوان في radiobuttons .



مجدداً سأفترض معرفتك ب HTML لتنشأ صفحة بالشكل التالي :










<form name="form1">

Enter Your Color: <br>


<input type=radio name=r1 value="a1"> Blue


<input type=radio name=r1 value="a2"> Red


<input type=radio name=r1 value="a3"> Green


<br>


<input type=button name=cmd1 value="Change Color">


</form>






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










<script language="vbscript">

sub cmd1_onClick()


if form1.r1(0).checked=true then


Document.bgColor = "#0000FF"


elseif form1.r1(1).checked=true then


Document.bgColor = "#FF0000"


elseif form1.r1(2).checked=true then


Document.bgColor = "#00FF00"


else


msgbox " there is no options"


End if


End sub


</script>



 


4 - عرض الوقت والتاريخ :





بكل بساطة ما عليك سوى كتابة الأمر التالي :








<script language="vbscript">

document.write Date


</script>






والآن سنقوم بطباعة كلمة التاريخ وبجانبها التاريخ الحالي ، ومن ثم سطر جديد ومن ثم الوقت بلون آخر وذلك بالشكل التالي ( استخدام HTML في وسط أمر الطباعة ) :








<script language="vbscript">

document.write "Date :"


document.write Date


document.write "<br>"


document.write "<font color=red><b> Time: "


document.write Time


document.write "</font></b><hr>"


</script>





5- عرض الوقت والتاريخ ثانية بثانية من خلال استخدام Timer :





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










mTimer = window.setInterval( "myTime()", 1000, "VBScript" )







في السطر السابق حددنا اننا كل 1000 ميلي ثانية = ثانية واحدة سوف نستدعي الدالة myTime .

وفي برمجة الدالة myTime :








sub myTime()

window.location.reload()


end sub







هكذا نكون قد وصلنا إلى نهاية الدرس ، وأتمنى من الله أن أكون قد وفقت في ايصال المعلومة .



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

Read more ...