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

Friday, August 15, 2008 | Labels: , | 1 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: , | 3 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 ...

لدي فكرة مجنونة ، من موقع SourceForge

| Labels: | 0 comments |

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

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

لنفترض ان لدينا صورة 4*4 بيكسل ، نريد ان نجرب فيها كل الاحتمالات بلونين فقط هما الابيض والاسود ، هل تعرف كم صورة سيكون الناتج ؟
الناتج سيكون 2 مرفوعة للاس 4*4 وهو ما يعني 2 مرفوعة للاس 16 وتساوي 65536 .
حيث ستجد اولاً البكسل الاول اسود والباقي ابيض ، ثم الثاني ، ثم الثالث ، ثم الاول والثاني ، ثم الاول والثالث .... الخ .

الآن سنفترض اننا نريد عمل صورة ملونة 16 مليون لون بحجم 640*480 ، هل تعرف كم الصور الناتجة ؟
طبعاً ، الناتج هو 16000000 مرفوع للاس 307200 ، وهو رقم كبير جداً ، يكفي ان تعلم ان 16 مليون مرفوعة للاس 2 ستحتوي على الاقل على ضعف عدد الاصفار اي 12 صفر ، للاس 3 سيصبح 24 صفر ، الاس الرابع سيصبح 48 اس ، بمعنى انه لن يزيد 6 اصفار في المرة بل ستتضاعف ، لذا لك ان تتخيل الرقم عند الاس الالف ومن ثم الرقم مرفوعاً للاس 307 آلاف ، ان حساب الرقم الناتج هو في حد ذاته مشكلة فما بالك بالحصول على الصور نفسها .
لكن هل تتخيل على ماذا ستحتوي هذه الصور ، بالواقع ستحتوي على كل الاحتمالات التي يمكن لكاميرا ما ان تلتقطها ، وهي بالتالي تحتوي على :

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

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

لذا سنختم ببعض النقاط :

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

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

http://www.arabteam2000-forum.com/index.php?showtopic=155674&st=20&p=782920&#entry782920

لو فرضنا أنك تريد أن تحسب الأحتمالات لصورة مكونة من لونين فقط، وحجمها هو 3 × 1 بيكسل، فيكون عدد الاحتمالات = عدد الألوان (2) مرفوع للأس (3) (حجم الصوره)= 2 أس (3×1) = 8 صور

الصورة المرفقة

وبالتالى: لو تريد أن تحسب الأحتمالات لصورة مكونة من لونين فقط، وحجمها هو 3 × 2 بيكسل، فيكون عدد الاحتمالات = عدد الألوان (2) مرفوع للأس (6) (حجم الصوره)= 2 أس (3×2) = 64 صور = (2 أس 3) أس 2

الصورة المرفقة

إذن: تريد أن تحسب الأحتمالات لصورة مكونة من 256 لون، وحجمها هو 640 × 480 بيكسل، فيكون عدد الاحتمالات = عدد الألوان (256) مرفوع للأس (307200) (حجم الصوره)= 256 أس (640×480) = (256 أس 640) أس 480

الصورة المرفقة

أحسب الناتج، ولنفترض أن زمن تكوين الصوره يساوى 1 من مليون من الثانية (جدلاً)، فما الوقت الازم لتكوين جميع الاحتمالات؟؟؟

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ولحساب زمن تقريبي لتنفيذ هذه العملية ، هذا ايضاً من موقع الفريق العربي  للمهندس اسامة ايضاً :

 

هل حاولت حساب الوقت المستغرق لهذه العملية ؟ (عدد الأحتمالات تقريباً يساوى (10 أس 737280)، أى واحد وامامه 737280 صفر)

الصورة المرفقة

نفترض جدلاً ان لديك نظام يستطيع تكوين ألف مليار صورة فى الثانية، أى: 1.000.000.000.000، وهو تقريباً يساوى

أى عدد الثوانى التى تحتاجها لجميع الاحتمالات = 256 أس 307195، أى تقريباً (10 أس 737268) أى واحد وامامه 737268 صفر من الثوانى regular_smile.gif

الصورة المرفقة

وحيث أن السنه تحتوى تقريباً على 32.000.000 ثانية، أى كل 3 سنين تحتوى تقريباً على 10.000.000 ثانية (10 أس 7)
إذن تحتاج الى زمن قدره = 3 × (10 أس (737268-7)) = 3 × (10 أس 737261) سنة، 3 × (10 أس 737259) قرن
ولنفترض أن تكنولوجيا البرنامج تضاعفت سرعتها 3 مليون مليار مرة، اى اصبح ينتج: ثلاثة مليار مليار مليار صورة فى الثانية (أى واحد وامامه 24 صفر صورة فى الثانية). إذن ستحتاج لوقت يساوى (10 أس 737241) قرن
ولنفترض أنك ستختار صورة واحدة من كل مليار مليار مليار صورة (أى 0.000000000000000000000000000000000001%)، إذن ستحتاج لوقت يساوى (10 أس 737205) قرن أى (10 أس 737193) مليار قرن، أى (واحد وامامه 737207 صفر من السنين)
مع العلم أن عمر الأرض يقدر بحوالى (4.5 × 10 أس 9) سنة = 4.500.000.000 سنة
أى ستحتاج تقريباً إلى أكثر من (10 أس 737195) ضعف عمر الأرض regular_smile.gif ، ولو افترضنا بأننا (لا أدرى كيف؟) أنتقينا صورة واحدة من كل ((10 أس 30000) إلى (10 أس 40000)) صورة، لكانت المحصلة تساوى تقريباً (10 أس 700000) ضعف عمر الأرض، (واحد وامامه 700.000 صفر regular_smile.gif)
أى لو بدء البرنامج مع بدء عمر الأرض، وبقوة تصل إلى: ثلاثة مليار مليار مليار صورة فى الثانية، مع اختيار صورة واحدة من كل مليار مليار مليار صورة، وأن زمن اختيار واستبعاد الصور جدلاً يساوى صفر، وكان هناك حوالى (10 أس 700000) نظام بنفس القوه ويعملوا سوياً بالتوازى، لكنا الان نشاهد الرسالة regular_smile.gif

LEFT TO RIGHT

98% of task completed

ملاحظة: الحسابات بإفتراض الصورة 640 × 480 × 8 بت، وعليه:

  • 640 × 480 × 4 بت، سيكون الناتج النهائى التقريبى = 10 أس (700000/2) = 10 أس 350.000
  • 640 × 480 × 16 بت، سيكون الناتج النهائى التقريبى = 10 أس (700000*2) = 10 أس 1.400.000
  • 640 × 480 × 24 بت، سيكون الناتج النهائى التقريبى = 10 أس (700000*3) = 10 أس 2.100.000
  • 640 × 480 × 32 بت، سيكون الناتج النهائى التقريبى = 10 أس (700000*4) = 10 أس 2.800.000
  • 640 × 480 × 4 بت = 320 × 480 × 8 بت = 640 × 240 × 8 بت = 320 × 240 × 16 بت، الناتج النهائى التقريبى = 10 أس (700000/2) = 10 أس 350.000
  • ... الخ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

رابط الموضوع على منتدى الفريق العربي للبرمجة :
http://www.arabteam2000-forum.com/index.php?showtopic=155674

رابط الموضوع على فيجوال بيسك للعرب :

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


رابط الموضوع على sourceforge هنا :
http://sourceforge.net/community/forum/topic.php?id=451&page

 

Read more ...

Strategy Design Pattern

| Labels: | 1 comments |

The Strategy Design Pattern
نبدأ أولاً مع التعريف وهو :

The Strategy Design Pattern basically consists of decoupling an algorithm from its host, and encapsulating the algorithm into a separate class. More simply put, an object and its behaviour are separated and put into two different classes. This allows you to switch the algorithm that you are using at any time.

وباختصار ، فإن هذا الباترن مكون من عملية decoupling للالجوريزم و encapsulating في كلاسات Classes مختلفة ، حيث يتم فصل الكائن عن سلوكه في كلاسين منفصلين ، وهو ما سيسمح لك لاحقاً بتغيير الالجوريزم وقت ما تريد .

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


الاستخدام :
عندما يكون لديك عدد من الكائنات Objects متشابه ومختلفة فقط في ال behaviour فإنه من المفضل دائماً استخدام Strategy حيث يمكنك اختصار جميع هذه الكلاسات في كلاس واحد فقط مع استخدام Strategies مختلفة .
كذلك الأمر أيضاً مع subclassing للكائنات ، حيث يعتمد الحل القديم على كون ال behaviour من نوع static ، وعندما ترغب في تغييره فإنك تقوم بعمل new instance ومن ثم تقوم بعمل تبديل replace للقديم ، ولكن الآن كل ما عليك هو تغيير ال Strategy وهو سيقوم تلقائياً بتعديل ال behaviour .


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

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

Read more ...

Traffic Monitoring System

| Labels: , | 5 comments |

اسم المشروع : نظام لمراقبة المرور مع نموذج للقيادة الآلية .
Traffic Monitoring System With Automatic Driving Model


المشروع فائز بالمركز الأول على مستوى جمهورية مصر العربية في يوم الهندسة المصري EED فرع IT .

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

اسم المشرف :
بروفيسور: عراقي خليفة .
م. عمر غنيم .


الكلية والجامعة :
جمهورية مصر العربية - جامعة حلوان - كلية الحاسبات والمعلومات - قسم علوم الحاسب.
السنة : 2007 .


وصف مختصر للمشروع :
المراحل الأساسية للمشروع - باختصار شديد - لمزيد من التفاصيل راجع ال Documentation في آخر الموضوع .

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

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

السيناريو :
* مخطط لسيناريو المشروع :

* مخطط Collaboration Diagram للمشروع :

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


معالجة الصور :
المرحلة الأولى في عملية معالجة الصور هي مرحلة Road Extraction حيث يتم معرفة الطرق الموجودة في المدينة عن طريق مراحل متعددة تمر بها عملية استخراج الطرق بعد ذلك يمكن حصرها اجمالاً في المراحل التالية (Generate Road Seed points, Snaxles, Snakes) حيث يتم التعرف في آخر مرحلة بصورة مفصلة على جميع الطرق غير المستقيمة أو المنحنية بانحناءات متعددة .


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

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

الخطوة الثانية تعتمد على البدء الفعلي في قراءة الصور ويتم ذلك عبر تحويلها إلى صور Binary مع تطبيق بعض ال morphological filtering من اجل توضيح الصورة ، وهذه المحصلة النهائية لهذه العمليات :

الخطوة الأخيرة هي البدء بتتبع هذه السيارات فترة عمل النظام ، ويتم ذلك باستخدام LUCAS-KANADE OPTICAL FLOW ALGORITHM على سبيل المثال .
نظام الإحصائيات والتقارير القيادة الآلية :
بعد أن استطعنا في المرحلة السابقة معرفة أماكن السيارات في المدينة وحالة الطرق ، جاء دور المرحلة الثانية من النظام والتي تتلخص في الاستفادة من هذه البيانات ، وتتم الاستفادة من هذه البيانات بطريقتين :

نظام الإحصائيات والتقارير :
حيث يتم عرض تقرير فوري بحالة الطرق ونسب الإزدحام وخلافه .

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

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


الهاردوير Hardware :
كما أسلفنا في النقطة السابقة ، فإنه تلزمنا بعض التعديلات ليصبح بمقدورنا تحريك السيارة الموديل عن طريق الكومبيوتر .
بداية استعنا بسيارة ريموت كنترول RC Car مع مراعاة وجود أكثر من تردد Frequency في حالة استخدام أكثر من سيارة أو استخدام crystals أو Removable Strips من أجل تجنب تداخل الموجات .
ثم قمنا بعمل موديل لمدينة مصغرة وقمنا برسم بعض الطرق وبناء بعض المباني كما هو موضح في الصور المرفقة .
وقمنا باستخدام كاميرا عادية لالتقاط الصور .
المرحلة الأولى هي ربط الكاميرا بالكومبيوتر ، وتم ذلك عبر منفذ USB حيث يمكن قراءة الكاميرا بأكثر من طريقة وحسب لغة البرمجة المستخدمة .
الخطوة الثانية هي ربط الريموت بالكومبيوتر ليتم التحكم في السيارة ، ويتم ذلك عن طريق استخدام مبادئ ال Relays والتي تسمح للتيار بالمرور في الريموت عند تلقي أمر معين من الكومبيوتر من خلال منفذ الطابعة Parallel Port .
وهاتين الصورتين توضحان الفرق بين الريموت العادي حيث يتم تحريك صفائح على بعضها مقارنة بالريموت الجديد حيث أصبح ال Relay هو المتحكم في توصيل الكهرباء .

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


- من جهة معالجة الصور : سيتم استبدال الكاميرا بصور مباشرة للأقمار الصناعية مثل Googel Earth والتي بدأت تقدم خدمات بث مباشر لبعض المدن حول العالم .
أيضاً لا زلنا بحاجة للمزيد من التسريع والدقة في عمليات معالجة الصور ، أيضا لمزيد من الفلترة للمؤثرات الجوية الخاصة مثل الغيوم ، الأمطار ... الخ .
- من جهة نظام قيادة السيارة : لن يتحمل السيرفر وحده عبء القيادة بل سيكون هناك جهاز على السيارة أو Microcontroller يستقبل المسار ويبدأ في توجيه نفسه بنفسه وذلك منعاً لتثقيل العمل على السيرفر وزيادة في السرعة .
أيضاً سيتم استخدام دوائر كهربائية مثل ultra-sonic حتى في الموديل الصغير لتلافي الاصطدامات التي تنتج عن أجسام مفاجئة حيث تقوم بارسال واستقبال موجات ويتم احتساب زمن ارتدادها لمعرفة ومن خلالها يمكن معرفة المسافة التي تفصلها عن أقرب جسم في الاتجاه والزاوية التي ترسل بها الموجات .
- من جهة نظام التحكم والاتصال : لن يتم الاتصال عبر موجات Radio عادية بل لا بد من وجود Wireless network ، والشرط الأهم هو كونها محمية وهو ما لم تتوصل إليه البحوث حتى الآن حيث لا توجد شبكة لا سلكية محمية بصورة كاملة أبداً .
ومن الجهة الأخرى فنحن بحاجة إلى تطويع هاردوير السيارات لاستقبال أوامر عن طريق الكومبيوتر وهو ما لا يعد مرحلة صعبة من ناحية التطبيق ، ولكنه سيواجه مشاكل عديدة تنتج عن سرعة السيارة مثلاً وسرعة الاستجابة للأوامر في ظل سيرها على سرعات كبيرة والتوقف المفاجئ وتوقع الاعطال وغيره .

المشروع :


تم تسليم المشروع باستخدام C# ولكن بداية العمل في المشروع لم تكن كذلك ، حيث تم استخدام MATLAP نظراً لكونه الأسهل في التعامل مع ال Image Proccessing ، ومن ثم تم ربطه بالنظام الذي قمنا بعمله من خلال C# ولكن وبالرغم من ذلك فلن تجد اللغة المستخدمة تفرق كثيراً حيث أن أغلب البرنامج عبارة عن معادلات وقوانين لن يختلف تطبيقها من لغة إلى أخرى أبداً .
وللتحويل إلى C# تم استخدام SharperCV وهي مكتبة مفتوحة المصدر متخصصة في عمليات ال Image Proccesing وهي عبارة عن Warrper لمكتبة OpenCV التي تم تصميمها للعمل على C++ ، وسبب الاستعانة بهذه المكتبة هو التعقيد الكبير الذي سينتج عن استخدام أكواد سي شارب مباشرة في كل عملية من عمليات معالجة الصور التي نستخدمها نظراً لإنك ستضطر للتعامل مع المؤشرات Pointers وهو ما يضطرك لاستخدام unsafe code ، وبصراحة فهي لا تعطيك كافة المميزات التي تقدمها لك لغة مثل C++ وفي نفس الوقت تحرمك من السهولة التي تجدها في الماتلاب .
ولكن هذا لم يمنع استخدام أكواد مباشرة في كثير من الأحيان ، وإنما تم استخدام SharperCV فقط في العمليات المتكررة أو التي يتم التعامل فيها مع كمية كبيرة من الأكواد حيث تختصر عليك ال SharperCV جزء كبير من المهمة برغم كثرة مشاكلها ، ولكنك ستجد نفسك مضطراً في النهاية للبرمجة اليدوية .
كان بالإمكان اضافة حل آخر وهو استخدام عمليات التحويل من ماتلاب إلى .net ولكن ظهور بعض المشاكل أدى إلى ايقاف هذه العملية ، عموماً ما زالت جميع مراحل العمل على معالجة الصور موجودة من خلال matlap ومن خلال C# أيضاً .
أما الجزء الآخر الخاص بالنظام والشاشات والقيادة الآلية ومعادلات الحركة والربط بالكاميرا من جهة أو الربط بالسيارة من جهة أخرى وعمليات التعديل والتحرير وقواعد البيانات والتقارير وخلافه فقد تمت برمجته باستخدام C# مباشرة .
لقطات وصور من المشروع :


لقطات وصور من البرنامج :


وهذه نسخة من ال Documentation للمشروع يمكن الاطلاع عليها من خلال هذا الرابط :
http://www.4shared.com/file/133227955/d4ea58ba/Final_Documentation.html

مراكز أخرى حققتها جروبات كلية حاسبات ومعلومات حلوان :

http://www.fcih.net/details.asp?id=94

Read more ...