<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>مدونة مادة M150</title>
	<atom:link href="http://aoum150.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://aoum150.wordpress.com</link>
	<description>الجامعة العربية المفتوحة</description>
	<lastBuildDate>Tue, 25 Aug 2009 22:12:10 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>ar</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='aoum150.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/143a5e370716acbf7bb9d0cad655d897?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>مدونة مادة M150</title>
		<link>http://aoum150.wordpress.com</link>
	</image>
			<item>
		<title>سيديات المادة</title>
		<link>http://aoum150.wordpress.com/2009/08/08/course_cds/</link>
		<comments>http://aoum150.wordpress.com/2009/08/08/course_cds/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 09:08:39 +0000</pubDate>
		<dc:creator>المعتصم</dc:creator>
				<category><![CDATA[مواضيع هامة عن المادة]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[M150A]]></category>
		<category><![CDATA[M150B]]></category>
		<category><![CDATA[unit-1]]></category>
		<category><![CDATA[unit-10]]></category>
		<category><![CDATA[unit-11]]></category>
		<category><![CDATA[unit-12]]></category>
		<category><![CDATA[unit-13]]></category>
		<category><![CDATA[unit-14]]></category>
		<category><![CDATA[unit-15]]></category>
		<category><![CDATA[unit-16]]></category>
		<category><![CDATA[unit-2]]></category>
		<category><![CDATA[unit-3]]></category>
		<category><![CDATA[unit-4]]></category>
		<category><![CDATA[unit-5]]></category>
		<category><![CDATA[unit-6]]></category>
		<category><![CDATA[unit-7]]></category>
		<category><![CDATA[unit-8]]></category>
		<category><![CDATA[unit-9]]></category>
		<category><![CDATA[جافاسكربت]]></category>

		<guid isPermaLink="false">http://aoum150.wordpress.com/?p=336</guid>
		<description><![CDATA[
Block 1 (50.4 MB)
Block 2 (5.9 MB)
Block 3 (6.8 MB)
Posted in مواضيع هامة عن المادة Tagged: HTML, M150A, M150B, unit-1, unit-10, unit-11, unit-12, unit-13, unit-14, unit-15, unit-16, unit-2, unit-3, unit-4, unit-5, unit-6, unit-7, unit-8, unit-9, جافاسكربت      <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=336&subd=aoum150&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:center;" dir="ltr"><span id="more-336"></span></p>
<p style="text-align:center;" dir="ltr"><a href="http://dl.getdropbox.com/u/1693311/JavaScript_lessons/Block1.zip">Block 1 (50.4 MB)</a></p>
<p style="text-align:center;" dir="ltr"><a href="http://dl.getdropbox.com/u/1693311/JavaScript_lessons/Block2.zip">Block 2 (5.9 MB)</a></p>
<p style="text-align:center;" dir="ltr"><a href="http://dl.getdropbox.com/u/1693311/JavaScript_lessons/Block3.zip">Block 3 (6.8 MB)</a></p>
Posted in مواضيع هامة عن المادة Tagged: HTML, M150A, M150B, unit-1, unit-10, unit-11, unit-12, unit-13, unit-14, unit-15, unit-16, unit-2, unit-3, unit-4, unit-5, unit-6, unit-7, unit-8, unit-9, جافاسكربت <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aoum150.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aoum150.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aoum150.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aoum150.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aoum150.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aoum150.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aoum150.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aoum150.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aoum150.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aoum150.wordpress.com/336/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=336&subd=aoum150&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://aoum150.wordpress.com/2009/08/08/course_cds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">المعتصم</media:title>
		</media:content>
	</item>
		<item>
		<title>شرح لغة جافاسكربت للمبتدئين</title>
		<link>http://aoum150.wordpress.com/2009/08/08/javascript_lesson/</link>
		<comments>http://aoum150.wordpress.com/2009/08/08/javascript_lesson/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 08:27:55 +0000</pubDate>
		<dc:creator>المعتصم</dc:creator>
				<category><![CDATA[شروحات]]></category>
		<category><![CDATA[Learner]]></category>
		<category><![CDATA[M150A]]></category>
		<category><![CDATA[unit-7]]></category>
		<category><![CDATA[unit-8]]></category>
		<category><![CDATA[جافاسكربت]]></category>

		<guid isPermaLink="false">http://aoum150.wordpress.com/?p=332</guid>
		<description><![CDATA[شرح لغة جافاسكربت للمبتدئين ، كتبه Learner

الشرح على ملف بصيغة pdf
لتحميل البرامج التي تم شرحها
أنصح بقراءة الشرح من ملف الـ pdf لأن تنسيقه أفضل من الشرح الموجود في هذه الصفحة
قائمة المحتويات:

المقدمة
من أساسيات البرمجة: تقييم المعادلات والمقارنات
من أساسيات البرمجة: or , and , not
المتغيرات Variables
من أساسيات البرمجة: if&#8230;else , while , for
جافاسكربت و HTML
بعض الأوامر الشائعة

document.write()
window.prompt()
window.alert()
window.confirm()
Math.round()


كتابة [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=332&subd=aoum150&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:center;">شرح لغة جافاسكربت للمبتدئين ، كتبه Learner</p>
<p style="text-align:center;"><span id="more-332"></span></p>
<p style="text-align:center;"><a href="http://aoum150.files.wordpress.com/2009/08/javascript.pdf">الشرح على ملف بصيغة pdf</a></p>
<p style="text-align:center;"><a title="برامج جافاسكربت" href="http://dl.getdropbox.com/u/1693311/JavaScript_lessons/Javascript_programs.zip">لتحميل البرامج التي تم شرحها</a></p>
<p style="text-align:center;">أنصح بقراءة الشرح من ملف الـ pdf لأن تنسيقه أفضل من الشرح الموجود في هذه الصفحة</p>
<h1><span style="color:#0000ff;"><a name="index">قائمة المحتويات:</a></span></h1>
<ol>
<li><a href="#introduction">المقدمة</a></li>
<li><a href="#comparisons">من أساسيات البرمجة: تقييم المعادلات والمقارنات</a></li>
<li><a href="#orandnot">من أساسيات البرمجة: or , and , not</a></li>
<li><a href="#variables">المتغيرات Variables</a></li>
<li><a href="#selectionrepitition">من أساسيات البرمجة: if&#8230;else , while , for</a></li>
<li><a href="#jsandhtml">جافاسكربت و HTML</a></li>
<li><a href="#commonmethods">بعض الأوامر الشائعة</a>
<ol>
<li style="text-align:right;"><a href="#docwrite">document.write()</a></li>
<li style="text-align:right;"><a href="#winprmpt">window.prompt()</a></li>
<li style="text-align:right;"><a href="#winalrt">window.alert()</a></li>
<li style="text-align:right;"><a href="#wincnfrm">window.confirm()</a></li>
<li style="text-align:right;"><a href="#mathrnd">Math.round()</a></li>
</ol>
</li>
<li><a href="#comments">كتابة التعليقات والملاحظات</a></li>
<li><a href="#example1">البرنامج رقم 1: تصنيف البيض لعدة مقاسات بحسب الوزن</a></li>
<li><a href="#example2">البرنامج رقم 2: لعبة التخمين</a></li>
<li><a href="#example3">البرنامج رقم 3: إيجاد القاسم المشترك الأكبر بين رقمين</a></li>
<li><a href="#string">String methods</a></li>
<li><a href="#arrays">المصفوفات Arrays</a></li>
<li><a href="#functions">الدوال Functions</a>
<ol>
<li><a href="#example4">البرنامج رقم 4: دالّة لتقريب الأرقام إلى خانتين عشرية</a></li>
<li><a href="#example5">البرنامج رقم 5: دالة لحساب المساحة بالمتر المربع</a></li>
</ol>
</li>
<li><a href="#example6">البرنامج رقم 6: حساب متوسط التكاليف الشهرية</a></li>
<li><a href="#htmlgui">HTML <strong>G</strong>raphical <strong>U</strong>ser <strong>I</strong>nterface</a></li>
<li><a href="#example7">البرنامج رقم 7: التحويل من لتر إلى جالون</a></li>
<li><a href="#example8">البرنامج رقم 8: البحث عن رمز الاتصال الدولي لدول العالم</a></li>
</ol>
<p style="margin-bottom:70px;">
<h1><span style="color:#0000ff;"><a name="introduction">1- المقدمة :</a><br />
</span></h1>
<p><span style="color:#0000ff;"><br />
</span></p>
<p>في البداية يجب أن تعلم عزيزي القارئ بأني مبتدئ في عالم البرمجة ولست أستاذاً أو خبيراً في هذه اللغة ، و لذلك ورود الأخطاء محتمل ، فإذا وجدت خطأ أرجو منك إبلاغي وتنبيهي عليه في الموضوع الخاص بالشرح في مدونة المادة ، فكل ماهو موجود في هذا الكتيب الصغير هو مجرد اجتهاد ، إن أصبت فمن الله وحده ، وإن أخطأت فمن نفسي والشيطان.</p>
<p>لغة الجافاسكربت تتطلب فهم ومعرفة اللغة الأساسية لصفحات الانترنت وهي HTML ، فإذا لم تكن لديك خلفية عنها ، أنصحك بعدم إكمال قراءة هذا الملف والتوجه إلى شرح لغة الـ HTML والموجود في هذا الرابط:<br />
http://aoum150.wordpress.com/2009/07/05/html_lesson</p>
<p>البرمجة بمختلف لغاتها تعتمد على التطبيق والتجربة والكتابة بكثرة ، فإذا لم تكن تنوي أن تستكشف وتجرب وتكتب كل حرف بنفسك أنصحك بعدم إضاعة وقتك في تعلم البرمجة ، لأنك لن تتقنها إلا إذا مارستها ، فالقراءة وحدها لن تكفيك. لذلك أنصح بعدم نسخ أي كود موجود في هذا الكتيِّب ، وإنما قم بكتابته بنفسك حرفاً حرفاً حتى تخطئ وتتعلم من خطئك.</p>
<p>لغة جافاسكربت هي لغة برمجة يتم استعمالها لعمل برامج في صفحات الانترنت، أي انها تعمل في صفحة HTML العادية. وفائدتها هي أنها تسمح لنا بإضافة خصائص إضافية على صفحات الانترنت ، مثل إظهار رسالة ترحيب للمستخدم ، أو أخذ كلمة سر أو بيانات المستخدم ، أو تنبيه المستخدم إذا قام بترك حقل فارغ أو أدخل بيانات خاطئة ، يعني باختصار هي تجعل صفحة الانترنت تفاعلية ، بمعنى أنها تصبح تتجاوب مع أفعال وتصرفات المستخدم المختلفة.</p>
<p>لغة جافاسكربت تختلف كلياًّ عن لغة الجافا ولا توجد علاقة بينهم ، ولكن أحياناً يتم استخدام كلا اللغتين في بعض تطبيقات وبرامج الانترنت.</p>
<p>كل لغة برمجة لها قوانين وقواعد لكتابتها تسمى syntax ، إذا لم نتّبع هذه القوانين بشكل صحيح وصارم فإن احتمال عدم عمل البرنامج ، أو عمله بغير الشكل الذي نريده ونتوقعه أمر وارد بشكل كبير ، لذلك معرفة قوانين وقواعد كتابة اللغة من أهم الأساسيات التي يتعلّمها المبرمج في لغات البرمجة.</p>
<p>لغة الجافاسكربت – وإن لم يخب ظني جميع لغات البرمجة المشهورة – تكون حسّاسة بالنسبة للأحرف الكبيرة والصغيرة ، بمعنى أنها ستعامل الكلمات if – IF – If &#8211; iF كأنها أربع كلمات مختلفة ، فيجب التنبه لذلك.</p>
<p>الأخطاء في أي عمل ، وفي البرمجة بشكل خاص واردة بشكل كبير ، فمن لم يخطئ ومن يخاف من الخطأ لن يتعلّم ، فلا يوجد مبرمج لم يتعرّض لأخطاء أثناء البرمجة ، بل إن من أجزاء تعليم البرمجة هو تعليم تصحيح الأخطاء واكتشافها. ولكن في نفس الوقت من لا يستفيد ويتعلّم من أخطائه لن ينجح ، فالمبرمج الناجح هو الذي يتعلّم من أخطائه ويتجاوزها بسرعة ، وكثرة التجارب والتطبيق هي المفتاح لهذا الشيء. و الأخطاء في عالم البرمجة تسمى bugs ، وعملية تصحيحها واكتشافها تسمى debugging.</p>
<p>الجافاسكربت ممكن أن تكون خطيرة ومؤذية لأجهزة الحاسب والمتصفِّحات إذا تمّ استخدامها بشكل سيء ، فمن الممكن على سبيل المثال أن نكتب أوامر تنفيذية على الكمبيوتر الزائر للصفحة تقوم بتخريب أو تعطيل الجهاز أو أحد محتوياته.</p>
<p>في جميع لغات البرمجة ، يتم تنفيذ الأوامر بالترتيب ، بمعنى أن الكمبيوتر سيبدأ بتنفيذ الأمر الموجود في السطر الأول ، ثم السطر الثاني &#8230; وهكذا حتى ينتهي من تنفيذ الأمر الموجود في آخر سطر في البرنامج ، ثم سينتهي.</p>
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<h1><span style="color:#0000ff;"><a name="comparisons">2- من أساسيات البرمجة: تقييم المعادلات والمقارنات</a></span></h1>
<p><span style="color:#0000ff;"><br />
</span></p>
<p>تقييم المعادلات أو المقارنات هو من مهام الكمبيوتر والبرامج الرئيسية ، فمن خلالها يتم عمل البرامج الصغيرة والكبيرة ، على سبيل المثال بعض المواقع التي لاتسمح بزيارة الأشخاص الذين تقل أعمارهم عن 18 سنة تستعمل هذه المقارنة ، فنجدها تطلب من الزوار كتابة تاريخ ميلادهم مثلاً ، ثم تعمل مقارنة بين العمر المدخل ورقم 18 ، فإذا كان العمر المدخل أكبر من 18 ، سيتم نقلهم إلى صفحة الموقع الرئيسية وإذا كان العمر أقل سيتم نقلهم إلى صفحة أخرى تحتوي على رسالة إعتذار على سبيل المثال. هذه العملية تتم بشكل آلي عن طريق البرنامج ، فبمجرد أن أدخلنا إليه بعض البيانات أصبح يستطيع أن يقارن و يقيِّم ثم ينفِّذ النتيجة المناسبة لكل معادلة أو مقارنة.</p>
<p>في الكمبيوتر ، كل حرف أو رمز يكون له قيمة رقمية خاصة تابعة للترميز العالمي ASCII code أو Unicode . فعندما نعمل مقارنات بين أحرف أو رموز أو بين أحرف وأرقام مثلاً ، فإن الكمبيوتر في الواقع يعمل مقارنة بين قيمة هذه الأحرف أو الرموز في ترميز ASCII وليس بالحرف أو الرمز نفسه.<br />
الفرق بين ترميز آسكي ويونيكود هو أن الثاني يحتوي على حروف وأشكال للغات أكثر بكثير من الأول ، فاليونيكود يحتوي على 65536 مابين أرقام وحروف ورموز مختلفة لعشرات اللغات ومن ضمنها العربية ، بينما يحتوي ترميز آسكي على 128 فقط! مابين أحرف وأرقام ورموز.<br />
قيمة أي حرف أو رمز في الترميزين هي نفسها ، لذلك لا داعي للتساؤل عن قيمة حرفٍ أو رمزٍ ما في كلا النوعين.<br />
القيم في ترميز آسكي متسلسلة بشكل ثابت مع تسلسل الأحرف والأرقام والرموز ، وبشكل عام نتائج التقييم في هذا الترميز ستكون كالتالي:</p>
<p style="text-align:center;" dir="ltr">. &lt; 0 &lt; 1 &lt; 2 &lt; &#8230; &lt; 9 &lt; A &lt; B &lt; &#8230; &lt; Z &lt; a &lt; b &lt; &#8230; &lt; z</p>
<h2><span style="color:#993366;">آلية تقييم العمليات الحسابية في الكمبيوتر:</span></h2>
<p>العمليات الحسابية في أجهزة الحاسب يتم تنفيذها حسب قوانين معينة تسمى أولويات التنفيذ على النحو التالي:<br />
<strong>أولاً:</strong> تنفيذ مابين الأقواس.<br />
<strong>ثانياً:</strong> تنفيذ عمليات الضرب والقسمة.<br />
<strong>ثالثاً:</strong> تنفيد عمليات الجمع والطرح.</p>
<ul>
<li>في حالة تشابه العمليات سيتم التنفيذ ابتداءً من اليسار ثم سيتجه لليمين حتى ينتهي.</li>
<li>في بعض لغات البرمجة (الجافاسكربت ليست من ضمنها) سيتم تقييم المعادلات من اليسار لليمين بغض النظر عن نوع العمليات الموجودة.</li>
</ul>
<p>مثال:</p>
<p style="text-align:center;" dir="ltr">2 &#8211; 5 +3 * 6 / (2 +1)</p>
<p>كم تعتقد ستكون نتيجة هذه المعادلة من وجهة نظر الكمبيوتر؟<br />
سنأخذها بالأولويات السابقة ونحلل المعادلة خطوة خطوة ..<br />
أولاً : سنبحث عن الأقواس إن وجدت ونقوم بتنفيذها:</p>
<p style="text-align:center;" dir="ltr">2 – 5 + 3 * 6 / <strong>3</strong></p>
<p>ثانياً : سنبحث عن عمليات الضرب والقسمة وننفذها ابتداءً من اليسار ثم ننتقل لليمين حتى ننتهي:</p>
<p style="text-align:center;" dir="ltr">2 – 5 + <strong>18</strong> / 3</p>
<p style="text-align:center;" dir="ltr">2 – 5 + <strong>6</strong></p>
<p>ثالثاً : سنبحث عن عمليات الجمع والطرح وننفذها من اليسار لليمين:</p>
<p style="text-align:center;" dir="ltr"><strong>-3</strong> + 6<br />
<strong>3</strong></p>
<p style="text-align:right;">طيب بما أننا عرفنا الآن آلية تقييم المعادلات سننتقل لمرحلة المقارنات ..<br />
نتائج المقارنات دائماً إما أن تكون المقارنة صحيحة أو خاطئة لايوجد خيار ثالث، سأقسم المقارنات إلى ثلاثة أقسام:</p>
<p style="text-align:right;">
<p style="text-align:right;">
<h3><span style="color:#993366;">1- مقارنة أرقام بأرقام:</span></h3>
<p style="text-align:right;">مقارنة الأرقام هي الأسهل، وهي تعتمد على أولويات تنفيذ العمليات الحسابية التي شرحتها قبل قليل.</p>
<p>مثال: قيم العبارة التالية:</p>
<p style="text-align:center;" dir="ltr">15 – (3 + 3) * 2 &lt; 3 * 3 + 1</p>
<p style="text-align:right;">
<p style="text-align:right;">سنحلل كل طرف ثم نقيّم الناتج النهائي للطرفين هل هو صحيح أم خاطئ:</p>
<p style="text-align:center;" dir="ltr">15 – (3 + 3) * 2 &lt; 3 * 3 + 1<br />
15 – <strong>6</strong> * 2 &lt; <strong>9</strong> + 1<br />
15 – <strong>12</strong> &lt; <strong>10</strong><br />
<strong>3</strong> &lt; 10</p>
<p style="text-align:right;">
<p style="text-align:right;">العبارة صحيحة لأن 3 أصغر من 10 !</p>
<p style="text-align:right;">
<p style="text-align:right;">
<h3><span style="color:#993366;">2- مقارنة أحرف بأحرف:</span></h3>
<p style="text-align:right;">كما ذكرت سابقاً ، الكمبيوتر يتعامل مع الأحرف والرموز بقيمتها التابعة لترميز ASCII ، لذلك عندما نعمل مقارنة أرقام مع أحرف سيتم مقارنة قيمهم التابعة لهذا الترميز ، وكما ذكرت في المقدِّمة ، قاعدة هذا الترميز هي كالتالي:</p>
<p style="text-align:center;" dir="ltr">
<p style="text-align:center;" dir="ltr">. &lt; 0 &lt; 1 &lt; 2 &lt; &#8230; &lt; 9 &lt; A &lt; B &lt; &#8230; &lt; Z &lt; a &lt; b &lt; &#8230; &lt; z</p>
<p style="text-align:right;">وعلى أساسها بإمكاننا عمل أي مقارنة ، سواء كانت بين أحرف أو بين أحرف وأرقام أو بين أرقام ورموز وغيره ، ولكن يجب التنبه بأن الأرقام التي أتحدث عنها يجب أن توضع بين العلامتين &#8216; &#8216; حتى تنطبق عليها القاعدة التي في الأعلى.<br />
وفي مقارنة الكلمات سيتم عمل المقارنة على أول حرف في الطرفين، وإن كانا متشابهين سيتم مقارنة الحرفين التاليين لهما وهكذا حتى يستطيع الحصول على نتيجة.</p>
<p>مثال: قيم العبارة التالية:</p>
<p style="text-align:center;" dir="ltr">&#8216;elephant&#8217; &lt; &#8216;mouse&#8217;</p>
<p style="text-align:right;">
<p style="text-align:right;">المقارنة ستتم بين الحرفين e و m ..<br />
وفي ترميز آسكي ، قيمة e أقل من قيمة m ، لذلك العبارة صحيحة !</p>
<p>طيب لو غيرنا أول حرف من إحدى الكلمات وجعلناه كبيراً:</p>
<p style="text-align:center;" dir="ltr">&#8216;elephant&#8217; &lt; &#8216;Mouse&#8217;</p>
<p style="text-align:right;">
<p style="text-align:right;">المقارنة ستكون بين e و M ..<br />
النتيجة هنا خاطئة ، لأن حرف M الكبير قيمته أكبر من قيمة حرف e الصغير.</p>
<p>لو كان أول حرفين في الطرفين متشابهين ، ستتم المقارنة بين الحرفين الذين بعدهم ، مثال:</p>
<p style="text-align:center;" dir="ltr">&#8216;cat&#8217; &lt; &#8216;cave&#8217;</p>
<p style="text-align:right;">
<p style="text-align:right;">هنا الحرفين الأولين في الكلمتين متشابهين ، لذلك ستتم المقارنة بين t و v ..<br />
والعبارة صحيحة لأن t أصغر من v !</p>
<p>أحب التنويه هنا بأن العلامة &#8216; التي تحيط بالكلمات ، تدلّ على أن المقارنة بين string و string آخر ، وسيتم توضيحها لاحقاً في قسم المتغيّرات Variables.</p>
<p style="text-align:right;">
<p style="text-align:right;">
<h3><span style="color:#993366;">3- مقارنة أرقام بأحرف أو العكس:</span></h3>
<p style="text-align:right;">تعتمد على نفس المبدأ والقاعدة، مثال:</p>
<p style="text-align:center;" dir="ltr">&#8216;7&#8242; &lt; &#8216;a&#8217;</p>
<p style="text-align:right;">
<p style="text-align:right;">النتيجة صحيحة ، لأن قيمة الرقم 7 أقل من قيمة الحرف a.</p>
<p>مثال آخر:</p>
<p style="text-align:center;" dir="ltr">7 == &#8216;7&#8242;</p>
<p style="text-align:right;">
<p style="text-align:right;">أحب أذكركم هنا بأن الكمبيوتر يتعامل مع قيم الأرقام والأحرف وليس بشكلها ، والآن في هذا المثال يوجد رقم 7 في طرف وفي الطرف الثاني 7 على شكل string لأنها بين قوسين.<br />
وفي كلا الحالتين ، سيقوم الكمبيوتر بتحويل الطرفين إلى قيمتهم الفعلية ثم سيقارن بين القيم ، لذلك المقارنة صحيحة هنا.</p>
<p style="text-align:right;">نقطة أخيرة بخصوص مقارنة الأرقام والأحرف، المقارنات التالية:</p>
<p style="text-align:center;" dir="ltr">7 &lt; &#8216;a&#8217;<br />
7 &gt; &#8216;a&#8217;<br />
7 == &#8216;a&#8217;<br />
!كلها خاطئة</p>
<p style="text-align:right;">بصراحة لا أعلم مالسبب بالضبط ، ولكني جربتها شخصياً وظهرت لي نتائجها كلها خطأ ، أعتقد والله أعلم بأن السبب هو أنه لا يمكننا مقارنة رقم بـ string مع أننا قمنا بذلك في المثال الأخير ، ولكن يبدو أنه كان حالةً استثنائية لأن الطرفين يحتوون على أرقام ، لأننا لو جربنا المقارنة التالية 7 &lt; &#8216;9&#8242; سنجد النتيجة صحيحة . هذه مجرد توقعاتي الشخصية وهي قابلة للخطأ أكثر من الصواب ، لكن أحببت أن أوضح وجهة نظري في هذا الموضوع ، وإن شاء الله لن نحتاج في منهجنا لمثل هذه التعقيدات الزائدة ، لكن تم ذكر هذه النقطة للتوضيح.</p>
<p>أحب أن أذكر هنا بأن علامة أكبر من أو يساوي في لغات البرمجة تكتب علامة يساوي في اليمين وعلى يسارها أكبر من متصلين ببعض، مثلاً لو أردنا كتابة 3 ≥ 2 نكتبها على الشكل التالي في البرنامج:</p>
<p style="text-align:center;" dir="ltr">3 &gt;= 2</p>
<p style="text-align:right;">ولو أردنا كتابة 5 ≥ 3 :</p>
<p style="text-align:center;" dir="ltr">5 &gt;= 3</p>
<p style="text-align:right;">واذا أردنا كتابة 5 تساوي 5 نكتبها على الشكل التالي:</p>
<p style="text-align:center;">5 == 5</p>
<p style="text-align:right;">علامتين يساوي وليست واحدة.</p>
<p>وإذا أردنا كتابة 5 لاتساوي 4 نكتبها على الشكل التالي:</p>
<p style="text-align:center;" dir="ltr">5 != 4</p>
<p style="text-align:right;">علامة التعجب تفيد النفي ، أي أنه لايساوي.</p>
<p>وللتلخيص هذا جدول لإشارات المقارنة مع معانيها:</p>
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/comparison_operators.png"><img class="aligncenter size-full wp-image-299" title="إشارات المقارنة" src="http://aoum150.files.wordpress.com/2009/07/comparison_operators.png?w=480&#038;h=149" alt="إشارات المقارنة" width="480" height="149" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">وفي الجدول التالي توضيح لإشارات العمليات الحسابية بافتراض أن y = 5 و x = 10 :</p>
<p style="text-align:right;">
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/arithmetic_expressions.png"><img class="aligncenter size-full wp-image-300" title="الإشارات الحسابية في البرمجة" src="http://aoum150.files.wordpress.com/2009/07/arithmetic_expressions.png?w=480&#038;h=129" alt="الإشارات الحسابية في البرمجة" width="480" height="129" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">بالنسبة لإشارة باقي القسمة % فهي غير مشروحة في المنهج ولكنها مهمة جداً في عالم البرمجة، وللأسف جاءت لنا في الاختبار النهائي ، ولذلك سأشرحها احتياطاًً.<br />
سأستخدم الأمثلة مباشرةً لتوضيحها وشرحها ..</p>
<p style="text-align:center;" dir="ltr">21 % 7 = ?</p>
<p style="text-align:right;">هي تعتمد على القسمة أولاً ..<br />
يعني نقسم 21 على 7 والنتيجة رقم 3<br />
لذلك لايوجد باقي للقسمة فتكون نتيجتها 0</p>
<p style="text-align:center;" dir="ltr">21%7 = 0</p>
<p style="text-align:center;" dir="ltr">20 % 3 = ?</p>
<p style="text-align:right;">هنا نقسم 20 على 3 والنتيجة 6.67<br />
لكن هنا لانريد عدداً غير صحيح ، لذلك سنأخذ الرقم 6 فقط<br />
3 ضرب 6 تساوي 18<br />
معناها باقي قسمة 20 على 3 يساوي 2</p>
<p style="text-align:center;" dir="ltr">20%3 = 2</p>
<p style="text-align:center;" dir="ltr">10%3 = ?</p>
<p style="text-align:right;">نفس الشي نقسم 10 على 3 .. النتيجة ستكون 3.33<br />
نأخذ 3 بدون الكسر ونضربها في 3 ، وبعدها نحسب الفرق بين النتيجة وبين رقم 10 وستكون هي باقي القسمة<br />
يعني باقي القسمة ستكون: (3*3) &#8211; 10</p>
<p style="text-align:center;" dir="ltr">10%3 = 1</p>
<p style="text-align:right;">لو كانت قسمة الرقمين على بعض عدد صحيح ستكون نتيجة باقي القسمة صفر..</p>
<p style="text-align:center;" dir="ltr">20%5 = ?</p>
<p style="text-align:right;">نقسم 20 على 5 ، والنتيجة ستكون 4 بدون كسور وأرقام عشرية. لذلك لن يكون هناك باقي للقسمة.</p>
<p style="text-align:center;" dir="ltr">20%5 = 0</p>
<p style="text-align:right;">مثال أخير:</p>
<p style="text-align:center;" dir="ltr">12%7 = ?</p>
<p style="text-align:right;">نقسم 12 على 7 والنتيجة هي 1.71 تقريباً .. نأخذ 1 ونترك الكسر ، ثم نضربه في 7 ، ونحسب الفرق بين النتيجة وبين رقم 12 . الفرق هو 5 .. لذلك :</p>
<p style="text-align:center;" dir="ltr">12 % 7 = 5</p>
<p style="text-align:center;" dir="ltr">
<p style="text-align:right;">
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<h1><span style="color:#0000ff;"><a name="orandnot">3- من أساسيات البرمجة: or , and , not :</a></span></h1>
<p style="text-align:right;">هذه العبارات تستخدم لربط عدة مقارنات مع بعض وهي مفيدة جداً وأعتقد بأنه لايوجد برنامج يخلو منها.</p>
<h2><span style="color:#993366;">1- or :</span></h2>
<p style="text-align:right;">تكتب or في البرمجة على شكل || ، والزر الخاص بهذا الرمز موجود في لوحة المفاتيح على يسار زر الإدخال (إنتر) ويجب الضغط في نفس الوقت على زر shift.</p>
<p>هذه الأداة وظيفتها تخيير المتصفح بين مقارنتين أو أكثر، فلو كانت إحداهما صحيحة ستكون النتيجة النهائية صحيحة، أي أنه لن تكون النتيجة النهائية خاطئة &#8211; إذا كانت جميع العلاقات مربوطة بهذه الأداة &#8211; إلا اذا كانت كل المقارنات نتيجتها خاطئة.</p>
<p>في الجدول التالي توضيح أكثر ، بافتراض وجود مقارنتين ، وسنرمز لهم بـ A , B :</p>
<p style="text-align:right;">
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/a_or_b.png"><img class="aligncenter size-full wp-image-301" title="A_or_B" src="http://aoum150.files.wordpress.com/2009/07/a_or_b.png?w=377&#038;h=127" alt="A_or_B" width="377" height="127" /></a></p>
<p style="text-align:right;">معنا السطر الأول كالتالي: إذا كانت المقارنة الأولى صحيحة أو المقارنة الثانية صحيحة فالنتيجة النهائية صحيحة.<br />
معنا السطر الثاني كالتالي: إذا كانت المقارنة الأولى صحيحة أو المقارنة الثانية خاطئة فالنتيجة النهائية صحيحة.<br />
وهكذا لبقية الأسطر ..</p>
<p style="text-align:right;">
<h2><span style="color:#993366;">2- and :</span></h2>
<p style="text-align:right;">تكتب and على شكل &amp;&amp; ، وهي تربط بين أكثر من معادلة أو مقارنة ، ونتيجتها لا تكون صحيحة ، إلّا إذا كانت جميع المقارنات – التي تربط بينها – صحيحة. وللتوضيح أكثر انظر للجدول التالي:</p>
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/a_and_b.png"><img class="aligncenter size-full wp-image-302" title="A_and_B" src="http://aoum150.files.wordpress.com/2009/07/a_and_b.png?w=377&#038;h=128" alt="A_and_B" width="377" height="128" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">معنى السطر الثاني: إذا كانت المقارنة الأولى صحيحة و والمقارنة الثانية خاطئة فالنتيجة النهائية خاطئة.<br />
الخ &#8230;</p>
<p style="text-align:right;">
<h2><span style="color:#993366;">3- not :</span></h2>
<p style="text-align:right;">تكتب في البرمجة على شكل علامة تعجب ! وتفيد بعكس نتيجة المقارنة ، أي أنه إذا كانت نتيجة المقارنة صحيحة فالأمر هذا يعكس النتيجة إلى خاطئة ، كما في الجدول:</p>
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/not_a.png"><img class="aligncenter size-full wp-image-303" title="not_A" src="http://aoum150.files.wordpress.com/2009/07/not_a.png?w=252&#038;h=76" alt="not_A" width="252" height="76" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">في الجدول التالي ، تطبيق لجميع الأوامر: or || , ! not  ,  &amp;&amp; and :</p>
<p style="text-align:right;">
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/or_and_not.png"><img class="aligncenter size-full wp-image-304" title="or_and_not" src="http://aoum150.files.wordpress.com/2009/07/or_and_not.png?w=480&#038;h=104" alt="or_and_not" width="480" height="104" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">مثال:</p>
<p>سؤال أتى لنا في الاختبار النهائي ، يقول أثبت عن طريق جداول Truth tables أن:</p>
<p style="text-align:center;" dir="ltr">
<p style="text-align:center;">NOT (A AND B) = NOT A OR NOT B</p>
<p style="text-align:right;">أو ممكن تكتب بالشكل التالي:</p>
<p style="text-align:center;" dir="ltr">
<p style="text-align:center;" dir="ltr">! (A &amp;&amp; B) = !A || !B</p>
<p style="text-align:right;">طريقة الحل بسيطة ان شاء الله اذا كنا فاهمين طريقة عمل كل أمر.<br />
أول شيء ، لحل مثل هذه الأسئلة ، سنقوم بعمل عمودين ثابتين مهما كانت المعادلات المطلوب إثباتها ، كل عمود خاص بمقارنة ، وسنضع تحتها جميع الاحتمالات لها:</p>
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/a_b.png"><img class="alignleft size-full wp-image-305" title="A_B" src="http://aoum150.files.wordpress.com/2009/07/a_b.png?w=107&#038;h=130" alt="A_B" width="107" height="130" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">الذي عملته هنا ثابت لحل أي مسألة من هذا النوع ، حتَّى نشمل جميع الاحتمالات للمعادلات.<br />
طيب الآن نرجع للمعادلة التي في السؤال ، ونحلل كل جزء فيها ..<br />
الجزء الأيسر: حتّى نصل له لابد من إيجاد أجزائه الصغيرة أولاً ..</p>
<p style="text-align:center;" dir="ltr">! (A &amp;&amp; B)</p>
<p style="text-align:right;">أول شيء لازم نحسب نتائج A&amp;&amp;B حتّى نستطيع حساب نتائج (A&amp;&amp;B)! ، لذلك سنضيف عمودين على الجدول ، كل عمود خاص بواحدة ، وسنضع النتائج في صفوفها كما تعلّمنا:</p>
<p style="text-align:right;">
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/a_and_b_not_a_and_b1.png"><img class="alignleft size-full wp-image-307" title="A_and_B_not_A_and_B" src="http://aoum150.files.wordpress.com/2009/07/a_and_b_not_a_and_b1.png?w=299&#038;h=130" alt="A_and_B_not_A_and_B" width="299" height="130" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">كذا نكون انتهينا من الجزء الأيسر، فننتقل للجزء الأيمن ونحلله بنفس الطريقة ..</p>
<p style="text-align:center;" dir="ltr">!A || !B</p>
<p style="text-align:right;">أول شيء ، لازم نحسب نتائج A! و B! حتّى نستطيع حساب نتائج A||!B! ..<br />
فالآن سنقوم بإضافة ثلاثة أعمدة للجدول ، عمود لـ A! و عمود لـ B! وعمود لـ  A || !B! :</p>
<p style="text-align:right;">
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/nota_and_notb.png"><img class="alignleft size-full wp-image-308" title="notA_and_notB" src="http://aoum150.files.wordpress.com/2009/07/nota_and_notb.png?w=480&#038;h=118" alt="notA_and_notB" width="480" height="118" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">وبهذا نكون أثبتنا أن الطرفين يتساوون في جميع الحالات ، وهذا الجدول هو الحل للسؤال.</p>
<h3><span style="color:#993366;">قاعدة:</span></h3>
<p style="text-align:right;">دائماً يتم تنفيذ ! قبل &amp;&amp; أو || ، مثل الجزء الأيمن في المثال A || !B! . لكن إذا كانت &amp;&amp; أو || داخل أقواس مثل الجزء الأيسر في المثال (A &amp;&amp; B)! ، نقوم بتنفيذ مابداخل القوس أولاً.</p>
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<h1><span style="color:#0000ff;"><a name="variables">4- المتغيرات Variables :</a></span></h1>
<p><span style="color:#0000ff;"><br />
</span></p>
<p style="text-align:right;">المتغيِّر هو معرِّف له اسم وله نوع معيّن (يحددهما المبرمج) ، هذا المتغيِّر يرتبط بقيمة معينة مخزنة في ذاكرة الحاسب ، هذه المتغيرات يمكن أن تكون قيمتها الموجودة في الذاكرة عبارة عن أرقام أو كلمات أو جُمل ، فمن الممكن أن تكون مثلاً تكاليف مالية ، أو أسماء طلّاب ، أو درجات طلّاب ، أو أرقام هواتف ، أو عناوين ، أو أي شيء آخر ممكن أن يفيدنا في تحقيق الهدف من البرنامج. وسميَّت متغيرات ، لأننا نستطيع تغيير قيمها في أثناء عمل البرنامج.</p>
<p>في الجافا سكربت ، كلُّ المتغيرات باختلاف أنواعها المشروحة في المنهج تكون من نوع واحد – بعكس باقي لغات البرمجة – ولكن يوجد شيء بسيط يجب الانتباه له ، وهو إذا أردنا أن نتعامل مع جُمل أو كلمات أو أرقام سرية أو أي شيء لا يصلح أو لانريد استعماله في عمليات الحساب الرياضية (مثل الجمع ، الضرب .. الخ) يجب علينا تمييزه عن الأرقام عن طريق وضعه بين علامات &#8216;التنصيص&#8217; عند تعريفه ، وهو يسمى في البرمجة String.</p>
<p>فالمتغير له اسم وقيمة ، فمثلاً من الممكن أن يكون لدينا متغيِّر اسمه userName وقيمته هي &#8216;Learner&#8217; ، أو يكون اسمه discount وتكون قيمته 0.20 ، أو يكون اسمه studentGrade وتكون قيمته 95 ، لاحظوا بأن القيمة الأولى وضعتها بين علامتي &#8216;تنصيص&#8217; لأني أريد التعامل معها على شكل string ، أو بمعنى آخر لا أريد أن أعدِّل على هذه القيمة أو أستعملها في المعادلات الرياضية ، ولكن القيمتين الثانية والثالثة جعلتها وحيدة بدون علامات &#8216;التنصيص&#8217; لأني أريد أن أستخدم هذه الأرقام في معادلات رياضية مختلفة ، فمثلاً أريد من البرنامج أن يقوم بمقارنة درجة الطالب حتى يقوم بوضع معدَّل مكانها حسب القوانين التي وضعتها في برنامج ، وبالنسبة لسعر الخصم ، أريد أن يتم ضربه في الأسعار الأصلية ومن ثم يعرض لي السعر بعد الخصم.</p>
<p>المتغيرات يتم عملها في مرحلتين ، مرحلة الإعلان <strong>declare</strong> ، ومرحلة الإنشاء أو البدء <strong>initialize</strong>.<br />
<strong>1- المرحلة الأولى declare :</strong> نقوم بإخبار الكمبيوتر عن طريق كتابة أمر معيَّن بأننا قمنا بعمل متغيِّر ونريده أن يحجز مكان له في ذاكرة الحاسب. في لغات البرمجة الأخرى تعتمد المساحة التي حجزها الكمبيوتر لهذا المتغيِّر على نوع المتغيِّر ، فكما قلت في اللغات الأخرى توجد عدّة أنواع للمتغيرات.<br />
<strong>2- المرحلة الثانية initialize :</strong> سنقوم هنا بوضع قيمة للمتغيِّر الذي عملناه في المرحلة الأولى ، وسيقوم البرنامج بوضع هذه القيمة في مكان الذاكرة الذي تم حجزه في المرحلة الأولى.</p>
<p>تعريف المتغيرات أو الإعلان عنها في الجافاسكربت يكون ببساطة عن طريق كتابة var ثم اسم المتغيِّر ، فلو أردنا تعريف متغير باسم stundentGrade نكتبه كالتالي:</p>
<p style="text-align:center;" dir="ltr">var studentGrade;</p>
<p style="text-align:right;">ولو كنّا نريد تعريف متغيّر من نوع string باسم studentName سيكون الأمر كالتالي:</p>
<p style="text-align:center;" dir="ltr">
<p style="text-align:center;" dir="ltr">var studentName = new string();</p>
<p style="text-align:right;">نلاحظ بأن الإعلان عن متغيِّر من نوع string يتكون من جزأين ، الجزء الذي بعد علامة اليساوي يخبر البرنامج بأن هذا المتغير سيكون من نوع string.</p>
<p>وأيضاً نلاحظ وجود علامة فاصلة منقوطة <strong>;</strong> بعد نهاية كل أمر ، هذه الفاصلة ضرورية جداً في كل أوامر البرنامج ، لأن البرنامج عن طريقها يتعرف على بداية ونهاية كل أمر برمجي ، إذا لم تكن موجودة من الممكن أن يعمل البرنامج بشكل عادي ، ولكن غالباً لن يعمل ، لأنه قام بوصل أمرين برمجيين مع بعض.</p>
<p>نستطيع أن نقوم بالإعلان عن أكثر من متغيّر في نفس الأمر ، مثل:</p>
<p style="text-align:center;" dir="ltr">var studentName, studentGrade, studentSection;</p>
<p style="text-align:right;">المرحلة الثانية وهي إنشاء المتغيِّر ، تكون عن طريق وضع قيمة للمتغيِّر باستخدام علامة يساوي ، مثل:</p>
<p style="text-align:center;" dir="ltr">studentGrade = 95;</p>
<p style="text-align:right;">وللمتغيرات من نوع string ستكون كالتالي:</p>
<p style="text-align:center;" dir="ltr">studentName = &#8216;Learner&#8217;;</p>
<p style="text-align:right;">علامة التنصيص كما ذكرت ، تبيِّن لنا وللبرنامج بأن هذا المتغير هو string.</p>
<p>قيم المتغيرات ، ممكن أن تكون قيم لمتغيرات أخرى ، مثلاً لو قمنا بتعريف متغير في بداية البرنامج باسم grade وأعطيناه قيمة 92 ، ومن ثم قمنا بتعريف متغير جديد وسميناه studentGrade ، إذا أردنا أن نجعل قيمة المتغير الثاني تساوي قيمة المتغير الأول ، نكتبها كالتالي:</p>
<p style="text-align:center;" dir="ltr">studentGrade = grade;</p>
<p style="text-align:right;">وستكون الآن قيمة المتغير الثاني تساوي 92 ، ونفس الكلام ينطبق على المتغيِّرات من نوع string.</p>
<p>يمكننا اختصار مرحلتي الإعلان والإنشاء – وهذا هو المتعارف عليه لدى المبرمجين – كالتالي:</p>
<p style="text-align:center;" dir="ltr">var studentGrade = 95;<br />
var studentName = &#8216;Learner&#8217;;</p>
<p style="text-align:right;">نلاحظ بأن الفرق الوحيد الذي يميز المتغيرات من نوع string عن باقي المتغيرات هو علامتي &#8216;التنصيص&#8217; فقط.</p>
<p style="text-align:right;">
<p style="text-align:right;">
<h2><span style="color:#993366;">شروط و قوانين تسمية المتغيرات:</span></h2>
<p style="text-align:right;">توجد قوانين وشروط لكتابة أسماء المتغيرات ، تجاوز هذه الشروط ممكن أن يمنع البرنامج من العمل بشكل صحيح ، ومن الممكن أن لا يؤثر على عمله ، ولكن اتِّباع الشروط هو شيء مفضَّل لمن يريد الاحتراف في البرمجة ، لأنه سيجعلك تتواصل مع المبرمجين الآخرين بشكل أفضل ، وسيجعل برامج أسهل للفهم للمبرمجين الذين سيقرأون الكود.</p>
<p>هذه الشروط خاصَّة بلغة الجافاسكربت ، وهي في الغالب تتشابه مع باقي لغات البرمجة المختلفة.</p>
<ul>
<li>الحرف الأول: يجب أن يكون حرف كبير أو صغير أو علامة underscore _ أو رمز الدولار $. ومن المفضل أن لايكون الحرف الأول حرف كبير.</li>
<li>بقية الأحرف: يجب أن تكون حرف كبير أو صغير أو علامة underscore _ أو رمز الدولار $ بالإضافة إلى إمكانية استعمال الأرقام.</li>
<li>إذا كان الاسم يتكون من أكثر من كلمة ، لاتستعمل المسافات أبداً ، واجعل جميع أحرف الكلمات صغيرة باستثناء الحرف الأول من الكلمة الثانية والثالثة والرابعة .. الخ ، مثل: studentGrade ، schoolStudentGrade ، carModelSerialNumber</li>
<li>أو يمكنك فصل الكلمات عن بعض بعلامة underscore _ إذا أردت.</li>
<li>يجب تسمية المتغيرات بأسماء تدلّ على فائدة المتغيّر ، بمعنى إذا أردت أن تعمل متغير ليحمل اسم مستخدم ، اجعل اسمه userName ، ولا تقم بتسميته u1 مثلاً أو un ، لأنك إذا أردت مراجعة الكود بعد زمن ، ستجد صعوبة في معرفة فائدة هذا المتغير إذا لم تقم بتسميته بشكل صحيح وواضح.</li>
<li>يجب أن تتأكد من أن الاسم لايعتبر كلمة محجوزة في الجافاسكربت (reserved word). وللاطلاع على الكلمات المحجوزة في الجافاسكربت شاهد <a title="الكلمات المحجوزة في جافاسكربت" href="http://www.javascriptkit.com/jsref/reserved.shtml">هذه الصفحة</a>.</li>
</ul>
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<h1><span style="color:#0000ff;"><a name="selectionrepitition">5- من أساسيات البرمجة: if..else , while , for :</a></span></h1>
<p>في البرمجة يوجد نوعين من الأوامر الهامة:</p>
<h3><span style="color:#008000;">1- أوامر التكرار مثل for, while :</span></h3>
<p>ومهمتها هي أن تقوم بتكرار عملية معينة حتى ينطبق شرط معين (نحدده نحن) ويتوقف الأمر عن التكرار، طبعاً توجد أوامر تكرار أخرى ، لكن في المنهج لم يتم شرحها لذلك سأكتفي بما هو موجود في منهج المادة.</p>
<h3><span style="color:#008000;">2- أوامر الشرط أو الاختيار مثل if&#8230;else :</span></h3>
<p>هذا هو الأمر الوحيد المشروح في المنهج بما يتعلق بأوامر الاختيار وهو كما يتبين من اسمه ، يفيد التخيير ، أي نجعل البرنامج عن طريق هذا الأمر يقوم بالاختيار بين عدة بدائل أو حالات مختلفة.</p>
<h2><span style="color:#993366;">1- for :</span></h2>
<p>يتكون هذا الأمر من ثلاثة نقاط أساسية يجب أن يحتوي عليها:</p>
<ol>
<li>تعريف المتغير وتعيين قيمة له ، هذا المتغير سنجعله يتحكم بعدد مرات تكرار الأوامر الموجودة في محتوى أمر for.</li>
<li>مقارنة أو معادلة ، إذا كانت قيمتها صحيحة سيتم تنفيذ الأوامر الموجودة في محتوى for ، واذا أصبحت خاطئة سيتوقف الأمر عن التكرار. طبعاً هذه المقارنة يجب أن تحتوي على المتغير الذي قمنا بتعريفه حتى نتمكن من التحكم بعدد مرات التكرار. أعرف بأن الأمر غير واضح الآن ولكن تابعوا معي وسيتضح بإذن الله،</li>
<li>كتابة معادلة لتغيير قيمة المتغير الذي عرفناه في الجزء الأول، هذه المعادلة سيتم تطبيقها بعد نهاية كل دورة تكرار وفائدتها هي انها ستزيد مثلاً من قيمة المتغير في كل مرة حتى نستطيع أن نجعل قيمة المقارنة (الموجودة في الجزء الثاني) خاطئة لنوقف عملية التكرار.</li>
</ol>
<p>لو أردنا عمل برنامج يكتب رمز $ عشر مرات في سطر واحد في المتصفح ستكون طريقة كتابة هذا الأمر كالتالي:<br />
أولاً : سنكتب الجزء الأول وهو إعلان وإنشاء المتغير – الذي سيتحكم بعدد مرات تكرار أمر الكتابة &#8211; مع قيمة يبدأ منها العد كالتالي:</p>
<p style="text-align:center;" dir="ltr">var count = 1</p>
<p>ثانياً : سنكتب معادلة أو مقارنة لإيقاف أمر التكرار بعدما تتم كتابة الرمز عشر مرات:</p>
<p style="text-align:center;" dir="ltr">count &lt;= 10</p>
<p><span style="color:#808080;">لماذا جعلناها أصغر من أو يساوي؟<br />
افترض بأننا وضعناها count = 10 .. هذه المقارنة ستكون خاطئة منذ بداية البرنامج لأن قيمة المتغير في البداية ستكون 1.<br />
افترض بأننا وضعناها count &gt; 10 .. هذه المقارنة ستكون خاطئة منذ بداية البرنامج لأن قيمة المتغير في البداية ستكون 1.<br />
افترض بأننا وضعناها count &lt; 10 .. هذه المقارنة ستكون صحيحة إلى أن تصبح قيمة count تساوي 9 وبعدها ستكون المقارنة خاطئة ، أي أن التكرار سيكون 9 مرات فقط ، ونحن نريده أن يتكرر 10 مرات.</span></p>
<p>ثالثاً : سنكتب معادلة لزيادة قيمة المتغير بواحد:</p>
<p style="text-align:center;" dir="ltr">count = count + 1</p>
<p style="text-align:center;">ويمكننا كتابتها أيضاً هكذا:<br />
count += 1 أو ++count</p>
<p>وطريقة الكتابة الأكثر استعمالاً في عالم البرمجة هي ++count .<br />
هذه المعادلة ستزيد من قيمة المتغير برقم واحد بعد تنفيذ كل عملية (كتابة رمز $) حتى تصبح قيمة المتغير 11 ، وسيتوقف بعدها أمر التكرار لأن الشرط والمقارنة ستصبح خاطئة.</p>
<p>طيب الآن سنكتب أمر لكتابة الرمز $ (هذا الأمر غير صحيح ولكنه للتوضيح فقط) :</p>
<p style="text-align:center;" dir="ltr">write $;</p>
<p>طيب الآن نجمع الأجزاء السابقة مع بعض:</p>
<p style="text-align:left;" dir="ltr">for (<span style="color:#ff0000;">var count=1</span>; <span style="color:#0000ff;">count&lt;=10</span>; <span style="color:#339966;">count++</span>)<br />
<span style="color:#993366;">write $;</span></p>
<p>طريقة تنفيذ هذا الأمر ستكون كالتالي:<br />
سيقوم البرنامج بالذهاب <span style="color:#ff0000;">للجزء الأول</span> ثم سينتقل <span style="color:#0000ff;">للجزء الثاني</span> وإذا كانت نتيجة المقارنة صحيحة سينتقل إلى <span style="color:#993366;">الأمر الذي نريد تنفيذه (المحتوى)</span>. ثم سينتقل <span style="color:#339966;">للجزء الثالث</span> ليزيد قيمة المتغيّر count ، ثم سيعود <span style="color:#0000ff;">للجزء الثاني</span> ، وهكذا &#8230;</p>
<p>وإذا كانت نتيجة المقارنة خاطئة لن يتم تنفيذ الأمر وسيتم انهاء البرنامج ، أو الانتقال لأمر آخر إذا كان البرنامج يحتوي على أوامر أخرى.<br />
طبعاً الأجزاء الثلاثة التي يتكوّن منها أمر for تفصل بينها فاصلة منقوطة <strong>;</strong> ويكونون جميعهم في داخل (قوسين) .<br />
نقطة أخيرة.. الأمر أو الأوامر التي نريد تنفيذها في داخل أمر التكرار يجب أن نضعها بين قوسين <strong>{}</strong> لأنها تبين للبرنامج أين يبدأ محتوى for أو while أو if وأين ينتهي، يعني للمثال الذي كتبته ، المفروض نكتبه بالشكل التالي:</p>
<p style="text-align:left;" dir="ltr">for (<span style="color:#ff0000;">var count=1</span> ; <span style="color:#0000ff;">count&lt;=10</span> ; <span style="color:#339966;">count++</span>)<br />
{<br />
<span style="color:#993366;">write $;</span><br />
}</p>
<p>للتلخيص:<br />
<span style="color:#ff0000;">الجزء الأول</span> سيتم تنفيذة أول مايبدأ الأمر ومن ثم لن يعود له البرنامج مرة أخرى.<br />
ثم سيبدأ البرنامج بعمل دورة تبدأ من <span style="color:#0000ff;">الجزء الثاني</span> ثم <span style="color:#993366;">المحتوى</span> ثم <span style="color:#339966;">الجزء الثالث</span> ..<br />
<span style="color:#0000ff;">الجزء الثاني</span> &gt;&gt; <span style="color:#993366;">المحتوى</span> &gt;&gt; <span style="color:#339966;">الجزء الثالث</span><br />
<span style="color:#0000ff;">الجزء الثاني</span> &gt;&gt; <span style="color:#993366;">المحتوى</span> &gt;&gt; <span style="color:#339966;">الجزء الثالث</span><br />
&#8230;<br />
إلى أن يصبح الشرط الموجود في الجزء الثاني غير صحيح ، فيتوقف عندها أمر التكرار.</p>
<p>طريقة عمل الأمر السابق موضحة في الرسم التالي:</p>
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/for1.png"><img class="aligncenter size-full wp-image-309" title="for" src="http://aoum150.files.wordpress.com/2009/07/for1.png?w=419&#038;h=281" alt="for" width="419" height="281" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">إذا كانت طريقة عمل أمر for واضحة ، ستكون بقية الأوامر سهلة إن شاء الله ، لأنها هي الأكثر تعقيداً من بينهم.</p>
<p style="text-align:right;">
<p style="text-align:right;">
<h2><span style="color:#993366;">2- while :</span></h2>
<p style="text-align:right;">نفس الشيء ، تستخدم اذا أردنا تكرار عملية أو أمر معين عدة مرات ، ولكنها أقل تعقيداً من أمر for.<br />
وهي تحتوي على جزء واحد يكون عبارة عن مقارنة أو شرط أو اختبار، إذا كان الشرط صحيح سيتم تنفيذ الأوامر الموجودة في محتوى while ، وإذا كان خاطئ لن يتم تنفيذها.</p>
<p>طبعاً يمكننا تنفيذ أمر كتابة رمز $ عشر مرات عن طريق while أيضاً ، فاستعمال for أو while يعتمد على فكر المبرمج غالباً ، ولكن بشكل عام ، أمر for سنستخدمه إذا كنّا سنكرر عملية ما بعدد مرات معروفة مسبقاً ، لكن لو كنّا نرغب مثلاً في أخذ رقم سري من المستخدم وسنقوم بتكرار إظهار نافذة الإدخال حتى يقوم بكتابة الرقم السري بشكل صحيح ، سنستخدم أمر while ، لأننا لا نريد تحديد عملية التكرار بعدد معيّن ، وإنما سنحدده بشرط تطابق الرقم السرّي المُدخل مع الرقم السري الموجود لدينا مسبقاً.</p>
<p>مثلاً لو أردنا كتابة الرمز $ عشر مرات عن طريق while ، سنكتبه بالطريقة التالية:</p>
<p style="text-align:left;" dir="ltr">while (<span style="color:#0000ff;">count &lt;= 10</span>)<br />
{<span style="color:#993366;"><br />
write $;</span><span style="color:#339966;"><br />
count++ ;</span><br />
}</p>
<p style="text-align:right;">نلاحظ أن while و for يحتوون على نفس الأجزاء ، ولكن أماكنها تختلف.<br />
تبقَّى الجزء الأول؟ صحيح ، الجزء الأول يجب أن نكتبه قبل بداية أمر while ، لأننا لو كتبناه في داخلها ، سيصبح المتغير الذي يتحكم بعدد مرات التكرار count بنفس قيمته في كل دورة جديدة. فالمفروض يكون المثال السابق كالتالي:</p>
<p style="text-align:left;" dir="ltr"><span style="color:#ff0000;">var count=1;</span><br />
while (<span style="color:#0000ff;">count &lt;= 10</span>)<br />
{<span style="color:#993366;"><br />
write $;</span><span style="color:#339966;"><br />
count++ ;</span><br />
}</p>
<p style="text-align:right;">وطبعاً كما ذكرت في مقدمة هذا الكتيِّب ، الأوامر يتم تنفيذها بالترتيب ، بمعنى أن البرنامج هذا سيقوم بكتابة علامة $ ثم سيزيد قيمة المتغير count.<br />
نستنتج مما سبق ، أن البرنامج هذا:</p>
<p style="text-align:left;" dir="ltr">for (<span style="color:#ff0000;">var count=1</span> ; <span style="color:#0000ff;">count&lt;=10</span> ; <span style="color:#339966;">count++</span>)<br />
{<br />
<span style="color:#993366;">write $;</span><br />
}</p>
<p style="text-align:right;">والبرنامج هذا:</p>
<p style="text-align:left;" dir="ltr"><span style="color:#ff0000;">var count=1;</span><br />
while (<span style="color:#0000ff;">count &lt;= 10</span>)<br />
{<span style="color:#993366;"><br />
write $;</span><span style="color:#339966;"><br />
count++ ;</span><br />
}</p>
<p style="text-align:right;">
<p style="text-align:right;">يقومون بنفس العمل ، ونتيجتهم ستكون واحدة.</p>
<p>توجد حالات ، استخدام أمر for فيها سيكون أسهل من while ، وحالات أخرى العكس ، فإذا فهمتم طريقة عمل كل أمر بشكل جيد وبعدما تبدأون في التطبيق والبرمجة الفعلية ، ستعرفون بأنفسكم ماهو الأمر الأنسب للاستعمال في الحالات المختلفة.<br />
وأكرر: “ بشكل عام ، أمر for سنستخدمه إذا كنّا سنكرر عمليةٍ ما بعدد مرات معروفة مسبقاً ، لكن لو كنّا نرغب مثلاً في أخذ رقم سري من المستخدم وسنقوم بتكرار إظهار نافذة الإدخال حتى يقوم بكتابة الرقم السري بشكل صحيح ، سنستخدم أمر while ، لأننا لا نريد تحديد عملية التكرار بعدد معيّن ، وإنما سنحدده بشرط تطابق الرقم السرّي المُدخل مع الرقم السري الموجود لدينا مسبقاً.”</p>
<h2><span style="color:#993366;">3- if..else :</span></h2>
<p style="text-align:right;">هذا الأمر يجعل البرنامج يختار بين حالات أو أشياء مختلفة ، مثال:</p>
<p style="text-align:left;" dir="ltr">if (شرط أو مقارنة<br />
{<br />
إذا كانت نتيجة الشرط صحيحة سيتم تنفيذ هذا الأمر أو الأوامر<br />
}<br />
else<br />
{<br />
إذا كانت نتيجة الشرط خاطئة سيتم تنفيذ هذا الأمر أو الأوامر<br />
}</p>
<p style="text-align:right;">يحتوي أمر if على شرط أو مقارنة ، إذا كانت المقارنة صحيحة سيتم تنفيذ الأمر أو الأوامر الموجودة في محتوى if ، وإذا كان الشرط خاطئ ، سيتم تنفيذ الأمر أو الأوامر الموجودة في محتوى else.</p>
<p>نلاحظ هنا أن الأمر else لايحتوي على مقارنة أو شرط ، وهذا لأنه مرتبط بالمقارنة الموجودة مع if ، وأيضاً استعملنا الأقواس {المتعرجة} لمحتوى ل الأمرين ، حتى يستطيع البرنامج أن يعرف أين يبدأ محتوى كل أمر و أين ينتهي.</p>
<p>أمر else لانحتاج لوجوده دائماً ، وإذا لم نكتبه سيعمل البرنامج بشكل عادي وطبيعي ، فلذلك وجوده من عدمه يعتمد على هدفنا في البرمجة ، هل سنحتاج إليه أم لأ لتحقيق الهدف من البرنامج ، فمثلاً في بعض الحالات سنريد تنفيذ أمر في حالة معينة ، وإذا لم تتحقق هذه الحالة لا نريد البرنامج أن يقوم بشيء آخر.<br />
ولكن لو أردنا كتابة else لابد أن نكون كتبنا قبله if ! فأمر else مرتبط بـ if ولا يمكنه أن يتخلّى عنه ، ولكن if غير مرتبط بـ else ، ويمكنه أن يكون وحيداً بدونه.</p>
<p>مثال:</p>
<p style="text-align:left;" dir="ltr">if ( 10 &lt; 20 )<br />
{<br />
write True<br />
}<br />
else<br />
{<br />
write False<br />
}</p>
<p style="text-align:right;">هذا البرنامج سيكتب لنا كلمة True ، لأن الشرط صحيح ، لذلك سينفذ محتوى if.</p>
<p>ويمكننا أن نستعمل في برامجنا أكثر من if وأكثر من else بحيث تكون متداخلة مع بعض ، وتسمى nested if&#8230;else وسنرى مثال عليها في البرنامج رقم 1 في هذا الكتاب.</p>
<p>هكذا نكون انتهينا من شرح هذا القسم ، وأتمنّى أن يكون الشرح واضح وبسيط ، لأن البرمجة بمختلف لغاتها تعتمد على فهم هذه الأوامر وطريقة عملها. فكل لغات البرمجة توجد فيها if و for و while وكلّها تعمل بنفس الطريقة التي شرحتها.</p>
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<h1><span style="color:#0000ff;"><a name="jsandhtml">6- جافاسكربت و HTML :</a></span></h1>
<p style="text-align:right;">الأكواد البرمجية الخاصة بجافاسكربت يتم كتابتها في داخل أكواد وشفرات لغة HTML في أماكن مخصصة وبين شفرات محددة . كما نعلم ، الشفرات الأساسية الموجودة في أي ملف HTML هي:</p>
<p style="text-align:left;" dir="ltr">&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt; &lt;/title&gt;<br />
&lt;/head&gt;</p>
<p dir="ltr">&lt;body&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p style="text-align:right;">شفرات وأكواد الجافا سكربت ممكن أن نكتبها في داخل &lt;head&gt; أو في داخل &lt;body&gt; .<br />
الفرق بين المكانين هو كالتالي، المكان الأول &lt;head&gt; سيتم تنفيذ الأكواد اذا قمنا باستدعائها بأكواد خاصة في داخل شفرة &lt;body&gt; ، والمكان الثاني &lt;body&gt; سيتم تنفيذ الأكواد الموجودة فيه مباشرةً بمجرد وصول البرنامج (المتصفح) لها ، تذكرون بأن الأوامر يتم تنفيذها بالتسلسل ، صح؟<br />
<a title="موقع W3 schools" href="http://www.w3schools.com/js/js_whereto.asp">مصدر المعلومة</a>.</p>
<p>وشفرات وأكواد جافا سكربت تكتب في داخل هذا الكود الرئيسي:</p>
<p style="text-align:left;" dir="ltr">&lt;script language =”JavaScript”&gt;<br />
هنا نكتب أوامر جافاسكربت<br />
&lt;/script&gt;</p>
<p style="text-align:right;">ووظيفتها هي أنها تخبر المتصفِّح بأن مابينها هي أكواد جافاسكربت وليست أكواد HTML.<br />
فأكواد الجافاسكربت ستكون في أحد المكانين ، إما الأحمر أو الأزرق أو الإثنين معاً ، بحسب حاجتنا:</p>
<p style="text-align:left;" dir="ltr">&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt; &lt;/title&gt;<br />
<span style="color:#ff0000;">&lt;script language =”JavaScript”&gt;<br />
هنا نكتب أوامر جافاسكربت<br />
&lt;/script&gt;</span><br />
&lt;/head&gt;</p>
<p dir="ltr">&lt;body&gt;<br />
<span style="color:#0000ff;">&lt;script language =”JavaScript”&gt;<br />
هنا نكتب أوامر جافاسكربت<br />
&lt;/script&gt;</span><br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p style="text-align:right;">للأمانة حسب ماقرأت في المنهج كتابتهم لأكواد جافاسكربت كان في <span style="color:#ff0000;">المكان الأحمر</span> دائماً !</p>
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<h1><span style="color:#0000ff;"><a name="commonmethods">7- بعض الأوامر الشائعة :</a></span></h1>
<p style="text-align:right;">
<h2><span style="color:#993366;"><a name="docwrite">document.write() -1</a></span></h2>
<p style="text-align:right;">الأوامر عادةً تتكون من ثلاثة أقسام ، فلو أخذنا هذا الأمر على سبيل المثال:</p>
<p style="text-align:center;" dir="ltr"><span style="color:#0000ff;">document</span>.<span style="color:#ff0000;">write</span><span style="color:#339966;">(&#8216;Hello&#8217;)</span>;</p>
<p style="text-align:right;"><span style="color:#0000ff;">الجزء</span> <span style="color:#0000ff;">الأول</span> document وهو يسمّى أوبجكت object<br />
<span style="color:#ff0000;">الجزء الثاني</span> write وهو يسمى مثود method لهذا الأوبجكت<br />
ودائماً يتم وصل الأوبجكت والمثود بنقطة . فقط ، أي أننا لانضع أي مسافة بينهم لأنها ستتسبب في عدم عمل البرنامج !<br />
ويجب الانتباه إلى حجم الأحرف لأسماء الأوبجكت والمثود ، لأن لو كتبنا حرف كبير بدلاً من حرف صغير ، لن يعمل البرنامج !<br />
<span style="color:#339966;">الجزء الثالث</span> يسمى argument وهو عبارة عن قوسين تحمل في داخلها parameters ، وفي مثالنا كلمة &#8216;Hello&#8217; هي البارامتر.</p>
<p>هذا الأمر وظيفته هي الكتابة في المتصفِّح ، ففي المثال جعلناه يكتب كلمة Hello ، ووضعناها بين علامات &#8216;التنصيص&#8217; لأنها string نريدها أن تظهر كما كتبناها بالضبط ، فلو أضفنا بعدها على سبيل المثال مسافة ، ستظهر هذه المسافة أيضاً في المتصفِّح.</p>
<p>لو كان لدينا برنامج ، يحتفظ باسم المستخدم في متغيِّر اسمه userName ، ومن ثم أردنا أن نكتب رسالة ترحيبية للمستخدم باسمه المخزَّن مسبقاً في البرنامج ، سنكتب الأمر التالي:</p>
<p style="text-align:center;" dir="ltr">document.write(&#8216;Hello &#8216; + userName);</p>
<p style="text-align:right;">نلاحظ هنا أن اسم المتغيِّر userName لايوجد حوله علامات &#8216;تنصيص&#8217; ! تذكَّروا الفرق بين المتغير العادي والـ string ، المتغير هو كلمة تدل على قيمة معيّنة ، فنحن لانريد أن نتعامل مع اسم المتغيِّر ، ولكن نريد أن نتعامل مع قيمته ، فلو وضعنا اسم المتغير هنا بين &#8216;علامات التنصيص&#8217; ستكون النتيجة في المتصفِّح كالتالي:</p>
<p style="text-align:center;" dir="ltr"><span style="color:#808080;">Hello userName</span></p>
<p style="text-align:right;">لكن إذا لم نضع حوله علامات التنصيص ، سيعرف البرنامج بأن هذه الكلمة لها قيمة معينة ، ولذلك سيقوم بالبحث عن هذه القيمة ومن ثم سيستعملها بدلاً من اسم المتغيِّر userName. فلو كان هذا المتغيِّر يحمل اسم &#8216;Learner&#8217; كقيمة له ، ستكون نتيجة الأمر على المتصفح هي:</p>
<p style="text-align:center;"><span style="color:#808080;">Hello Learner</span></p>
<p style="text-align:right;">علامة + هنا وظيفتها هي الجمع بين الـ string واسم المتغير الذي نريد البرنامج أن يكتبه ، وإذا أردنا أن نضيف كلام آخر بعد المتغيِّر (اسم المستخدم) يجب أن نضع علامة + أخرى للدمج بينهم ، مثلاًِ لو أردنا إضافة علامة تعجب بعد اسم المستخدم سنكتب:</p>
<p style="text-align:center;" dir="ltr">document.write(&#8216;Hello &#8216; + userName + &#8216; !&#8217;);</p>
<p style="text-align:right;">وأيضاً أحب أن أنوِّه هنا على المسافتين الموجودة بعد كلمة Hello وقبل علامة التعجّب ، لأننا إذا لم نضع هذه المسافات ستتلاصق الكلمات وعلامة التعجّب مع بعضها البعض ، فيجب الانتباه لها.</p>
<p>لو افترضنا بأن قيمة المتغيِّر userName الموجودة في البرنامج هي &#8216;Learner&#8217; ، ستكون نتيجة الأمر الأخير هي:</p>
<p style="text-align:center;" dir="ltr"><span style="color:#808080;">Hello Learner !</span></p>
<p style="text-align:right;">
<h2><span style="color:#993366;"><a name="winprmpt">window.prompt() -2</a></span></h2>
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">window هو الأوبجكت ، و prompt هو المثود لأوبجكت window<br />
مثل الأمر السابق، يتكون من ثلاث أجزاء ، فائدة هذا الأمر بأنه يُظهِر نافذة صغيرة للمستخدم ، النافذة تحتوي على جزأين ، الأول هو رسالة (نكتبها نحن) ونريدها أن تظهر في النافذة ، والجزء الثاني سيكون مربع فارغ حتى يدخل المستخدم فيه قيمة معينة ، كما في الصورة التالية :</p>
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/window-prompt1.png"><img class="aligncenter size-full wp-image-311" title="نتيجة أمر window.prompt" src="http://aoum150.files.wordpress.com/2009/07/window-prompt1.png?w=480&#038;h=120" alt="نتيجة أمر window.prompt" width="480" height="120" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">هذه النافذة هي نتيجة للأمر التالي:</p>
<p style="text-align:center;" dir="ltr">window.prompt(&#8216;Please enter your name:&#8217;, &#8216; &#8216;);</p>
<p style="text-align:right;">نلاحظ أن الجزء الثالث في الأمر يحتوي على جزأين كما ذكرت قبل قليل ، الجزء الأول خاص بالرسالة التي نريدها أن تظهر في النافذة ، وفي هذه الحالة الرسالة هي Please enter your name . والجزء الثاني وضعنا علامتي تنصيص فارغة وهي خاصة بالمربع الأبيض أو المكان الذي سيكتب فيه المستخدم ، لو كتبنا شيء بين علامتي التنصيص مثل: اكتب هنا، ستظهر جملة اكتب هنا في المربع الأبيض. والجزأين يفصل بينهم فاصلة عادية ,</p>
<p>سؤال: كيف نأخذ القيمة التي سيدخلها المستخدم؟<br />
جواب: عن طريق إنشاء متغير ، ونعطيه القيمة التي سيدخلها المستخدم.<br />
سؤال: طيب كيف؟<br />
جواب: تابع معي المثال التالي:<br />
لو أردنا عمل برنامج يقوم بأخذ قيمة بالريال السعودي ويحولها إلى دولار أمريكي. في البداية سنقوم بتعريف متغيِّر ، وسنجعل اسمه money على سبيل المثال:</p>
<p style="text-align:left;" dir="ltr">var money;</p>
<p style="text-align:right;">بعدها ، نعطي القيمة المدخلة عن طريق المستخدم للمتغير الذي أنشأناه بالشكل التالي:</p>
<p style="text-align:left;" dir="ltr">money = window.prompt(&#8216;please enter a value in S.R:&#8217;, &#8216; &#8216;);</p>
<p style="text-align:right;">هنا أحب أن أذكر نقطة مهمة، عندما نستعمل هذه الطريقة فإن جميع القيم التي سيدخلها المستخدم سيتم اعتبارها string ، ونحن أحياناً لانريد هذا الشيء لأننا سنحتاج في كثير من الأحيان إلى استخدام البيانات المدخلة من قبل المستخدم في معادلات رياضية وعمليات حسابية مختلفة ، مثل المثال الذي نطبقه الآن.<br />
فإذا أردنا تحويل القيم المُدخلة من قبل المستخدم من string إلى متغيِّر عادي نستطيع أن نتعامل معه في العمليات الحسابية ، يجب علينا أن نستخدم الأمر ()parseFloat ، واستخدامه يكون ببساطة كالتالي:</p>
<p style="text-align:left;" dir="ltr">money = parseFloat(money);</p>
<p style="text-align:right;">يعني لو كانت القيمة التي أدخلها المستخدم هي 100 على سبيل المثال، ستكون القيمة الموجودة في المتغيِّر money هي &#8216;100&#8242; ، وبعدما نستعمل مثود ()parseFloat كما في الأمر الأخير ، ستصبح قيمتها 100 ، أي أنها تحوّلت من string إلى متغيِّر عادي.</p>
<p>الآن القيمة الموجودة في المتغيِّر money قابلة للاستخدام في المعادلات الرياضية ، فنستطيع الآن أن نكتب معادلة رياضية لتحويل المبلغ من ريال سعودي إلى دولار أمريكي كالتالي:</p>
<p style="text-align:left;" dir="ltr">money = money * 3.75;</p>
<p style="text-align:right;">أو يمكننا اختصار كتابتها كالتالي:</p>
<p style="text-align:left;" dir="ltr">money *= 3.75;</p>
<p style="text-align:right;">الآن قيمة المتغير الجديدة ستكون نفس المبلغ الذي أدخله المستخدم ولكن بالدولار بدلاً من الريال.<br />
نستطيع الآن أن نظهر نتيجة التحويل للمستخدم عن طريق الأمر:</p>
<p style="text-align:left;" dir="ltr">document.write(money + &#8216; $&#8217;);</p>
<p style="text-align:right;">
<h2><span style="color:#993366;"><a name="winalrt">window.alert() -3</a></span></h2>
<p style="text-align:right;">
<p style="text-align:right;">window هو الأوبجكت ، و alert هو مثود لأوبجكت window. وهو يستخدم لإظهار النافذة التالية:</p>
<p style="text-align:right;">
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/window-alert1.png"><img class="aligncenter size-full wp-image-312" title="نتيجة أمر window.alert" src="http://aoum150.files.wordpress.com/2009/07/window-alert1.png?w=237&#038;h=214" alt="نتيجة أمر window.alert" width="237" height="214" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">الأمر الذي كتبته لإظهار هذه النافذة هو:</p>
<p style="text-align:center;" dir="ltr">window.alert(&#8216;لقد حدث خطأ&#8217;);</p>
<p style="text-align:right;">وفائدته هي إظهار رسائل للمستخدم في حالات معينة لنخبره بأي شيء ، مثل حدوث خطأ أو أنه قام بإدخال قيمة غير صحيحة وغيرها من رسائل التنبيه المختلفة.</p>
<h2><span style="color:#993366;"><a name="wincnfrm">window.confirm() -4</a></span></h2>
<p style="text-align:right;">window هو الأوبجكت ، و confirm هو مثود لأوبجكت window. وهو يستخدم لإظهار النافذة التالية:</p>
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/window-confirm2.png"><img class="aligncenter size-full wp-image-313" title="نتيجة أمر window.confirm" src="http://aoum150.files.wordpress.com/2009/07/window-confirm2.png?w=280&#038;h=217" alt="نتيجة أمر window.confirm" width="280" height="217" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">الأمر الذي استعملته لإظهار هذه النافذة هو :</p>
<p style="text-align:center;" dir="ltr">window.confirm(&#8216;هل أنت متأكد؟&#8217;);</p>
<p style="text-align:right;">إذا قام المستخدم هنا بالضغط على OK سيعود الأمر بقيمة True ، وإذا ضغط على Cancel سيعود الأمر بقيمة False.</p>
<p>طبعاً فائدة هذا الأمر كبيرة ولانستطيع الاستغناء عنه لأننا عن طريقه نستطيع أن نتأكد من أن المستخدم قام بعملية معينة ، يعني ممكن نستخدم أمر if بأنه إذا كانت قيمة هذه النافذة True ، نفذ أمر معيّن ، وإذا كانت False افعل شيء آخر.</p>
<p style="text-align:right;">
<h2><span style="color:#0000ff;"><a name="mathrnd">Math.round() -5</a></span></h2>
<p style="text-align:right;">
<p style="text-align:right;">Math هو الأوبجكت ، و round هو المثود. هذا الأمر وظيفته هي تقريب الرقم إلى أقرب رقم صحيح ، بمعنى لو كان لدينا على سبيل المثال رقم 9.3 ، عن طريق هذا الأمر نستطيع تقريبه إلى 9.</p>
<p>طبعاً عملية التقريب للتذكير تكون كالتالي:<br />
إذا كان الرقم الذي بعد الفاصلة بين 0 و 4 سيتم تقريبه إلى الرقم الأصغر ..<br />
وإذا كان الرقم الذي بعد الفاصلة بين 5 و 9 سيتم تقريبه إلى الرقم الأكبر ..</p>
<p>بمعنى:</p>
<p style="text-align:center;" dir="ltr">Math.round(9.4) = 9<br />
Math.round(9.0) = 9<br />
Math.round(9.5) = 10<br />
Math.round(9.9) = 10</p>
<p style="text-align:right;">فائدة هذا الأمر كبيرة ، وعلى سبيل المثال في عمليات القسمة التي تحدث في البرنامج (إن وجدت) تكون نتيجتها تحتوي على أعداد عشرية كثيرة ، على سبيل المثال لو قسمنا 10 على 3 ستكون النتيجة في البرنامج 3.33333333333334<br />
وفي بعض الحالات نحن نريد البرنامج أن يعرض لنا الرقم الناتج عن العمليات الحسابية في المتصفح ، ولكن عرضه بهذا الشكل وبأرقام عشرية كبيرة غير جيد المنظر وغير مقبول للمستخدم ، لذلك نستعمل هذا الأمر للتقريب إلى أقرب رقم صحيح أو إلى عدد خانات عشرية نحدده نحن بإضافة بسيطة على الأمر حتى يصبح شكل الرقم المعروض مقبول لدى المستخدم.</p>
<p>الآن تعلمنا كيف نقرب الأرقام إلى أقرب رقم صحيح ( بدون خانات عشرية) ، سننتقل للتقريب إلى عدد خانات عشرية محددة ..</p>
<p><span style="color:#ff0000;">أرجو التركيز في النقطة التالية:</span><br />
لو أردنا عن طريق هذا الأمر أن نقرب رقم إلى خانتين عشرية فقط ، كيف نعملها بواسطة هذا الأمر ؟<br />
مثلاً لو كان لدينا الرقم 9.456456 ونريد تقريبه إلى خانتين عشريتين ، ليصبح 9.46</p>
<p>أولاً: نضرب الرقم في 100:</p>
<p style="text-align:center;" dir="ltr">9.456456 * 100 = 945.6456</p>
<p style="text-align:right;">ثانياً: نعمل تقريب لأقرب رقم صحيح:</p>
<p style="text-align:center;" dir="ltr">Math.round(945.6456) = 946</p>
<p style="text-align:right;">أو يمكننا أن نجعل ما بداخل القوس هو نفس العملية الأساسية:</p>
<p style="text-align:center;" dir="ltr">Math.round(9.456456 * 100) = 946</p>
<p style="text-align:right;">ثالثاً: نقسم الناتج على 100:</p>
<p style="text-align:center;" dir="ltr">946 / 100 = 9.46<br />
أو<br />
Math.round(9.456456 * 100) / 100 = 9.46</p>
<p style="text-align:right;">وهذه هي النتيجة التي نريدها 9.46</p>
<p>مثال ثاني للتقريب إلى ثلاث خانات عشرية حتى تثبت المعلومة وتتضح أكثر ..<br />
إذا أردنا تقريب الرقم 9.368921 إلى ثلاث خانات عشرية حتى يصبح 9.369</p>
<p>أولاً: نضرب الرقم في 1000 (بنفس عدد الخانات التي نريدها)</p>
<p style="text-align:center;" dir="ltr">9.368921 * 1000 = 9368.921</p>
<p style="text-align:right;">ثانياً: نعمل تقريب لأقرب رقم صحيح:</p>
<p style="text-align:center;" dir="ltr">Math.round(9368.921) = 9369<br />
أو<br />
Math.round(9.368921 * 1000) = 9369</p>
<p style="text-align:right;">ثالثاً: نقسم الناتج على 1000</p>
<p style="text-align:center;" dir="ltr">9369 / 1000 = 9.369<br />
أو<br />
Math.round(9.368921 * 1000) / 1000 = 9.369</p>
<p style="text-align:right;">وهذه هي النتيجة التي نريدها 9.369</p>
<p>وهكذا لباقي الحالات ..</p>
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<h1 style="text-align:right;"><span style="color:#0000ff;"><a name="comments">8- كتابة التعليقات والملاحظات :</a></span></h1>
<p style="text-align:right;">التعليقات هي شيء أساسي في أي لغة برمجة لأن لها فوائد كثيرة ، منها أنها توضِّح لنا الفائدة والغرض من كتابة أمر معين وبالتالي يستطيع من يقرأ الأمر أن يعرف سببه ويفهمه بسهولة ، وأيضاً يساعد المبرمج الذي كتب الأمر البرمجي &#8211; إذا عاد للاطلاع عليه ليصحح بعض الأخطاء بعد مرور فترة زمنية طويلة &#8211; في تذكر سبب كتابته والفائدة منه ، وبالتالي يستطيع التعديل وتصحيح الأخطاء بسرعة و سهولة. وأيضاً يمكننا عن طريقها معرفة مكان الأخطاء في البرنامج بسهولة أكثر ، وسأعود لهذه النقطة بعد قليل.</p>
<p>كتابة التعليقات والملاحظات يكون بأحد طريقتين:<br />
الأولى اسمها تعليق سطر واحد one line comment:</p>
<p style="text-align:left;" dir="ltr"><span style="color:#ff0000;">//</span> هذا تعليق ولن يظهر في الصفحة</p>
<p style="text-align:right;">الثانية اسمها تعليق لعدة أسطر multi-line comment:</p>
<p style="text-align:left;" dir="ltr"><span style="color:#ff0000;">/*</span><br />
وهذا تعليق آخر لن يظهر في الصفحة ولا يمكن رؤيته إلا في ملف الأوامر<br />
Source codeأو مايسمى بـ<br />
<span style="color:#ff0000;">*/</span></p>
<p style="text-align:right;">طبعاً هذه التعليقات يجب أن تكون من ضمن أكواد &lt;&#8217;script language=&#8217;JavaScript&gt; و &lt;script/&gt; ، لأنها لو كانت خارجها ، سيعتبرها المتصفح من ضمن لغة HTML وبالتالي سيقوم بكتابتها في الصفحة كما هي ، لأن لغة HTML لايوجد فيها وسم أو شفرة مشابهة لها.<br />
وطبعاً التعليقات لاتظهر أبداً في المتصفحات ، وفائدتها الرئيسية هي للمبرمج نفسه وبقية المبرمجين الذي سيقرأون الكود البرمجي.</p>
<p>طيب الآن نعود لنقطة فائدتها في تسهيل اكتشاف الأخطاء ، كما نعلم في لغة جافاسكربت اذا وجِد خطأ بسيط جداً ، ستظهر لنا صفحة فارغة لا تحتوي على أي شيء ، وهذا شيء يجلب الإحباط للأسف خاصة إذا لم نستطع معرفة الخطأ بسرعة ، ولذلك يمكننا استخدام التعليقات في اكتشاف مكان الخطأ لتقليل الوقت المستهلك في اكتشاف و تصحيح الأخطاء ، خاصة الصغيرة منها.</p>
<p>في أحد البرامج الصغيرة الذي كنت أعمل عليه ، استخدمت فيه عدة أوامر ومن ضمنها أمر if ، وطبعاً المبرمج إذا تعوَّد على لغة البرمجة ستصبح كتابته سريعة جداً مثل كتابة اللغة العادية ، فاحتمال وجود الأخطاء الإملائية كبير.<br />
المهم أني بعد ما انتهيت من كتابة البرنامج وقمت بتشغيله لأرى النتيجة لم يظهر شيء ، قلت عادي أكيد خطأ بسيط كالعادة ، سأقوم بتصحيحه الآن لتجربة البرنامج. جلست ما يقارب الأربعين دقيقة ولم أستطع معرفة مكان الخطأ!!!<br />
بعدها فكّرت بطلب مساعدة التعليقات ، فقمت بتقسيم البرنامج الصغير إلى ثلاثة أقسام:<br />
الأول جعلته خاص بالمتغيرات وتعاريفها الموجودة في البداية.<br />
الثاني خاص بالمعادلات وأوامر الاختيار والتكرار وهي في منتصف البرنامج.<br />
الثالث خاص بعرض نتائج البرنامج في المتصفِّح وهي في آخر البرنامج.</p>
<p>فقمت الآن بوضع تعليقات حول الجزأين الثاني والثالث ، ووضعت أمر كتابة في المتصفِّح في الجزء الأول ، جعلته يكتب كلمة OK ، بعدها قمت بتشغيل البرنامج وظهرت لي كلمة OK في المتصفِّح ، وهذا يعني أن الجزء الأول لاتوجد به مشاكل.<br />
بعدها أزلت التعليقات من الجزأ الأخير لأتأكد منه ، وبعد التجربة اتّضح لي بأن المشكلة ليست فيه.</p>
<p>الآن عرفت بأن المشكلة موجودة في الجزء الثاني ، يعني في أوامر الاختيار والتكرار والمعادلات الحسابية ، فقمت بتقسيم هذه المنطقة إلى عدة أجزاء حتى أختبرها جزءاً جزءاً ، إلى أن استطعت &#8211; ولله الحمد &#8211; اكتشاف الخطأ الذي أخذ مني قرابة الساعة أو أكثر لاكتشافه.</p>
<p>هل تعلمون ماذا كان الخطأ؟<br />
في أحد أوامر if ، قمت بكتابة القوس المحيط بالشرط هكذا: { ، والمفترض أن يكون: (<br />
خطأ تافه ، ولكن الأخطاء في البرمجة – خاصة بدون استعمال برامج اكتشاف وتحديد الأخطاء – لاترحم ، ولا تفرِّق بين الخطأ الكبير والصغير ، وستتسبب في ضياع وقت كبير إذا لم نعرف كيف نكتشفها بسرعة. فلو استخدمنا التعليقات بذكاء ستحل لنا مشاكل كثيرة في تصحيح الأخطاء.</p>
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<h1><span style="color:#0000ff;">9- أمثلة تطبيقية :</span></h1>
<p style="text-align:right;">
<h2><span style="color:#993366;"><a name="example1">البرنامج رقم 1: تصنيف البيض لمقاسات بحسب الوزن</a></span></h2>
<p style="text-align:right;">هذا المثال هو السؤال الرابع في TMA02 لسنة 2008 ، السؤال يشمل عدة نقاط هامّة ولذلك استخدمته كمثال.</p>
<p style="text-align:right;">السؤال: اكتب برنامج بلغة جافاسكربت يقوم بالآتي:<br />
<strong>أولاً</strong>: يظهر نافذة للمستخدم تطلب منه إدخال وزن البيض.<br />
<strong>ثانياً</strong>: يقوم بكتابة الوزن &#8211; الذي أدخله المستخدم &#8211; في الصفحة للتأكيد.<br />
<strong>ثالثاً</strong>: يقوم بتصنيف مقاس البيض بحسب العوامل التالية:</p>
<ul>
<li>إذا كان الوزن أقل من 53 جرام ، يُعتبر صغير.</li>
<li>إذا كان الوزن يساوي أو أكبر من 53 و أقل من 63 جرام ، يكون وسط.</li>
<li>إذا كان الوزن يساوي أو أكبر من 63 و أقل من 73 ، يكون كبير.</li>
<li>إذا كان الوزن يساوي أو أكبر من 73 ، يكون  كبير جداً.</li>
</ul>
<p style="text-align:right;">السؤال يحتوي على ثلاث فقرات مساعدة للحل ، سنمشي عليها كلها.</p>
<h3><span style="color:#3366ff;">الفقرة الأولى:</span></h3>
<p style="text-align:right;">المطلوب هنا ، هو التخطيط للبرنامج عن طريق كتابة البرنامج باللغة العادية (الإنجليزية) وليست لغة البرمجة ، لأنها تعتبر عادة ممتازة للمبرمجين في تنفيذ أي برنامج لأنها تساعد على ترتيب الأفكار.<br />
طريقة الحل تكون كالتالي:</p>
<p style="text-align:left;" dir="ltr">declare a variable for the weight تعريف متغير<br />
get a value from the user and assign it to the variable أخذ وزن من المستخدم وتعيينها للمتغير الذي عرفناه<br />
display a confirmation message with the value إظهار رسالة تأكيد بالوزن الذي أدخله المستخدم</p>
<p style="text-align:right;">هكذا نكون انتهينا من أول خطوتين وهي أخذ قيمة من المستخدم ووضعها في متغير ، وإظهار الوزن المُدخل في الشاشة للتأكيد.<br />
ننتقل للخطوة الثالثة ، وهي التي عليها الكلام ..</p>
<p>نبدأ بأول تصنيف وهو إذا كان الوزن أقل من 53 يكتب لنا أن البيض صغير:</p>
<p style="text-align:left;" dir="ltr">if ( the weight is smaller than 53)<br />
display a message (The egg size is small)</p>
<p style="text-align:right;">انتيهنا الآن من اذا كان البيض صغير ، فننتقل للي بعده ، وهو اذا كان الوزن أكبر من أو يساوي 53 و أصغر من 63 يكتب لنا ان مقاس البيض وسط:</p>
<p style="text-align:left;" dir="ltr">else<br />
if (the weight is larger than or equal to 53 AND less than 63)<br />
display the message (The egg size is medium)</p>
<p style="text-align:right;">انتهينا من الحالة الثانية ، ننتقل للحالة الثالثة ، وهي اذا كان الوزن أكبر من أو يساوي 63 وأقل من 73 يكتب لنا ان المقاس كبير ، وهي نفس طريقة الحالة الثانية:</p>
<p style="text-align:left;" dir="ltr">else<br />
if ( the weight is larger than or equal to 63 AND less than 73)<br />
display the message (The egg size is large)</p>
<p style="text-align:right;">الآن نجي للحالة الرابعة والأخيرة ، وممكن تحل بطريقتين:<br />
1- أن نضيف أمر else ونكتب داخلها أمر كتابة في الصفحة بأن الحجم كبير جداً ، وسنكتبها كالتالي:</p>
<p style="text-align:left;" dir="ltr">else<br />
display the massage (The egg size is very large)</p>
<p style="text-align:right;">2- أن نكتب else وبعدها if لإذا كان الوزن أكبر من أو يساوي 73 اكتب في الشاشة أن المقاس كبير جداً ، وسنكتبها هكذا:</p>
<p style="text-align:left;" dir="ltr">else<br />
if ( the weight is larger than or equal to 73 )<br />
display the massage (The egg size is very large)</p>
<p style="text-align:right;">الطريقة الأولى معناها أن أي وزن غير مطابق للحالات الثلاثة الأولى راح يتم اعتباره كبير جداً. والطريقة الثانية نفس الأولى ولكننا نحدد الأرقام فيها. وكل الطريقتين صحيحة ان شاء الله ، وستعطي نفس النتيجة بالضبط.</p>
<p style="text-align:right;">
<p style="text-align:right;">
<h3><span style="color:#3366ff;">الفقرة الثانية:</span></h3>
<p style="text-align:right;">المطلوب هنا هو تحويل الأوامر الموجودة في الفقرة السابقة إلى كود حقيقي وقابل للاستعمال ..<br />
أولاً سنجهز مكان أكواد الجافاسكربت ، يعني سنقوم بعمل أكواد HTML الرئيسية في البداية ، وسنضع أكواد الجافا السكربت في مكان الاستفهامات:</p>
<p style="text-align:left;" dir="ltr">
<p style="text-align:left;" dir="ltr">&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt; &lt;/title&gt;<br />
&lt;script language=&#8217;JavaScript&#8217;&gt;<span style="color:#ff0000;">???????</span>&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p style="text-align:right;">في السؤال طلب مننا وضع عنوان للصفحة باسم Egg sizes ، والعنوان يتم كتابته بين شفرات &lt;title&gt; .<br />
ولابد من تنسيق الكود والأوامر بشكل جيد ، حتى يكون الكود سهل القراءة للمدرِّس أو لغيره. المقصود بالتنسيق هو زيادة المحاذاة عن الطرف الأيسر باستخدام زر tabs في الكيبورد ، حتى نبيِّن الأوامر والشفرات ونميّزها عن بعض.</p>
<p>سنفترض أن القيمة المدخلة من المستخدم ، ستكون أرقام أو مدخلات صحيحة ، فلا داعي أن نضع أوامر للتأكد من أن المستخدم  لم يقم مثلاً بكتابة أحرف أو غيرها.</p>
<p>الآن نرجع لحلنا في الفقرة الأولى ، وسنمشي عليه أمراً أمراً ، حتى نحول جميع الأوامر إلى أكواد فعليَّة.<br />
أولاً ، عملية تعريف المتغير الذي سنحفظ فيه مدخلات المستخدم:</p>
<p style="text-align:center;">declare a variable for the weight</p>
<p style="text-align:right;">سنسمي المتغيِّر weight ، ولذلك سيكون الأمر:</p>
<p style="text-align:left;" dir="ltr">var weight;</p>
<p style="text-align:right;">انتهينا من الأمر الأول: تعريف المتغير.</p>
<p style="text-align:right;">الأمر الثاني هو عملية أخذ قيمة من المستخدم وتعيين القيمة للمتغير weight :</p>
<p style="text-align:left;" dir="ltr">weight = window.prompt(&#8216;Please enter the weight of the egg in grams.&#8217;, &#8221;);</p>
<p style="text-align:right;">الآن الكمبيوتر إذا أخذ أي قيمة من المستخدم راح يعتبرها string مثل ماشرحنا في الأقسام السابقة ، لذلك سنقوم بتحويل القيمة إلى متغيِّر نستطيع التعامل معه في المعادلات والمقارنات عن طريق parseFloat :</p>
<p style="text-align:left;" dir="ltr">weight = parseFloat(weight);</p>
<p style="text-align:right;">ننتقل للخطوة التي بعدها ، وهي كتابة أمر تأكيد بالوزن الذي أدخله المستخدم ، وسيكون مثل: “وزن البيض هو &#8230; جرام&#8221;<br />
مكان النقط &#8230; سنضع اسم المتغير weight الذي يحمل الوزن الذي أدخله المستخدم. فيكون الأمر كالتالي:</p>
<p style="text-align:left;" dir="ltr">document.write(&#8216;The weight of the egg is &#8216; + weight + &#8216; grams.&lt;br/&gt;&#8217;);</p>
<p style="text-align:right;">طبعاً أجزاء هذه الأكواد تم شرحها في الأقسام السابقة ، لذلك لن أعيد شرحها مرة أخرى.<br />
ننتقل لعملية البرمجة الفعلية ، وهو  كتابة أوامر المقارنات بين الأوزان وإظهار رسالة معينة لكل وزن..<br />
نبدأ بأول تصنيف وهو إذا كان الوزن أقل من 53 يكتب لنا أن البيض صغير:</p>
<p style="text-align:center;" dir="ltr">if ( the weight is smaller than 53)<br />
display a message (The egg size is small)</p>
<p style="text-align:right;">هذا هو التخطيط الذي كتبناه في حل الفقرة السابقة ، ولتحويله إلى كود جافاسكربت نكتب:</p>
<p style="text-align:left;" dir="ltr">if (weight &lt; 53) {<br />
document.write(&#8216;The egg size is small.&lt;br/&gt;&#8217;);<br />
}</p>
<p style="text-align:right;">القوسين {المتعرجة} التي كتبناها ضرورية لتعريف البرنامج متى تبدأ الأوامر المتعلقة بـ if ومتى تنتهي. وهذا الأمر سيتم تنفيذه فقط إذا كان الوزن الذي أدخله المستخدم أقل من 53.<br />
ننتقل للحالة الثانية ، اذا كان وزن البيض أكبر من أو يساوي 53 و أقل من 63:</p>
<p style="text-align:center;" dir="ltr">else<br />
if (the weight is larger than or equal to 53 AND less than 63)<br />
display the message (The egg size is medium)</p>
<p style="text-align:right;">هذا هو التخطيط الذي كتبناه في حل الفقرة السابقة ، ولتحويله إلى كود جافاسكربت نكتب:</p>
<p style="text-align:left;" dir="ltr">else {<br />
if ( weight &gt;= 53 &amp;&amp; weight &lt; 63 ) {<br />
document.write(&#8216;The egg size is medium.&lt;br/&gt;&#8217;);<br />
}</p>
<p style="text-align:right;">هذا الأمر سيتم تنفيذه في حالة كان الوزن أكبر من أو يساوي 53 وفي نفس الوقت أقل من 63.<br />
ونتَّبع نفس الطريقة للحالتين الثالثة والرابعة:</p>
<p style="text-align:left;" dir="ltr">else {<br />
if ( weight &gt;= 63 &amp;&amp; weight &lt; 73 ) {<br />
document.write(&#8216;The egg size is large.&lt;br/&gt;&#8217;);<br />
}<br />
else {<br />
document.write(&#8216;The egg size is very large.&lt;br/&gt;&#8217;);<br />
}<br />
}<br />
}</p>
<p style="text-align:right;">
<p>بالنسبة للأقواس {المتعرِّجة} :<br />
نفتح القوس بعدما نكتب الأمر (سواء if أو else أو for أو while) ، ونغلقه بعد نهاية الأوامر التي تتعلق بالأمر.<br />
ففي الكود الخاص بالحالة الثانية ، نلاحظ أنني فتحت قوس بعد أمر else ولكني أم أقم بإغلاقه! السبب هو أن كل الأوامر المتبقية ستكون من ضمن هذه الـ else ، فلذلك قمت بإغلاقه بعد كتابة الحالتين الثالثة والرابعة.<br />
فكروا فيها بالمنطق .. في البداية قلنا: &#8220;إذا كان وزن البيض أقل من 53” ، والآن كتبنا: &#8220;غير ذلك&#8221; ، هذا يعني بأن &#8220;غير ذلك&#8221; هذه ستحتوي على كل الأوزان التي تزيد عن 53 . وللتوضيح أكثر سأضع الأقواس على التخطيط بالفقرة الأولى ، وسألون فقط أقواس else المرتبطة ببعض بنفس اللون ، لأن أقواس if في برنامجنا هذا تنتهي بعده مباشرة:</p>
<p style="text-align:left;" dir="ltr">if ( the weight is smaller than 53) {<br />
display a message (The egg size is small)<br />
}<br />
else <span style="color:#ff0000;">{</span><br />
if (the weight is larger than or equal to 53 AND less than 63) {<br />
display the message (The egg size is medium)<br />
}<br />
else <span style="color:#0000ff;">{</span><br />
if ( the weight is larger than or equal to 63 AND less than 73) {<br />
display the message (The egg size is large)<br />
}<br />
else <span style="color:#339966;">{</span><br />
display the message (The egg size is very large)<br />
<span style="color:#339966;">}</span><br />
<span style="color:#0000ff;">}</span><br />
<span style="color:#ff0000;">}</span></p>
<p style="text-align:right;">النتيجة النهائية للبرنامج ستكون بالشكل التالي:</p>
<p style="text-align:left;" dir="ltr">&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Egg sizes&lt;/title&gt;<br />
&lt;script language=&#8217;JavaScript&#8217;&gt;<br />
<span style="color:#ff0000;">var weight;<br />
weight = window.prompt(&#8216;Please enter the weight of the egg in grams.&#8217;, &#8221;);<br />
weight = parseFloat(weight);<br />
document.write(&#8216;The weight of the egg is &#8216; + weight + &#8216; grams.&lt;br/&gt;&#8217;);</span></p>
<p style="text-align:left;" dir="ltr">if (weight &lt; 53) {<br />
document.write(&#8216;The egg size is small.&lt;br/&gt;&#8217;);<br />
}<br />
else {<br />
if ( weight &gt;= 53 &amp;&amp; weight &lt; 63 ) {<br />
document.write(&#8216;The egg size is medium.&lt;br/&gt;&#8217;);<br />
}<br />
else  {<br />
if ( weight &gt;= 63 &amp;&amp; weight &lt; 73 ) {<br />
document.write(&#8216;The egg size is large. &lt;br/&gt;&#8217;);<br />
}<br />
else {<br />
document.write(&#8216;The egg size is very large. &lt;br/&gt;&#8217;);<br />
}<br />
}<br />
}<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p style="text-align:right;">في النهاية ، نأخذ هذا الكود وننسخه في برنامج تحرير نصوص مثل notepad ونحفظ الملف بأي اسم ، ولكن الصيغة أو النوع يجب أن تكون html . يعني الملف النهائي يجب أن يكون نوعه أو امتداده html وليس doc أو txt مثلاً!<br />
ولتشغيل البرنامج نفتح الملف عن طريق متصفِّح الانترنت ، سواء انترنت إكسبلورر أو فايرفوكس أو غيرها وستظهر لنا نتيجة البرنامج.</p>
<p style="text-align:right;">
<h3><span style="color:#0000ff;">الفقرة الثالثة: </span></h3>
<p style="text-align:right;">يقول كيف نتأكد من أن البرنامج يعمل بشكل صحيح ولا توجد به أخطاء؟</p>
<p>حتَّى نتأكد من أن البرنامج صحيح ولا توجد به أخطاء ، يجب أن نختبر جميع الحالات الموجودة في البرنامج ، وبرنامجنا هذا فيه أربع حالات ، وهي: إما صغير إذا كان &lt; 53 ، أو وسط إذا كان &gt;=53 و &lt;63 ، أو كبير إذا كان &gt;=63 و &lt;73 ، أو كبير جداً إذا كان &gt;73.</p>
<p>الأرقام ممكن تختلف من شخص لآخر ، ولكن هذه الأرقام &#8211; من وجهة نظري &#8211; هي الأفضل والأضمن:</p>
<ul>
<li>رقم 52 ، حتى نختبر الحد الأعلى للحالة الأولى وهي الحجم الصغير.</li>
<li>رقم 53 ، حتى نتأكَّد من الحد الأعلى للحالة الأولى ، وأيضاً نختبر الحد الأدنى للحالة الثانية وهي الحجم المتوسط.</li>
<li>رقم 63 ، حتّى نتأكد من الحدّ الأعلى للحالة الثانية ، وأيضاً نختبر الحد الأدنى للحالة الثالثة المتعلقة بالحجم الكبير.</li>
<li>رقم 73 ، حتّى نتأكد من الحدّ الأعلى للحالة الثالثة ، وأيضاً نختبر الحد الأدنى للحالة الرابعة المتعلقة بالحجم الكبير جداًّ.</li>
</ul>
<p style="text-align:right;">
<p style="text-align:center;"><a title="برنامج تصنيف البيض لمقاسات بحسب الوزن المدخل" href="http://dl.getdropbox.com/u/1693311/JavaScript_lessons/Example1-Egg%20sizes.html">لتحميل البرنامج</a></p>
<p style="text-align:right;">
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<h2><span style="color:#993366;"><a name="example2">البرنامج رقم 2: لعبة التخمين</a></span></h2>
<p style="text-align:right;">هذا سؤال أتى لنا في الاختبار النهائي:</p>
<p style="text-align:right;">قم بتخزين رقم في البرنامج بين 1 و 1000 واجعل المستخدم يحاول أن يقوم بتخمينه أو معرفته عن طريق إدخال رقم بين 1 و 1000 ..<br />
إذا أدخل المستخدم رقم أكبر من الرقم المخزّن أظهر له رسالة تخبره بأنه فوق الرقم الصحيح ودعه يحاول مرة أخرى.<br />
إذا أدخل المستخدم رقم أصغر من الرقم المخزّن أظهر له رسالة تخبره بأنه تحت الرقم الصحيح ودعه يحاول مرة أخرى.<br />
وفي النهاية اذا أدخل الرقم الصحيح سنكتب له بأنه استطاع تخمين الرقم الصحيح بعد عدد المحاولات التي قام بها.</p>
<p>طريقة الحل لأي سؤال في البرمجة هو فهم السؤال ومن ثم تقسيمه وتحليله إلى خطوات ، طبعاً التقسيم والتحليل سيكون في عقلنا لأن في الاختبار لايوجد مكان كافي للكتابة !</p>
<p><strong>أولاً:</strong> سنعمل ثلاثة متغيرات ، المتغير الأول سنسميه ourNumber وسنضع له قيمة نختارها ولنفرض انها 501 ، والمتغير الثاني سنسميه userNumber وسنجعله يحمل القيمة التي يدخلها المستخدم ، والثالث سنسميه count وستكون مهمته حساب عدد المحاولات التي قام بها المستخدم.</p>
<p><strong>ثانياً:</strong> سنقارن بين الرقم الذي وضعناه والرقم الذي أدخله المستخدم:</p>
<ul>
<li>إذا كان الرقم الذي أدخله أكبر ، سنقوم بإظهار رسالة تخبره بأنه فوق الرقم الصحيح وسنجعله يحاول مرة أخرى.</li>
<li>إذا كان الرقم الذي أدخله أصغر ، سنقوم بإظهار رسالة تخبره بأنه تحت الرقم الصحيح وسنجعله يحاول مرة أخرى.</li>
</ul>
<p style="text-align:right;"><strong>ثالثاً:</strong> إذا استطاع تخمين الرقم الصحيح:<br />
سنكتب رسالة له نخبره بأنه استطاع تخمين الرقم الصحيح بعد عدد المحاولات التي قام بها.</p>
<p>نحول الخطوات إلى أكواد ..<br />
أولاً:</p>
<p style="text-align:left;" dir="ltr">var ourNumber, userNumber, count;<br />
ourNumber = 501;<br />
userNumber = window.prompt(&#8216;Enter a number between 1 and 1000&#8242;, &#8221;);<br />
userNumber = parseFloat(userNumber);<br />
count = 1;</p>
<p style="text-align:right;">
<p style="text-align:right;">السطر الأول ، عرَّفنا ثلاثة متغيرات.<br />
السطر الثاني ، وضعنا رقم 501 في المتغير الخاص بنا.<br />
السطر الثالث ، جعلنا المتغيِّر الخاص بالمستخدم يأخذ القيمة من المستخدم.<br />
السطر الرابع ، قمنا بتحويل الـ string إلى variable يمكن التعامل معه في المقارنات والمعادلات.<br />
السطر الخامس ، وضعنا قيمة 1 للمتغير الخاص بعد عدد المحاولات ، وبدأ بـ1 لأن المستخدم بدأ فعليّاً بأول محاولة في السطر الثالث.</p>
<p>ثانياً:<br />
سنستعمل لهذا الجزء أمر while ، وسنجعل الشّرط: إذا لم يتطابق الرقم الذي أدخله المستخدم مع الرقم 501 :</p>
<p style="text-align:left;" dir="ltr">while (ourNumber != userNumber) {</p>
<p style="text-align:left;" dir="ltr">}</p>
<p style="text-align:right;">
<p style="text-align:right;">إذا لم يتطابق الرقمين ستكون لدينا حالتين: إما أن يكون رقم المستخدم أكبر 501 أو يكون أصغر من 501 ، لذلك سنضيف في داخل محتوى while أوامر if و else وسنجعل if لإذا كان رقم المستخدم أكبر من 501 وسنعرض له رسالة تخبره بأن رقمه أكبر من الرقم الصحيح ، و else ستكون لحالة إذا كان رقم المستخدم أصغر من 501 وسنعرض له الرسالة المناسبة :</p>
<p style="text-align:right;">
<p style="text-align:left;" dir="ltr">while (ourNumber != userNumber) {<br />
if (userNumber &gt; ourNumber) {<br />
window.alert(&#8216;You are above the right number!&#8217;);<br />
}<br />
else {<br />
window.alert(&#8216;You are below the right number!&#8217;)<br />
}<br />
}</p>
<p style="text-align:right;">
<p style="text-align:right;">بعدما قمنا بإخبار المستخدم بأنه إما فوق أو تحت الرقم الصحيح ، نريد إضافة أمر حتى يحاول مرة أخرى ، وسنضيف تحته مباشرة أمر آخر لزيادة المتغيِّر الخاص بعد عدد المحاولات:</p>
<p style="text-align:right;">
<p style="text-align:left;" dir="ltr">while (ourNumber != userNumber) {<br />
if (userNumber &gt; ourNumber) {<br />
window.alert(&#8216;You are above the right number!&#8217;);<br />
}<br />
else {<br />
window.alert(&#8216;You are below the right number!&#8217;)<br />
}</p>
<p style="text-align:left;" dir="ltr">userNumber = window.prompt(&#8216;Try again :&#8217;, &#8221;);<br />
userNumber = parseFloat(userNumber);<br />
count = count + 1;<br />
}</p>
<p style="text-align:right;">
<p style="text-align:right;">طبعاً بداخل أمر while يوجد خيارين فقط ، وهي إما أن يكون الرقم أصغر من 501 أو يكون أكبر منه ، لايمكن أن يكون يساويه لأن شرط while هو أنهم غير متساويين ، فبالتالي لو كان الرقمين متساويين لن يتم تنفيذ محتوى while.</p>
<p>تبقّى لنا الجزء الثالث والأخير ، وهو إذا قام المستخدم بإدخال الرقم الصحيح ، وبالطبع لو كان الرقم المدخل يساوي الرقم 501 لن يتم تنفيذ while وإنّما سيتم تنفيذ مابعدها من أوامر إن وجدت ، فسنكتب هذه الجزئية بعد while كالتالي:</p>
<p style="text-align:left;" dir="ltr">document.write(&#8216;You guessed the right number after &#8216; + count + &#8216; tries!&#8217;);</p>
<p style="text-align:right;">
<p style="text-align:right;">سيقوم البرنامج بكتابة لقد قمت بتخمين الرقم الصحيح بعد عدد المحاولات المخزنة في المتغير count.<br />
الآن نجمع الأجزاء الثلاثة مع بعض:</p>
<p style="text-align:right;">
<p style="text-align:left;" dir="ltr">var ourNumber, userNumber, count;<br />
ourNumber = 501;<br />
userNumber = window.prompt(&#8216;Enter a number between 1 and 1000&#8242;, &#8221;);<br />
userNumber = parseFloat(userNumber);<br />
count = 1;</p>
<p style="text-align:left;" dir="ltr">while ( ourNumber != userNumber)<br />
{<br />
if (ourNumber &lt; userNumber)<br />
{<br />
window.alert(&#8216;You are above the right number!&#8217;);<br />
}<br />
else<br />
{<br />
window.alert(&#8216;You are below the right number!&#8217;);<br />
}</p>
<p style="text-align:left;" dir="ltr">userNumber = window.prompt(&#8216;Try again :&#8217;, &#8221;);<br />
userNumber = parseFloat(userNumber);<br />
count = count + 1;<br />
}<br />
document.write(&#8216;You guessed the number after &#8216; + count + &#8216; tries!&#8217;);</p>
<p style="text-align:right;">وهذا هو البرنامج المطلوب بشكل كامل إن شاء الله.</p>
<p style="text-align:center;"><a title="برنامج تخمين الرقم الصحيح" href="http://dl.getdropbox.com/u/1693311/JavaScript_lessons/Example2-Guess%20the%20number.html">لتحميل البرنامج (البرنامج لن يتوقف عن العمل إلا إذا أدخلت رقم 501 )</a></p>
<p style="text-align:right;">
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<h2 style="text-align:right;"><span style="color:#993366;"><a name="example3">البرنامج رقم 3: إيجاد القاسم المشترك الأكبر بين رقمين</a></span></h2>
<p style="text-align:right;">سؤال أتى لنا أيضاً في الاختبار النهائي ..<br />
السؤال يقول: اعمل برنامج يجعل المستخدم يدخل رقمين ، ويقوم البرنامج بإيجاد العامل المشترك الأكبر بين الرقمين ويعرضه في الصفحة.</p>
<p>المشكلة الرئيسية هي في طريقة إيجاد العامل المشترك الأكبر لأنها تحتاج وقت للتفكير والتجريب حتى نستطيع إيجادها لأول مرة.<br />
العامل المشترك الأكبر بين رقمين المقصود فيه هو أكبر رقم ممكن أن نقسم عليه الرقمين ويكون الناتج عدد صحيح.<br />
مثلاً لو أردنا العامل المشترك الأكبر ل 6 و 3 الناتج هو 3 لأنه أكبر رقم نستطيع أن نقسم عليه الرقمين ونحصل على رقم صحيح.<br />
ولو أردنا العامل المشترك الأكبر ل 50 و 40 سنبحث عن أكبر رقم ممكن أن نقسم عليه هذين الرقمين ونحصل على رقم صحيح في الحالتين، والإجابة في هذه الحالة ستكون 10 لأنه أكبر رقم نستطيع أن نقسم عليه الرقمين والنتيجة ستكون عدد صحيح.<br />
ولو أردنا العامل المشترك الأكبر للرقمين 20 و 15 سيكون الناتج 5 لنفس السبب.</p>
<p>طيب المشكلة الآن هي كيف نحول هذا الكلام إلى أكواد وأوامر برمجية؟!<br />
الحل ممكن يكون بأكثر من طريقة وسأشرح لكم طريقتي في حله ( طبعاً بعد الاختبار حليته <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  )<br />
طريقتي هي أنني أنشأت متغير غير المتغيريين الذين أدخل المستخدم فيهم أرقاماً ، وجعلت المتغير هذا يأخذ قيمة أصغر رقم فيهم ، يعني إذا كان الرقم الأول أصغر من الثاني ستصبح قيمة المتغير الذي عرفته تساوي الرقم الأول والعكس.</p>
<p>وبعدها وضعت شرط وهو : <span style="color:#0000ff;">إذا كان باقي قسمة الرقم الأول على المتغير لا تساوي صفر <span style="color:#ff0000;">أو</span> إذا كان باقي قسمة الرقم الثاني على  المتغير لاتساوي صفر<span style="color:#333333;"> .. وفي المحتوى كتبت أمر يقوم بإنقاص قيمة هذا المتغير بواحد</span></span><span style="color:#333333;">.<br />
</span><br />
بافتراض أن الرقم الأول موجود في متغيِّر اسمه x والرقم الثاني في متغيِّر اسمه y ، والمتغيِّر الذي سيحمل قيمة الرقم الأصغر سأسمّيه GCD ، اختصاراً لـ Greatest Common Divisor بمعنى القاسم المشترك الأكبر ، سيكون الشرط كالتالي:</p>
<p style="text-align:left;" dir="ltr">while ( x % GCD != 0 || y % GCD != 0 )<br />
{<br />
GCD = GCD – 1;<br />
}</p>
<p style="text-align:right;">بصراحة الشرط صعب بالنسبة للمبتدئين لذلك حاولوا أن تركزوا في شرحي له الآن:<br />
القاسم المشترك الأكبر بين رقمين هو إذا كان باقي قسمة الرقمين عليه تساوي صفر ، مثل الأمثلة التي طبقناها قبل قليل ، لذلك وضعنا الشرط بأنه إذا كانت باقي قسمة أي من الرقمين على المتغير لا تساوي صفر معناها بأننا لم نصل بعد للقاسم المشترك الأكبر للرقمين ونحتاج لتنقيص قيمته بواحد حتى تصل قيمته إلى رقم يحقق الشرط الموجود وهو رقم القاسم المشترك الأكبر.</p>
<p>أولاً: سنقوم بتعريف ثلاث متغيرات، الأول سيحمل الرقم الأول الذي سيدخله المستخدم ، والثاني سيحمل الرقم الثاني الذي سيدخله المستخدم ، والثالث سنجعله يحمل قيمة الرقم الأقل منهم.<br />
حتى نختصر الشرح والوقت ، سنحذف فقرة إدخال الأرقام من المستخدم ، وسندخل رقمين من لدينا مباشرةً للتسهيل.</p>
<p>سنفرض أن الرقمين هم 40 و 30 ، وسنضعهم في المتغيرين x و y على التوالي:</p>
<p style="text-align:left;" dir="ltr">var x = 40;<br />
var y = 30;</p>
<p style="text-align:right;">سنضع المتغير الثالث ليحمل قيمة العدد الأصغر ، وهو y في هذه الحالة:</p>
<p style="text-align:left;" dir="ltr">var GCD = y;</p>
<p style="text-align:right;">الآن نكتب أمر while مع الشّرط الذي شرحته قبل قليل:</p>
<p style="text-align:left;" dir="ltr">while ( x % GCD != 0 || y % GCD != 0 ) {<br />
GCD = GCD – 1;<br />
}</p>
<p style="text-align:right;">اذا استبدلنا المتغيرات بقيمها (للتوضيح) سنحصل على:</p>
<p style="text-align:left;" dir="ltr">while ( 40 % 30 != 0 || 30 % 30 != 0 ) {<br />
GCD = GCD – 1;<br />
}</p>
<p style="text-align:right;">بمعنى <span style="color:#0000ff;">اذا كان باقي قسمة 40 على 30 لا تساوي صفر <span style="color:#ff0000;">أو</span> اذا كانت باقي قسمة 30 على 30 لا تساوي صفر</span> قم بإنقاص قيمة المتغير GCD بواحد.</p>
<p>طيب البعض يمكن يتساءل: لماذا لم نستعمل &amp;&amp; بدلاً من || ؟<br />
لو نتذكر طريقة عمل كل واحد منهم سنعرف السبب ..<br />
لو استخدمنا &amp;&amp; ، لن يتم تنفيذ محتوى while ، إلا إذا كان كل الطرفين &#8211; الموجودين في الشرط – صحيحين ، أي أن كل الرقمين باقي قسمتهم على المتغيّر لا تساوي صفر.<br />
يعني في المثال الأخير ، لو استعملنا &amp;&amp; في الشرط ، لن يدخل في محتوى while ، لأن 0=!30%40 ستكون True ، ولكن  0=!30%30 ستكون False ، لذلك لن يتم تنفيذ محتوى while.</p>
<p>ولو استخدمنا || ، سيتم تنفيذ محتوى while في جميع الحالات ، إلا إذا كان كل الطرفين False ، يعني كل الطرفين باقي قسمتهم على المتغيّر تساوي صفر ، وهذا معناه بأن المتغير أصبح الآن يحمل قيمة العامل المشترك الأكبر.<br />
أرجو أن أكون وفِّقت في توضيح الفكرة و المعلومة. <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
بما أننا الآن عرفنا كيف نوجد القاسم المشترك الأكبر ، الباقي بسيط ان شاء الله وسأجعله واجب لكم <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ، أكملوا حل السؤال وإذا واجهتكم مشكلة اكتبوها ، وسنتعاون في حلِّها سويةً إن شاء الله.</p>
<p>ولمن يريد أن يزيد استيعابه لهذه المسألة ، أرفقت مع ملف الشّرح برنامج لحلها في ثلاث حالات: الأولى إذا كان الرقم الأول أكبر من الرقم الثاني ، والثانية إذا كان الرقم الأول أصغر من الثاني ، والثالثة إذا كان الرقمين متساويين. وقمت بحلّ الحالة الأولى عن طريق أمر for ، والحالة الثانية عن طريق أمر while للتنويع <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p style="text-align:center;"><a title="برنامج إيجاد القاسم المشترك الأكبر بين رقمين" href="http://dl.getdropbox.com/u/1693311/JavaScript_lessons/Example3-GCD.html">لتحميل البرنامج</a></p>
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<h1><span style="color:#0000ff;"><a name="string">String methods -10 :</a></span></h1>
<p style="text-align:right;">الآن نحن نعلم بأن 95 يعتبر متغيِّر عادي ، و &#8216;95&#8242; أو &#8216;Learner&#8217; يعتبرون string. في البرمجة توجد methods تعطينا إمكانيات للتحكّم و التعامل مع الـ strings ، وفي المنهج تم شرح ثلاثة منها وسأقوم بتفصيلها الآن.</p>
<p>قبل أن أبدأ بها ، أحب أن أوضّح نقطة بسيطة: الآن لو افترضنا بأن لدينا string يحتوي على كلمة Learner ، هذا الـ string -وأي string غيره – يكون له طول ، الطول يكون عدد الأحرف الموجودة فيه ، يعني على مثالنا سيكون طول الـ string هو 7 لأن عدد الأحرف كلها 7.<br />
وأيضاً كل حرف في الـ string سيكون له مركز أو ترتيب ، الترتيب عادي ولكن الاختلاف فقط هو في بداية الترتيب ، لأن أول حرف سيكون ترتيبه 0 وليس 1 كما هو متعارف عليه في الواقع.</p>
<p>يعني بالنسبة لحرف L في كلمة Learner سيكون ترتيبه أو مركزه هو 0 ، وحرف n مثلاً سيكون ترتيبه 4.<br />
وفي الجدول التالي توضيح أكثر:</p>
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/string_index_length_sum.png"><img class="aligncenter size-full wp-image-314" title="String_index_length_sum" src="http://aoum150.files.wordpress.com/2009/07/string_index_length_sum.png?w=315&#038;h=79" alt="String_index_length_sum" width="315" height="79" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">
<h2><span style="color:#993366;">1- ()charAt :</span></h2>
<p style="text-align:right;">هذا المثود المفترض أن نضع بين القوسين التابعة له رقم ، وهو سيعطينا الحرف المقابل لهذا الرقم. لو ترجمت الأمر باللغة العادية سيكون كأننا نقول: أعطنا الحرف الموجود في هذا المركز.</p>
<p>لنفرض أننا قمنا بتعريف المتغير التالي ونوعه string :</p>
<p style="text-align:center;" dir="ltr">var userName = &#8216;Learner&#8217;;</p>
<p style="text-align:right;">لو كتبنا مثلاً:</p>
<p style="text-align:center;" dir="ltr">userName.charAt(0);</p>
<p style="text-align:right;">ستكون نتيجة هذا الأمر L</p>
<p>نلاحظ أن طريقة كتابة الـ method تكون عن طريق كتابة اسم المتغيِّر الذي نوعه string ، ثم نقطة . ثم كتبنا اسم المثود.<br />
يجب الانتباه إلى حرف A الكبير الموجود في المثود ، لأننا لو كتبنا بدلاً منه حرف a الصغير لن يعمل البرنامج!<br />
لو وضعنا هذا الأمر الأخير في داخل أمر الكتابة في المتصفح كالتالي:</p>
<p style="text-align:center;" dir="ltr">document.write(userName.charAt(0));</p>
<p style="text-align:right;">سيكتب لنا في المتصفح L ، ولو استبدلنا الصفر برقم 6 سيكتب لنا r .</p>
<p>فائدة هذا الأمر هو اننا نستطيع أن نعرف مما يتكون الـ string ، مثلاً لو عملنا برنامج ومن ضمنه مكان لتسجيل اسم مستخدم وكلمة سر خاصة بالمستخدم ، نستطيع عن طريق هذا الأمر أن نتأكد مثلاً من أن أول خانة لا تكون رقم ، أو أن تتكون كلمة السر  من أحرف وأرقام مختلطة ببعض ، وغيرها &#8230;</p>
<h2><span style="color:#993366;">2- length :</span></h2>
<p style="text-align:right;">
<p style="text-align:right;">هذا المثود مهمّته هي أن يعطينا ويحدد لنا طول الـ string ، وهو لايحتاج إلى argument مثل باقي الـ methods ، فهو يستطيع العمل بدونها.</p>
<p>لو كان لدينا هذا الـ string في البرنامج:</p>
<p style="text-align:center;" dir="ltr">var userName = &#8216;Learner&#8217;;</p>
<p style="text-align:right;">ثم كتبنا هذا الأمر لنعرف طول الكلمة:</p>
<p style="text-align:center;" dir="ltr">userName.length;</p>
<p style="text-align:right;">ستكون النتيجة 7 ..</p>
<p>طيب لو كان الـ string الذي لدينا كالتالي:</p>
<p style="text-align:center;" dir="ltr">var sentence = &#8216;Hello World&#8217;;</p>
<p style="text-align:right;">ثم كتبنا:</p>
<p style="text-align:center;" dir="ltr">sentence.length;</p>
<p style="text-align:right;">ستكون النتيجة 11 لأن المسافة محسوبة أيضاً مع الأحرف! وأي شيء سيكون متواجد في الـ string سواءً كان رمزاً أو حرفاً أو رقماً أو أي شيء ، سيتم احتسابه أيضاً ومعاملته كالحروف.</p>
<p>فائدة هذا الأمر تكون عندما نأخذ كلمة من المستخدم ، عن طريقه نستطيع أن نعرف طول الكلمة ، لو أردنا مثلاً عمل برنامج لتسجيل اسم مستخدم و كلمة سر خاصة بالمستخدم ، نستطيع عن طريق هذا الأمر أن نحدد أدنى طول لكلمة السر ، مثل أن لاتقل عن 6 خانات.</p>
<h2><span style="color:#993366;">3- ()indexOf :</span></h2>
<p style="text-align:right;">هذا الأمر نقوم بكتابة حرف في داخل الأقواس وسيقوم بتحديد مكان أو مركز الحرف. فلو كان لدينا الـ string التالي:</p>
<p style="text-align:center;" dir="ltr">var userName = &#8216;Learner&#8217;;</p>
<p style="text-align:right;">ثم قمنا بكتابة الأمر التالي:</p>
<p style="text-align:center;" dir="ltr">userName.indexOf(&#8216;L&#8217;);</p>
<p style="text-align:right;">ستكون النتيجة 0</p>
<p>ولو غيرنا القيمة كالتالي:</p>
<p style="text-align:center;" dir="ltr">userName.indexOf(&#8216;n&#8217;);</p>
<p style="text-align:right;">ستكون النتيجة 4</p>
<p>ولو غيرناها لـ :</p>
<p style="text-align:center;" dir="ltr">userName.indexOf(&#8216;e&#8217;);</p>
<p style="text-align:right;">نلاحظ انه يوجد حرفين مشابهين لهذا الحرف في الـ string ، والنتيجة ستكون مكان أول حرف وهو 1.</p>
<p>طيب لو كان الـ string الذي لدينا:</p>
<p style="text-align:center;" dir="ltr">var sentence = &#8216;Hello World&#8217;;</p>
<p style="text-align:right;">وكتبنا هذا الأمر:</p>
<p style="text-align:center;" dir="ltr">sentence.indexOf(&#8216;World&#8217;);</p>
<p style="text-align:right;">سيعطينا البرنامج مكان أول حرف في هذه الكلمة وهو 6.</p>
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<h2><span style="color:#008080;">مثال تطبيقي على ماسبق:</span></h2>
<p style="text-align:right;">لو جاء لنا سؤال يقول: اعمل برنامج يقوم بأخذ اسم المستخدم ، ثم يقوم البرنامج بعرض كل حرف من أحرف الاسم في سطر مستقل.</p>
<p>أولاً: سنقوم بتعريف متغير ونجعل المستخدم يكتب اسمه ، وسنحفظ الاسم في هذا المتغير:</p>
<p style="text-align:left;" dir="ltr">var userName = window.prompt(&#8216;Please enter your name:&#8217;, &#8221;);</p>
<p style="text-align:right;">ثانياً: عن طريق أمر for سنجعل البرنامج يطبع كل حرف من هذا الاسم في سطر مستقل:<br />
قبلما أبدأ في الخطوة الثانية ، أريدكم أول شيء أن تفهموا كيف سنطبع كل حرف في سطر منفصل ..<br />
طبعاً لتحديد وللتعامل مع كل حرف سنستعمل مثود ()charAt<br />
فإذا أردنا طباعة كل حرف سنستعمل هذه الأوامر:</p>
<p style="text-align:center;" dir="ltr">charAt(0)<br />
charAt(1)<br />
charAt(2)<br />
charAt(3)<br />
إلى أن ينتهي عدد الأحرف</p>
<p style="text-align:right;">لكننا بالطبع لن نكتبها بهذا بالشكل لسببين ، الأول هو أننا لانعرف كم عدد الأحرف التي أدخلها المستخدم ، والثاني هو أن كتابتها بهذا الشكل لو كنّا نعرف كم عدد الأحرف سيحتاج لوقت وجهد كبيرة.</p>
<p>لذلك سنستغل قوة أمر for ، وسنضع فيه متغير يبدأ من الصفر ثم يزيد بواحد في كل دورة حتى يتم طباعة كل الأحرف ، هذا المتغيِّر سنستخدمه بدلاً من الأرقام في داخل مثود ()charAt ، وسيكون الشرط عبارة عن: قيمة المتغيَّر تكون أصغر من طول الاسم ، لأنه كما تعلّمنا: مركز آخر حرف في الـ string يكون أقل من طول الـ string بواحد ، فلو كان طول الـ string هو 7 ، سيكون مركز آخر حرف فيها هو 6.</p>
<p style="text-align:left;" dir="ltr">for (var i=0; i&lt;userName.length; i=i+1) {<br />
}</p>
<p style="text-align:right;">مرة أخرى: i ستحل محل الأرقام في داخل أمر ()charAt ، وكما رأينا قبل قليل ، فائدة أمر length هي أنه يعطينا عدد الأحرف الموجودة في الـ string. مثلاً لو كان عدد أحرف الـ string يساوي 7 ، المتغيِّر i ستزيد قيمته سبع مرات بواحد ، حتى يصل إلى رقم 6 وهو مركز آخر حرف في string طوله أو عدد أحرفه 7.<br />
وبالطبع لايمكننا أن نجعل المتغيِّر i يبدأ من رقم 1 مثلاً! لأننا هكذا سنتجاوز الحرف الأول في الـ string وسنبدأ من الحرف الثاني.</p>
<p style="text-align:right;">طيب ، الآن سنكتب أمر طباعة كل حرف في سطر مستتقل في داخل محتوى أمر for :</p>
<p style="text-align:left;" dir="ltr">for (var i=0; i&lt;userName.length; i=i+1) {<br />
document.write(userName.charAt(i) + &#8216;&lt;br/&gt;&#8217;);<br />
}</p>
<p style="text-align:right;">سأشرح أول دورتين أو عمليتي تكرار حتى تتضح لكم الصورة أكثر بافتراض أن الـ string طوله 7 ..<br />
أولاً ستبدأ i وقيمتها 0 ، ثم ستتم عملية المقارنة 7 &gt; 0 ، والنتيجة صحيحة لذلك سيدخل في المحتوى ، وسيقوم بتنفيذ هذا الأمر:</p>
<p style="text-align:center;" dir="ltr">document.write(userName.charAt(0) + &#8216;&lt;br/&gt;&#8217;);</p>
<p style="text-align:right;">ثم سيذهب للجزء الثالث وسيزيد قيمة i بواحد لتصبح قيمتها تساوي 1<br />
ثم سيرجع للقسم الثاني ويتحقق من الشرط وسيكون الشرط صحيح ، لذلك سيدخل للمحتوى مرة أخرى وسينفذ هذا الأمر:</p>
<p style="text-align:center;" dir="ltr">document.write(userName.charAt(1) + &#8216;&lt;br/&gt;&#8217;);</p>
<p style="text-align:right;">هكذا نكون طبعنا الحرف الثاني في السطر الثاني ، وسيستمر البرنامج بالعمل حتى يقوم بكتابة كل الأحرف السبعة ، كل حرف في سطر مستقل. وهذا هو الكود بعد تجميعه:</p>
<p style="text-align:left;" dir="ltr">var userName = window.prompt(&#8216;Please enter your name:&#8217;, &#8221;);</p>
<p style="text-align:left;" dir="ltr">for (var i=0; i&lt;userName.length; i=i+1)<br />
{<br />
document.write(userName.charAt(i) + &#8216;&lt;br/&gt;&#8217;);<br />
}</p>
<p style="text-align:right;">
<p style="text-align:right;">هذه الفكرة والطريقة مهمة جداً في عالم البرمجة وتساعد على معرفة قوة أمر for وفوائده ، لذلك حاول أن تفهمها بشكل جيِّد.</p>
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<h1><span style="color:#0000ff;"><a name="arrays">11- المصفوفات Arrays :</a></span></h1>
<p style="text-align:right;">المصفوفات أو مايسمّى بـ Arrays هي متغيّرات تسمح لنا بتخزين أكثر من قيمة فيها ، وكل قيمة نستطيع الحصول عليها من خلال مركزها أو ترتيبها في المصفوفة. مثلاً لو كنا نريد أن نحفظ تكاليف الأشهر للسنة في برنامج لنقوم بأخذ متوسط التكاليف الشهرية ، بدلاً من أن نقوم بحفظ تكلفة كل شهر في متغير خاص ، نستطيع أن ننشئ مصفوفة واحدة حجمها 12 (عدد الأشهر) ثم نضع تكاليف الأشهر في المصفوفة.</p>
<p>توجد أكثر من طريقة لإنشاء المصفوفات وسنستعرضها جميعها إن شاء الله. لو افترضنا بأننا نريد أن ننشئ مصفوفة تحتوي على أسماء أشهر السنة الميلادية:</p>
<p><strong>الطريقة الأولى:</strong></p>
<p style="text-align:center;" dir="ltr">var monthsArray = new Array(12);<br />
monthsArray[0] = &#8216;January&#8217;;<br />
monthsArray[1] = &#8216;February&#8217;;<br />
&#8230;<br />
حتى نصل إلى آخر شهر<br />
monthsArray[11] = &#8216;December&#8217;;</p>
<p style="text-align:right;">هنا قمنا بإنشاء مصفوفة اسمها monthsArray . وفائدة new Array هي إخبار البرنامج بأن المتغير الذي أنشأناه هو لمصفوفة وليس متغيِّر عادي (مثل طريقة تعريف الـ string). رقم 12 المكتوب بين القوسين يدل على أن حجم المصفوفة (يعني عدد عناصرها) هو 12.<br />
هذه الطريقة استخدامها قليل ، لأنه توجد طرق أخرى أسهل وأسرع في الكتابة.</p>
<p>طبعاً أول عنصر في المصفوفة رقمه أو ترتيبه يكون 0 مثل رقم أول حرف في الـ string ، لذلك أول عنصر في مصفوفتنا هذه سيكون رقمه 0 وآخر عنصر سيكون رقمه 11 .</p>
<p><strong>الطريقة الثانية:</strong></p>
<p style="text-align:center;" dir="ltr">var monthsArray = &#8216;January&#8217;,'February&#8217;,'March&#8217;,'April&#8217;,'May&#8217;, &#8216;June&#8217;,'July&#8217; ,&#8217;August&#8217;,'September&#8217;,'October&#8217;,'November&#8217;,'December&#8217;];</p>
<p style="text-align:right;">نلاحظ ان هذه الطريقة أسهل بكثير من الطريقة الأولى وأيضاً نلاحظ بأن أسماء الأشهر مكتوبة بين علامتي تنصيص (للدلالة على أنها string) ، وتفصل بينهم فاصلة عادية , ووضع العناصر بين القوسين [] يخبر البرنامج بأنهم عناصر مصفوفة ، يعني بدلاً من كتابة new Array كما في الطريقة الأولى ، قمنا بإضافة العناصر مباشرة بين القوسين [] للتعريف بالمصفوفة.<br />
<strong> </strong></p>
<p style="text-align:right;"><strong>الطريقة الثالثة:</strong><br />
هذه الطريقة تشبه الأولى ، ولكن تختلف عنها بأننا لن نحدد حجم المصفوفة فيها، بمعنى سنترك مابين القوسين فارغ بدون رقم. في كثير من الأحيان عندما نستعمل المصفوفات نكون لانعلم كم عدد العناصر التي سنضعها في المصفوفة إما لكثرتها أو لأنها غير معلومة لدينا في وقت كتابة البرنامج أو لأننا نريد المستخدم أن يكتبها ، وفي هذه الحالة سنستعمل هذه الطريقة:</p>
<p style="text-align:center;" dir="ltr">var monthsArray = new Array();</p>
<p style="text-align:right;">وبعده بإمكاننا كتابة عناصر المصفوفة بنفس الطريقة الأولى ، وبإمكاننا أن نجعل المستخدم يكتب العناصر أيضاً عن طريق كتابة<br />
اسم المصفوفة ومركز العنصر وبعدها علامة يساوي وبعدها أمر ()window.prompt ، مثل:</p>
<p style="text-align:center;" dir="ltr">monthsArray[0] = window.prompt(&#8216;Enter the first month name:&#8217;, &#8221;);</p>
<p style="text-align:right;">وعندما يدخل المستخدم اسم الشهر الأول سيتم تخزينه في المركز 0 في هذه المصفوفة.</p>
<p>طيب الآن عرفنا كيف نعرِّف وننشئ المصفوفة ، وكيف نضع قيم فيها، لذلك سننتقل إلى بعض الـ methods الهامّة والتي تساعدنا في التعامل مع المصفوفات.</p>
<p style="text-align:right;">
<h2><span style="color:#993366;">1- ()indexOf :</span></h2>
<p style="text-align:right;">
<p style="text-align:right;">نفس الأمر الذي استعملناه مع الـ string ، وكانت وظيفته هي تحديد مكان الحرف في الـ string . في المصفوفات وظيفته هي تحديد مركز مابين القوسين في داخل المصفوفة. على سبيل المثال لو كان لدينا مصفوفة أشهر السنة:</p>
<p style="text-align:center;" dir="ltr">var monthsArray = &#8216;January&#8217;,'February&#8217;,'March&#8217;,'April&#8217;,'May&#8217;,'June&#8217;,'July&#8217;, &#8216;August&#8217;,'September&#8217;,'October&#8217;,'November&#8217;,'December&#8217;];</p>
<p style="text-align:right;">إذا استعملنا الأمر التالي:</p>
<p style="text-align:center;" dir="ltr">document.write(monthsArray.indexOf(&#8216;January&#8217;));</p>
<p style="text-align:right;">سيكتب لنا في المتصفح رقم 0 ، أي أن هذا الأمر قام بتحديد مركز أو ترتيب هذا الشهر في المصفوفة ، وهذه الطريقة مهمة في بعض الحالات ، مثل إذا أردنا البحث في عناصر المصفوفة وسيتم التطرق لها لاحقاً إن شاء الله.</p>
<p style="text-align:right;"><span style="color:#993366;"><br />
</span></p>
<h2><span style="color:#993366;">2- length :</span></h2>
<p style="text-align:right;">
<p style="text-align:right;">أيضاً نفس الأمر الذي استعملناه مع الـ strings ، ووظيفته هنا هي تحديد حجم أو عدد عناصر المصفوفة. مثلاً مصفوفة الأشهر:</p>
<p style="text-align:center;" dir="ltr">var monthsArray = &#8216;January&#8217;,'February&#8217;,'March&#8217;,'April&#8217;,'May&#8217;,'June&#8217;,'July&#8217;, &#8216;August&#8217;,'September&#8217;,'October&#8217;,'November&#8217;,'December&#8217;];</p>
<p style="text-align:right;">لو كتبنا هذا الأمر:</p>
<p style="text-align:center;" dir="ltr">document.write(monthsArray.length);</p>
<p style="text-align:right;">سيكتب في المتصفح رقم 12 لأن عدد عناصر المصفوفة هو 12 .</p>
<p style="text-align:right;">
<p>سؤال: كيف نعمل برنامج فيه مصفوفة لأسماء أشهر السنة ، ونجعل المستخدم يدخل أسماء الأشهر ؟<br />
جواب: تتذكرون الطريقة التي استعملناها لطباعة كل حرف في الـ string في سطر مستقل بواسطة أمر for ؟<br />
سنستعمل نفس الفكرة بالضبط ..</p>
<p>أولاً ننشئ مصفوفة ونسميها ونحدد حجمها 12 لأن عدد الأشهر 12</p>
<p style="text-align:center;" dir="ltr">var monthsArray = new Array(12);</p>
<p style="text-align:right;">ثانياً نعمل أمر for ، لإظهار رسالة لأخذ اسم الشهر وتخزينها في المكان المناسب في المصفوفة ، وسنعرِّف متغيِّر i حتى يتحكّم بعدد مرات التكرار:</p>
<p style="text-align:left;" dir="ltr">for (var i=0; i&lt;monthsArray.length;i++) // i=i+1 is the same as i+=1 and i++<br />
{<br />
monthsArray[i] = window.prompt(&#8216;Enter the month name:&#8217;, &#8221;);<br />
}</p>
<p style="text-align:right;">في الدورة الأولى في هذا الأمر ستكون قيمة i = 0 ، أي أن الأمر الموجود في محتوى for سيكون كالتالي:</p>
<p style="text-align:center;" dir="ltr">monthsArray[0] = window.prompt(&#8216;Enter the month name:&#8217;, &#8221;);</p>
<p style="text-align:right;">وفي الدورة الثانية أو التكرار الثاني ستكون قيمة i = 1 ، وسيكون الأمر الموجود في محتوى for كالتالي:</p>
<p style="text-align:center;" dir="ltr">monthsArray[1] = window.prompt(&#8216;Enter the month name:&#8217;, &#8221;);</p>
<p style="text-align:right;">وسيستمر بالتكرار حتى تصبح i=12 ، وعندها سيصبح الشرط الموجود خاطئ ولن يتم تنفيذ المحتوى ، لأن monthsArray.length يساوي 12 &#8230; وبالتالي سيكون الشرط 12 &gt; 12 ، والنتيجة False.</p>
<p>لو وضعنا بدلاً من علامة (أصغر من) علامة (أصغر من أو يساوي) سيكون الشرط صحيح وسيكون الأمر الموجود في المحتوى كالتالي:</p>
<p style="text-align:right;">
<p style="text-align:center;" dir="ltr">monthsArray[12] = window.prompt(&#8216;Enter the month name:&#8217;, &#8221;);</p>
<p style="text-align:right;">وهذا معناه انه طلب من المستخدم كتابة اسم شهر رقم 13 (لأننا بدأنا من 0) وهذا يعني أن النهاية لابد أن تكون 11 حتى تكتمل الاثني عشر شهراً ، وإذا أكملنا ل12 مثل ماعملنا في آخر أمر ، سيكون معناه بأننا طلبنا كتابة اسم الشهر رقم 13 !<br />
هذا الكلام هو لزيادة توضيح فائدة أمر for لمثل هذه الأشياء.</p>
<p>للتلخيص هذا جدول يلخِّص الـ methods الخاصة بالمصفوفات وطريقة عملها:</p>
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/array_methods_sum.png"><img class="aligncenter size-full wp-image-315" title="Array_methods_sum" src="http://aoum150.files.wordpress.com/2009/07/array_methods_sum.png?w=480&#038;h=53" alt="Array_methods_sum" width="480" height="53" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<h1><span style="color:#0000ff;"><a name="functions">12- الدَّوال Functions :</a></span></h1>
<p style="text-align:right;">الدَّوال أو الـ functions هي عبارة عن أكواد نكتبها لعمل شيء أو مهمّة معينة ، مثل تقريب رقم لخانتين عشرية أو لأي عملية أخرى. الدّوال فائدتها هي انها تقوم بتجزئة الأوامر البرمجية الكبيرة والكثيرة إلى أجزاء صغيرة يسهل قراءتها والتّعامل معها ، وفائدتها الرئيسية هي أننا نكتبها مرة واحدة ، ونستطيع أن نستخدمها في البرنامج عدة مرات عن طريق استدعاء الدّالة. يعني مثلاً إذا أردنا أن نكتب أكواد عدة مرّات لتقريب الأرقام في برنامجنا إلى خانتين عشرية ، نستطيع أن نكتب دالّة مهمّتها تقريب الأرقام إلى خانتين عشرية ، وكلما احتجناها نقوم باستدعائها بأمر قصير ، بدلاً من أن نقوم بكتابة أكواد و أوامر التقريب أكثر من مرة.</p>
<p>توجد دوال معرفة في الجافاسكربت تلقائياً مثل دالّة parseFloat ، والتي تقوم بتحويل المتغيِّر من نوع string إلى متغيّر عادي ، وتوجد دوال نحن نقوم بإنشائها ، وسنتحدَّث عنها في هذا القسم إن شاء الله.</p>
<h2><span style="color:#993366;"><a name="example4">البرنامج رقم 4: دالّة لتقريب الأرقام إلى خانتين عشرية</a></span></h2>
<p style="text-align:right;">لو كان لدينا البرنامج البسيط التالي:</p>
<p style="text-align:left;" dir="ltr">var numOne = 7;<br />
var numTwo = 3;<br />
var divideOneOnTwo = numOne / numTwo;<br />
var divideTwoOnOne = numTwo / numOne;</p>
<p dir="ltr">divideOneOnTwo = Math.round(divideOneOnTwo * 100) / 100;<br />
divideTwoOnOne = Math.round(divideTwoOnOne * 100) / 100;</p>
<p style="text-align:right;">
<p style="text-align:right;">البرنامج عبارة عن تعريف متغيرين: الأول قيمته 7 والثاني قيمته 3 ، وبعدها عرفنا متغيرين: الأول عبارة عن قسمة قيمة أول متغير على ثاني متغير ، والثاني عبارة عن قسمة ثاني متغير على أول متغير.</p>
<p>وبعدها قمنا بتقريب قيمة المتغيرين الجديدين إلى خانتين عشرية عن طريق أمر ()Math.round ، طبعاً طريقة التقريب تمّ شرحها بالتفصيل عندما شرحت أمر ()Math.round في قسم &#8220;بعض الأوامر الشائعة&#8221;.</p>
<p>طيب الآن بدل ما أكتب أوامر تقريب الرقم إلى خانتين عشرية في كل مرة أحتاج إلى تقريب رقم ، سأقوم بكتابة دالّة خاصة بهذه العملية ، وسأستدعيها كلّما احتجت إليها في البرنامج. سأسمّي الدّالة twoDPs ، اختصاراً لـ Two Decimal Places :</p>
<p style="text-align:left;" dir="ltr">function twoDPs(anyNumber)<br />
{<br />
return Math.round(anyNumber * 100) / 100;<br />
}</p>
<p style="text-align:right;">بالنسبة لأول كلمة function ، هي كلمة محجوزة وتدل على وجود دالّة.<br />
ثاني كلمة twoDPs ، هي اسم الدّالة.<br />
بالنسبة لكلمة anyNumber الموجودة بين القوسين هي بمثابة دليل ، أي أن أي رقم سيأتي في داخل القوسين ، سيتم وضعه في مكان هذه الكلمة الموجود في أمر ()Math.round .<br />
مثلاً لو استدعينا الدالة ، ووضعنا في داخل القوسين هذا الرقم 9.76543  ، سيتم التعويض بهذا الرقم في محتوى الدالة لتصبح:</p>
<p style="text-align:center;" dir="ltr">return Math.round(9.76543 * 100) / 100;</p>
<p style="text-align:right;">وطبعاً يمكننا تسميته بأي اسم نرغب فيه ولكن يفضّل بأن يدل الاسم على القيمة التي من المفترض أن يحتوي عليها. إذا لم تتضح فائدة هذه الكلمة تابعوا معي وستتضح إن شاء الله بعد قليل.</p>
<p>بالنسبة لكلمة return الموجودة في محتوى الدّالة ، هي تعني بأننا إذا قمنا باستدعاء هذه الدالة فنحن نريد منها أن تعيد لنا قيمة ، أي أننا في مثالنا نريدها أن تعيد لنا في المكان الذي استدعينا فيه الدالة الرقم بعد تقريبه لخانتين عشرية بدلاً من الخانات الكثيرة الموجودة حالياً.</p>
<p>الآن عملنا الدّالة ، لو افترضنا بأننا نريد استعمالها في نفس البرنامج الذي كتبناه في البداية ، سيتحوّل البرنامج إلى:</p>
<p style="text-align:left;" dir="ltr">var numOne = 7;<br />
var numTwo = 3;<br />
var divideOneOnTwo = numOne / numTwo;<br />
var divideTwoOnOne = numTwo / numOne;</p>
<p dir="ltr">divideOneOnTwo = twoDPs(divideOneOnTwo);<br />
divideTwoOnOne = twoDPs(divideTwoOnOne);</p>
<p style="text-align:right;">
<p style="text-align:right;">فقط نقوم بكتابة اسم الدالة وفي داخلها القيمة التي نريد تقريبها. دعونا نتتبّع الخطوات التي سيعملها البرنامج ابتداءً من أول أمر ، وانتهاءً بآخر أمر لتتضح لكم الصورة:<br />
السطر الأول والثاني: أنشأنا متغيرين الأول قيمته 7 والثاني قيمته 3<br />
السطر الثالث: أنشأنا متغير قيمته تساوي قسمة 7 على 3 ، يعني:</p>
<p style="text-align:center;" dir="ltr">divideOneOnTwo = 2.3333333333</p>
<p style="text-align:right;">السطر الرابع: أنشأنا متغير قيمته تساوي قسمة 3 على 7 ، يعني:</p>
<p style="text-align:center;" dir="ltr">divideTwoOnOne = 0.4285714286</p>
<p style="text-align:right;">السطر الخامس: طلبنا تغيير قيمة المتغيِّر divideOneOnTwo عن طريق دالّة twoDPs ، أي أننا نريد تقريب قيمته السابقة إلى خانتين عشرية. وسيكون الأمر كالتالي:</p>
<p style="text-align:center;" dir="ltr">divideOneOnTwo = twoDPs(2.3333333333);</p>
<p style="text-align:right;">في السطر الخامس ، قمنا باستدعاء دالّة ، لذلك سنذهب الآن للدالّة التي استدعيناها قبل تنفيذ مافي السطر الخامس. وستكون الدّالة بهذا الشكل:</p>
<p style="text-align:right;">
<p style="text-align:center;" dir="ltr">function twoDPs(2.3333333333)<br />
{<br />
return Math.round( 2.3333333333 * 100) / 100;<br />
}</p>
<p style="text-align:right;">
<p style="text-align:right;">هل اتّضحت لكم فائدة كلمة anyNumber الآن ؟<br />
الآن الدالّة ستعود للمكان الذي استدعيناها فيه &#8211; لأننا طلبنا منها ذلك عن طريق أمر return &#8211; بنتيجة العمليات الحسابية التي قامت بها ، وستضع النتيجة في مكانها. يعني السطر الخامس سيتحوّل بعد عمل الدّالة إلى:</p>
<p style="text-align:center;" dir="ltr">divideOneOnTwo = 2.33 ;</p>
<p style="text-align:right;">الآن سينتقل البرنامج للسطر السادس ، وسيفعل نفس مافعله مع السطر الذي سبقه. وسيكون شكل الأمر كالتالي:</p>
<p style="text-align:center;" dir="ltr">divideTwoOnOne = twoDPs(0.4285714286);</p>
<p style="text-align:right;">بعدها سيذهب البرنامج إلى الدالة ومعه الرقم 0.4285714286 ، وثم سيعود بالنتيجة الحاصلة من عمل الدالة وهو الرقم 0.43 ، وسيضعه في المكان الذي استدعينا فيه الدالة:</p>
<p style="text-align:center;" dir="ltr">divideTwoOnOne = 0.43 ;</p>
<p style="text-align:right;">يعني لو أضفنا بعد آخر أمر في هذا البرنامج أوامر لكتابة هذين المتغيرين في المتصفح ، ستكون النواتج 2.33 و 0.43 على التوالي.<br />
والكود الكامل للبرنامج سيكون:</p>
<p style="text-align:left;" dir="ltr">function twoDPs(anyNumber)<br />
{<br />
return Math.round(anyNumber * 100) / 100;<br />
}</p>
<p dir="ltr">var numOne = 7;<br />
var numTwo = 3;<br />
var divideOneOnTwo = numOne / numTwo;<br />
var divideTwoOnOne = numTwo / numOne;</p>
<p dir="ltr">document.write(divideOneOnTwo + &#8216; and &#8216; + divideTwoOnOne + &#8216; before rounding.&lt;br/&gt;&#8217;);</p>
<p dir="ltr">divideOneOnTwo = twoDPs(divideOneOnTwo);<br />
divideTwoOnOne = twoDPs(divideTwoOnOne);</p>
<p dir="ltr">document.write(divideOneOnTwo + &#8216; and &#8216; + divideTwoOnOne + &#8216; after rounding.);</p>
<p style="text-align:right;">
<p style="text-align:right;">طبعاً هنا أضفت أمرين لكتابة قيم المتغيرين قبل التقريب وبعد التقريب حتى تتّضح لكم الصورة أكثر. وستكون نتيجة هذا البرنامج المكتوبة في الصفحة هي:</p>
<p style="text-align:left;" dir="ltr"><span style="color:#808080;">2.3333333333333335 and 0.42857142857142855 before rounding.<br />
2.33 and 0.43 after rounding.</span></p>
<p style="text-align:center;"><a title="برنامج تقريب الأرقام العشرية إلى خانتين" href="http://dl.getdropbox.com/u/1693311/JavaScript_lessons/Example4-function-twoDPs.html">لتحميل البرنامج</a></p>
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 40px;">
<h2><span style="color:#993366;"><a name="example5">البرنامج رقم 5: دالّة لحساب المساحة بالمتر المربّع</a></span></h2>
<p style="text-align:right;">لو أردنا عمل برنامج يأخذ من المستخدم طول وعرض لمكان معين، وسيقوم البرنامج بحساب مساحة المكان عن طريق دالّة. وللتذكير المساحة تساوي الطول ضرب العرض!</p>
<p>أولاً ننشئ متغيرين وندع قيمتهم ليدخلها المستخدم:</p>
<p style="text-align:left;" dir="ltr">var length = window.prompt(&#8216;Enter the length&#8217;, &#8221;);<br />
var width = window.prompt(&#8216;Enter the width&#8217;, &#8221;);</p>
<p style="text-align:right;">ثانياً نعمل دالة لتقوم بعملية ضرب الطول في العرض وتعيد النتيجة لنا:</p>
<p style="text-align:left;" dir="ltr">function getArea(length, width)<br />
{<br />
return length * width;<br />
}</p>
<p style="text-align:right;">نلاحظ هنا أن بين القوسين يوجد اسمين، بمعنى حتّى تعمل هذه الدالة ، يجب أن نرسل لها رقمين ، وهي في حالتنا طول وعرض. ومن الممكن أن يكون داخل القوسين عدد لانهائي من القيم ، فهو شيء يعتمد على حاجتنا وغرضنا من كتابة الدّالة.</p>
<p>ثالثاً نضع أمر لكتابة النتيجة بالشكل التالي:</p>
<p style="text-align:left;" dir="ltr">document.write(&#8216;The area is &#8216; + getArea(length, width) );</p>
<p style="text-align:right;">نلاحظ هنا ان الدّالة استدعيناها في داخل أمر الطباعة وهو شيء عادي ، وأحببت أن أوضح لكم فيه أن استدعاء الدالة ممكن أن يكون في أي مكان في البرنامج.<br />
والـ arguments التي وضعناها بين القوسين ، هي قيم الطول والعرض التي أدخلها المستخدم.</p>
<p>البرنامج سيكون كالتالي:</p>
<p style="text-align:left;" dir="ltr">function getArea(length, width)<br />
{<br />
return length * width;<br />
}</p>
<p dir="ltr">var length = window.prompt(&#8216;Enter the length&#8217;, &#8221;);<br />
var width = window.prompt(&#8216;Enter the width&#8217;, &#8221;);</p>
<p dir="ltr">document.write(&#8216;The area is &#8216; + getArea(length, width) );</p>
<p style="text-align:right;">
<p style="text-align:right;">طبعاً الدّوال يتم كتابتها غالباً بين وسمي &lt;head&gt; ، بعكس أمر document.write مثلاً ، الذي من المفترض أن نكتبه بين وسمي &lt;body&gt; ، وإنشاء المتغيرات وتعريفها ممكن يكون في أي من المكانين.</p>
<p>طيب نمشي مع برنامجنا الأخير خطوةً خطوةً ، على افتراض أن المستخدم أدخل رقم 10 للطول و 7 للعرض:</p>
<p style="text-align:left;" dir="ltr">length = 10<br />
width = 7</p>
<p style="text-align:right;">سيذهب البرنامج الآن إلى أمر الكتابة في المتصفح وسيكتب في المتصفح:</p>
<p style="text-align:center;"><span style="color:#808080;">The area is </span></p>
<p style="text-align:right;">ثم سيجد الدالة getArea وفيها قيمتين 10 و 7 على التوالي. سيذهب البرنامج الآن للدالة التي استدعيناها بالرقمين 10 و 7 لتصبح بالشكل التالي:</p>
<p style="text-align:left;" dir="ltr">function getArea(10, 7)<br />
{<br />
return 10 * 7;<br />
}</p>
<p style="text-align:right;">ثم سيعود بنتيجة عمل الدالة وهو رقم 70 إلى أمر الكتابة في المتصفح الذي توقف عنده ، وسيكمل الكتابة وسيكتب 70 بجانب الكلام الذي كتبه مسبقاً لتكون نتيجة الكتابة النهائية:</p>
<p style="text-align:center;"><span style="color:#808080;">The area is 70</span></p>
<p style="text-align:right;">
<p style="text-align:center;"><a title="برنامج لحساب المساحة" href="http://dl.getdropbox.com/u/1693311/JavaScript_lessons/Example5-function-getArea.html">لتحميل البرنامج</a></p>
<p style="text-align:right;">
<p style="text-align:right;">إن شاء الله تكون وضحت لكم فوائد الدّوال وطرق استخدامها.</p>
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<h1><span style="color:#0000ff;"><a name="example6">البرنامج رقم 6: حساب متوسِّط التكاليف الشهرية</a></span></h1>
<p style="text-align:right;">لو أردنا عمل برنامج يقوم بأخذ التكاليف للاثني عشر شهراً من المستخدم ، ومن ثم يقوم بعرضها في المتصفح ، بكتابة كل شهر وبجانبه تكلفته في سطر مستقل ، وفي النهاية يكتب لنا متوسط التكاليف لهذه الأشهر.<br />
للتذكير: متوسط التكاليف يساوي مجموع التكاليف تقسيم عددها (عدد الأشهر).</p>
<p>سنمشي خطوة خطوة ، أولًا سنقوم بإنشاء مصفوفة لتحمل التكاليف الشهرية و حجمها 12 :</p>
<p style="text-align:left;" dir="ltr">var costsArray = new Array(12);</p>
<p style="text-align:right;">الآن سنجعل المستخدم يقوم بإدخال التكاليف في هذه المصفوفة باستخدام أمر for :</p>
<p style="text-align:left;" dir="ltr">for ( var i = 0 ; i &lt; costsArray.length ; i++ ) {<br />
costsArray[i] = window.prompt(&#8216;Enter the month cost&#8217;, &#8221;);<br />
}</p>
<p style="text-align:right;">هذا الأمر ناقص .. هل تذكرون بأن أي قيمة يقوم بإدخالها المستخدم تكون عبارة عن string ؟<br />
إذن ، لابد أن نقوم بإضافة أمر parseFloat حتى نستطيع التعامل مع الأرقام المُدخلة ، كالتالي:</p>
<p style="text-align:left;" dir="ltr">costsArray[i] = parseFloat(window.prompt(&#8216;Enter the month cost&#8217;, &#8221;));</p>
<p style="text-align:right;">الآن نفذنا أول خطوة ، وستظهر عن طريقها رسالة 12 مرة للمستخدم ، ليدخل فيها التكاليف الشهرية.<br />
الآن الرسالة التي ستظهر للمستخدم في كل مرة ستكون: <span style="color:#808080;">Enter the month cost</span> ، بمعنى أدخل تكاليف الشهر. لو افترضنا بأن المستخدم قام باستقبال مكالمة هاتفية أثناء إدخاله للتكاليف ، هل تعتقدون بأنه سيتذكر ماهو آخر شهر أدخل تكاليفه؟<br />
غالباً لن يتذكر ، والبرنامج لايوجد فيه شيء يذكّره باسم أو رقم الشهر الذي توقف عنده.</p>
<p>لذلك سنقوم بتعديل بسيط على الكود ، حتى يظهر رقم الشهر في الرسالة. التعديل بسيط جداًّ ، سنقوم بإضافة المتغير i في الرسالة ، ولكننا سنزيد قيمته بواحد ، لأننا لا نريده أن يقول للمستخدم أدخل تكاليف الشهر 0 ! ، نريده أن يقول 1 لأن المستخدم غالباً لن يفهم هذه الأرقام والأساسيات البرمجية.<br />
لذلك سنغير أمر الطباعة ليصبح بالشكل التالي:</p>
<p style="text-align:left;" dir="ltr">costsArray[i] = window.prompt(&#8216;Enter the monthly cost for month number &#8216; + (i+1), &#8221;);</p>
<p style="text-align:right;">لاحظوا أني وضعت i+1 في داخل قوس ، وهذا يجعل البرنامج يجمع قيمتهم قبل أن يقوم بإظهار الرسالة. وإذا لم نضع القوسين ، سيقوم البرنامج بإظهار قيمة i ، وبعده رقم 1 ، فهو سيعتقد بأن علامة الزائد هنا هي للجمع بين متغيرات مختلفة وليست العملية الرياضية. بمعنى لو جعلناهم بدون قوسين ، ستكون أول رسالة على الشكل التالي:</p>
<p style="text-align:center;"><span style="color:#808080;">Enter the monthly cost for month number 01</span></p>
<p style="text-align:right;">والرسالة الثانية ستكون:</p>
<p style="text-align:center;"><span style="color:#808080;">Enter the monthly cost for month number 11</span></p>
<p style="text-align:right;">بمعنى أنه قام بكتابة قيم i ومن ثم كتب رقم 1. ولكن اذا وضعناهم داخل قوسين سيتم جمع قيمتهم أولاً ثم سيكتب المجموع ، وهو 1 في المرة الأولى و2 في المرة الثانية.</p>
<p>طيب لو أردنا أن نستبدل الأرقام بأسماء الأشهر، كيف طريقتها؟ نفس الفكرة ، ولكن سنحتاج إلى كتابة مصفوفة تحتوي على أسماء الأشهر:</p>
<p style="text-align:left;" dir="ltr">var monthsArray = ['January','February','March','April','May','June','July', 'August','September','October','November','December'];</p>
<p style="text-align:right;">وسنقوم بالتعديل على أمر إظهار النافذة ليصبح بالشكل التالي:</p>
<p style="text-align:left;" dir="ltr">costsArray[i] = parseFloat(window.prompt(&#8216;Enter the monthly cost for &#8216; + monthsArray[i], &#8221;));</p>
<p style="text-align:right;">للتوضيح ، في أول عمليّة تكرار ، ستكون قيمة i = 0 ، وسيكون المحتوى كالتالي:</p>
<p style="text-align:left;" dir="ltr">costsArray[0] = parseFloat(window.prompt(&#8216;Enter the monthly cost for &#8216; + monthsArray[0], &#8221;));</p>
<p style="text-align:right;">والرسالة التي ستظهر في هذا الأمر هي:</p>
<p style="text-align:center;"><span style="color:#808080;">Enter the monthly cost for January</span></p>
<p style="text-align:right;">الآن انتهينا من أمر إظهار رسالة للمستخدم بشكل منسّق ومرتّب ليقوم بإدخال التكاليف الشهرية في المصفوفة. وللتذكير هذا ماقمنا بعمله حتى الآن:</p>
<p style="text-align:left;" dir="ltr">var costsArray = new Array(12);<br />
var monthsArray = ['January','February','March','April','May','June','July' ,'August','September','October','November','December'];</p>
<p dir="ltr">for ( var i = 0 ; i &lt; costsArray.length ; i++ )<br />
{<br />
costsArray[i] = parseFloat(window.prompt(&#8216;Enter the monthly cost for &#8216; + monthsArray[i], &#8221;));<br />
}</p>
<p style="text-align:right;">
<p style="text-align:right;">الآن نريد أن نقوم بكتابة اسم كل شهر وتكلفته في سطر منفصل ، ببساطة سنقوم بإضافة أمر الكتابة في داخل محتوى for بالشكل التالي:</p>
<p style="text-align:left;" dir="ltr">document.write(monthsArray[i] + &#8216; : &#8216; + costsArray[i] + &#8216;&lt;br/&gt;&#8217;);</p>
<p style="text-align:right;">أعتقد أن الأمر واضح إذا كنّا فهمنا طريقة استعمال المتغيِّر i بهذا الشكل. سيتغير الآن محتوى for ليصبح:</p>
<p style="text-align:left;" dir="ltr">for ( var i = 0 ; i &lt; costsArray.length ; i++ )<br />
{<br />
costsArray[i] = parseFloat(window.prompt(&#8216;Enter the monthly cost for &#8216; + monthsArray[i], &#8221;));</p>
<p style="text-align:left;" dir="ltr">document.write(monthsArray[i] + &#8216; : &#8216; + costsArray[i] + &#8216;&lt;br/&gt;&#8217;);<br />
}</p>
<p style="text-align:right;">
<p style="text-align:right;">الأمر الأول سيأخذ قيمة أول عنصر في المصفوفة وهي تكلفة أول شهر. والأمر الثاني سيقوم بكتابة اسم أول شهر وبعده نقطتين وبعدها قيمة أول عنصر في المصفوفة وهي تكلفة الشهر الأول.</p>
<p>طبعاً ترتيب الأوامر بهذا الشكل ضروري جداً، لأننا لو كتبنا الأمر الثاني قبل الأمر الأول ، سنكون طلبنا من البرنامج أن يكتب<br />
في المتصفّح تكلفة أول شهر قبل أن يدخلها المستخدم ، وبالطبع مكان التكلفة في المصفوفة سيكون فارغ ، ولذلك ستظهر لنا كلمة undefined في مكان التكلفة.</p>
<p>تبقى لنا الآن عملية حساب المتوسط للتكاليف الشهرية ، وكما نعرف المتوسط سيساوي مجموع التكاليف على عددها ، يعني سنحتاج الآن إلى إضافة أمر يقوم بجمع التكاليف الشهرية. لذلك سننشئ متغيِّر جديد &#8211; ليحسب مجموع التكاليف &#8211; باسم sum وستكون قيمته الأوليّة 0 .</p>
<p style="text-align:left;" dir="ltr">var sum = 0;</p>
<p style="text-align:right;">طيب الآن كيف نستطيع إضافة هذا المتغيِّر في داخل محتوى for حتى يجمع كل تكلفة جديدة يدخلها المستخدم؟<br />
للتبسيط ، نريد أن تكون قيمة هذا المتغيِّر في كل تكرار جديد تساوي قيمتها السابقة زائد التكلفة التي أدخلها المستخدم.<br />
يعني لو افترضنا أن المستخدم أدخل 1500 كأول تكلفة ، نريد sum تساوي 0 + 1500 .<br />
ولو أدخل 2000 للتكلفة الثانية ، تكون sum تساوي 1500 + 2000 .<br />
الأمر بسيط ولا يختلف عن الفكرة الأساسية لأمر for ، وسيكون بالشكل التالي:</p>
<p style="text-align:left;" dir="ltr">sum = sum + costsArray[i] ;</p>
<p style="text-align:right;">
<p>الأكواد التي كتبناها حتى الآن هي كالتالي:</p>
<p style="text-align:left;" dir="ltr">var costsArray = new Array(12);<br />
var monthsArray = ['January','February','March','April','May','June','July' ,'August','September','October','November','December'];</p>
<p dir="ltr">var sum = 0;</p>
<p dir="ltr">for ( var i = 0 ; i &lt; costsArray.length ; i++ )<br />
{<br />
costsArray[i] = parseFloat(window.prompt(&#8216;Enter the monthly cost for &#8216; + monthsArray[i], &#8221;));</p>
<p dir="ltr">document.write(monthsArray[i] + &#8216; , &#8216; + costsArray[i] + &#8216;&lt;br/&gt;&#8217;);</p>
<p dir="ltr">sum = sum + costsArray[i] ;<br />
}</p>
<p style="text-align:right;">
<p style="text-align:right;">الآن تبقا لنا المتوسط ، وسنقوم بعمل دالّة للقيام بالمهمة وسنستدعيها في أمر الكتابة في المتصفح:</p>
<p style="text-align:left;" dir="ltr">function getAverage(total, number)<br />
{<br />
return total / number;<br />
}</p>
<p style="text-align:right;">سمّينا الداة getAverage ، ووضعنا لها قيمتين لن تعمل بدونهم ، الأولى هي المجموع والثانية هي العدد. طبعاً المجموع الآن أصبح جاهزاً في المتغيِّر sum ، وبالنسبة للعدد ، نستطيع إمّا أن نكتب رقم 12 عند استدعاء الدّالة ، أو نستطيع استخدام خاصية length لمصفوفة التكاليف.</p>
<p>يعني أمر كتابة المتوسط للتكاليف الشهرية سيكون بالشكل التالي:</p>
<p style="text-align:left;" dir="ltr">document.write(&#8216;The monthly costs average is &#8216; + getAverage(sum,costsArray.length));</p>
<p style="text-align:right;">أين سنكتب هذا الأمر الأخير؟ في داخل محتوى for ؟ هل نريده أن يتنفَّذ أكثر من مرّة ؟ أم نريده أن يتنفّذ مرة واحدة فقط ؟<br />
طبعاً نريد تنفيذه مرة واحدة فقط ، وذلك في نهاية البرنامج ، ولذلك سنكتبه بعد أمر for .<br />
والكود الكامل سيكون بهذا الشكل:</p>
<p style="text-align:left;" dir="ltr">function getAverage(total, number)<br />
{<br />
return total / number;<br />
}</p>
<p dir="ltr">var costsArray = new Array(12);<br />
var monthsArray = ['January','February','March','April','May','June','July' ,'August','September','October','November','December'];</p>
<p dir="ltr">var sum = 0;</p>
<p dir="ltr">for ( var i = 0 ; i &lt; costsArray.length ; i++ )<br />
{<br />
costsArray[i] = parseFloat(window.prompt(&#8216;Enter the monthly cost for &#8216; + monthsArray[i], &#8221;));</p>
<p dir="ltr">document.write(monthsArray[i] + &#8216; , &#8216; + costsArray[i] + &#8216;&lt;br/&gt;&#8217;);</p>
<p dir="ltr">sum = sum + costsArray[i];<br />
}</p>
<p dir="ltr">document.write(&#8216;The monthly costs average is &#8216; + getAverage(sum,costsArray.length));</p>
<p style="text-align:right;">
<p style="text-align:right;">لو افترضنا بأن الأرقام التي أدخلها المستخدم هي بالترتيب التالي:</p>
<p style="text-align:center;">111 112 113 311 256 654 223 123 545 234 233 111</p>
<p style="text-align:right;">مجموع هذه الأرقام هو 3026 ..</p>
<p>والنتيجة المكتوبة في المتصفح ستكون كالتالي:</p>
<p style="text-align:left;" dir="ltr"><span style="color:#808080;">January , 111<br />
February , 112<br />
March , 113<br />
April , 311<br />
May , 256<br />
June , 654<br />
July , 223<br />
August , 123<br />
September , 545<br />
October , 234<br />
November , 233<br />
December , 111<br />
The monthly costs average is 252.16666666666666 </span></p>
<p style="text-align:right;">شكل المتوسِّط لم يعجبكم صح؟ <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
نستطيع هنا أن نستعمل الدّالة التي كتبناها سابقاً لتقريب الرقم إلى خانتين عشرية. الدّالة سنضعها في الأعلى مع الدالة الأولى ،  وسنقوم باستدعائها هذه المرة في داخل الدّالة التي تقوم بحساب المتوسط:</p>
<p style="text-align:right;">
<p style="text-align:left;" dir="ltr">function twoDPs(anyNumber)<br />
{<br />
return Math.round(anyNumber * 100) / 100;<br />
}</p>
<p style="text-align:right;">والآن نقوم بالتعديل على دالة حساب المتوسط ، وسنستدعي هذه الدالة في داخلها لتصبح بالشكل التالي:</p>
<p style="text-align:right;">
<p style="text-align:left;" dir="ltr">function getAverage(total, number)<br />
{<br />
return twoDPs(total / number);<br />
}</p>
<p style="text-align:right;">الآن إذا افترضنا أن المستخدم أدخل الأرقام السابقة ، سيكون المجموع هو 3026 والعدد طبعاً 12<br />
يعني ستكون دالة حساب المتوسط كالتالي:</p>
<p style="text-align:left;" dir="ltr">function getAverage(3026, 12)<br />
{<br />
return twoDPs(3026 / 12);<br />
}</p>
<p style="text-align:right;">أول شيء ستتم عملية قسمة 3026 على 12 والناتج هو 252.16666666666666<br />
ثم سينتقل هذا الناتج إلى دالّة تقريب الرقم إلى خانتين عشرية ، لتصبح دالة تقريب الأرقام بالشكل التالي:</p>
<p style="text-align:right;">
<p style="text-align:left;" dir="ltr">function twoDPs(252.16666666666666)<br />
{<br />
return Math.round(252.16666666666666 * 100) / 100;<br />
}</p>
<p style="text-align:right;">وفي النهاية النتيجة التي سترجع من هذه الدالة هي 252.17 ، وسترجع هذه القيمة إلى دالة حساب المتوسط وليس إلى أمر الطباعة!<br />
ودالّة حساب المتوسط ستقوم بدورها بإعادة هذه القيمة إلى المكان الذي استدعينا فيه الدالة.</p>
<p>الآن وبحمد الله اكتمل البرنامج معنا ، وهذا هو الكود النهائي:</p>
<p style="text-align:left;" dir="ltr">function getAverage(total, number)<br />
{<br />
return twoDPs(total / number);<br />
}</p>
<p dir="ltr">function twoDPs(anyNumber)<br />
{<br />
return Math.round(anyNumber * 100) / 100;<br />
}</p>
<p dir="ltr">var costsArray = new Array(12);<br />
var monthsArray = ['January','February','March','April','May','June','July', 'August','September','October','November','December'];<br />
var sum = 0;</p>
<p dir="ltr">for ( var i = 0 ; i &lt; costsArray.length ; i++ )<br />
{<br />
costsArray[i] = parseFloat(window.prompt(&#8216;Enter the monthly cost for &#8216; + monthsArray[i], &#8221;));</p>
<p dir="ltr">document.write(monthsArray[i] + &#8216; , &#8216; + costsArray[i] + &#8216;&lt;br/&gt;&#8217;);</p>
<p dir="ltr">sum = sum + costsArray[i] ;<br />
}<br />
document.write(&#8216;The monthly costs average is &#8216; + getAverage(sum,costsArray.length));</p>
<p style="text-align:right;">
<p style="text-align:right;">وإذا أدخلنا فيه نفس الأرقام السابقة ستكون النتيجة المكتوبة في المتصفح كالتالي:</p>
<p style="text-align:right;">
<p style="text-align:left;" dir="ltr"><span style="color:#808080;">January , 111<br />
February , 112<br />
March , 113<br />
April , 311<br />
May , 256<br />
June , 654<br />
July , 223<br />
August , 123<br />
September , 545<br />
October , 234<br />
November , 233<br />
December , 111<br />
The monthly costs average is 252.17</span></p>
<p style="text-align:right;">
<p style="text-align:center;"><a title="برنامج حساب متوسط التكاليف الشهرية" href="http://dl.getdropbox.com/u/1693311/JavaScript_lessons/Example6-Arrays-average.html">لتحميل البرنامج</a></p>
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<h1><span style="color:#0000ff;"><a name="htmlgui">13- HTML Graphical User Interface :</a></span></h1>
<p style="text-align:right;">سنتحدث هنا عن بعض أدوات واجهة المستخدم الخاصة بلغة HTML ، سأشرحها من ضمن الجافاسكربت لأنها لاتوجد لها فائدة إذا لم نستعملها مع أحد السكربتات كالجافاسكربت.</p>
<h2><span style="color:#993366;">1- صناديق الكتابة Text boxes :</span></h2>
<p style="text-align:right;">هي تحل محل النوافذ التي نظهرها للمستخدم لأخذ البيانات منه ، أي أنها تعتبر بديل لأمر ()window.prompt ، وهي من وجهة نظري أكثر أناقة من النوافذ ، وتساعد على تنظيم وترتيب صفحة الانترنت أكثر من النوافذ التي تعلمنا عليها سابقاً.</p>
<p style="text-align:right;">
<h2><span style="color:#993366;">2- الأزرار Buttons :</span></h2>
<p style="text-align:right;">ووظيفتها هي تنفيذ أمر عند الضغط عليها من قبل المستخدم.</p>
<p>والأزرار وصناديق الكتابة يعتبرون مكملين لبعض ، لأنه غالباً سنقول للبرنامج أن يفعل شيء معين بالكتابة أو القيمة الموجودة في الـ text box عند الضغط على الزر.<br />
الأزرار وصناديق الكتابة يجب أن تكون في داخل فورم ، ووسمه أو شفرته هي &lt;form&gt; &lt;/form&gt; وهي أكواد HTML ، ولكل صندوق كتابة أو فورم اسم خاص به ، وسنرى فائدة كل هذا الآن.</p>
<p>لعمل صناديق الكتابة نستعمل الأكواد التالية:</p>
<p style="text-align:center;" dir="ltr">&lt;input <span style="color:#ff0000;">type=&#8221;text&#8221;</span> <span style="color:#0000ff;">name=&#8221;anyName&#8221;</span> <span style="color:#339966;">value=&#8221;"</span>/&gt;</p>
<p style="text-align:right;">هذا الكود لو وضعناه في صفحة HTML ، سيظهر لنا في الصفحة مكان أو صندوق للكتابة.<br />
ولكن حتى الآن لاتوجد له فائدة لأننا لم نضع أوامر أو أكواد حتى تأخذ القيم المدخلة في هذا الصندوق. ونلاحظ بأنه يحتوي على ثلاثة عناصر هامة:<br />
<span style="color:#ff0000;">1- “type=&#8221;text :</span> يدل على أن النوع اللذي اخترناه هو &#8220;صندوق للكتابة&#8221; لأنه توجد أنواع أخرى مثل الأزرار وغيرها.<br />
<span style="color:#0000ff;">2- &#8220;name=&#8221;anyName :</span> هو اسم نضعه لهذا المربع وفائدة الاسم هي اذا أردنا أن نقوم بالتعامل مع هذا المربع عن طريق جافاسكربت سنذكر اسم المربع الذي نريد التعامل معه، ستتضح أكثر بعد قليل ان شاء الله.<br />
<span style="color:#339966;">3- “”=value :</span> هذا العنصر هو فائدة صندوق الكتابة الرئيسية ، غالباً سنترك قيمته فارغة ، والقيمة التي سيدخلها المستخدم في هذا الصندوق سيكون مكانها في هذا العنصر ، أي أننا إذا أردنا الحصول على ماقام المستخدم بكتابته في هذا الصندوق سنقوم بكتابة عنوان القيمة الموجودة هنا.</p>
<p>وفي النهاية قمنا بإغلاق هذا الكود بـ / ، لأنه ليس له شفرة إغلاق (مثل كود عرض الصور).</p>
<p>طيب دعونا ننتقل لطريقة عرض الأزرار الآن ، ثم سنشرح طريقة التعامل مع الاثنين.</p>
<p>لعرض زر في الصفحة ، سنستعمل الكود التالي:</p>
<p style="text-align:center;" dir="ltr">&lt;input <span style="color:#ff0000;">type=&#8221;button&#8221;</span> <span style="color:#0000ff;">value=&#8221;Click here&#8221;</span> <span style="color:#339966;">onclick=&#8221;"</span>/&gt;</p>
<p style="text-align:right;"><span style="color:#ff0000;">1- “type=&#8221;button :</span> يدل على أن النوع اللذي اخترناه هو “زر أو button&#8221;<br />
<span style="color:#0000ff;">2- value=&#8221;Click here&#8221;</span> هو الكلام الذي نريده أن يظهر على الزر ، مثل اضغط للتحويل أو اضغط هنا.<br />
<span style="color:#339966;">3- &#8220;&#8221;=onclick :</span> هذا هو أهم عنصر في الأزرار ، الأمر الذي سنكتبه هنا سيقوم بتنفيذه عندما يضغط المستخدم على الزر. وغالباً سيكون الأمر الموجود هنا عبارة عن استدعاء لدالّة.</p>
<p>ومثل سابقه .. في النهاية قمنا بإغلاق هذا الكود بـ / ، لأنه ليس له شفرة إغلاق (مثل كود عرض الصور).</p>
<p>إذا جمعنا الأمرين السابقين لعرض صندوق الكتابة والزر ، ووضعناهم بداخل فورم &lt;form&gt; ، وسمينا هذا الفورم بأي اسم ، سيكون الكود كامل كالتالي:</p>
<p style="text-align:left;" dir="ltr">&lt;form name=&#8221;formName&#8221;&gt;<br />
&lt;input type=&#8221;text&#8221; name=&#8221;anyName&#8221; value=&#8221;"/&gt;<br />
&lt;input type=&#8221;button&#8221; value=&#8221;Click here&#8221; onclick=&#8221;"/&gt;<br />
&lt;/form&gt;</p>
<p style="text-align:right;">لو قمنا الآن بوضع هذا الكود في داخل ملف HTML بين شفرتي &lt;body&gt; &lt;/body&gt; ، وفتحنا الملف بالمتصفِّح ، سنرى النتيجة التالية:</p>
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/textbox_button.png"><img class="aligncenter size-full wp-image-316" title="TextBox_button" src="http://aoum150.files.wordpress.com/2009/07/textbox_button.png?w=290&#038;h=46" alt="TextBox_button" width="290" height="46" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">طبعاً شكل الأيقونة يختلف من نظام تشغيل لآخر ، فهذه الصورة مأخوذة من نظام تشغيل ماكنتوش وليس ويندوز ، فلا تستغربوا إذا ظهرت لديكم بشكل مختلف قليلاً.<br />
الآن عرفنا كيف نعرضهم على الصفحة. دعونا ننتقل لطريقة التعامل معهم والاستفادة منهم عن طريق الجافاسكربت ..</p>
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<h1><span style="color:#0000ff;"><a name="example7">البرنامج رقم 7 : التحويل من لتر إلى جالون</a></span></h1>
<p style="text-align:right;">سنقوم بعمل برنامج يقوم بأخذ قيمة باللتر من المستخدم (عن طريق صناديق الكتابة) ومن ثم يحوِّلها إلى جالون ، مع العلم بأن الجالون يساوي 0.21998 لتر.</p>
<p>أول شيء سنقوم بعمل صندوقي كتابة ، الأول ليكتب فيه المستخدم كمية اللترات التي يريد تحويلها إلى جالون ، والثاني سنقوم بعرض نتيجة التحويل فيه (الكمية بالجالون). وطبعاً سنحتاج لعمل زر يقوم بعملية التحويل اذا ضغط عليه المستخدم.</p>
<p>فنكتب الأكواد الخاصة بعرض صندوقي الكتابة والزر كالتالي:</p>
<p style="text-align:left;" dir="ltr">&lt;form name=&#8221;converter&#8221;&gt;<br />
Enter the value in litres:<br />
&lt;br/&gt;<br />
&lt;input type=&#8221;text&#8221; name=&#8221;litres&#8221; value=&#8221;" /&gt;<br />
&lt;br/&gt;<br />
&lt;br/&gt;<br />
&lt;input type=&#8221;button&#8221; value=&#8221;Convert&#8221; onclick=&#8221;" /&gt;<br />
&lt;br/&gt;<br />
&lt;br/&gt;<br />
The equivalent value in gallons is:<br />
&lt;br/&gt;<br />
&lt;input type=&#8221;text&#8221; name=&#8221;gallons&#8221; value=&#8221;" /&gt;<br />
&lt;/form&gt;</p>
<p style="text-align:right;">أولاً: كتبنا شفرة &lt;form&gt; وسميناه converter ، حتى نضع في داخله صندوقي الكتابة وزر التّحويل.<br />
ثانياً: كتبنا أمر لعرض صندوق كتابة ، حتى يقوم المستخدم بكتابة الكمية باللتر في هذا الصندوق (ولذلك تركتنا قيمته value فارغة).<br />
ثالثاً: كتبنا أمر لعرض زر ، حتى يقوم بعملية التحويل ، وتركنا العنصر الثالث فارغاً الآن وسنعود له بعد قليل.<br />
رابعاً: كتبنا أمر لعرض صندوق كتابة ، نريد من البرنامج أن يقوم بعرض نتيجة التحويل فيه (ولذلك تركنا قيمته value فارغة).<br />
إذا استعرضنا نتيجة هذا الكود في المتصفِّح ، ستكون كالتالي:</p>
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/litres_to_gallons.png"><img class="aligncenter size-full wp-image-317" title="Litres_to_gallons" src="http://aoum150.files.wordpress.com/2009/07/litres_to_gallons.png?w=371&#038;h=185" alt="Litres_to_gallons" width="371" height="185" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">الآن كل ما قمنا بعمله هو مجرَّد منظر ، فهو لن يقوم بأي استجابة للمستخدم ، لأننا لم نضف له أي كود أو أمر جافاسكربت.</p>
<p>الآن سنعمل دالة تقوم بتحويل الكميات من لتر إلى  جالون ، وسنسميها litresToGallons :</p>
<p style="text-align:left;" dir="ltr">function litresToGallons(litres) {<br />
return litres * 0.21998;<br />
}</p>
<p style="text-align:right;">إلى الآن لم نقم بشيء جديد ، فقط أنشأنا دالة تقوم بتحويل القيمة التي تأتي إليها من لتر إلى جالون.<br />
القيمة التي أدخلها المستخدم في صندوق الكتابة الأول ، سنحصل عليها عن طريق هذا الأمر:</p>
<p style="text-align:center;">document.converter.litres.value</p>
<p style="text-align:right;">document : ثابت ولا يتغير.<br />
converter : هو الاسم الذي أعطيناه للفورم الذي يحتوي على صندوق الكتابة، وضحت فائدة الاسم الآن؟<br />
litres : هو اسم صندوق الكتابة الذي سنتعامل معه ، لأن مثل حالتنا يوجد صندوقي كتابة ، وعن طريق الاسم نستطيع التمييز  بينهم.<br />
value : هو المكان الذي كتب فيه المستخدم القيمة باللتر.</p>
<p>يعني صندوق الكتابة الثاني ، سيكون عنوان القيمة الخاصة فيه هو:</p>
<p style="text-align:center;">document.converter.gallons.value</p>
<p style="text-align:right;">الاختلاف الوحيد بين العنوانين هو اسم الصندوق فقط ، لأنهم موجودين في نفس الفورم ، وكلا الصندوقين ستكون قيمهم موجودة في value.</p>
<p>الآن سنقوم بعمل دالة ثانية ، وظيفتها هي عندما نستدعيها (بواسطة الزر) ستقوم بأخذ القيمة الموجودة في صندوق الكتابة الأول ، وسترسلها لدالة التحويل من لتر إلى جالون ، ثم ستقوم بإعادة النتيجة إلى صندوق الكتابة الثاني.</p>
<p>ببساطة أكثر ، نريد هذه الدّالة أن تقوم بتنفيذ هذا الأمر:</p>
<p style="text-align:center;" dir="ltr">document.converter.gallons.value = litresToGallons(document.converter.litres.value)</p>
<p style="text-align:right;">يعني ستقوم بجعل قيمة صندوق الكتابة الثاني (الخاص بالنتيجة) يساوي: القيمة الموجودة في الصندوق الأول بعد تحويلها إلى لتر عن طريق دالّة التحويل.</p>
<p>بمعنى لو قام المستخدم بكتابة 20 في صندوق الكتابة الأول ، سيكون الأمر بالشكل التالي:</p>
<p style="text-align:center;" dir="ltr">document.converter.gallons.value = litresToGallons(20)</p>
<p style="text-align:right;">بعدها سينتقل البرنامج إلى دالة التحويل من لتر إلى جالون ، بمعنى انه سيضرب رقم 20 في 0.21998 وستكون النتيجة 4.3996 ، وسيعود بهذه النتيجة وسيضعها في العنوان الخاص بصندوق الكتابة الثاني.</p>
<p>الآن سنكتب هذه الدالة:</p>
<p style="text-align:left;" dir="ltr">function convert() {<br />
document.converter.gallons.value = litresToGallons(document.converter.litres.value);<br />
}</p>
<p style="text-align:right;">في هذه الدالّة لم نقم بوضع علامة أو اسم بين القوسين لأننا لانحتاج لذلك ، أو بمعنى آخر ، إذا استدعينا الدالّة عن طريق الزر لا نحتاج لإرسال قيمة لها.<br />
الآن أصبح كل شيء جاهزاً للعمل ، تبقّى فقط أن نقوم باستدعاء الدالة الأخيرة بواسطة الزر ، فسنرجع لأكواد صناديق الكتابة والزر ، وسنضيف للزر استدعاء الدالة في عنصره الثالث onclick ، بالشكل التالي:</p>
<p style="text-align:left;" dir="ltr">&lt;form name=&#8221;converter&#8221;&gt;<br />
Enter the value in litres:<br />
&lt;br/&gt;<br />
&lt;input type=&#8221;text&#8221; name=&#8221;litres&#8221; value=&#8221;" /&gt;<br />
&lt;br/&gt;<br />
&lt;br/&gt;<br />
&lt;input type=&#8221;button&#8221; value=&#8221;Convert&#8221; onclick=&#8221;convert()&#8221; /&gt;<br />
&lt;br/&gt;<br />
&lt;br/&gt;<br />
The equivalent value in gallons is:<br />
&lt;br/&gt;<br />
&lt;input type=&#8221;text&#8221; name=&#8221;gallons&#8221; value=&#8221;" /&gt;<br />
&lt;/form&gt;</p>
<p style="text-align:right;">
<p style="text-align:right;">هذه الأكواد ستكون بين شفرتي &lt;body&gt; &lt;/body&gt;.<br />
وأكواد الدّوال سنضعها في داخل شفرات &lt;head&gt; &lt;/head&gt;.</p>
<p>فإذا جمعنا كل ماقمنا به ، ووضعناه في ملف HTML كامل ، سيكون بالشكل التالي:</p>
<p style="text-align:left;" dir="ltr">
<p dir="ltr">&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt; Litres to Gallons Converter &lt;/title&gt;</p>
<p dir="ltr">function litresToGallons(litres)<br />
{<br />
return litres * 0.21998;<br />
}</p>
<p dir="ltr">function convert()<br />
{<br />
document.converter.gallons.value =  litresToGallons(document.converter.litres.value)<br />
}<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;form name=&#8221;converter&#8221;&gt;<br />
Enter the value in litres:<br />
&lt;br/&gt;<br />
&lt;input type=&#8221;text&#8221; name=&#8221;litres&#8221; value=&#8221;" /&gt;<br />
&lt;br/&gt;<br />
&lt;br/&gt;<br />
&lt;input type=&#8221;button&#8221; value=&#8221;Convert&#8221; onclick=&#8221;convert()&#8221; /&gt;<br />
&lt;br/&gt;<br />
&lt;br/&gt;<br />
The equivalent value in gallons is:<br />
&lt;br/&gt;<br />
&lt;input type=&#8221;text&#8221; name=&#8221;gallons&#8221; value=&#8221;" /&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p style="text-align:right;">
<p style="text-align:right;">فإذا كتبنا رقم 20 في المربع الأول ، ثم ضغطنا على زر التحويل ، ستظهر لنا النتيجة التالية:</p>
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/litres_to_gallons_after.png"><img class="aligncenter size-full wp-image-318" title="Litres_to_gallons_after" src="http://aoum150.files.wordpress.com/2009/07/litres_to_gallons_after.png?w=381&#038;h=198" alt="Litres_to_gallons_after" width="381" height="198" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">طبعاً أهم شيء هنا ، هو أن نكون عرفنا كيف أخذنا القيمة التي كتبها المستخدم في مربع الكتابة ، وكيف جعلنا الزر يقوم بشيء معيَّن.</p>
<p>القيمة التي كتبها المستخدم في صندوق الكتابة ، أخذناها عن طريق هذا العنوان:</p>
<p style="text-align:center;">document.<span style="color:#ff0000;">converter</span>.<span style="color:#0000ff;">litres</span>.value<br />
ثابت.<span style="color:#0000ff;">اسم صندوق الكتابة</span>.<span style="color:#ff0000;">اسم الفورم</span>.ثابت</p>
<p style="text-align:right;">وبالنسبة للزر ، كل ما قمنا بعمله هو استدعاء دالّة في عنصر onclick ، هذه الدّالة تقوم بأخذ القيمة من صندوق الكتابة الأول ، وتقوم بتحويلها أو التعديل عليها ، ومن ثم عرضها في صندوق الكتابة الثاني.</p>
<p>عنوان صندوق الكتابة الثاني هو:</p>
<p style="text-align:center;">document.<span style="color:#ff0000;">converter</span>.<span style="color:#0000ff;">gallons</span>.value<br />
ثابت.<span style="color:#0000ff;">اسم صندوق الكتابة</span>.<span style="color:#ff0000;">اسم الفورم</span>.ثابت</p>
<p style="text-align:right;">طبعاً نستطيع تطوير البرنامج عن طريق إضافة دالّة تقريب الرقم إلى خانتين عشرية إذا أردنا ، عن طريق استدعائها في دالّة التحويل إلى جالون.</p>
<p>للتلخيص <span style="color:#0000ff;">صناديق الكتابة</span> <span style="color:#339966;">والأزرار</span> كلهم يحتاجون إلى ثلاث عناصر:<br />
1- type : <span style="color:#0000ff;">صناديق الكتابة نوعها text</span> ، و <span style="color:#339966;">الأزرار نوعها button</span> .<br />
2- <span style="color:#0000ff;">صندوق الكتابة له اسم name</span> ، و <span style="color:#339966;">الأزرار لها value</span> وتكون عبارة عن نص يظهر فوق الزر.<br />
3- <span style="color:#0000ff;">صندوق الكتابة له value</span> وهو المكان الذي سيحمل القيمة الموجودة في الصندوق ، و <span style="color:#339966;">الأزرار لها onclick</span> ، وهي ستنفذ الأمر الموجود فيه عند الضغط على الزر.</p>
<p style="text-align:right;">
<p style="text-align:center;"><a title="برنامج للتحويل من لتر إلى جالون" href="http://dl.getdropbox.com/u/1693311/JavaScript_lessons/Example7-ConvertingLtoG.html">لتحميل برنامج التحويل من لتر إلى جالون</a></p>
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<h1><span style="color:#0000ff;"><a name="example8">البرنامج رقم 8: البحث عن رمز الاتصال الدولي لدول العالم</a></span></h1>
<p style="text-align:right;">فكرة البرنامج هي أن يستطيع المستخدم أن يبحث عن رمز الاتصال الدولي التابع لأي دولة ، عن طريق كتابة اسم الدولة الكامل ، أو البحث عن اسم الدولة الذي يتبع لها رمز اتصال دولي يدخله المستخدم. بمعنى انه يوجد قسمين:</p>
<ol>
<li>أن يكتب اسم دولة ليحصل على رمز الهاتف الدولي الخاص بها.</li>
<li>أن يكتب رمز اتصال دولي ليعرف اسم الدولة التابعة له.</li>
</ol>
<p style="text-align:right;">وهذه هي واجهة البرنامج:</p>
<p style="text-align:right;"><a href="http://aoum150.files.wordpress.com/2009/07/internationaldialingcodes.png"><img class="aligncenter size-full wp-image-319" title="InternationalDialingCodes" src="http://aoum150.files.wordpress.com/2009/07/internationaldialingcodes.png?w=413&#038;h=452" alt="InternationalDialingCodes" width="413" height="452" /></a></p>
<p style="text-align:right;">
<p style="text-align:right;">في هذا البرنامج لن أشرح شيء ، ولكن سأكتب فكرة عمل البرنامج ، وللمعلومية ، نحن غير مطالبين بكتابة مثل هذا البرنامج ، فهو محاولة إجتهادية مني ، ولكن من يريد الاستفادة والتأكد من أنه فهم كل ماتم شرحه في الأقسام السابقة يجب أن يفهم طريقة عمل هذا البرنامج.</p>
<p>طريقة عمل البرنامج: في البداية أنشأت مصفوفتين:<br />
<strong>1- الأولى:</strong> كتبت فيها أسماء الدول. <strong>2- الثانية: </strong>كتبت فيها رموز الاتصال الدولي لهذه الدول.<br />
و يوجد هنا <span style="text-decoration:underline;">شرط ضروري</span> ، وهو أن مراكز عناصر الدول في مصفوفة الدول ، هي نفس مراكز الرمز الدولي الخاص بها في مصفوفة رموز الاتصال. بمعنى لو افترضنا بأن مركز السعودية في مصفوفة الدول هو 22 يجب أن يكون مركز الرمز 966 هو 22 في مصفوفة رموز الاتصال الدولي وإلا لن يعمل البرنامج بشكل صحيح.</p>
<p>عندما يقوم المستخدم بكتابة اسم دولة ، فإن البرنامج سيبحث عن مركز هذه الدولة في مصفوفة الدول عن طريق مثود indexOf ، وبعدها سيقوم باستدعاء الرمز الموجود في نفس هذا المركز من مصفوفة رموز الاتصال الدولي.</p>
<p>ونفس الفكرة إذا قام المستخدم بالبحث عن رمز اتصال ، سيقوم البرنامج بتحديد مركز هذا الرمز في مصفوفة رموز الاتصال ، ثم سيقوم بعرض الدولة الموجودة في نفس هذا المركز في مصفوفة الدول.</p>
<p>طبعاً البرنامج يوجد فيه عيب، وهو أن المستخدم إذا أراد أن يبحث عن رمز الاتصال الدولي لدولة معينة مثل United States ، يجب أن يكتب نفس الاسم &#8211; وحجم الأحرف – بالضبط ، فلو كتب united states أو USA مثلاً ستكون النتيجة undefined لأن هذه الكلمات غير موجودة في المصفوفة.</p>
<p>أعتقد بأنه يمكن إصلاح مشكلة تطابق حجم الأحرف عن طريق مثود معيَّن يقوم بتحويل الأحرف إلى كبيرة أو صغيرة ، ولكنه غير مشروح في منهجنا ولذلك لم أبحث عنه. أو من الممكن وضع أسماء بديلة للدول التي يمكن أن تسمى بأكثر من اسم ولكنها تحتاج إلى مجهود ليس بالقليل.</p>
<p>البرنامج مرفق مع هذا الملف وكتبت فيه بعض التعليقات للتوضيح ، ومن أراد توضيح أكثر أو لديه استفسار أنا في الخدمة في أي وقت ، والبرنامج متاح للجميع سواء للاطلاع أو التعديل والتطوير أو غيره.</p>
<p style="text-align:right;">
<p style="text-align:center;"><a title="برنامج البحث عن رمز الاتصال الدولي" href="http://dl.getdropbox.com/u/1693311/JavaScript_lessons/Example8-CountriesCodes.html">لتحميل برنامج البحث عن رمز الاتصال الدولي</a></p>
<p style="text-align:right;">
<p style="text-align:right;">
<p style="text-align:center;"><a href="#index">العودة لقائمة المحتويات</a></p>
<p style="margin:15px 0 70px;">
<p style="text-align:center;">تمَّ بحمد الله<br />
أتمنَّى أن أكون وفِّـقت في شـرح هـذه اللغـة الجـميـلـة بـبـسـاطـة وسهـولـة.<br />
في حال وجود أخطاء إملائية أو قواعدية أو في الشرح أتمنى أن تنبهوني عليها.<br />
أخوكم : المعتصم</p>
<p style="text-align:right;">
<p style="text-align:right;">
Posted in شروحات Tagged: Learner, M150A, unit-7, unit-8, جافاسكربت <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aoum150.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aoum150.wordpress.com/332/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aoum150.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aoum150.wordpress.com/332/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aoum150.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aoum150.wordpress.com/332/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aoum150.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aoum150.wordpress.com/332/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aoum150.wordpress.com/332/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aoum150.wordpress.com/332/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=332&subd=aoum150&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://aoum150.wordpress.com/2009/08/08/javascript_lesson/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">المعتصم</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/comparison_operators.png" medium="image">
			<media:title type="html">إشارات المقارنة</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/arithmetic_expressions.png" medium="image">
			<media:title type="html">الإشارات الحسابية في البرمجة</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/a_or_b.png" medium="image">
			<media:title type="html">A_or_B</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/a_and_b.png" medium="image">
			<media:title type="html">A_and_B</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/not_a.png" medium="image">
			<media:title type="html">not_A</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/or_and_not.png" medium="image">
			<media:title type="html">or_and_not</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/a_b.png" medium="image">
			<media:title type="html">A_B</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/a_and_b_not_a_and_b1.png" medium="image">
			<media:title type="html">A_and_B_not_A_and_B</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/nota_and_notb.png" medium="image">
			<media:title type="html">notA_and_notB</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/for1.png" medium="image">
			<media:title type="html">for</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/window-prompt1.png" medium="image">
			<media:title type="html">نتيجة أمر window.prompt</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/window-alert1.png" medium="image">
			<media:title type="html">نتيجة أمر window.alert</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/window-confirm2.png" medium="image">
			<media:title type="html">نتيجة أمر window.confirm</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/string_index_length_sum.png" medium="image">
			<media:title type="html">String_index_length_sum</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/array_methods_sum.png" medium="image">
			<media:title type="html">Array_methods_sum</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/textbox_button.png" medium="image">
			<media:title type="html">TextBox_button</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/litres_to_gallons.png" medium="image">
			<media:title type="html">Litres_to_gallons</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/litres_to_gallons_after.png" medium="image">
			<media:title type="html">Litres_to_gallons_after</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/internationaldialingcodes.png" medium="image">
			<media:title type="html">InternationalDialingCodes</media:title>
		</media:content>
	</item>
		<item>
		<title>شرح لغة HTML ومقدمة عن لغة XML</title>
		<link>http://aoum150.wordpress.com/2009/07/05/html_lesson/</link>
		<comments>http://aoum150.wordpress.com/2009/07/05/html_lesson/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 18:11:40 +0000</pubDate>
		<dc:creator>المعتصم</dc:creator>
				<category><![CDATA[شروحات]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Learner]]></category>
		<category><![CDATA[M150A]]></category>
		<category><![CDATA[unit-4]]></category>

		<guid isPermaLink="false">http://aoum150.wordpress.com/?p=228</guid>
		<description><![CDATA[

لتحميل الشرح على ملف بصيغة pdf
أنصح بقراءة الشرح من ملف الـ pdf لأن تنسيقه أفضل من الشرح الموجود في هذه الصفحة




&#160;
&#160;
قائمة المحتويات:

 ماهي لغة HTML ؟
 مثال تطبيقي
 ملخص لأهم الشفرات المستخدمة في لغة HTML
 التعليقات والملاحظات
 عيوب لغة HTML
 مقدمة عن لغة XML

&#160;
&#160;
1- ماهي لغة HTML ؟
HTML هي اختصار لجملة HyperText Markup Language ، [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=228&subd=aoum150&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:center;">
<p style="text-align:center;"><span id="more-228"></span></p>
<p style="text-align:center;"><a href="http://aoum150.files.wordpress.com/2009/08/html_v3.pdf">لتحميل الشرح على ملف بصيغة pdf</a></p>
<p style="text-align:center;">أنصح بقراءة الشرح من ملف الـ pdf لأن تنسيقه أفضل من الشرح الموجود في هذه الصفحة</p>
<p style="text-align:center;">
<p style="text-align:center;">
<p style="text-align:center;">
<p style="text-align:center;">
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1><span style="color:#0000ff;"><a name="index">قائمة المحتويات:</a></span></h1>
<ol>
<li> ماهي لغة HTML ؟</li>
<li> مثال تطبيقي</li>
<li> ملخص لأهم الشفرات المستخدمة في لغة HTML</li>
<li> التعليقات والملاحظات</li>
<li> عيوب لغة HTML</li>
<li> مقدمة عن لغة XML</li>
</ol>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1><span style="color:#0000ff;"><a name="index">1- ماهي لغة HTML ؟</a></span></h1>
<p>HTML هي اختصار لجملة <strong>H</strong>yper<strong>T</strong>ext <strong>M</strong>arkup <strong>L</strong>anguage ، وهي لغة وشفرات برمجية يتم كتابتها يدوياً أو عن طريق برامج متخصصة ، ومن ثم يتم ترجمة هذه الأكواد والشفرات عن طريق متصفحات الانترنت (مثل انترنت اكسبلورر وفايرفوكس وغيرها) وتحويلها إلى صفحات انترنت منسقة ومرتبة على حسب اختيار ورغبة مصمِّم الصفحة.</p>
<p>يتم كتابة شفرات وأكواد هذه اللغة بإحدى الطريقتين التالية:</p>
<p>&nbsp;</p>
<h2><span style="color:#993366;">1- WYSIWYG :</span></h2>
<p>هي اختصار لـ <span style="color:#993366;">W</span>hat <span style="color:#993366;">Y</span>ou <span style="color:#993366;">S</span>ee <span style="color:#993366;">I</span>s <span style="color:#993366;">W</span>hat <span style="color:#993366;">Y</span>ou <span style="color:#993366;">G</span>et ومعناها ماتشاهده هو ماستحصل عليه. وهي عبارة عن استخدام برامج متخصصة في كتابة هذه اللغة (مثل فرونت بيج ومحرر النصوص وورد و دريم ويفر وغيرها) لتقوم بعمل صفحة انترنت بدون الحاجة لمعرفة وكتابة الشفرات البرمجية الخاصة بهذه اللغة، بمعنى أنه إذا أردنا مثلاً أن نكتب كلمة بلون معين ، كل ماعلينا هو كتابة الكلمة ثم نقوم بتظليلها في البرنامج ومن ثم نذهب إلى قائمة الألوان لنختار اللون الذي نريده، وهكذا لباقي عمليات التنسيق المختلفة، والبرنامج سيقوم بالنيابة عنا بتحويل ماعملناه إلى أكواد وشفرات HTML.<br />
برنامج مايكروسوفت وورد هو أوضح مثال على مثل هذه البرامج ، حيث يمكننا عن طريقه عمل صفحة انترنت بالتنسيق الذي نريده – وكأننا ننسق مستند نصي عادي – وبعدها نقوم بحفظ الملف على شكل صفحة ويب ، وسنجد الملف الناتج يحمل امتداد html وهو الامتداد الخاص بصفحات الانترنت التي نستطيع فتحها ومشاهدتها بواسطة المتصفح.<br />
يفضل استعمال هذا النوع لغير المحترفين في مجال عمل صفحات الانترنت أو لمن لايريد تعلمها لأنها ليست على علاقة مع<br />
تخصصه أو مجال عمله. ويميز هذا النوع بأنه يسمح لنا برؤية عملنا مباشرة في البرنامج، وأيضاً لايتطلب معرفة شفرات اللغة البرمجية.</p>
<p>&nbsp;</p>
<h2><span style="color:#993366;">Explicit Markup -2 :</span></h2>
<p>هذه هي الطريقة الأساسية لكتابة هذه اللغة، وهي عبارة عن كتابة كل شفرة وكل حرف يتعلق بصفحة الانترنت المراد عملها<br />
ابتداءً من الصفر ونهاية بحفظ الصفحة ورؤيتها عن طريق متصفحات الانترنت ومن ثم التعديل على الشفرات إن كان ذلك لازماً.<br />
هذه الطريقة هي التي سنستعملها بالطبع في شرحنا لهذه اللغة لأن الأخرى لاتحتاج إلى شرح ولايوجد فيها شفرات أو شيء<br />
يصعب على الناس فهمه.<br />
يتم كتابة الشفرات عن طريق عدة برامج وأشهرها وأبسطها برنامج Notepad أو محرر النصوص العادي في الويندوز ، وبرنامج TextEdit في الماكنتوش ،  نفتح ملف جديد ونكتب الشفرات والأكواد البرمجية فيه ، ومن ثم نعمل حفظ الملف باسم ، ونضع أي اسم نريده بشرط أن يحتوي على امتداد html. حتى نستطيع رؤية ماقمنا بعمله بواسطة متصفح الانترنت.<br />
ميزة هذا النوع بأنه يسمح لنا بالتحكم بشكل أكبر في التصميم من الطريقة الأخرى، لأن بعض البرامج لاتوفر لنا بعض الخصائص أو الأوامر المتقدمة أو الغير مشهورة، وعيبه هو أن رؤية النتيجة تحتاج لعدة خطوات (حفظ الملف ثم فتحه بمتصفح انترنت) على عكس الطريقة الأولى.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1><span style="color:#0000ff;"><a name="index">2- مثال تطبيقي :</a></span></h1>
<p>الصورة التالية أتت لنا في الواجب الثاني لسنة 2008/2009 وسأستخدمها كمثال وسأضيف عليها شعار منتديات طلاب الجامعة العربية المفتوحة في الأعلى حتى يصبح المثال شاملاً لجميع الشفرات الأساسية لعمل صفحة انترنت.</p>
<p>&nbsp;</p>
<p><a href="http://aoum150.files.wordpress.com/2009/07/1.png"><img class="aligncenter size-full wp-image-348" title="Luke Howard webpage" src="http://aoum150.files.wordpress.com/2009/07/1.png?w=480&#038;h=302" alt="Luke Howard webpage" width="480" height="302" /></a></p>
<p>&nbsp;</p>
<p>طبعاً هذه الصورة هي لصفحة انترنت ولكن قمت بقص الأجزاء الزائدة حتى تكون واضحة لنا، المطلوب هو كتابة شفرات برمجية لعمل مثل هذه الصفحة ..</p>
<p>&nbsp;</p>
<p>أولاً: أي صفحة انترنت مهما كان حجمها ومهما كان نوعها يجب أن تحتوي على الأكواد التالية:</p>
<p dir="ltr">&lt;html&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt; عنوان الصفحة &lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&gt; محتوى الصفحة &lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>&lt;html&gt; يدل على أن صفحة الانترنت تبدأ من هنا.<br />
&lt;head&gt; يحتوي على شفرة عنوان الصفحة وشفرات أخرى متقدمة لسنا مطالبون بمعرفتها حالياً مثل شفرات لغة XML ولغة الجافاسكربت.<br />
&lt;title&gt; يحتوي على عنوان الصفحة الذي نريده أن يظهر في أعلى المتصفح كاسم وعنوان للصفحة.<br />
&lt;title/&gt; هو شفرة الإغلاق لشفرة العنوان والذي يخبرنا بأنها شفرة نهاية أو إغلاق هو رمز / الموجود قبل الكلمة.<br />
وأحب أن أذكر هنا بأن أي شفرة أو وسم يجب علينا إغلاقها بعد انتهاؤنا منها مثلما عملنا هنا في إغلاق شفرة العنوان بعد كتابة العنوان الذي نريده.<br />
&lt;head/&gt; إغلاق للشفرة السابقة لأننا لم نعد نريد إضافة شيء في داخلها.<br />
&lt;body&gt; بعد هذه الشفرة سنضع كل شفرات ومحتويات صفحة الانترنت التي نريد عملها.<br />
&lt;body/&gt; هذه الشفرة تدل على أن محتوى الصفحة التي صممناها انتهى هنا.<br />
&lt;html/&gt; يدل على أن ملف صفحة الانترنت ينتهي هنا.</p>
<p>&nbsp;</p>
<h2><span style="color:#993366;">بعض الملاحظات الهامة:</span></h2>
<ul>
<li> الأكواد والشفرات يجب أن نكتبها كلها إمما بأحرف كبيرة مثل &lt;HTML&gt; أو كلها بأحرف صغيرة مثل &lt;html&gt; ، ويجب الثبات على هذا الشيء في جميع أكواد الملف. ويفضل التعوُّد على الكتابة بالأحرف الصغيرة دائماً.</li>
<li> يجب علينا المحافظة على ترتيب الشفرات البرمجية المختلطة  أو المتداخلة مع بعض، كمثال:<br />
&lt;p&gt; &lt;center&gt; Hello! &lt;/p&gt; &lt;/center&gt;<br />
الطريقة هذه خاطئة وسيتم إنقاص درجات منك إذا قمت بعملها، المفترض أن نكتبها بالشكل التالي:<br />
&lt;p&gt; &lt;center&gt; Hello! &lt;/center&gt; &lt;/p&gt;<br />
قاعدة: آخر شفرة نكتبها هي أول شفرة نغلقها.</li>
<li> زر إدخال أو إنتر لايوجد له أي تأثير على النتيجة النهائية للأكواد البرمجية، يعني لوكتبنا الشفرات والمحتوى كله بدون أن نضغط زر إنتر لتصبح جميع الشفرات والأكواد موجودة في سطر واحد ، أو قمنا بالضغط على زر إنتر لتصبح الشفرات موزعة على عدة أسطر ، النتيجة ستكون نفسها للطريقتين.</li>
<li> استعمال زر المسافة سيتم احتسابه مرة واحدة فقط سواء ضغطنا عليه مرة واحدة أو خمس مرات، النتيجة واحدة.</li>
<li> الأوامر البرمجية يتم تنفيذها بالتسلسل ، ابتداءً من أول أمر موجود في الأعلى ، وانتهاءً بآخر أمر موجود في الأسفل.</li>
</ul>
<p>&nbsp;</p>
<p>طيب الآن نعود للمثال، الآن عرفنا الشفرات الرئيسية لأي صفحة انترنت وعرفنا أين يجب علينا أن نكتب الأكواد والشفرات لبناء صفحة انترنت ، لذلك نعود للمثال لنبدء في تطبيقه. سنبدأ بتطبيق المثال من الأعلى للأسفل ، وأول شيء موجود في الأعلى هو صورة لشعار منتديات طلاب الجامعة العربية المفتوحة في وسط الصفحة ..<br />
الشفرة الخاصة بعرض الصور هي:</p>
<p style="text-align:center;" dir="ltr">&lt;img src=&#8221;&#8230;&#8221;&gt;</p>
<p>مكان النقط نضع رابط الصورة التي نريد عرضها، وهنا يجب أن نذكر بأنه توجد حالتين لعرض الصور:</p>
<p>&nbsp;</p>
<p><strong>الأولى:</strong> وهي إذا كانت الصورة موجودة في صفحة انترنت أخرى ونريد أن نعرضها في صفحتنا – وهذه الطريقة مكروهه لأنها تقوم بسرقة تحميل البيانات من الموقع الآخر وتقوم بتضليل برامج حساب عدد الزوار وغيرها – وفي هذه الحالة نقوم بوضع  رابط الصورة كاملاً في مكان النقاط وفي حالتنا هذه لن نستخدم هذه الطريقة لأن الصورة ستكون محلية وليست من رابط خارجي.</p>
<p>&nbsp;</p>
<p><strong>الثانية:</strong> إذا كانت الصورة موجودة لدينا في الحاسب أو في السيرفر الذي سنرفع عليه صفحة الانترنت، وطريقتها يجب أن نضع الصورة في نفس المجلد الذي توجد فيه صفحة الانترنت ، مثلاِ لو كان ملف صفحة الانترنت الذي نقوم بتصميمه موجود في سطح المكتب يجب أن نضع الصورة في سطح المكتب أيضاً ، ولو كان الملف موجود في المستندات يجب أن نضع الصورة معه في المستندات.</p>
<p>الآن بعد ماوضعنا الصورة والملف في نفس المجلد نأخذ اسم الصورة مع امتدادها ونضعها مكان النقط الحمراء ، الصورة في حالتنا هذه اسمها aoua.jpg. لذلك نعيد كتابة شفرة عرض الصورة لتصبح بالشكل التالي:</p>
<p style="text-align:center;" dir="ltr">&lt;img src=&#8221;aoua.jpg&#8221;&gt;</p>
<p>طيب الآن عرفنا كيف نعرض الصورة ، ولكن تبقا أن نجعلها تظهر في وسط الصفحة ..<br />
الشفرة الخاصة بالتوسيط هي &lt;center&gt; .<br />
لذلك نضيفها مع شفرة إغلاقها على شفرة عرض الصورة السابقة ، لتصبح بالشكل التالي:</p>
<p style="text-align:center;" dir="ltr">&lt;center&gt; &lt;img src=&#8221;aoua.jpg&#8221;&gt; &lt;/center&gt;</p>
<p>طبعاً هذه الشفرة نكتبها في مكان المحتوى الذي حددته في الشفرات الأساسية ، ليصبح عملنا حتى الآن كالتالي:</p>
<p dir="ltr">&lt;html&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;My first web page!&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;center&gt; &lt;img src=&#8221;aoua.jpg&#8221;&gt; &lt;/center&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>الآن انتهينا من أول خطوة في الصفحة، الخطوة القادمة هي كتابة عنوان القطعة Luke Howard<br />
العناوين توجد لها ست مقاسات أو أحجام ، وتكتب شفرتها كالتالي:</p>
<p dir="ltr">
<h1 style="text-align:center;">&lt;h1&gt;عنوان كبير جداً&lt;/h1&gt;</h1>
<h2 style="text-align:center;">&lt;h2&gt;عنوان كبير&lt;/h2&gt;</h2>
<h3 style="text-align:center;">&lt;h3&gt;عنوان متوسط&lt;/h3&gt;</h3>
<h4 style="text-align:center;">&lt;h4&gt;عنوان أصغر&lt;/h4&gt;</h4>
<h5 style="text-align:center;">&lt;h5&gt;عنوان صغير&lt;/h5&gt;</h5>
<h6 style="text-align:center;">&lt;h6&gt;عنوان صغير جدا&lt;/h6&gt;</h6>
<p style="text-align:right;">كلما كبر الرقم كلما صغر حجم العنوان ..</p>
<p>في حالتنا هذه العنوان كبير جداً ، ولذلك سنستعمل الشفرة الخاصة به لتصبح كالتالي:</p>
<p style="text-align:center;">&lt;h1&gt;Luke Howard&lt;/h1&gt;</p>
<p>وفي هذه الحالة العنوان متواجد على الجهة اليسرى لذلك لانحتاج إلى شفرة لتحديد المكان لأن المكان الافتراضي هو اليسار.<br />
الشفرة السابقة نضيفها بعد شفرة عرض الصورة، لأننا لو وضعناه قبلها سيظهر العنوان قبل الصورة ونحن لانريد ذلك.<br />
سيصبح ماقمنا بعمله حتى الآن كالتالي:</p>
<p dir="ltr">&lt;html&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;My first web page!&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;center&gt; &lt;img src=&#8221;aoua.jpg&#8221;&gt; &lt;/center&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;Luke Howard&lt;/h1&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>الآن ننتقل للخطوة التالية وهي كتابة القطعة النصية التالية وتنسيقها حتى تصبح مشابهة للصورة التي لدينا:</p>
<p dir="ltr"><span style="color:#666699;">Luke Howard (1773-1864) was a British manufacturing chemist who was fascinated by weather phenomena. He provided the basis of the system of classifying clouds which we still use today, over 200 years later.</span></p>
<p dir="ltr"><span style="color:#666699;">Howard gave three &#8220;modifications&#8221; of clouds</span></p>
<ul>
<li><span style="color:#888888;">Cumulus (from the Latin for heap)</span></li>
<li><span style="color:#888888;">Stratus (from the Latin for a layer)</span></li>
<li><span style="color:#888888;">Cirrus (from the Latin for a curl)</span></li>
</ul>
<ul style="color:#666699;"></ul>
<p dir="ltr"><span style="color:#666699;">To these he added Nimbus, from the Latin for rain, to denote a rain or snow cloud.</span></p>
<p dir="ltr"><span style="color:#666699;">Howard&#8217;s scheme was first published in a paper he gave to the Askesian Society in 1802.</span></p>
<p>توجد أكثر من طريقة لكتابة أي شفرة برمجية ، وذلك يعتمد على فكر المبرمج ورؤيته للمشروع ..<br />
سأشرح طريقتين أرى بأنهم الأفضل للمبتدئين لتطبيق هذا المثال حتى يستوعبوا اللغة أكثر إن شاء الله:</p>
<p>&nbsp;</p>
<h3>الطريقة الأولى:</h3>
<p>سنعتبر أن القطعة النصية تحتوي على خمس أجزاء تفصل بينهم السطور الفارغة، بمعنى أن لدينا أربع أجزاء نصية وجزء يحتوي على قائمة.<br />
سنضع كل جزء نصي بين الشفرات الدالة على وجود نص كالتالي:</p>
<p style="text-align:center;" dir="ltr">&lt;p&gt; النص سيكون هنا &lt;/p&gt;</p>
<p>الفائدة من وضع كل جزء بين علامات خاصة به هو أن العلامات هذه ستقوم بوضع سطر فاصل فيما بينها، يعني لو وضعنا مثلاً أول جزئين نصية في نفس الشفرات لن يكون بينهم سطر فاصل.<br />
لذلك سيصبح عملنا كالتالي:</p>
<p dir="ltr">
<p dir="ltr">&lt;p&gt;Luke Howard (1773-1864) was a British manufacturing chemist who was fascinated by weather phenomena. He provided the basis of the system of classifying clouds which we still use today, over 200 years later.&lt;/p&gt;</p>
<p dir="ltr">&lt;p&gt;Howard gave three &#8220;modifications&#8221; of clouds&lt;/p&gt;</p>
<p dir="ltr">Cumulus (from the Latin for heap)<br />
Stratus (from the Latin for a layer)<br />
Cirrus (from the Latin for a curl)</p>
<p dir="ltr">&lt;p&gt;To these he added Nimbus, from the Latin for rain, to denote a rain or snow cloud.&lt;/p&gt;</p>
<p dir="ltr">&lt;p&gt;Howard&#8217;s scheme was first published in a paper he gave to the Askesian Society in 1802. &lt;/p&gt;</p>
<p>طيب الآن وضعنا الأجزاء النصية في شفراتها وتبقّى لدينا القائمة، القوائم في هذه اللغة تنقسم لقسمين; قوائم مرتبة (أو مرقمة) وقوائم عشوائية (أو غير مرتبة):</p>
<ol>
<li> القوائم المرتبة شفرتها هي &lt;ol&gt; ، وهي اختصار لـ Ordered List .</li>
</ol>
<ul>
<li> القوائم الغير مرتبة شفرتها &lt;ul&gt; ، وهي اختصار لـ Unordered List .</li>
</ul>
<p>في حالتنا هذه نريد استخدام القوائم الغير مرتبة ، لذلك نضع الشفرات حول القائمة الموجودة لدينا:</p>
<p dir="ltr">&lt;ul&gt;<br />
Cumulus (from the Latin for heap)<br />
Stratus (from the Latin for a layer)<br />
Cirrus (from the Latin for a curl)<br />
&lt;/ul&gt;</p>
<p>ما قمنا به لايكفي لعرض القوائم ، لأنه يجب علينا تحديد كل عنصر في القائمة بشفرة &lt;li&gt; ،  حتى يميز البرنامج كم عنصر يوجد في هذه القائمة ، لذلك سنقوم بوضع شفرة عناصر القائمة على العناصر الثلاثة الموجودة لدينا لتصبح بالشكل التالي:</p>
<p dir="ltr">&lt;ul&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;Cumulus (from the Latin for heap)&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;Stratus (from the Latin for a layer)&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;Cirrus (from the Latin for a curl)&lt;/li&gt;<br />
&lt;/ul&gt;</p>
<p>اذا جمعنا ماقمنا به حتى الآن سنحصل على التالي:</p>
<p dir="ltr">&lt;html&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;My first web page!&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;center&gt; &lt;img src=&#8221;aoua.jpg&#8221;&gt; &lt;/center&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;Luke Howard&lt;/h1&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;Luke Howard (1773-1864) was a British manufacturing chemist who was fascinated by weather phenomena. He provided the basis of the system of classifying clouds which we still use today, over 200 years later.&lt;/p&gt;</p>
<p dir="ltr">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;Howard gave three &#8220;modifications&#8221; of clouds&lt;/p&gt;</p>
<p dir="ltr">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ul&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;Cumulus (from the Latin for heap)&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;Stratus (from the Latin for a layer)&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;Cirrus (from the Latin for a curl)&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/ul&gt;</p>
<p dir="ltr">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;To these he added Nimbus, from the Latin for rain, to denote a rain or snow cloud.&lt;/p&gt;</p>
<p dir="ltr">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;Howard&#8217;s scheme was first published in a paper he gave to the Askesian Society in 1802. &lt;/p&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>&nbsp;</p>
<h3>الطريقة الثانية:</h3>
<p>هي أن نضع كل الكلام الموجود في الصورة في داخل شفرة &lt;p&gt; واحدة، وعند الرغبة في نزول سطر نستعمل شفرة &lt;br&gt; ، هذه الشفرة مهمتها هي مثل أمر إنتر في برنامج تحرير النصوص ، يعني ستجعل النص ينزل لسطر جديد.</p>
<p>لو قمنا الآن بحفظ الملف وثم فتحناه بمتصفح انترنت سنحصل على النتيجة التالية:</p>
<p>&nbsp;</p>
<p><a href="http://aoum150.files.wordpress.com/2009/07/2.png"><img class="aligncenter size-full wp-image-349" title="2" src="http://aoum150.files.wordpress.com/2009/07/2.png?w=480&#038;h=304" alt="2" width="480" height="304" /></a></p>
<p>&nbsp;</p>
<p>الآن تقريباً قطعنا ثلثي المشوار وتبقا الثلث. تبقى أن نقوم بالعمليات التنسيقية التالية حتى نجعل عملنا يتطابق مع الصورة الأولى:<br />
1.تغيير نوع الخط لـ Luke Howard الموجودة في القطعة الأولى لتكون بالخط السميك.<br />
2.تغيير نوع خط الأرقام (1864 – 1773) الموجودة في القطعة الأولى لتصبح بالخط المائل.<br />
3.تغيير نوع الخط لكلمة modifications الموجودة في القطعة الثانية لتصبح بالخط السميك.<br />
4.إضافة رابط لصفحة انترنت أخرى على كلمات Askesian Society الموجودة في القطعة الأخيرة.</p>
<p>&nbsp;</p>
<p>نبدأ بالعملية الأولى، ولجعل نوع الخط يكون بالخط السميك نستعمل الشفرة &lt;b&gt; اختصاراً لكلمة bold.<br />
لذلك نضيفها على الكلمات لتصبح بالشكل التالي:</p>
<p style="text-align:center;" dir="ltr">&lt;b&gt;Luke Howard&lt;/b&gt;</p>
<p>طبعاً الكلمتين موجودين في مكانهم بين شفرتهم الأساسية &lt;p&gt; ، وأضفنا قبلهم وبعدهم شفرات لجعل الخط سميك.</p>
<p>&nbsp;</p>
<p>العملية الثانية بنفس الطريقة، وشفرة تغيير الخط ليصبح مائل هي &lt;i&gt;  اختصاراً لكلمة italic.<br />
نضيفها على الأرقام لتصبح بالشكل التالي:</p>
<p style="text-align:center;" dir="ltr">&lt;i&gt; (1773–1864) &lt;/i&gt;</p>
<p>&nbsp;</p>
<p>العملية الثالثة هي نفس الأولى، فيصبح لدينا:</p>
<p style="text-align:center;" dir="ltr">&lt;b&gt;modifications&lt;/b&gt;</p>
<p>&nbsp;</p>
<p>العملية الرابعة هي شبيهه جداً بعملية عرض صورة في الصفحة بالنسبة للروابط المحلية والخارجية لذلك لن أعيد شرح هذه النقطة، ولوضع رابط على كلام معين في الصفحة نستخدم الشفرة التالية:</p>
<p style="text-align:center;" dir="ltr">&lt;a href=&#8221;<span style="color:#ff0000;">&#8230;</span>&#8220;&gt; <span style="color:#ff0000;">الكلام الذي نرغب أن نضع عليه رابطاً لصفحة انترنت أخرى</span> &lt;/a&gt;</p>
<p>مكان <span style="color:#ff0000;">النقط الحمراء</span> نضع الرابط الذي نريد (بين علامات التنصيص) ، وفي مكان <span style="color:#ff0000;">الكتابة الملونة بالأحمر</span> يكون الكلام الذي نريد أن نضيف إليه رابط لصفحة انترنت أخرى، وسنعتبر في حالتنا هذه بأن الرابط الذي سنتستخدمه رابط محلي موجود في نفس المجلد الذي توجد فيه الصفحة التي نقوم بتصميمها حالياً باسم  Askesian.html ، لذلك ستصبح لدينا الشفرة الآتية:</p>
<p style="text-align:center;" dir="ltr">&lt;a href=&#8221;Askesian.html&#8221;&gt;Askesian Society&lt;/a&gt;</p>
<p>&nbsp;</p>
<p>الآن انتهينا من تنسيق النص، والنتيجة الكاملة لما قمنا به هي:</p>
<p dir="ltr">&lt;html&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt; My first web page! &lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;center&gt; &lt;img src=&#8221;aoua.jpg&#8221;&gt; &lt;/center&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;Luke Howard&lt;/h1&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;&lt;b&gt;Luke Howard&lt;/b&gt; &lt;i&gt;(1773-1864)&lt;/i&gt; was a British manufacturing chemist who was fascinated by weather phenomena. He provided the basis of the system of classifying clouds which we still use today, over 200 years later.&lt;/p&gt;</p>
<p dir="ltr">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;Howard gave three &#8220;&lt;b&gt;modifications&lt;/b&gt;&#8221; of clouds&lt;/p&gt;</p>
<p dir="ltr">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ul&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;Cumulus (from the Latin for heap)&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;Stratus (from the Latin for a layer)&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;Cirrus (from the Latin for a curl)&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/ul&gt;</p>
<p dir="ltr">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;To these he added Nimbus, from the Latin for rain, to denote a rain or snow cloud.&lt;/p&gt;</p>
<p dir="ltr">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;Howard&#8217;s scheme was first published in a paper he gave to the &lt;a href=&#8221;Askesian.html&#8221;&gt;Askesian Society&lt;/a&gt; in 1802. &lt;/p&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>ولو قمنا الآن بحفظ الملف باسم first_web_page.html على سبيل المثال ، وثم قمنا بفتح الملف عن طريق متصفح الانترنت سنحصل على هذه النتيجة:</p>
<p>&nbsp;</p>
<p><a href="http://aoum150.files.wordpress.com/2009/07/11.png"><img class="aligncenter size-full wp-image-350" title="1" src="http://aoum150.files.wordpress.com/2009/07/11.png?w=480&#038;h=302" alt="1" width="480" height="302" /></a></p>
<p>&nbsp;</p>
<p>وهي نفس النتيجة المطلوب تحقيقها في سؤال الواجب، وبهذا نكون انتهينا من عمل أول صفحة انترنت في مسيرتنا.</p>
<p style="text-align:center;"><a href="http://dl.getdropbox.com/u/1693311/html/HTML_TMA.zip">لتحميل الصفحة التي صممناها مع الملفات المستخدمة في الشرح </a></p>
<p>&nbsp;</p>
<p>أحب أن أذكر هنا بأن تنسيق كتابة الشفرات لأي لغة برمجة شيء ضروري جداً لسببين:<br />
1.لأنها تجعل قراءة الشفرات أسهل بكثير لمن أراد الاطلاع عليها (كالمدرس).<br />
2.لأنها تسهل علينا تصحيح الأخطاء إذا حدثت أو تطوير الشفرات فيما بعد.</p>
<p>&nbsp;</p>
<p>على سبيل المثال ، انظر لهذه الأكواد:</p>
<p dir="ltr">&lt;html&gt;&lt;head&gt;&lt;title&gt; My first web page! &lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;center&gt; &lt;img src=&#8221;aoua.jpg&#8221;&gt; &lt;/center&gt;&lt;h1&gt;Luke Howard&lt;/h1&gt;&lt;p&gt;&lt;b&gt;Luke Howard&lt;/b&gt; &lt;i&gt;(1773-1864)&lt;/i&gt; was a British manufacturing chemist who was fascinated by weather phenomena. He provided the basis of the system of classifying clouds which we still use today, over 200 years later.&lt;/p&gt;&lt;p&gt;Howard gave three &#8220;&lt;b&gt;modifications&lt;/b&gt;&#8221; of clouds&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Cumulus (from the Latin for heap)&lt;/li&gt;&lt;li&gt;Stratus (from the Latin for a layer)&lt;/li&gt;&lt;li&gt;Cirrus (from the Latin for a curl)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;To these he added Nimbus, from the Latin for rain, to denote a rain or snow cloud.&lt;/p&gt;&lt;p&gt;Howard&#8217;s scheme was first published in a paper he gave to the &lt;a href=&#8221;Askesian.html&#8221;&gt;Askesian Society&lt;/a&gt; in 1802. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</p>
<p>وانظر لهذه الأكواد:</p>
<p dir="ltr">&lt;html&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt; My first web page! &lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;center&gt; &lt;img src=&#8221;aoua.jpg&#8221;&gt; &lt;/center&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;Luke Howard&lt;/h1&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;&lt;b&gt;Luke Howard&lt;/b&gt; &lt;i&gt;(1773-1864)&lt;/i&gt; was a British manufacturing chemist who was fascinated by weather phenomena. He provided the basis of the system of classifying clouds which we still use today, over 200 years later.&lt;/p&gt;</p>
<p dir="ltr">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;Howard gave three &#8220;&lt;b&gt;modifications&lt;/b&gt;&#8221; of clouds&lt;/p&gt;</p>
<p dir="ltr">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ul&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;Cumulus (from the Latin for heap)&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;Stratus (from the Latin for a layer)&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;li&gt;Cirrus (from the Latin for a curl)&lt;/li&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/ul&gt;</p>
<p dir="ltr">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;To these he added Nimbus, from the Latin for rain, to denote a rain or snow cloud.&lt;/p&gt;</p>
<p dir="ltr">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;Howard&#8217;s scheme was first published in a paper he gave to the &lt;a href=&#8221;Askesian.html&#8221;&gt;Askesian Society&lt;/a&gt; in 1802. &lt;/p&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>أي الاثنين أريح للعين وأسهل للقراءة والفهم؟<br />
بالتأكيد الثاني لأنه منسق بشكل واضح ، مع العلم بأن كل الشفرتين سيعرضون نفس النتيجة بالضبط! لأني كما ذكرت سابقاً: الضغط على زر إنتر أو مسافة أو حتى استخدام زر tabs لا يؤثر على النتيجة النهائية للعمل.<br />
وللتنسيق أنصح باستخدام زر Tabs لزيادة وانقاص المحاذاة بين الشفرات والجهة اليسرى بدلاً من زر المسافة.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1><span style="color:#0000ff;"><a name="index">3- ملخص لأهم الشفرات المستخدمة في لغة HTML</a></span></h1>
<p>&nbsp;</p>
<p><a href="http://aoum150.files.wordpress.com/2009/07/3.png"><img class="aligncenter size-full wp-image-351" title="ملخص وسوم وشفرات لغة HTML" src="http://aoum150.files.wordpress.com/2009/07/3.png?w=480&#038;h=551" alt="ملخص وسوم وشفرات لغة HTML" width="480" height="551" /></a></p>
<p><span style="color:#008080;">الشفرتين الملونتين بالأخضر</span> مرتبطتين ببعض وسأذكر طريقة عملهم باختصار..<br />
في بعض صفحات الانترنت ، تكون الصفحة طويلة جداً وتحتوي على عدة عناوين ونقاط، للتسهيل على القارئ يفضل وضع قائمة بالمحتويات في أعلى الصفحة وفي حالة الضغط على أحد العناوين الموجودة في القائمة سينزل المتصفح مباشرة إلى العنوان الذي ضغطنا عليه. لرؤية مثال مباشر على هذه الطريقة زوروا هذا الرابط:<br />
http://aoum150.wordpress.com/2009/08/08/javascript_lesson</p>
<p>لو أخذنا عنوان المقدمة كمثال ، فأنا ذهبت إلى عنوان &#8220;المقدمة&#8221; – وليست الكلمة الموجودة في قائمة المحتويات – ووضعت عليها علامة باسم introduction ، فأصبح الكود الخاص بها بهذا الشكل:</p>
<p style="text-align:center;" dir="ltr">&lt;a name=&#8221;introduction&#8221;&gt;المقدمة&lt;/a&gt;</p>
<p>الآن انتهيت من الخطوة الأولى وهي وضع علامة في المكان الذي أريد أن أنتقل إليه. الخطوة التالية هي الذهاب لكلمة &#8220;المقدمة&#8221; الموجودة في قائمة المحتويات ، ومن ثم أضع عليها رابط ينتقل إلى المكان الذي وضعت فيه العلامة قبل قليل ، بهذا الشكل:</p>
<p style="text-align:center;" dir="ltr">&lt;a href=&#8221;#introduction&#8221;&gt;المقدمة&lt;/a&gt;</p>
<p>طبعاً الرابط أو الكلمة الموجودة بعد علامة # ، يجب أن تكون نفس اسم العلامة التي وضعناها بالضبط.<br />
ويمكننا أن نضع مثلاً علامة في بداية الصفحة ، حتى نستطيع أن نضيف في أسفل الصفحة رابط للعودة إلى أعلى الصفحة إذا كانت الصفحة طويلة. وهكذا لبقية الحالات.</p>
<p>&nbsp;</p>
<p>نصيحة:<br />
في العلامات وأسماء صفحات HTML لاتستعملوا المسافات قدر الإمكان ، واستعملوا بدلاً منها – dashes أو _ underscores.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1><span style="color:#0000ff;"><a name="index">4- التعليقات والملاحظات :</a></span></h1>
<p>التعليقات هي شيء أساسي في أي لغة برمجة لأن لها فوائد كثيرة ، منها أنها توضِّح لنا الفائدة والغرض من كتابة أمر معين وبالتالي يستطيع من يقرأ الأمر أن يعرف سببه ويفهمه بسهولة ، وأيضاً يساعد المبرمج الذي كتب الأمر البرمجي &#8211; إذا عاد للاطلاع عليه ليصحح بعض الأخطاء بعد مرور فترة زمنية طويلة &#8211; في تذكر سبب كتابته والفائدة منه ، وبالتالي يستطيع التعديل وتصحيح الأخطاء بسرعة و سهولة. وطبعاً التعليقات لاتظهر أبداً في المتصفحات ، وفائدتها الرئيسية هي للمبرمج نفسه وبقية المبرمجين الذي سيقرأون الكود البرمجي.</p>
<p>&nbsp;</p>
<p>التعليقات في هذه اللغة نكتبها بالطريقة التالية:</p>
<p style="text-align:center;" dir="ltr">&lt;!&#8211; هذا الكلام لن يظهر في المتصفح وسيعتبر تعليق أو ملاحظة &#8211;&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1><span style="color:#0000ff;"><a name="index">5- عيوب لغة HTML :</a></span></h1>
<p>يتضح لنا مما سبق بأن كل ماتقوم به هذه اللغة هو مجرد تنسيق وتحرير صفحات الانترنت وربطها مع بعض وعرض الصور. الآن عدد مواقع الانترنت لايمكن إحصاؤه ، والحاجة لتحسين نتائج البحث لدى محركات البحث أصبحت شيء ضروري جداً حتى نستطيع أن نحصل على المعلومة التي نريدها وخصوصاً في المواقع المالية ومواقع التسوق الإلكتروني. هذه اللغة للأسف لايمكنها وصف أو معرفة المعلومات التي تحتويها بين صفحاتها ، فلو كانت تستطيع معرفة محتوياتها أو وصفها لأصبحت مهمة محركات البحث أسهل وأكثر دقة وفعالية.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1><span style="color:#0000ff;"><a name="index">6- مقدمة عن لغة XML :<br />
</a></span></h1>
<p>كلمة XML هي اختصار لـ eXtensible Markup Language ، وهي لغة تم ابتكارها لتساعد على تخطي عيوب لغة HTML. فهذه اللغة قادرة على معرفة محتويات صفحات الانترنت ، وبالتالي تستطيع أن تعطي محركات البحث والمتصفحات معلومات كافية عن صفحات الانترنت.<br />
فمثلاً لو كان لدينا موقع لبيع الكتب ، طبعاً كل كتاب سيحتوي على معلومات كثيرة مثل: اسم الكتاب ، اسم الكاتب ، سعر الكتاب ، دار النشر ، تاريخ الطبعة ، عدد الصفحات ، وغيرها. لو استعملنا لغة HTML لوحدها في تصميم هذا الموقع ، فإن محركات البحث لن تستطيع أن تميز بين اسم الكتاب وبين اسم المؤلف على سبيل المثال ، أو بين سعر الكتاب وبين عدد صفحاته. لكن عن طريق لغة XML أصبح بإمكان المتصفح ومحركات البحث التمييز بين أسعار الكتب وبين عدد صفحاتها والأرقام الأخرى التي تتعلق بها ، وبالتالي أصبحت نتائج البحث حالياً أكثر دقة وفعالية ، حيث أصبحت قادرة على وضع مقارنة بين الأسعار وخيارات لترتيب الكتب حسب حداثتها وغيرها من الميزات الأخرى.</p>
<p>هذه اللغة ظهرت بسبب زيادة أعداد المواقع المالية ومواقع التسوق الإلكتروني ، والحاجة إلى تعريف المعلومات التي تحتويها في صفحاتها إلى المتصفحات ومحركات البحث ، حتى يصبح التعامل مع مثل هذه المواقع أكثر دقة وفعالية وسهولة.<br />
لغة XML مكملة للغة HTML ولا تستطيع الاستغناء عنها ، لأن شفراتها وأكوادها تكون من ضمن شفرات HTML الأساسية.</p>
<p>للمعلومية، المنهج ذكر بأننا غير مطالبين بتعلم تفاصيل هذه اللغة:</p>
<blockquote>
<p dir="ltr">“You are not expected to learn the details of XML.”<br />
Source: M150, Unit 4, Section 6, Page 54</p></blockquote>
<p style="text-align:center;">
<p>تمَّ بحمد الله<br />
أتمنَّى أن أكون وفِّـقت في شـرح هـذه اللغـة الجـميـلـة بـبـسـاطـة وسهـولـة.<br />
في حال وجود أخطاء إملائية أو قواعدية أو في الشرح أتمنى أن تعذروني وتبلغوني عنها حتى أقوم بتصحيحها.<br />
أخوكم المعتصم</p>
Posted in شروحات Tagged: HTML, Learner, M150A, unit-4 <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aoum150.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aoum150.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aoum150.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aoum150.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aoum150.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aoum150.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aoum150.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aoum150.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aoum150.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aoum150.wordpress.com/228/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=228&subd=aoum150&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://aoum150.wordpress.com/2009/07/05/html_lesson/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">المعتصم</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/1.png" medium="image">
			<media:title type="html">Luke Howard webpage</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/2.png" medium="image">
			<media:title type="html">2</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/11.png" medium="image">
			<media:title type="html">1</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/3.png" medium="image">
			<media:title type="html">ملخص وسوم وشفرات لغة HTML</media:title>
		</media:content>
	</item>
		<item>
		<title>شرح الوحدة 16</title>
		<link>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-16/</link>
		<comments>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-16/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 23:14:55 +0000</pubDate>
		<dc:creator>المعتصم</dc:creator>
				<category><![CDATA[شروحات]]></category>
		<category><![CDATA[Learner]]></category>
		<category><![CDATA[M150B]]></category>
		<category><![CDATA[unit-16]]></category>

		<guid isPermaLink="false">http://aoum150.wordpress.com/?p=223</guid>
		<description><![CDATA[
Moore&#8217;s law
قانون مور
جوردون مور هو أحد مؤسسي شركة إنتل المختصة بتصنيع المعالجات وتطويرها
جوردون مور توقع في عام 1968 بأن عدد الترانزستورس transistors الموجودة في المعالجات سيتضاعف في كل سنة
بعدها لاحظوا بأن عدد الـ  transistors صار يتضاعف كل 18 شهر !!
عشان كذا نلاحظ ان المعالجات صارت قوتها وسرعتها تتشاعف في فترات قصيرة، مايمدينا نشتري كمبيوتر [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=223&subd=aoum150&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:center;"><span id="more-223"></span></p>
<p style="text-align:center;"><strong><span style="font-size:small;"><span style="color:black;">Moore&#8217;s law</span></span></strong><br />
قانون مور</p>
<p style="text-align:center;">جوردون مور هو أحد مؤسسي شركة إنتل المختصة بتصنيع المعالجات وتطويرها<br />
جوردون مور توقع في عام 1968 بأن عدد الترانزستورس transistors الموجودة في المعالجات سيتضاعف في كل سنة</p>
<p style="text-align:center;">بعدها لاحظوا بأن عدد الـ  transistors صار يتضاعف كل 18 شهر !!<br />
عشان كذا نلاحظ ان المعالجات صارت قوتها وسرعتها تتشاعف في فترات قصيرة، مايمدينا نشتري كمبيوتر فرحانين فيه وبقوة معالج الا وينزل كمبيوتر قوة معالجه تكون الضعف تقريباً!</p>
<p style="text-align:center;">لاحظوا أسماء المعالجات الحديثة من انتل<br />
core due<br />
core 2 due<br />
core quad due</p>
<p style="text-align:center;">quad يعني رباعي<br />
ولاحظوا متى تم انتاج كل نوع.. كلها في فترات متقاربة</p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">Open System Interaction &#8211; OSI </span></span></p>
<p style="text-align:center;">عملية تنقل البيانات في الشبكات تمر في سبعة مراحل أو طبقات ، هذه السبع مراحل تسمى OSI مودل</p>
<p style="text-align:center;">الأخت علو الهمة جزاها الله خير نقلت شرح له في هذا الموضوع:<br />
<a href="http://www.aoua.com/vb/showthread.php?t=164123" target="_blank">http://www.aoua.com/vb/showthread.php?t=164123</a></p>
<p style="text-align:center;">باختصار، البيانات تمر عبر سبع مراحل، وهي:</p>
<p style="text-align:center;">1- physical layer<br />
ويختص بالأشياء والأجهزة المحسوسة، مثل الكيابل والتوصيلات وغيرها</p>
<p style="text-align:center;">2- data link layer<br />
تحتوي على البروتوكلات التالية:<br />
CAN bus, ATM, StarLAN, LocalTalk, HDLC</p>
<p style="text-align:center;">لاتسألوني وش هذي لأني مادري خخخ، ولا فكرت اني أتوسع فيها لأنها غير مشروحة في الكتب من الأساس.</p>
<p style="text-align:center;">3- Network layer<br />
* تقوم بتعيين العناوين وطرق إرسال الـ packets<br />
الـ packet هو جزء من الرسائل اللي نرسلها عن طريق الشبكة، بمعنى ان الرسائل يتم تجزئتها إلى أكثر من packet ومن ثم يتم تجميع هذه الـ packets عند الطرف المستقبل<br />
* هذه المرحلة أو الطبقة تقوم باستلام طلبات من طبقة الـ transport (الرابعة) وتقوم بطلب خدمات من طبقة data link (الثانية)<br />
<span style="color:red;">* PDU اختصار لـ Protocol Data Unit يسمى في هذه الطبقة Packet</span></p>
<p style="text-align:center;">4- Transport layer<br />
* أحد البروتوكلات الموجودة في هذه الطبقة هو TCP Transmission Control Protocol<br />
* هذه المنطقة يتم فيها تصحيح البيانات واستعادتها والتحكم بتدفقها<br />
* هذه المرحلة أو الطبقة تقوم باستلام طلبات من طبقة الـ session (الخامسة) وتقوم بطلب خدمات من طبقة network (الثالثة)<br />
<span style="color:red;">* PDU اختصار لـ Protocol Data Unit يسمى في هذه الطبقة Segment</span></p>
<p style="text-align:center;">5- Session layer<br />
* أحد بروتوكولات هذه الطبقة هو NetBIOS<br />
* يقوم بإنشاء طلبات الاتصال، ومسؤول عن الأمن Security و الـ authentication<br />
* مثل الطبقات السابقة، يقوم باستلام طلبات من الطبقة اللي فوقه (السادسة) ويطلب خدمات من الطبقة اللي تحته (الرابعة).<br />
<span style="color:red;">* PDU اختصار لـ Protocol Data Unit يسمى في هذه الطبقة Data</span></p>
<p style="text-align:center;">6- Presentation layer<br />
* في هذه الطبقة يتحدد كيف يتم عرض البيانات في الكمبيوتر، هل تعرضها بصيغة gif مثلاً أو jpeg ؟<br />
* مثل الطبقات السابقة، يقوم باستلام طلبات من الطبقة اللي فوقه (السابعة) ويطلب خدمات من الطبقة اللي تحته (الخامسة).<br />
<span style="color:red;">* PDU اختصار لـ Protocol Data Unit يسمى في هذه الطبقة Data</span></p>
<p style="text-align:center;">7- Application layer<br />
هذه أعلى طبقة، يتم في هذه الطبقة إنشاء أو ترجمة البيانات وتحويلها إلى معلومات، وتتم أيضاً عمليات التشفير وفك التشفير في هذه الطبقة.</p>
<p style="text-align:center;"><span style="color:red;">الجزء الثاني:</span></p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">ردة فعل الناس على التقنية</span></span></p>
<p style="text-align:center;">يصنف الناس لثلاثة أصناف بناء على ردة فعلهم على التقنية:</p>
<p style="text-align:center;">١- المتفائلين the optimists<br />
هؤلاء يرون الآت والتقنية على أنها أشياء تساعد على تحرير البشر من الأعمال الشاقة (مثل الحفر) أو الأعمال الروتينية المملة (مثل تصنيع السيارات) وتساعدهم على زيادة القدرة الإنتاجية<br />
بشكل عام ينظرون للكمبيوتر نظرة إيجابية على انه مفيد للحياة للبشرية<br />
المتفائلين &#8220;بزيادة&#8221; يسمون technophiles</p>
<p style="text-align:center;">٢- المتشائمين the pissimists<br />
يرون بأن التقنية تقلل من حرية الأفراد لأنها تزيد من قدرة الحكومة على مراقبة الناس (مثلاً عن طريق الجوال)<br />
وينظرون للكمبيوتر نظرة تشاؤمية بشكل عام زنهم لايرون منه إضافة للحياة البشرية<br />
المتشائمين &#8220;بزيادة&#8221; يسمون technophobes</p>
<p style="text-align:center;">٣- الواقعيين the realists<br />
يرون بأن التقنية تساعدهم على زيادة الكفاءة في الإنتاج والعمل، ولكن كفاءة الكمبيوترات والتقنية محدودة بسبب طبيعتها الرقمية وبسبب عدم فهمنا لمشاكلنا ولأنفسنا بشكل كافي :s<br />
يعني هم الناس اللي ينظرون للكمبيوتر بشكل متوسط، مفيد في أشياء وخطر في أشياء أخرى</p>
<p style="text-align:center;"><span style="color:black;">Captology</span></p>
<p style="text-align:center;">أغلب الناس يثقون في الكمبيوتر بشكل كبير، ويعتقدون بأن كل مايرونه عن طريق الكمبيوتر هو شيء صحيح. فأصبح الناس يستخدمون الكمبيوتر لإقناع الآخرين، سواء عن طريق البريد أو المواقع أو غيرها. مثلاً من الممكن أن يأتي شخص &#8220;نصاب&#8221; ويكتب لك رسالة بريدية منسقة ومرتبة وشكلها رسمي و&#8221;كشخة&#8221; يطلب منك فيها انك ترسل رقم بطاقتك الائتمانية عشان يتأكدون في الشركة من انك قمت بعملية شرائية معينة. طبعاً ممكن فيه ناس تصدق مثل هذي الرسائل. لكن لو كان هذا النصاب يحاول يطلب منك نفس الطلب وجهاً لوجه أو عن طريق التلفون مثلاً راح تتغير نظرتك وتشك في صدق كلام هذا الشخص.</p>
<p style="text-align:center;">* كل مازادت معرفة الشخص بالكمبيوتر، كل ماقلت ثقته فيه أو في النواتج اللي تطلع منه.<br />
* كل ماقلت معرفة الشخص بالكمبيوتر، كل ماقلت ثقة الشخص فيه. (لو جبنا شخص من البادية غير متعلم، ماينفع نقول له الكمبيوتر يقول ان مجموع مصاريفنا على الإبل في السنة تساوي مليار، ماراح يقتنع لأنه مايعرف وش هذا الكمبيوتر اللي أتكلم عنه ووش يقدر يسوي)<br />
*طيب مين اللي يثق فيه أجل؟؟ &#8230; اللي يثقون في الكمبيوتر بشكل كبير هم عادة اللي معلوماتهم ومعرفتهم عنه متوسطة، مو كبيرة ولا قليلة.</p>
<p style="text-align:center;">الـ captology هو العلم أو الدراسة اللي تهتم باستخدام الكمبيوتر كوسيلة اقناع بحيث يتم التأثير على تصرفات الناس عن طريقه<br />
وهي اختصار لـ <strong><span style="color:black;">C</span></strong>omputer <strong><span style="color:black;">A</span></strong>s <strong><span style="color:black;">P</span></strong>ersuasive <strong><span style="color:black;">T</span></strong>echn<strong><span style="color:black;">ology</span></strong></p>
<p style="text-align:center;"><span style="color:red;">الجزء الثالث:</span></p>
<p style="text-align:center;"><span style="color:black;">ماهي المشاكل اللي ممكن تحدث في الكمبيوتر وتطبيقاته ؟</span></p>
<p style="text-align:center;">- الاتكالية والمخاطرة:<br />
الآن أصبحنا نعتمد على الكمبيوتر تقريباً في كل شيء، من استثمار، وطيران، وطب، وتعليم، وغيرها<br />
اذا حصلت مشكلة في الكمبيوتر أو أحد برامجه، احتمال كبير أن تتعطل أشياء كثيرة في حياتنا، أو ممكن يؤدي إلى الإفلاس (في حال تعطل سوق أسهم) أو إلى الموت لاقدر الله (في تعطل كمبيوتر الطائرة) أو إلى تأجيل الاختبار لليوم الثاني (في حال انقطاع الكهرباء عن الجامعة العربية <img title="يضحك" src="http://www.aoua.com/vb/images/smilies/biggrin.gif" border="0" alt="" />)</p>
<p style="text-align:center;">- hardware failure:<br />
مثل خراب الأجزاء الداخلية للكمبيوتر من معالج أو هارد دسك أو محول الطاقة .. أو خراب الأقمار الصناعية بسبب اشعاعات كونية .. أو خراب أي شيء آخر يتعلق بالكمبيوتر لأي سبب كان (والأسباب كثيرة)</p>
<p style="text-align:center;">- مشكلة برمجية، مثل التي حدثت عام 2000 (المبرمجين في السابق لم يفكروا بأن التواريخ ستتغير من خانتين 99 إلى أربع خانات 2000 وكانوا يخافون وقتها بأنه ستحدث كارثة في برامج الشركات لأنهم لايعرفون كيف سيتعامل البرنامج مع هذا التغير بالأخص البرامج المالية وبرامج الملاحة، حتى انهم كانوا يحذرون من ركوب الطائرات في ذاك الوقت)</p>
<p style="text-align:center;">- نقص في المتطلبات، بمعنى في حال طلب عميل من شركة أن تقوم بتصميم برنامج له، من المحتمل أن يقصد العميل شيئاً ويفهم المبرمج شيء مختلف بسبب عدم وضوح المتطلبات لدى كل الأطراف (بمعنى حصول سوء تفاهم). توجد صور في شرائح الأستاذة جمانة (شريحة 18 إلى 27) جميلة توضح هذه النقطة بشكل رائع وممتع. أو في الكتاب صفحة 32.</p>
<p style="text-align:center;">- أخطاء في كتابة البرامج:<br />
أكثر المشاكل التي تحدث في الأنظمة والكمبيوترات، تكون بسبب البشر!<br />
الأخطاء في البرمجة ممكن أن تتسبب في مشاكل كبيرة.<br />
مثال على هذه الأخطاء، القمر الصناعي مارس التابع لناسا، تم إطلاقه عام 1999 في مهمة كلفت عدة ملايين من الدولارات، ولكنه فشل في تنفيذ المهمة بسبب خطأ بشري في البرمجة.</p>
<p style="text-align:center;">- صعوبة التجارب:<br />
اذا كان النظام كبير، وهذا النظام الكبير يدخل في عمل بيئة كبيرة، سيكون من الصعوبة تجريب النظام واختباره، وبعض الأحيان سيكون هذا الشيء مستحيل، ولكن ممكن أن يتم تجربة واختبار جزء صغير من النظام فقط.</p>
<p style="text-align:center;">- Inadequate Models<br />
بمعنى عدم اكتمال النماذج، في برامج المحاكاة اللي يتم عملها على الكمبيوتر، تمثيل هذه البرامج للحياة وللواقع يكون محدود وبسيط، لأن مصمم البرنامج سيقوم بتصميمه لأغراض معينة تتعلق بالهدف من هذا البرنامج. فلذلك تكون هذه البرامج غير آمنة ودقيقة بشكل كبير لأنها غير مطابقة للواقع.<br />
مثال على هذه البرامج، مثلاً ألعاب السيارات اللي تكون على البلي ستيشن ، أو برامج تعليم الطيران (لايوجد مباني مرتفعة مثلاً) وغيرها</p>
<p style="text-align:center;">- الأكواد البرمجية يصبح صعب السيطرة عليها وصيانتها مع الوقت، لأن المبرمجين سيقومون كل فترة بالتعديل أو الإضافة على الكود الأساسي، ومع الوقت سيصبح اكتشاف الأخطاء والتعديل على الكود صعب جداً</p>
<p style="text-align:center;">maintenance هي عملية التعديل والتغيير على النظام بعد الانتهاء منه ومعناها صيانة</p>
<p style="text-align:center;"><span style="color:black;">توجد ثلاث أنواع maintenance</span></p>
<p style="text-align:center;">1- corrective maintenance<br />
وهي لتصحيح الأخطاء الموجودة في النظام</p>
<p style="text-align:center;">2- perfective maintenance<br />
وهي لتحسين أداء النظام وتطويره<br />
لا توجد أخطاء في هذا النوع، فهو مجرد الرغبة في جعل النظام أفضل</p>
<p style="text-align:center;">3- adaptive maintenance<br />
هذا النوع نقوم فيه بالتعديل على النظام لأننا مطالبين بإضافة خصائص جديدة تتناسب مع المتطلبات ومع البيئة</p>
<p style="text-align:center;"><span style="color:black;">ماهي الأشياء التي لايستطيع الكمبيوتر القيام بها؟</span></p>
<p style="text-align:center;">- ليس كل شيء قابل للقياس، ولكن &#8230;<br />
يعني بأنه ليس كل الأرقام التي يتم ادخالها ومعالجتها عن طريق الكمبيوتر من الممكن أن تعطينا نتائج صحيحة</p>
<p style="text-align:center;">- توجد حدود في دقة عرض المعلومات:<br />
لتوضيح هذه النقطة، خلونا نرجع لتحويل الـ analogue إلى digital الموجود في البارت الأول .. احنا تعلمنا بأن أي شيء يتم تحويله ماراح يكون بنفس دقة الشيء الأصلي<br />
الـ analogue أكثر دقة من الـ digital</p>
<p style="text-align:center;">- models لاتشبه الحياة الواقعية<br />
وهذي شرحتها قبل شوي في فقرة Inadequate Models</p>
<p style="text-align:center;">- لايستطيع الكمبيوتر أن يحل محل البشر (بالروبوتات)<br />
المقصد هنا بأن الكمبيوترات (الروبوتات) لايمكن أن تعمل مثل الإنسان، لأن الروبوت يتم برمجته على أشياء معينة ومحددة يمشي عليها، ولكن الإنسان لايمشي على مثل هذه القوانين المحددة</p>
<p style="text-align:center;">- لايستطيع الكمبيوتر لعب الشطرنج بذكاء<br />
مافيه إجابة معينة للسؤال، ولكن المكتوب هو احتمالات وتوقعات وأشياء نظرية. ملخصها هو ان الكمبيوتر يتم برمجته على تكتيكات معينة (كثيرة) تعتمد على احتمالات حركات الخصم المختلفة<br />
وان برمجة الكمبيوتر على القيام بشيء مقابل كل احتمال أو حركة تتطلب لقوة معالجة كبيرة<br />
يقولون انه ممكن الكمبيوتر يفوز على بطل العالم في الشطرنج ولكنه لايمكن أن يفوز بذكاء أو بطريقة إبداعية، لأن الذكاء لايمكن برمجته.</p>
<p style="text-align:center;">- أنه لايستطيع فهم اللغة الطبيعية للبشر<br />
في هذه النقطة يقول بأنه لايستطيع الكمبيوتر أن يتواصل معنا (البشر) بنفس الطريقة اللي نتواصل فيها مع بعض (البشر مع بعض)</p>
<p style="text-align:center;"><span style="color:black;">ماهي الأشياء التي لايجب على الكمبيوتر القيام بها؟</span></p>
<p style="text-align:center;">- إزالة البشر من دورة التحكم في المعلومات (information loop)</p>
<p style="text-align:center;">- أن تستبدل علم البشر وخبراتهم</p>
<p style="text-align:center;">- أن تأخذ دور الإنسان</p>
<p style="text-align:center;">
<p style="text-align:center;"><span style="font-size:small;"><span style="color:black;">Ethics and computing</span></span><br />
الأخلاقيات وعالم الكمبيوتر ..</p>
<p style="text-align:center;">الأخلاقيات تعني تقرير أو تحديد ماهو الشيء الصحيح الذي يجب عمله بغض النظر عن أي ظرف خارجي يؤثر على القرار</p>
<p style="text-align:center;">* في مجتمع الشبكة العالمية (الانترنت) يجب أن تكون هناك قوانين وأنظمة مثل أي مجتمع آخر حتى لايكون المجتمع فوضوي وعشوائي.</p>
<p style="text-align:center;">* <span style="color:black;">cyberspace</span> هو المجتمع العالمي المرتبط ببعضه البعض عن طريق شبكات الكمبيوتر</p>
<p style="text-align:center;">* المبرمج يستطيع ببرامجه أن يحدث نتائج جيدة أو مؤذية، أو من الممكن أن يسمح للمستخدمين بأن يعملوا أشياء جيدة أو مؤذية بواسطة برنامجه.</p>
<p style="text-align:center;">* توجد عشر أوامر (أو أسس) لأخلاقيات استخدام الكمبيوتر <span style="color:black;">Ten Commandments of Computer Ethics</span>،  درسناها في البارت الأول .. عشان كذا ماراح أعيدها.</p>
<p style="text-align:center;">* <span style="color:black;">Terms of Service Agreement</span> هي شروط الاستخدام، يجب الموافقة عليها عند الرغبة بشراء منتج أو خدمة من شركة معينة<br />
هذي موجودة في كل مكان في النت، مثل اذا جينا نسجل في منتدى بنلقى شروط لازم نحط صح اننا موافقين عليها، واذا جينا نسوي ايميل نفس الشي، وموجودة حتى في غير النت.<br />
هذي الشروط لازم نقرأها عشان نعرف الأشياء المسموح لنا نعملها (الأشياء اللي تعتبر صحيحة أخلاقياً) والأشياء اللي ممنوعة وممكن تتسبب في الغاء الاتفاقية أو حتى تعريضنا للعقوبة من الجهات الرسمية.</p>
<p style="text-align:center;">لذلك توجد ثلاث أقسام أخلاقية تعتبر كدليل لمستخدمي الكمبيوتر ومبرمجيه:<br />
<span style="color:black;">١- Personal morality</span><br />
الأخلاق الشخصية: وهي الأخلاقيات الطبيعية والمبادئ التي تربينا عليه. مثل: عدم الكذب، عدم السرقة، عدم الغش، &#8230; الخ</p>
<p style="text-align:center;"><span style="color:black;">٢- Profession morality</span><br />
أخلاق العمل أو المهنة: وهنا يلتزم الناس بأن لايؤدوا أعمال من الممكن أن تتسبب في إيذاء الآخرين.</p>
<p style="text-align:center;"><span style="color:black;">٣- Software development morality </span><br />
أخلاقيات تطوير وعمل البرامج: يجب أن يلتزم المبرمج بأن يكون عمله والمنتج النهائي جودتها عالية.</p>
<p style="text-align:center;">في النهاية رجع تكلم عن captology مرة ثانية (تم شرحها في الوحدة 16)<br />
الشيء الوحيد اللي لفت نظري هو ..</p>
<p style="text-align:center;"><span style="color:black;">القاعدة الذهبية للإقناع .. The Golden Rule of Persuassion</span><br />
القاعدة: لاتقم بإقناع شخص أو أشخاص لعمل شيء، أنت لن تقتنع به إذا حاول الغير إقناعك به.<br />
(يعني لا ترضا للغير مالا ترضاه لنفسك)</p>
<p style="text-align:center;">هذي هي النقاط اللي لفتت نظري في هذا الجزء</p>
Posted in شروحات Tagged: Learner, M150B, unit-16 <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aoum150.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aoum150.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aoum150.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aoum150.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aoum150.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aoum150.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aoum150.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aoum150.wordpress.com/223/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aoum150.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aoum150.wordpress.com/223/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=223&subd=aoum150&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-16/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">المعتصم</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/smilies/biggrin.gif" medium="image">
			<media:title type="html">يضحك</media:title>
		</media:content>
	</item>
		<item>
		<title>شرح الوحدة 15</title>
		<link>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-15/</link>
		<comments>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-15/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 23:12:52 +0000</pubDate>
		<dc:creator>المعتصم</dc:creator>
				<category><![CDATA[شروحات]]></category>
		<category><![CDATA[Learner]]></category>
		<category><![CDATA[M150B]]></category>
		<category><![CDATA[unit-15]]></category>

		<guid isPermaLink="false">http://aoum150.wordpress.com/?p=221</guid>
		<description><![CDATA[

الوحدة 15:
الجزء الأول: مقدمة نظرية بسيطة
Morality
المبادئ الأخلاقية لدى الشخص، والتي يقرر على أساسها الصح من الخطأ
Ethics
الاختيار بين التصرفات التي تعتبر صحيحة أو خاطئة وفقاً للمبادئ الأخلاقية
بالنسبة لي، لغوياً كل الكلمتين لها نفس المعنى وهو الأخلاق أو المبادئ الأخلاقية، بس هذي تعاريفها الموجودة في المنهج
كان مستخدمي الانترنت في بداياته يرون الانترنت على انه منتدى يمكن أن [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=221&subd=aoum150&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:center;">
<p style="text-align:center;"><span id="more-221"></span></p>
<p style="text-align:center;"><span style="font-size:medium;">الوحدة 15:</span></p>
<p style="text-align:center;"><span style="color:red;">الجزء الأول: مقدمة نظرية بسيطة</span></p>
<p style="text-align:center;"><span style="font-size:small;"><span style="color:black;">Morality</span></span><br />
المبادئ الأخلاقية لدى الشخص، والتي يقرر على أساسها الصح من الخطأ</p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">Ethics</span></span><br />
الاختيار بين التصرفات التي تعتبر صحيحة أو خاطئة وفقاً للمبادئ الأخلاقية</p>
<p style="text-align:center;">بالنسبة لي، لغوياً كل الكلمتين لها نفس المعنى وهو الأخلاق أو المبادئ الأخلاقية، بس هذي تعاريفها الموجودة في المنهج</p>
<p style="text-align:center;">كان مستخدمي الانترنت في بداياته يرون الانترنت على انه منتدى يمكن أن نقول فيه أي شيء (سواء كان جيد أو سيء)</p>
<p style="text-align:center;"><span style="color:red;">الجزء الثاني: كلام نظري بسيط <img title="يضحك" src="http://www.aoua.com/vb/images/smilies/biggrin.gif" border="0" alt="" /></span></p>
<p style="text-align:center;">في السابق، كنا عندما نشتري شيئاً على سبيل المثال، لا أحد يستطيع معرفة مالذي اشتريناه غير الذين كانوا يتواجدون في نفس المكان.<br />
لكن في الوقت الحالي، أصبحت الشركات (مثل البنوك وشركات بطاقات الائتمان) تعرف مالذي اشتريناه وأين ذهبنا &#8230; الخ.</p>
<p style="text-align:center;">التقنية أتاحت للمنظمات أن تجمع وتخزن وتنشر معلومات عننا.<br />
أمثلة على مثل هذه التقنيات:<br />
- استخدام بطاقات الائتمان أو سحب الأموال من أجهزة الصرف الآلي.<br />
- تعبئة استبيان.<br />
- القيام بصفقات تجارية عن طريق الهاتف أو الإيميل أو الويب، لأنه عادة يتضمن إعطاء بعض البيانات الشخصية عنك مثل العنوان البريدي.<br />
- اذا اتصلت بالانترنت، شركة الانترنت عادة تحتفظ بسجلات تحتوي على وقت دخولك ومكانك الحالي والمواقع التي ذهبت إليها.</p>
<p style="text-align:center;"><span style="color:red;">الجزء الثالث: </span></p>
<p style="text-align:center;"><span style="font-size:small;"><span style="color:black;">Spam</span></span></p>
<p style="text-align:center;">أحياناً السبام يسمى UCE اختصاراً لـ Unsolicited Commercial Email بمعنى الإيميلات التجارية الغير مرغوب فيها<br />
وأيضاً تسمى Junk email<br />
باختصار هي رسائل البريد المزعجة التي تأتي للبريد الالكتروني بدون طلب ورغبة من صاحب البريد</p>
<p style="text-align:center;">اذا قمت بالاشتراك في أحد النشرات البريدية في إحدى المواقع، فإن الرسائل القادمة من هذه النشرة البريدية لاتعتبر رسائل مزعجة spam سواء كانت تزعجك أم لا<br />
(يمكن تجي صح وخطأ :s)</p>
<p style="text-align:center;"><strong>ماذا تتضمن رسائل السبام عادةً ؟</strong><br />
- ادعاءات بأنه يمكنك تحقيق المال بسهولة<br />
- عروض وهمية لقروض بفوائد منخفضة<br />
- عرض برامج لتجميع عناوين بريد الكتروني (مافهمت هالنقطة :s)<br />
- عرض حصص أسهم في شركات جديدة وغير معروفة<br />
- منتجات طبية وعلاجية<br />
- برامج مقرصنة غير شرعية</p>
<p style="text-align:center;">*السبام هو وسيلة رخيصة الثمن للوصول إلى الآلاف من العملاء المستهدفين.<br />
* الذي يرسل رسائل مزعجة من المحتمل أن يدفع تكلفة الاتصال بالانترنت. ولكن مستقبل هذه الرسائل سيدفع تكلفة التعامل مع هذه الرسائل. والتكاليف التي سيتحملها المستقبل أعلى من التكاليف التي يتحملها مرسل الرسائل المزعجة !!<br />
* الرسائل المزعجة تتسبب في عمل ضغط على سيرفر البريد الالكتروني، ممايؤدي إلى تأخير وصول الرسائل البريدية العادية إلى المستخدمين.</p>
<p style="text-align:center;">* أغلب الناس لايحبون رؤية هذه الرسائل ولافتحها، لذلك أصبح السبامرز يستملون بعض الحركات لجعل المستخدم يفتح الرسائل، أمثلة على هذه الحركات:<br />
- جعل العنوان لايدل على انه عنوان لرسالة إعلانية أو دعائية.<br />
- وضع مسافات بين أحرف الكلمات في العنوان أو استعمال كلمة ترحيب متعارف عليها في العنوان مثل hi ، حتى لايقوم فلتر السبام بحذف الرسالة تلقائياً ونقلها إلى مجلد الرسائل المزعجة.<br />
- انتحال الشخصية البريدية لشخص أو شركة معروفة. (مثل الرسائل التي تأتي من عنوان مايكروسوفت وهي رسائل مزعجة)</p>
<h2 style="text-align:center;">Cookies</h2>
<p style="text-align:center;">طبعاً أي مدمن قهوة مثلي بيجي في باله الكوكيز بالشوكولاته <img title="Mouth" src="http://www.aoua.com/vb/images/newsm/mouth.gif" border="0" alt="" /><br />
الكوكيز هذي هي ملفات نصية يتم تداولها بين برنامج تصفح الانترنت (مثل انترنت اكسبلورر) وبين السيرفر اللي عليه صفحات انترنت زارها المستخدم<br />
هذي الملفات النصية يتم حفظ حركات المستخدم في الموقع فيها.<br />
مثلاً أنا في متصفحي ملف كوكيز خاص بهذا المنتدى، مسجل فيه أوقات زيارتي للمنتدى والمواضيع اللي زرتها وغيرها.<br />
وأيضاً لو دخلنا موقع للتسوق، لو قمنا بإضافة بعض الأغراض لعربة التسوق وبعدين طلعنا من الموقع ورجعنا في وقت ثاني، بنلاقي الأغراض اللي اخترناها موجودة. هذي تتم عن طريق الكوكيز.</p>
<p style="text-align:center;"><strong>مراحل عمل الكوكيز:</strong><br />
١- عند زيارة موقع، يقوم السيرفر الخاص بهذا الموقع بإنشاء ملف كوكي، ثم يرسله إلى المتصفح الخاص بالمستخدم، ثم يقوم المتصفح بحفظ هذا الملف على كمبيوتر المستخدم.<br />
٢- عند زيارة هذا الموقع مرة أخرى، سيقوم المتصفح مباشرة (بدون معرفة المستخدم) بإرسال ملف الكوكي الخاص بهذا الموقع إلى السيرفر، حتى يستطيع السيرفر التعرف على هذا المستخدم.<br />
عن طريق الخطوة الثانية نشوف بعض المواقع تكتب رسالة ترحيب باسم المستخدم.</p>
<p style="text-align:center;">* الكوكيز لاتستطيع إيذاء الكمبيوتر الخاص بك. ولا تقوم بإرسال معلومات سرية لأي طرف ثالث.</p>
<p style="text-align:center;">* فائدة الكوكيز، هي انها تسهل عملية الدخول إلى المواقع بشكل متكرر بدون الحاجة إلى مثلاً عمل تسجيل دخول كل مرة. كل موقع يحتاج منك تعريف نفسك وتفضيلاتك في أول زيارة فقط، وبعدها سيتم حفظ هذه المعلومات عن طريق الكوكيز حتى تسهل عليك الزيارة الثانية للموقع ، ويكون الموقع قادر على التعامل معك مباشرة حسب تفضيلاتك.</p>
<p style="text-align:center;">* أحياناً نجد ملفات كوكيز على الكمبيوتر تخص مواقع لم نقم بزيارتها أبداً. مثل هذه المواقع تقوم بجمع بيانات عن مستخدمي الانترنت ومن ثم تقوم ببيع هذه المعلومات إلى شركات التسويق.</p>
<p style="text-align:center;">* يستطيع المستخدم أن يتحكم بالكوكيز من إعدادات المتصفح، فيستطيع أن يرفض جميع الكوكيز، أو بعضها، أو كلها إذا أراد.</p>
<p style="text-align:center;"><span style="font-size:small;"><span style="color:black;">Data flow</span></span><br />
تدفق البيانات<br />
يقصد به عملية تجميع المعلومات من مصادر مختلفة، ودمجها والتعديل عليها، وعادة يتم إرسالها إلى الغير لأهداف تجارية.</p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">trusted third parties and key escrow</span></span></p>
<p style="text-align:center;">شركات بطاقات الائتمان تعتبر طرف ثالث موثوق فيه. فالمشتري يثق في أن شركة بطاقة الائتمان ستقوم بالدفع للبائع نيابة عنه. والبائع يثق في أن شركة بطاقة الائتمان تملك المال الكافي لاعطائه مستحقاته. وشركة الائتمان تثق في المشتري بأنه سيقوم بدفع هذا الدين في وقت لاحق.</p>
<p style="text-align:center;"><strong>Key escrow</strong><br />
درسنا في الوحدة 14 بأن المفتاح الخاص private key لايصح أن يعرفه أحد غير صاحبه فقط!<br />
لكن في بعض الحالات، هذا المفتاح يجب أن يعطى للشرطة أو لجهة حكومية بغرض التحقيق أو غيره، ونحن نثق بأن مثل هذه الجهات هي جهات موثوقة ولاخوف منها.<br />
عملية إعطاء المفتاح الخاص لمثل هذه الجهات الموثوقة تسمى key escrow</p>
<p style="text-align:center;"><span style="font-size:small;"><span style="color:black;">The Clipper Chip</span></span></p>
<p style="text-align:center;">هو معالج صغير microprocessor بتصميم خاص، يتم وضعه في أجهزة الهاتف ومودم الانترنت وغيرها.<br />
الهدف مه هذا المعالج الصغير هو القيام بعملية الـ key escrow وهي عملية إعطاء المفتاح الخاص لجهات رسمية موثوق بها لفك تشفير الرسائل بين طرفين.<br />
بمعنى ان المكالمات والرسائل مثلاً ستكون مشفرة ولكن هذا المعالج يسمح للجهات الحكومية الرسمية بفك تشفير هذه المكالمات والرسائل عن طريق إعطائهم الـ private key</p>
<p style="text-align:center;"><strong>هذا المعالج يحتوي على ثلاث خصائص:</strong><br />
١- كل معالج له مفتاح يتكون من 80-bit خاااص به. يعني لايوجد معالجين لهم نفس هذا المفتاح. ويسمى هذا المفتاح بـ unit key.<br />
٢- يوجد مفتاح يسمى family key هو نفسه في جميع المعالجات.<br />
٣- كل معالج له رقم تسلسلي خاااص به</p>
<p style="text-align:center;">باختصار كل المعالجات تحتوي على family key متشابه.<br />
وكل معالج يحتوي على unit key و serial number خاااص به.</p>
<p style="text-align:center;">الـ unit key يتم تقسيمه إلى نصفين، ويتم إرسال كل نصف إلى جهة مختلفة (حتى يضمن الخصوصية ولاتستطيع أي جهة فك تشفير الرسائل بمفردها)</p>
<p style="text-align:center;"><strong>عملية التشفير عن طريق هذا المعالج:</strong><br />
١- أول شيء عندما يرغب طرفين بالتواصل مع بعض، يتم إنشاء مفتاح اسمه session key ويحتفظ كل طرف بهذا المفتاح.<br />
٢- بعدين يقوم المرسل بتشفير الرسالة عن طريق الـ session key</p>
<p style="text-align:center;">ركزوا في الخطوتين الجاية ..</p>
<p style="text-align:center;">٣- بعدها يقوم المعالج للطرف المرسل (الـclipper chip) بتشفير الـ session key بالـ unit key الخاص به<br />
٤- بعدها يتم إضافة بعض المعلومات على الـ session key (اللي تشفر في الخطوة السابقة) وبعدين يتم تشفير هذا الناتج عن طريق الـ family key اللي يشتركون فيه جميع المعالجات</p>
<p style="text-align:center;">الناتج من الخطوة الأخيرة يسمى LEAF اختصار لـ Law Enforcement Access Field</p>
<p style="text-align:center;">الآن النتيجة عندنا شيئين، رسالة مشفرة (من الخطوة الثانية) والـ LEAF (من الخطوة الرابعة)</p>
<p style="text-align:center;">- الآن يقوم المرسل بإرسال الرسالة المشفرة والـ LEAF إلى الطرف الآخر<br />
عادة المستقبل يشتقبل الرسالة المشفرة فقط (بدون الـ LEAF)</p>
<p style="text-align:center;">- يقوم المعالج الخاص بالمستقبل (clipper chip) بفك تشفير الرسالة عن طريق الـ session key الذي تشاركوه في أول خطوة. ومن ثم يتم التخلص من هذا المفتاح.</p>
<p style="text-align:center;">طيب الحين وش فائدة الـ LEAF اللي سويناه ؟؟؟؟<br />
فائدتها هي انه إذا مثلاً الشرطة حبت تعرف محتوى رسالة ما ، لازم تحصل على هذا الـ LEAF وتفك تشفيره عن طريق الـ family key</p>
<p style="text-align:center;">يعني عملية إنتاج الـ LEAF يقوم بعملها المرسل للرسالة وهي كالتالي:<br />
١- session key<br />
٢- تشفير الـ session key بواسطة unit key<br />
لدينا الآن session key مشفر<br />
٣- تشفير الـ session key المشفر عن طريق الـ family key<br />
الآن نتج لدينا الـ LEAF (عبارة عن session key مشفر مرتين)</p>
<p style="text-align:center;">وعملية تفكيك الـ LEAF تتم عن طريق المباحث أو الشرطة للحصول على الـ session key الأصلي اللي يستطيع فك تشفير الرسالة وهي عكس عملية الانتاج:<br />
١- فك تشفير الـ LEAF عن طريق الـ family key</p>
<p style="text-align:center;">الآن لدينا الـ session key <span style="text-decoration:underline;">المشفر</span>، عشان نحصل على الـ session key الأصلي لازم نحصل على الـ unit key<br />
ومثل ماذكرت فوق كل clipper chip له unit key خاص فيه ، والـ unit key يتم تقسيمه لنصفين ويتم حفظ كل نصف لدى طرف مختلف لضمان الخصوصية.<br />
فالآن الشرطة ممكن تأتي بأمر من المحكمة أو أي أمر رسمي وتقدمه للطرفين اللي عندهم أجزاء الـ unit key عشان تقدر تحصل عليه</p>
<p style="text-align:center;">٢- بمجرد حصولهم على الـ unit key يقومون بفك تشفير الـ session key المشفر عن طريقه لينتج الـ session key الأصلي وعن طريقه يستطيعون فك تشفير الرسالة</p>
<p style="text-align:center;">أووف والله معقدة <img title="Ranting" src="http://www.aoua.com/vb/images/newsm/ranting.gif" border="0" alt="" /><br />
ان شاء الله تكون وضحت <img title="حزن" src="http://www.aoua.com/vb/images/smilies/frown.gif" border="0" alt="" /></p>
<p style="text-align:center;">عموماً هذا الشيء البثر المسمى بـ clipper chip ، انتهى من الوجود لأن الناس عارضته واعتبروه مخالف لحقوق الإنسان، بالإضافة إلى انهم اكتشفوا انه ممكن فك تشفير الرسائل بدون الحاجة للـ unit key اللي أزعجونا فيه <img title="Chair" src="http://www.aoua.com/vb/images/newsm/chair.gif" border="0" alt="" /><img title="Chair" src="http://www.aoua.com/vb/images/newsm/chair.gif" border="0" alt="" /></p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">Owning and Controlling Information</span></span><br />
السيطرة والتحكم في المعلومات</p>
<p style="text-align:center;"><strong>بعض الأسباب التي تجعل الناس يرغبون بنشر المعلومات:</strong><br />
- لكسب المال، مثلاً عن طريق بيع المعلومات لمن يهمه الأمر.<br />
- هواية (وباللهجة المحلية لقافة <img title="يضحك" src="http://www.aoua.com/vb/images/smilies/biggrin.gif" border="0" alt="" />)<br />
- لعمل إعلان لمنتج أو خدمة لشركة أو شخص معين.<br />
- للتشهير بشخص.</p>
<p style="text-align:center;"><span style="font-size:small;"><span style="color:black;">Trade Mark</span></span><br />
العلامة التجارية هي عبارة قانونية تعني بأن اسم أو شعار أو عبارة مسجلة بأنها تخص شركة معينة ولا يمكن استعمالها عن طريق أي جهة أخرى.</p>
<p style="text-align:center;">العلامات التجارية يجب أن تسجل لدى الجهة المعنية (وزارة التجارة مثلاً) ويجب أن يتم تجديدها كل فترة، ويجب الدفاع عنها قانوناً.</p>
<p style="text-align:center;">في بداية الانترنت، بعض الناس قاموا بحجز أسماء نطاقات لشركات كبيرة، وأيضاً لأسماء قرى ومدن وعوائل وأسماء كبيرة، بهدف أن يقوموا ببيع هذه النطاقات على أصحابها بمبالغ مالية كبيرة.<br />
هذه العملية تسمى <strong>cyber-squatting</strong></p>
<p style="text-align:center;">المقصود بالنطاقات هو مثلاً <a href="http://www.aoua.com/" target="_blank">www.aoua.com</a></p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">Digital Piracy</span></span><br />
القرصنة الرقمية</p>
<p style="text-align:center;">انتشرت القرصنة الرقمية أكثر من الـ analogue لأن النسخ الرقمية جودتها مشابهة للنسخة الأصلية بعكس الـ analogue<br />
مثلاً اذا قمنا بتسجيل شريط كاسيت عادي ستكون النسخة جودتها أقل من النسخة الأصلية<br />
لكن اذا قمت بعمل نسخ لملف mp3 وقمت بلصقه في مكان آخر ستكون جودة النسخة الجديدة نفس الأصلية</p>
<p style="text-align:center;">MP3 يسمى صديق القراصنة لأنه سهل عليهم عمليات نسخ الملفات الصوتية بشكل غير شرعي<br />
mp3 اختصار لـ <strong>M</strong>oving <strong>P</strong>icture expert group audio layer <strong>3</strong><br />
ممكن يجي بشكل سؤال اختيارات عن الـ layer الخاص بالـ mp3 <img title="G" src="http://www.aoua.com/vb/images/newsm/g.gif" border="0" alt="" /><br />
والإجابة هي layer 3</p>
<p style="text-align:center;"><strong>كيف نحسب كم عدد الـ bits  اللي نحتاجها لتخزين ثانية صوتية واحدة على cd ؟</strong></p>
<p style="text-align:center;"><strong>لازم نعرف بأن الـ frequency rate في الـ cd هو 44100 نموذج (في الثانية)<br />
كل نموذج يتكون من 16 bit<br />
والنموذج يكون خاص بسماعة وحدة بس</strong> (بعد شوي توضح) يعني اذا بنستخدم سماعتين 2 channels أو stereo بنضرب في 2</p>
<p style="text-align:center;">إجابة السؤال بتكون 44100 ضرب 16<br />
عشان نعرف كم بت نحتاج لتخزين صوت لمدة ثانية على cd<br />
لكن هذا اذا كان لسماعة وحدة (يعني الصوت راح يشتغل في سماعة وحدة بس)<br />
اذا نبغا على سماعتين نضرب النتيجة في 2<br />
اذا نبغا على الأنظمة المتطورة خمس سماعات مثلاً نضرب في خمسة وهكذا</p>
<p style="text-align:center;">يعني النتيجة بتكون<br />
= 44100 * 16 * 2<br />
= 1411200 bits</p>
<p style="text-align:center;">طيب لو قال ان فيه cd يحتوي على 74 دقيقة صوتية .. كم عدد الـ bits اللي مخزنة على هذا السي دي؟</p>
<p style="text-align:center;">لازم نفهم الفكرة الأساسية ..<br />
الحين احنا عرفنا بأن في الثانية الصوتية الواحدة بنحتاج لـ 1,411,200 بت<br />
أول شي نسويه للحل هو تحويل الدقائق الـ 74 إلى ثواني<br />
فنضرب 74 في 60 وبيطلع الناتج 4440 ثانية<br />
يعني الـ 74 دقيقة تساوي 4440 ثانية</p>
<p style="text-align:center;">بعدين نضرب عدد الثواني في عدد الـ bits اللي نحتاجها لكل ثانية (نتيجة السؤال اللي قبل)<br />
يعني = 1411200 * 4440<br />
= 6,265,728,000 bits</p>
<p style="text-align:center;">لو طلب في السؤال الـ byte بدل bits<br />
نحل بنفس الطريقة وبعد مانعرف الbits نقسمها على 8<br />
لأن البايت يحتوي على 8 بتس</p>
<p style="text-align:center;">فيه بعض المسائل الرياضية تختص بفقرة الـ digital piracy ياليت تتطلعون عليها من السلايدات واذا فيه وحدة غير واضحة اسألوني عنها وان شاء الله بشرحها</p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">Compression</span></span></p>
<p style="text-align:center;">عملية ضغط الملفات فائدتها هي تقليل حجم الملف وتسمى <strong>lossless compression</strong> ومثال عليها الضغط بنوع zip أو rar</p>
<p style="text-align:center;">يمكن زيادة ضغط الملف عن طريق التخلص من بعض المعلومات، وهذه الطريقة تسمى <strong>lossy algorithms</strong><br />
وهذه مستخدمة في الصور من نوع jpeg لتقليل حجم الصور عن طريق التخلص من بعض البكسلات والألوان التي لاتؤثر تأثير كبير على جودة الصورة وتساعد على تقليل حجمها</p>
<p style="text-align:center;">mp3 هو مثال على lossy algorithms<br />
لأنه يقوم بحذف الموجات الصوتية المنخفضة جداً أو العالية جداً والتي لايؤثر حذفها على جودة الملف الصوتي<br />
وأيضاً في حالة تواجد صوتين في نفس الوقت، طبيعة الإنسان ستجعله يستمع للصوت الأعلى، فالـ mp3 سيحذف الصوت الواطي لأنه لن يؤثر على الجودة.</p>
<p style="text-align:center;">هذه العملية تسمى <strong>perceptual encoding</strong></p>
<p style="text-align:center;">الملفات الصوتية الموجودة على cd اذا تم تحويلها إلى mp3 سينخفض حجمها إلى عشر (واحد على عشرة) حجمها الأصلي</p>
<p style="text-align:center;"><strong>ripper</strong> هو برنامج يساعد على تحويل الأغاني والصوتيات الموجودة على السي دي إلى نوع mp3</p>
<p style="text-align:center;"><span style="font-size:small;"><span style="color:black;">Napster</span></span></p>
<p style="text-align:center;">هو برنامج لمشاركة ملفات الـ mp3<br />
طريقته هو انه يبحث في الكمبيوتر الخاص بالمستخدم عن ملفات mp3 ثم يبحث عن بيانات هذه الملفات (مثل اسم المغني واسم الأغنية وغيرها) ثم يضيف في قاعدة البيانات بأن هذه الأغنية لهذا المغني موجودة عند هذا المستخدم<br />
إذا قام شخص آخر بالبحث عن هذه الأغنية سيبحث البرنامج في قاعدة البيانات ثم سيجد بأنها موجودة لديك، وسيتأكد بأنك متصل بالانترنت، اذا كنت متصل يستطيع الطرف الثاني من تحميل الأغنية من جهازك.</p>
<p style="text-align:center;">هذه العملية تسمى<strong> file sharing  أو file swapping</strong><br />
هذا البرنامج هو مثال على <strong>peer-to-peer network</strong> بمعنى ان الاتصال في هذا البرنامج يتم بين المستخدمين بشكل مباشر بدون الحاجة إلى سيرفرات</p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">FreeNet</span></span></p>
<p style="text-align:center;">* هو برنامج أو نظام يساعد أي شخص يريد إرسال معلومات بأن يخفي هويته<br />
* الملفات الخاصة بفري نت لايمكن مشاهدتها عن طريق متصفح الويب العادي (مثل انترنت اكسبلورر)<br />
* لمشاهدة الملفات الخاصة بفري نت يجب تحميل برنامج خاص نستطيع من خلاله قراءة الملفات والبحث في الملفات الخاصة بالنظام<br />
* كل ملف يتبع لهذا النظام له رقم تسلسلي خاص به يسمى GUID اختصاراً لـ Global Unique Identifier<br />
* اذا أراد المستخدم البحث عن ملف معين، يقوم البرنامج بالبحث عن الرقم التسلسلي GUID الخاص بهذا الملف.<br />
* يعني لو ملف معين خاص بالنظام تغير مكان تخزينه، النظام مايتأثر، لأن رقمه التسلسلي هو نفسه والنظام يحتاج بس للرقم التسلسلي عشان يبحث عن الملفات.<br />
* يوجد شيء اسمه node بمعنى عقدة أو نقطة تقاطع الشبكات، كل node يحتوي على أرقام تسلسلية لملفات فري نت بالإضافة لجدول يحتوي على بقية النقاط nodes والأرقام التسلسلية اللي تحتوي عليها. يعني الآن البرنامج بيبحث عن رقم 222 على سبيل المثال ، راح يذهل لأقرب node في الشبكة وعشان يحدد وين مكان الملف صاحب هذا الرقم، لو ماكان الملف موجود في هذا الـ node راح يشوف في الجدول اللي يحتوي على بقية الـ nodes ومحتوياتها عشان يعرف وين يروح لأي node<br />
* جدول الـ nodes ومحتوياتها يسمى routing table بمعنى جدول التوجيه. لأنه يوجه البرنامج للمكان اللي يبغا يوصل له.<br />
* إذا تمت إضافة ملف فري نت جديد للنظام، يتم تشفير محتويات هذا الملف ومن ثم يتم توزيع رقمه التسلسلي على عدة nodes في النظام.<br />
* فري نت هو مثال على شبكة peer-to-peer</p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">Digital Rights Management &#8211; DRM</span></span><br />
إدارة الحقوق الرقمية</p>
<p style="text-align:center;">هذا المفهوم يعني بأن صاحب أو منتِج أي شيء رقمي (كتاب ، ملف صوتي ، ملف مرئي .. الخ) يستطيع التحكم بكيف ممكن أن يستخدم الناس منتجه<br />
مثال عليه (غير موجود في المنهج) ، شركة أبل تبيع أغاني عن طريق برنامج iTunes الخاص فيها، هذي الأغاني كانت محمية بالـ DRM ، والحماية تمنع أي شخص يشتري أغنية عن طريق البرنامج بأنه ينقل الأغنية لكمبيوتر آخر أو لعدة أجزة آي بود وغيرها.<br />
قبل شهر أو شهرين أعلنوا أبل بأن الأغاني ستكون DRM free بمعنى انهم سيزيلون الحماية التي كانت موجودة</p>
<p style="text-align:center;">أكثر تقنية تستعمل هذا المبدأ هي <strong>SDMI</strong> اختصاراً لـ Secure Digital Music Initiative<br />
وهي خاصة بحماية الأغاني والملفات الموسيقية</p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">Digital Watermarks</span></span><br />
الـ digital watermark هي لحماية حقوق أصحاب الملفات الرقمية (أياً كان الملف) ، يعني أصحاب الصور نلقاهم يحطون اسمهم أو شعارهم على الصورة ، وأصحاب الكتب نلقاه حاط اسمه على الصفحات أو إيميله على كامل الصفحة مثل ملخصات المهندس أيمن <img title="Clap 1" src="http://www.aoua.com/vb/images/newsm/clap_1.gif" border="0" alt="" /></p>
<p style="text-align:center;">لكن الموضوع يختلف في الملفات الصوتية لأن مسألة إضافة صوت يذكر اسم صاحب الملف أو غيره بيشوه الملف الصوتي سواء كانت أغنية أو غيره، وأيضاً عملية تقطيع الملف الصوتي لإزالة الأشياء الغير مرغوب فيها سهلة.</p>
<p style="text-align:center;">لذلك ال digital watermarks لتقنية SDMI تكون عبارة عن بيانات bits مدموجة مع الـ bits الخاصة بالملف. وطبعاً لا يمكن رؤيتها بشكل مباشر، ولكن يمكن الحصول عليها عن طريق برامج متخصصة.</p>
<p style="text-align:center;"><strong>SDMI استعملت نوعين watermarks في كل ملف:</strong><br />
1- الأول اسمه <strong>the robust watermark</strong><br />
وهذا لا يتأثر من عملية ضغط الملفات أو فك الضغط أو تغيير امتداد الملف أو نسخ الملف إلى عدة كمبيوترات<br />
2- اسمه <strong>the fragile watermark</strong><br />
وهذا يختفي في حالة ضغط الملف أو نسخه أو التعديل عليه</p>
<p style="text-align:center;">* اذا حاولنا تشغيل ملف صوتي (أغنية مثلاً) تحتوي على حماية SDMI ولكن ملف الأغنية لايحتوي على fragile watermark لن تشتغل الأغنية.<br />
يعني اذا اشتريت أنا أغنية محمية بهذي التقنية وبعدين قمت بنسخ الأغنية لكمبيوتر ثاني (هنا راح يختفي الووتر مارك الثاني لأني سويت نسخ) مشغل الأغاني (مثل برنامج آي تونز) ماراح يشغل هذي الأغنية لأنه عرف انها منسوخة أو تم قرصنتها.</p>
<p style="text-align:center;">* بعض مشغلات الأغاني القديمة (البرامج القديمة) لم يتم برمجتها وتعريفها على هذه التقنية، فممكن أن نقوم بتشغيل هذي الأغاني المنسوخة عليها.</p>
<p style="text-align:center;">* المنظمة اللي صممت هذي التقنية كانت واثقة من كفاءتها بشكل كبير، فقاموا بعمل تحدي مع البرمجين في شهر سبتمبر عام 2000 يتحرونهم انهم يزيلون الـ watermark من الملفات.<br />
* في شهر أكتوبر عام 2000 (بعد شهر) قدروا المبرمجين يشيلون الـ watermark خخخخخ <img title="Biggrin23" src="http://www.aoua.com/vb/images/newsm/biggrin23.gif" border="0" alt="" /></p>
<p style="text-align:center;">*طبعاً في حالة القدرة على إزالة الـ watermark راح يكون الملف غير محمي وممكن نشغله في أي مكان وزمان.</p>
<p style="text-align:center;">* مايكروسوفت قامت بإضافة خاصية DRM لبرنامج ويندوز ميديا بلاير، وتفكر بإضافتها إلى جميع نسخ ويندوز المستقبلية.<br />
* هذا المشروع يسمى Next-Generation Secure Computing Base (NGSCB)<br />
* ويهدف هذا المشروع للسماح لأصحاب البرامج بالتحكم في كيفية معالجة المعلومات عن طريق برامجهم<br />
* بمعنى لو تم تطبيق هذا المشروع على نظام الويندوز، لن نصبح قادرين على تشغيل برنامج غير مصرح لنا باستخدامه (لم نشتريه مثلاً) ، يعني الويندوز راح يراسل موقع البرنامج للتأكد من أني مرخص لاستعمال البرنامج أو لأ</p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">Spyware</span></span><br />
هو برنامج يعمل في الخلفية (بدون أن نحس بعمله) يقوم بالتجسس ومراقبة ماذا نفعل، ومن ثم يرسل هذه المعلومات إلى صاحب السباي وير، ومن ثم يستطيع أن يبيع هذه المعلومات إلى شركات تطوير برامج أو إلى شركات التسويق</p>
Posted in شروحات Tagged: Learner, M150B, unit-15 <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aoum150.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aoum150.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aoum150.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aoum150.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aoum150.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aoum150.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aoum150.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aoum150.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aoum150.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aoum150.wordpress.com/221/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=221&subd=aoum150&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-15/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">المعتصم</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/smilies/biggrin.gif" medium="image">
			<media:title type="html">يضحك</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/newsm/mouth.gif" medium="image">
			<media:title type="html">Mouth</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/newsm/ranting.gif" medium="image">
			<media:title type="html">Ranting</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/smilies/frown.gif" medium="image">
			<media:title type="html">حزن</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/newsm/chair.gif" medium="image">
			<media:title type="html">Chair</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/newsm/chair.gif" medium="image">
			<media:title type="html">Chair</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/smilies/biggrin.gif" medium="image">
			<media:title type="html">يضحك</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/newsm/g.gif" medium="image">
			<media:title type="html">G</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/newsm/clap_1.gif" medium="image">
			<media:title type="html">Clap 1</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/newsm/biggrin23.gif" medium="image">
			<media:title type="html">Biggrin23</media:title>
		</media:content>
	</item>
		<item>
		<title>شرح الوحدة 14</title>
		<link>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-14/</link>
		<comments>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-14/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 23:02:05 +0000</pubDate>
		<dc:creator>المعتصم</dc:creator>
				<category><![CDATA[شروحات]]></category>
		<category><![CDATA[Learner]]></category>
		<category><![CDATA[M150B]]></category>
		<category><![CDATA[unit-14]]></category>

		<guid isPermaLink="false">http://aoum150.wordpress.com/?p=212</guid>
		<description><![CDATA[

الوحدة 14: Security
الجزء الأول:
crackers: هم ناس يبحثون عن ثغرات أمنية، عادة لأغراض إجرامية
Hackers: هم ناس لديهم مهارات برمجية عادةً يستخدمونها بشكل نظامي وشرعي
يعني غلط اننا نقول الهاكرز يخترقون أجهزتنا وهم اللي يسوون كراكات للبرامج
المفروض نقول كراكر &#8230;
بعض المخاطر الأمنية:
1- False authority syndrome
2- list linking
3- roll your own credit cards
4- web attack
5- money transfer
6- internet worm
الجزء [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=212&subd=aoum150&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:center;">
<p style="text-align:center;"><span id="more-212"></span></p>
<p style="text-align:center;"><span style="font-size:medium;">الوحدة 14: Security</span></p>
<p style="text-align:center;"><span style="color:red;">الجزء الأول:</span></p>
<p style="text-align:center;"><strong>crackers</strong>: هم ناس يبحثون عن ثغرات أمنية، عادة لأغراض إجرامية</p>
<p style="text-align:center;"><strong>Hackers</strong>: هم ناس لديهم مهارات برمجية عادةً يستخدمونها بشكل نظامي وشرعي</p>
<p style="text-align:center;">يعني غلط اننا نقول الهاكرز يخترقون أجهزتنا وهم اللي يسوون كراكات للبرامج<br />
المفروض نقول كراكر &#8230;</p>
<p style="text-align:center;"><strong>بعض المخاطر الأمنية:</strong><br />
1- False authority syndrome</p>
<p style="text-align:center;">2- list linking</p>
<p style="text-align:center;">3- roll your own credit cards</p>
<p style="text-align:center;">4- web attack</p>
<p style="text-align:center;">5- money transfer</p>
<p style="text-align:center;">6- internet worm</p>
<p style="text-align:center;"><span style="color:red;">الجزء الثاني: التشفير</span></p>
<p style="text-align:center;"><strong>cryptography</strong> هي ببساطة دراسة أو علم إخفاء الكتابة إلى كتابة غير مفهومة</p>
<p style="text-align:center;"><strong>steganography</strong> هو القيام بتغيير مظهر الشيء (المحسوس) إلى مظهر آخر حتى نخفيه</p>
<p style="text-align:center;"><strong>plain text</strong> هو النص الأصلي الطبيعي قبل التشفير</p>
<p style="text-align:center;"><strong>cipher text</strong> هو نص مشفر</p>
<p style="text-align:center;"><strong>encryption</strong> هي عملية تحويل النص العادي إلى نص لايمكن فهمه إلا عن طريق معرفة طريقة التشفير</p>
<p style="text-align:center;"><strong>decryption</strong> هي عملية إرجاع الكتابة المشفرة إلى صيغتها الأصلية والطبيعية</p>
<p style="text-align:center;"><strong>symmetric key encryption</strong><br />
نفس مفتاح التشفير يستخدم في فك التشفير</p>
<p style="text-align:center;"><strong>asymmetric key encryption</strong><br />
يوجد مفتاحين في هذي الطريقة، مفتاح للتشفير ومفتاح لفك التشفير</p>
<p style="text-align:center;"><strong>التشفير بطريقة قيصر Caesar cipher encryption</strong></p>
<p style="text-align:center;">طريقة قيصر تتكون من 25 مفتاح (بعد شوي نعرف ليه 25) ، لو نبغا نشفر مثلاً كلمة aou بمفتاح واحد، راح نزيد كل حرف فيها بواحد<br />
يعني الa تصير b .. وال o تصير p وال u تصير v</p>
<p style="text-align:center;">يعني اذا بنشفر كلمة aou بمفتاح واحد بطريقة قيصر بتصير الكلمة بعد التشفير bpv</p>
<p style="text-align:center;">طيب اذا بنشفرها بمفتاحين؟<br />
الـ a تصير c .. والـ o تصير q .. والـ u تصير w</p>
<p style="text-align:center;">يعني كلمة aou بعد التشفير بطريقة قيصر بمفتاحين تكون cqw</p>
<p style="text-align:center;">طبعاً لازم نكون عارفين الأحرف الانجليزية وترتيبها عشان نعرف نشفر أو نفك التشفير بهذي الطريقة!</p>
<p style="text-align:center;">طيب لو كان المطلوب العكس .. يعطينا كلمة مشفرة بطريقة قيصر ويطلب مننا نفكها .. في هذي الحالة راح ناخذ الكلمة المشفرة ونضيف عليها مفتاح وبعدين مفتاحين وبعدين ثلاثة &#8230; حتى نوصل للمفتاح 25 .. يعني راح نكتب 25 كلمة وبعدين ندور على كلمة من ضمن الكلمات اللي كتبناها تكون معروفة ولها معنى</p>
<p style="text-align:center;">مثلاً لو قال الكلمة cqw هي كلمة مشفرة بطريقة قيصر Caesar cipher .. المطلوب فك شفرة الكلمة<br />
طيب أول شي احنا عرفنا اننا لازم نضيف 25 مفتاح على الكلمة المشفرة عشان نكتب كل الاحتمالات، وبعدين نقرر ايش هي الكلمة قبل التشفير<br />
فنبدأ بإضافة مفتاح على الكلمة، فتصير drx<br />
نضيف مفتاح ثاني، فتصير esy<br />
تكملة الحل في هذا الجدول:<br />
<a href="http://www.aoua.com/vb/attachment.php?attachmentid=53123&amp;stc=1&amp;d=1244162547" target="_blank"><br />
</a><a href="http://aoum150.files.wordpress.com/2009/07/attachment.png"><img class="aligncenter size-full wp-image-213" title="cipher 1" src="http://aoum150.files.wordpress.com/2009/07/attachment.png?w=470&#038;h=724" alt="cipher 1" width="470" height="724" /></a></p>
<p style="text-align:center;">
<p style="text-align:center;">لاحظي ان الكلمة الأساسية عندها صفر، يعني ماغيرنا فيها شي .. بعدين كل مازدنا مفتاح، كل حرف راح ينتقل للحرف اللي بعده<br />
أسهل طريقة لكتابة مثل هالجدول، هو اننا نمسكها حرف حرف، يعني الحين أنا جيت للحرف الأول c بعدين جلست أكتب الحروف في العمود الخاص فيه بسرعة d e f g h i j k l m n o p q r s t u v w x y z<br />
وبعده انتقلت للحرف الثاني وسويت نفس الشي، وبعدين الثالث</p>
<p style="text-align:center;">لاحظي في الجدول يوم وصلنا للمفتاح 26 اننا رجعنا للكلمة الأساسية اللي جنبها 0<br />
لأننا كذا مرينا على كل الأحرف ورجعنا من جديد<br />
فعشان كذا المفتاح 26 هو كأننا نقول الكلمة ماتتغير<br />
ولو قلنا مفتاح 27 بيصير كأننا نزيد مفتاح واحد، لأن كلهم نفس النتيجة مثل ماهو واضح في الجدول<br />
ومفتاح 28 يعني كأننا نقول مفتاح 2 لأنها نفس النتيجة</p>
<p style="text-align:center;">عشان كذا عدد المفاتيح في هذي الطريقة هو 25 بس<br />
لكن احتمال انهم يقولون لنا مفتاح أكثر من 25 .. وفي هذي الحالة راح نطرح الرقم من 26 (عدد الأحرف) عشان نعرف كم المفتاح الصحيح<br />
يعني مثلاً مفتاح 28 اذا طرحنا منه 26 الناتج بيكون 2</p>
<p style="text-align:center;">نرجع للمثال .. الحين كتبنا كل الاحتمالات للكلمة قبل التشفير<br />
نجي نشوف الكلمات اللي تكونت عندنا وناخذ الكلمة المفهومة واللي لها معنى<br />
وفي حالتنا الكلمة هي aou عند المفتاح رقم 24</p>
<p style="text-align:center;">مثال ثاني، لو قال الكلمة spwwz هي كلمة مشفرة بطريقة قيصر ، المطلوب فك شفرة الكلمة<br />
أول شي نسويه اننا نكتب كل الاحتمالات مثل هذا الجدول:<br />
<a href="http://aoum150.files.wordpress.com/2009/07/attachment-1.png"><img class="aligncenter size-full wp-image-214" title="cipher 2" src="http://aoum150.files.wordpress.com/2009/07/attachment-1.png?w=470&#038;h=679" alt="cipher 2" width="470" height="679" /></a><a href="http://www.aoua.com/vb/attachment.php?attachmentid=53124&amp;stc=1&amp;d=1244162547" target="_blank"><br />
</a><br />
طبعاً المفتاحين 26 و 27 ماله داعي نكتبها، بس أنا كتبتها هنا عشان أوضح لكم ليه عدد مفاتيح الطريقة هو 25 بس</p>
<p style="text-align:center;">عاد الكلمة قبل التشفير بخليها عليكم تمرين <img title="Mouth" src="http://www.aoua.com/vb/images/newsm/mouth.gif" border="0" alt="" /></p>
<p style="text-align:center;">
<p style="text-align:center;">هذا التشفير سهل الكسر ، ومعرفة الكلمة المشفرة مسألة وقت فقط</p>
<p style="text-align:center;"><strong>one-time pad</strong><br />
بصراحة ماعرفت كيف أشرحها <img title="حزن" src="http://www.aoua.com/vb/images/smilies/frown.gif" border="0" alt="" /><br />
بس الأمثلة اللي في سلايدات الأستاذة جمانة واضحة فيها ان شاء الله</p>
<p style="text-align:center;"><strong>enigma machine</strong></p>
<p style="text-align:center;">هذي مكينة معقدة، وظيفتها تشفير وفك تشفير الكلام بطريقة معينة معقدة (يحددها مستخدم المكينة) ، المكينة هذي كانوا يستخدمونها الألمانيين في الحرب العالمية الثانية في تشفير رسائلهم، فكانوا مسوين لهم كتاب يسمى code book في داخل هذا الكتاب توجد طريقة إعداد المكينة عشان تقدر تفك تشفير الرسائل الخاصة بالجيش الألماني<br />
طبعاً هذا يدل على ان فك التشفير صعب جداً بعكس الطريقة الأولى، والعدو راح يصعب عليه انه يفك تشفير رسائل الألمان بواسطة المكينة لأنه مايعرف الإعدادات اللي هم يستخدمونها، فما فيه طريقة لفك تشفير هذي الرسائل الا اذا قدر العدو انه يسرق نسخة من كتاب الـ code book وهذا اللي صار مع الألمان في الحرب العالمية الثانية</p>
<p style="text-align:center;">
<p style="text-align:center;">هي تعتمد على symmetric key بمعنى ان مفتاح التشفير هو نفسه مفتاح فك التشفير<br />
ولكن مفتاح التشفير في هذي الآلة معقد لأن الkey يتم ضبطه في الآلة بطريقة معقدة<br />
هذي الطريقة تكون مكتوبة في كتاب اسمه code book كل الطرفين يكون عندهم نسخة منه</p>
<p style="text-align:center;">مشكلة هذي الطريقة انه لو أحد قدر يحصل على هذا الكتاب بطريقة ما، بيقدر يفك تشفير الرسائل</p>
<p style="text-align:center;"><strong>Data Encryption Standard (DES)</strong><br />
هو نوع تشفير تم تطويره من قبل شركة IBM و وكالة الأمن الوطني لحكومة الولايات المتحدة عام 1976<br />
التشفير في هذه الطريقة يعتمد على مفتاح واحد للتشفير وفك التشفير symmetric key</p>
<p style="text-align:center;"><strong>brute force attack</strong> هو عبارة عن ادخال النص المشفر في الكمبيوتر، وسيقوم الكمبيوتر بتجربة كل المفاتيح المحتملة لفك التشفير حتى يحصل على نتيجة لها معنى<br />
عن طريق هذه الطريقة تم فك تشفير النص المشفر عن DES</p>
<p style="text-align:center;">تستعمل هذه الطريقة أسلوبين للتشفير وهي:<br />
1- تبديل أماكن الأحرف، يعني كلمة hello تخليها مثلاً بالعكس olleh<br />
2- إضافة مفتاح قيصر لتشفير النص بعد تبديل أماكن الأحرف، مثلاً يتم تشفير الناتج من الخطوة الأولى بمفتاح واحد.</p>
<p style="text-align:center;">وتسمى أساليب التشفير في هذه الطريقة: permutation, swapping and function application</p>
<p style="text-align:center;"><span style="color:black;">جميع طرق التشفير المذكورة في الأعلى تستعمل نفس المفتاح للتشفير ولفك التشفير symmetric key، وهذا سبب في ضعفها وعدم فعاليتها<br />
لأن بمجرد معرفة المفتاح نستطيع فك التشفير</span></p>
<p style="text-align:center;">لذلك تم ابتكار طرق تشفير من نوع <strong>asymmetric key</strong><br />
هذا النوع طريقته كالتالي:<br />
لنفرض ان لدينا شخصين محمد وعبدالله يريدون تبادل رسائل مشفرة حتى لايراها أحد غيرهم<br />
يأتي محمد عن طريق برنامج معين (المتصفح في حالة SSL) ويقوم بإنتاج مفتاحين &#8220;مرتبطين ببعض&#8221; مفتاح عام public ومفتاح خاص private<br />
بعدها يرسل محمد المفتاح العام لعبدالله عن طريق أي وسيلة (لا يهم اذا اطلع عليه أحد)<br />
يأتي عبدالله بهذا المفتاح ويقوم بتشفير الرسالة التي لديه عن طريق المفتاح العام public key اللي أرسله محمد<br />
وبعدين يرسل الرسالة المشفرة لمحمد<br />
بعدها محمد يفك شفرة الرسالة عن طريق المفتاح الخاص الموجود عنده والمرتبط بالمفتاح العام</p>
<p style="text-align:center;">المفتاح الخاص مافيه أحد يطلع عليه غير الشخص اللي يبغا يفك التشفير</p>
<p style="text-align:center;">وممكن بعدين محمد يشفر رسالة بواسطة المفتاح الخاص private key وعبدالله يفك تشفير الرسالة عن طريق المفتاح العام public key</p>
<p style="text-align:center;"><strong>RSA</strong> هي طريقة للتشفير وتعتمد على طريقة المفتاحين العام والخاص asymmetric key</p>
<p style="text-align:center;">لو كانا نرغب في عمل تشفير لصفحات انترنت مثلاً وحجمها كان كبير جدّاً ، يفضل استعمال نوع DES بدلاً من RSA</p>
<p style="text-align:center;">لأن الأول يستعمل في تشفيره مفتاح واحد بعكس الثاني ، وبالتالي الوقت والموارد الحاسوبية (المعالج والذاكرة وغيرها) المستهلكة في التشفير عن طريق DES ستكون أقل بكثير من RSA وبالتالي سيكون DES أكثر فعالية للاستخدام في مثل هذه الحالات.</p>
<p style="text-align:center;"><span style="color:red;">الجزء الثالث:</span></p>
<p style="text-align:center;"><strong>SSL (Secure Sockets Layer)</strong><br />
هذا التشفير هو الشائع في عالم الانترنت<br />
يستعمل كل النوعين symmetric و asymmetric keys<br />
الـsymmetric key يستعمل مرة واحدة فقط</p>
<p style="text-align:center;">SSL أكثر كفاءة من RSA</p>
<p style="text-align:center;"><strong>كيف نعرف اذا الموقع اللي دخلناه يستعمل تقنية ال SSL للتشفير ؟</strong><br />
فيه طريقتين:<br />
الأولى، عنوان الصفحة اللي في المتصفح راح يتغير إلى https بدلاً من http الموجود في المواقع العادية<br />
الثانية، هي ظهور صورة قفل صغير في أسفل المتصفح<br />
وممكن تظهر رسالة في بعض المتصفحات تخبرنا بأن الصفحة التي دخلناها هي صفحة آمنة</p>
<p style="text-align:center;"><strong>Digital Signature</strong><br />
هذا شرحي لها من مناقشة الواجب:</p>
<p style="text-align:center;">أول شي خلونا نتعرف على التوقيع الالكتروني (digital signature)<br />
التوقيع الالكتروني هو عبارة عن توقيع الكتروني ، فايدته انه يقوم بتعريف الناس في الشبكات الالكترونية، يعني مثل التوقيع العادي مهمته تعريف الشخص (كل شخص يتميز بتوقيع خاص) ، التوقيع الالكتروني نفس الشيء.</p>
<p style="text-align:center;">هذا التوقيع الالكتروني مهمته هو اثبات حقوق الناس في الشبكة (مثل الصور والكتب والملفات) وإثبات من هو مرسل الرسالة، لأنه في حالات مثلاً شخص يرسل رسالة تهديد بالبريد الالكتروني وفي التحقيق ينكر انه أرسلها، فعن طريق التوقيع الالكتروني راح يتأكدون هل الرسالة فعلاً جت من هذا الشخص أو لأ</p>
<p style="text-align:center;">التوقيع الالكتروني يحتوي على شيء اسمه message digest أو ملخص للرسالة وهذا هو اللي يميز الرسائل عن بعض.<br />
هذا الملخص يتم حسابه عن طريق عمليات معقدة بحيث يضمن بشكل كبير انه لايمكن توجد رسالتين لها نفس ال message digest وبالتالي يكون وسيلة آمنة للتمييز بين أصحاب الرسائل والملفات وغيرها</p>
<p style="text-align:center;">على سبيل المثال ملخص الرسالة بشكل بسيط ممكن يكون عبارة عن عدد جميع أحرف الرسالة، أو عدد الأرقام الموجودة في الرسالة، أو عدد الرموز الموجودة مثل (!❊#$٪^&amp; الخ)</p>
<p style="text-align:center;">الطريقة الأولى المذكورة في السؤال راح يكون ملخص الرسالة (message digest) عبارة عن اما كلمة true أو false<br />
يعني احتمال كبير جداً ان رسائل كثيرة فيها راح يكون فيها الـ message digest نفسه، وبالتالي ماراح تكون آمنة في هذي الطريقة أبداً لأن تمييز أصحاب الملفات فيها عن بعض ماراح يكون دقيق وفعّال</p>
<p style="text-align:center;">الطريقة الثانية وهي حساب عدد مرات تكرار حرف a في الرسالة ، وهذي الطريقة أكيد آمن من الطريقة الأولى لأن احتمال تواجد رسالتين يحتوون على نفس عدد مرات تكرار حرف a فيها قليل مقارنة مع الاحتمال اللي في الطريقة الأولى</p>
<p style="text-align:center;">فالطريقة الثانية هي الآمن ، لأن الطريقة الأولى احتمال 50% ان رسالتين يملكون نفس الmessage digest لكن الثانية الاحتمال أقل بكثير، وبالتالي راح يزيد أمنها عن الأولى، لأنها تساعد على تمييز الرسائل عن بعض بشكل أكبر</p>
<p style="text-align:center;">لازم الكلام اللي نكتبه يوضح للمصحح اننا فاهمين فكرة الdigital signature و الـ message digest<br />
فاللي ماستوعبها أنصحه يرجع للكتاب ويقرأ عنهم في الوحدة 14 صفحة 25 و 26</p>
<p style="text-align:center;"><strong>Digital Certificate</strong><br />
هي شهادة رقمية تقدمها منظمة موثوق فيها (عادة تكون منظمة حكومية أو رسمية) تثبت فيها صحة شخصية الموقع<br />
يعني مثلاً راح تشهد ان موقع amazon.com هو صحيح ويتبع للشركة التجارية المعروفة<br />
غالباً هذي الشهادة تكون عبارة عن بانر صغير موجود في الصفحة الرئيسية في المواقع الغير مشهورة، عشان يخلون الناس تثق فيهم وتتعامل معهم</p>
<p style="text-align:center;"><strong>firewall</strong><br />
يسمى جدار ناري، وهو عبارة عن برنامج أو جهاز وظيفته حماية الشبكات من المتطفلين<br />
يعني بشكل عام هو راح يسمح بمرور الإيميلات وصفحات الانترنت وبعض البروتوكولات المعروفة ولكنه مايسمح بالوصول إلى ملف معين في الكمبيوتر في حال رغب أحد المتطفلين بهذا الشي<br />
وطبعاً ممكن المسؤول عنه يتحكم بنوع الملفات المسموح لها بالمرور والغير مسموح لها بالمرور من خلاله</p>
<p style="text-align:center;">الفايروول يقدم مرحلتين حماية للسيرفرات<br />
1- عن طريق الراوتر (الاسم كامل <strong>screening router</strong>) ويتم في هذي المرحلة ماهي وحدات البيانات التي سيسمح بمرورها سواء من السيرفر إلى الانترنت أو العكس<br />
2- <strong>bastion host</strong> وعادة يسمى <strong>proxy gateway</strong><br />
بصراحة مافهمت الثانية 100% لذلك أعتذر عن شرحها <img title="Redface" src="http://www.aoua.com/vb/images/smilies/newsm/redface.gif" border="0" alt="" /></p>
<p style="text-align:center;"><strong>SET (Secure Electronic Transaction)</strong><br />
هو standard في أمن المعلومات ، وظيفته حماية معلومات البطاقات الائتمانية في التجارة الالكترونية</p>
<p style="text-align:center;"><strong>مميزاتها:</strong><br />
1- Security of data<br />
معلومات صاحب البطاقة ومعلومات عملية الدفع تكون سرية عن طريق تشفيرها بطريقة DES</p>
<p style="text-align:center;">2-  Integrity of data<br />
تستعمل ملخصات الرسائل message digest للتأكد من ان الرسائل لم يتم التعديل عليها أثناء الانتقال من طرف لآخر</p>
<p style="text-align:center;">3- Cardholder Authentication<br />
تستعمل الشهادات الرقمية digital certificate للتأكد من أن صاحب البطاقة هو صاحبها ولديه حساب فعّال</p>
<p style="text-align:center;">4- Merchant Authentication<br />
تستعمل الشهادات الرقمية للتأكد من شخصية الموقع التجاري ، وللتأكد من انه يقبل البيع بواسطة بطاقات الائتمان</p>
<p style="text-align:center;"><span style="color:red;">الجزء الرابع:</span></p>
<p style="text-align:center;"><strong>المشاكل الأمنية والتي لايفيد فيها التشفير:</strong></p>
<p style="text-align:center;">1- Denial of Service Attack<br />
هذي الهجمة تم شرحها في الأعلى ولكن بطريقة أخرى<br />
الآن شرحها يقول هو عبارة عن برنامج يقوم باستهلاك ذاكرة الجهاز بشكل كبير حتى يتوقف عن الاستجابة<br />
كل الشرحين لهم نفس المعنى، الشرح الأول بيتم استهلاك الذاكرة عن طريق عدد كبير من الإيميلات، والثاني عام شوي لكن كلهم نفس المعنى</p>
<p style="text-align:center;">2- Viruses<br />
لها ثلاث أنواع:<br />
- executable viruses<br />
- data viruses<br />
- start-up file viruses</p>
<p style="text-align:center;">3- Non technical Attacks<br />
الهجمات الغير تقنية، مثل تخمين الباسوورد أو أي طريقة مالها علاقة بالأشياء التقنية</p>
<p style="text-align:center;"><strong>بعض الحلول للثغرات الأمنية الغير تقنية:</strong><br />
- التأكد من أن الدخول للمبنى أو للمكان الذي يحتوي على معلومات سرية غير ممكن لغير المصرح لهم.<br />
- عدم رمي المخلفات التي تحتوي على معلومات سرية مع المخلفات العامة، مثلاً الأوراق المكتوب فيها بيانات سرية يتم تمزيقها بواسطة آلات خاصة.<br />
- التأكد من أن العاملين يستخدمون أرقام سرية آمنة.</p>
<p style="text-align:center;"><span style="color:red;">الجزء الخامس: الانترنت غير آمن</span></p>
<p style="text-align:center;"><strong>Spams</strong><br />
هي رسائل البريد المزعجة والغير مرغوب فيها<br />
مرسلي السبامز يستعملون برامج تسمى address harvesters تقوم بدخول مواقع الانترنت وتحفظ الإيميلات الموجودة فيها وبعدين يقومون بإرسال رسائل إعلانية لهذي الإيميلات</p>
<p style="text-align:center;"><strong>Scams</strong><br />
اللي فهمته منها انها تكون على شكل هرمي <img title="Biggrin23" src="http://www.aoua.com/vb/images/newsm/biggrin23.gif" border="0" alt="" /></p>
<p style="text-align:center;"><strong>privacy violations</strong><br />
انتهاك الخصوصية، المواقع اللي يزورها المستخدم تقدر تجمع عنك معلومات كثيرة مثل نوع نظام التشغيل و الصفحة اللي أتيت منها والصفحة اللي انتقلت لها بعدها وبعض المعلومات التقنية الأخرى</p>
<p style="text-align:center;"><strong>بعض الاحتياطات لاتقاء خطورة الانترنت:</strong></p>
<p style="text-align:center;">- لاتنشر إيميلك على الانترنت، سواء في المنتديات أو في المواقع المختلفة حتى لايستطيع السبامرز الحصول عليه<br />
- حاول أن تجعل لديك بريدين الكترونيين، واحد خاص بالمراسلات الشخصية، والآخر اجعله للاشتراكات في المواقع والمنتديات لأن هذا بالتأكيد سيقع في أيدي النصابين والمزعجين السبامرز <img title="Chair" src="http://www.aoua.com/vb/images/newsm/chair.gif" border="0" alt="" /><br />
- استخدم بروكسي سيرفر أو anonymizer حتى لاتستطيع المواقع التعرف عليك (هذي الخطوة غير ممكنة في السعودية لأنها محجوبة <img title="يضحك" src="http://www.aoua.com/vb/images/smilies/biggrin.gif" border="0" alt="" />)<br />
- لاتقم بتحميل وتشغيل برامج لاتعرفها ولاتعرف مصدرها<br />
- قم بكتابة بيانات بطاقتك الائتمانية فقط في المواقع الآمنة (تستخدم SSL) والمعروفة (مشهورة وموثوقة)<br />
- لاترسل بيانات بطاقتك الائتمانية عن طريق البريد الالكتروني<br />
- استخدم برنامج جدار ناري على جهاز الكمبيوتر الخاص بك<br />
- احتفظ بسجل لجميع عمليات الشراء التي قمت بها واطبعها واحتفظ بها في ملف خاص</p>
<p style="text-align:center;">انتهينا من الوحدة 14 ولله الحمد<br />
اعذروني على الأخطاء الإملائية ان وجدت، مافيه وقت أراجعها</p>
Posted in شروحات Tagged: Learner, M150B, unit-14 <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aoum150.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aoum150.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aoum150.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aoum150.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aoum150.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aoum150.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aoum150.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aoum150.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aoum150.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aoum150.wordpress.com/212/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=212&subd=aoum150&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-14/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">المعتصم</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/attachment.png" medium="image">
			<media:title type="html">cipher 1</media:title>
		</media:content>

		<media:content url="http://aoum150.files.wordpress.com/2009/07/attachment-1.png" medium="image">
			<media:title type="html">cipher 2</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/newsm/mouth.gif" medium="image">
			<media:title type="html">Mouth</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/smilies/frown.gif" medium="image">
			<media:title type="html">حزن</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/smilies/newsm/redface.gif" medium="image">
			<media:title type="html">Redface</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/newsm/biggrin23.gif" medium="image">
			<media:title type="html">Biggrin23</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/newsm/chair.gif" medium="image">
			<media:title type="html">Chair</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/smilies/biggrin.gif" medium="image">
			<media:title type="html">يضحك</media:title>
		</media:content>
	</item>
		<item>
		<title>شرح الوحدة 13</title>
		<link>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-13/</link>
		<comments>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-13/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 22:52:33 +0000</pubDate>
		<dc:creator>المعتصم</dc:creator>
				<category><![CDATA[شروحات]]></category>
		<category><![CDATA[Learner]]></category>
		<category><![CDATA[M150B]]></category>
		<category><![CDATA[unit-13]]></category>

		<guid isPermaLink="false">http://aoum150.wordpress.com/?p=210</guid>
		<description><![CDATA[

الوحدة 13:
الجزء الأول:
Sensational computing
استخدام حاستي السمع واللمس في تمثيل المعلومات
Digital Divide
هو فجوة المعلومات الموجودة بين الدول المتقدمة والدول النامية
يعني ان الدول المتقدمة لديها تقنية معلومات قوية تساعدها على الحصول على المعلومات بشكل سهل وسريع
والعكس لدى الدول النامية
الفرق بين توفر المعلومات في الدول المتقدمة والنامية هو المقصود بالـdigital divide
أو ممكن نقول ان سكان المدن يستطيعون الوصول [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=210&subd=aoum150&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:center;">
<p style="text-align:center;"><span id="more-210"></span></p>
<p style="text-align:center;"><span style="font-size:medium;">الوحدة 13:</span></p>
<p style="text-align:center;"><span style="color:red;">الجزء الأول:</span></p>
<p style="text-align:center;"><strong>Sensational computing</strong><br />
استخدام حاستي السمع واللمس في تمثيل المعلومات</p>
<p style="text-align:center;"><strong>Digital Divide</strong><br />
هو فجوة المعلومات الموجودة بين الدول المتقدمة والدول النامية<br />
يعني ان الدول المتقدمة لديها تقنية معلومات قوية تساعدها على الحصول على المعلومات بشكل سهل وسريع<br />
والعكس لدى الدول النامية<br />
الفرق بين توفر المعلومات في الدول المتقدمة والنامية هو المقصود بالـdigital divide<br />
أو ممكن نقول ان سكان المدن يستطيعون الوصول للمعلومات بشكل أسهل وأسرع من سكان البادية بسبب عدم توافر وسائل الاتصالات في البادية</p>
<p style="text-align:center;">أيضاً ممكن يكون من الأسباب اللي تؤدي لهذه الفجوة هو الفقر أو ارتفاع أسعار الكمبيوترات أو غيره<br />
أو عدم توفر الكهرباء لدى بعض المناطق<br />
وبعض الدول النامية تكون لغاتهم ليس لها قواعد لكتابتها (يعني اللغات تنطق بس ولكن لا تكتب) وهذا سبب في عدم قدرتهم على التواصل عن طريق شبكات المعلومات<br />
وبعض اللغات لا يدعمها الكمبيوتر، وهذا من ضمن الأسباب اللي تؤدي لمثل هذه الفجوة</p>
<p style="text-align:center;"><strong>Simputer</strong> (<strong>S</strong>imple <strong>I</strong>nexpensive <strong>M</strong>ultilingual <strong>P</strong>eople&#8217;s Comp<strong>uter</strong>)<br />
Simple يعني بسيط<br />
Inexpensive يعني رخيص الثمن<br />
Multilingual يعني متعدد اللغات<br />
people&#8217;s computer يعني كمبيوتر لكل الناس</p>
<p style="text-align:center;">هذا الجهاز (السمبيوتر) هو حل لسد مثل هذه الفجوة (الـdigital divide)<br />
هذا الجهاز من صنع وتطوير علماء ومهندسين من الجنسية الهندية<br />
الهدف من صنع هذا الجهاز، هو لمساعدة الناس في الدول النامية و &#8220;الغير متعلمين&#8221; بأن يستطيعوا المشاركة في عصر المعلومات<br />
هذا الجهاز يقوم بقراءة صفحات الانترنت &#8220;بالصوت&#8221; باللغات الهندية حتى يستطيع من لايعرف القراءة أن يشارك في عصر المعلومات<br />
تم استعمال نظام تشغيل linux في السمبيوتر حتى يكون سعر الجهاز رخيص لأن لينكس هو نظام تشغيل مفتوح المصدر</p>
<p style="text-align:center;">السمبيوتر يحتوي على شيء اسمه <strong>IML</strong> اختصاراً لـ Information Mark-up Language<br />
الـ IML هو اللي يقرر ماهو النص اللي يجب قراءته في الصفحة، وكيف يتم عرض الصفحة على السمبيوتر<br />
IML هو من تطبيقات الـ XML</p>
<p style="text-align:center;"><span style="color:red;">الجزء الثاني:</span> <strong>Speech Audio Interfaces</strong></p>
<p style="text-align:center;"><strong>أهمية الواجهات الصوتية:</strong><br />
١- تساعد الذين لايستطيعون القراءة<br />
٢- تساعد الذين لايستطيعون الرؤية &#8220;العميان&#8221;<br />
٣- تساعد في حالة عدم تواجد الكيبورد ، أو في حالة عدم قدرة العين على قراءة مافي الشاشة</p>
<p style="text-align:center;"><strong>Speech recognition</strong><br />
هو عملية التعرف على الكلام بواسطة الكمبيوتر</p>
<p style="text-align:center;"><strong>فوائده:</strong><br />
1- dictation<br />
بمعنى الإملاء: تحويل الكلام &#8220;الصوتي&#8221; إلى نص مكتوب</p>
<p style="text-align:center;">2- computer control<br />
بمعنى التحكم بالكمبيوتر: التحكم بالكمبيوتر وبرامجه عن طريق أوامر صوتية</p>
<p style="text-align:center;"><strong>دورة تحويل الكلام الصوتي إلى نص مكتوب:</strong><br />
1- المايك يقوم بالتقاط الصوت ويقوم بتحويل الموجات الصوتية إلى analogue signal<br />
2- يتم تحويل الanalogue signal إلى موجة رقمية digital signal بواسطة Analogue to digital converter الموجود في الكمبيوتر<br />
3- يتم تقسيم الموجة الرقمية إلى كلمات; اذا كانت الموجة منخفضة يعرف الكمبيوتر بأن هذا المكان هو فاصل بين الكلمات<br />
4- يتم التعرف على الكلمات بواسطة نظام التعرف على الصوت speech recognition system</p>
<p style="text-align:center;"><strong>speech recognition is NOT a speech understanding</strong><br />
أتوقع تجي صح وخطأ <img title="G" src="http://www.aoua.com/vb/images/newsm/g.gif" border="0" alt="" /><br />
بمعنى التعرف على الصوت لايعتبر فهم للصوت والكلمات</p>
<p style="text-align:center;">بعض أنظمة التشغيل الحديثة عن طريق الذكاء الصناعي، أصبحت تحاول التعرف على معنى الكلمات الصوتية بواسطة الحس البديهي أو الـ <strong>common sense</strong><br />
الحس البديهي هو مثل الموجود لدى الإنسان، مثلاً لو قلت كلمة معينة، الشخص الثاني راح يفهم معنى الكلمة لأنه عارف ايش هو الموضوع اللي نتكلم فيه فراح يربط الكلمة بالموضوع الأساسي عشان يعرف معناها</p>
<p style="text-align:center;">عيب الـcommon sense انه يحتاج لملايين من المعلومات والأوامر البرمجية وطاقات كمبيوتر عشان تعمل بالشكل الصحيح</p>
<p style="text-align:center;"><strong>Speech synthesis</strong><br />
هو القدرة على نطق الكلمات والأحرف</p>
<p style="text-align:center;">يتم عمل هذا الشيء عن طريق تخزين كلمات كثيرة بشكل منفصل، وبعدين يتم تركيبها وتكوين جمل منها على حسب الحاجة<br />
مثال: عند الاتصال ب961 &#8220;على أيامه&#8221; كان يعطينا الساعة والدقيقة والثانية بالصوت</p>
<p style="text-align:center;"><strong>توجد ثلاث أساليب تستعمل لإنتاج الصوت:</strong><br />
<strong>1-phonemes</strong><br />
عبارة عن نطق كل حرف على حده، وبعدين يتم جمع نطق كل الأحرف لتنتج الكلمة.<br />
هذا مشكلته ان نطق الكلمة ماراح يكون سلس لأنه تقريباً بتكون فيه فواصل &#8220;بسيطة&#8221; بين الأحرف</p>
<p style="text-align:center;"><strong>2- diphones</strong><br />
هنا النطق راح يكون من منتصف الحرف إلى منتصف الحرف اللي بعده<br />
فائدة هذا النوع ان النطق بيكون سلس لأن الفواصل بين الأحرف راح تختفي</p>
<p style="text-align:center;"><strong>3- model-based speech synthesis</strong><br />
هذا النوع شبيه بنطق الإنسان، لأنه يعمل محاكاة لكيفية نطق الإنسان للكلمات. وهو أكثر نوع متقدم ومتطور بين الأنواع الثلاثة</p>
<p style="text-align:center;"><span style="color:red;">الجزء الثالث:</span></p>
<p style="text-align:center;"><strong>أقسام الصوت (غير الكلام):</strong><br />
الموسيقى &#8211; أصوات التنبيه &#8211; أصوات التحذير &#8211; أصوات مزعجة</p>
<p style="text-align:center;">1- Music<br />
<strong>sampling</strong>: هو عبارة عن تحويل الـ analogue sound إلى digital<br />
الأصوات الرقمية يتم تخزينها على cd أو بصيغة mp3</p>
<p style="text-align:center;">التسجيل على الـcd يتميز بـ higher fidelity<br />
التسجيل بصيغة mp3 يتميز بحجم صغير</p>
<p style="text-align:center;">طريقة أخرى لتخزين وتعديل الموسيقى هي عن طريق استخدام واجهة MIDI اختصار Musical Instrument Digital Interface</p>
<p style="text-align:center;">باختصار، أي شيء له علاقة بالآلات الموسيقية من تسجيل أو تعديل أو تشغيل أو غيره، يتم عن طريق midi</p>
<p style="text-align:center;"><span style="color:red;">الجزء الرابع:</span><br />
التعرف على الكتابة <strong>handwriting recognition</strong></p>
<p style="text-align:center;"><strong>الصعوبات في التعرف على الكتابة:</strong><br />
1- تعدد اللغات، كل لغة لها نظام مختلف سواء في اتجاه الكتابة (يمين يسار أو يسار يمين) أو غيره<br />
2- كل شخص يكتب الحرف بشكل مختلف عن الآخر<br />
3- بالنسبة للأشخاص، التمييز مثلاً سهل بين رقم 5 وحرف الـ S ، لكن توجد صعوبة في برمجة الكمبيوتر للتمييز بينهم<br />
4- الإنسان يعتمد على البديهة أثناء القراءة، فنحن مثلاً لانتوقع أن يتواجد رقم 5 في وسط كلمة ولكن هذا شيء صعب بالنسبة للكمبيوتر</p>
<p style="text-align:center;"><strong>وسائل وطرق لتسهيل عملية التعرف على الكتابة:</strong><br />
1- وضع قوانين للحد من كثرة الأحرف والأشكال التي يمكن استخدامها، مثلاً نقول بأنه مسموح الكتابة بالأحرف الكبيرة فقط (للغة الإجليزية)<br />
2- أن يتم كتابة كل حرف في مربع ، يعني يتم تقسيم مكان الكتابة إلى مربعات، نكتب في كل مربع حرف حتى يسهل على الكمبيوتر التعرف على كل حرف بسهولة<br />
3- عدم الكتابة أحرف متصلة مع بعض</p>
<p style="text-align:center;">تقنية شبكات الخلايا العصبية هي حل لهذه المشاكل، أغلب أنظمة التعرف على الكتابة تستعمل هذه التقنية<br />
باختصار هي عبارة عن أوامر برمجية تحاول تقليد ومحاكاة خلايا النظام العصبي لدى الإنسان<br />
هذه التقنية تحتاج للتدريب، فعندما تكون إجابتها خاطئة يتم إعادة المحاولة حتى تنتج إجابة صحيحة</p>
<p style="text-align:center;">أحد الأمثلة على هذه التقنية هو Newton messagePad التي أنتجته شركة أبل عام 1993<br />
توجد ميزتين في هذه التقنية: ١- لاحاجة لتغيير خطك. ٢- ستتعلم مع الوقت طريقة كتابتك<br />
اذا كتب المستخدم كلمة، سيحاول النظام البحث عن كلمة مطابقة في القاموس الخاص بالنظام، اذا وجدت مطابقة ستعتمد الكلمة، وإذا لم تجد كلمة مطابقة يستطيع المستخدم أن يضيف ماكتبه إلى القاموس الخاص بالنظام حتى يتعرف عليها النظام مستقبلاً</p>
<p style="text-align:center;">المشكلة الموجودة في هذا النظام، هي أن مثل هذه الأنظمة التي تعمل على الأجهزة الكفيّة pocket pc تحتاج إلى ذاكرة تخزين عالية وتحتاج إلى معالج سريع وقوي<br />
وفي حال توفير ذاكرة عالية ومعالج قوي سيتم استهلاك بطارية الجهاز بشكل سريع</p>
<p style="text-align:center;">الحل لهذه المشكلة هو Glyphs أو وحدات الكتابة<br />
شركة palm عملت نظام تعرف على الكتابة اسمه graffiti يعتمد على نظام وحدات الكتابة glyphs<br />
المستخدم يحتاج أنه يتعلم على النظام عشان يقدر يستخدمه</p>
<p style="text-align:center;">شرح النظام بصراحة غير واضح في المنهج بالنسبة لي، عشان كذا بأكتفي بهذي المعلومات ، وان شاء الله انها كافية <img title="Biggrin23" src="http://www.aoua.com/vb/images/newsm/biggrin23.gif" border="0" alt="" /></p>
<p style="text-align:center;"><span style="color:red;">الجزء الخامس:</span><br />
<strong>Tangible computing </strong><br />
هي التعامل مع المعلومات بشكل حسّي، مثل أجهزة الـPDA ممكن تعرض لنا المعلومات وممكن نتحكم أو نعدل على المعلومات بواسطة اللمس مثلاً</p>
<p style="text-align:center;"><strong>Gesture computing</strong><br />
هي عملية فهم حركات جسد المستخدم من قبل الكمبيوتر<br />
وهي غالباً تكون في حالة الحاجة لاستخدام الكمبيوتر بدون تواجد الكيبورد والشاشة أو في حالة &#8220;الصم والبكم&#8221;<br />
الهدف منه هو تصميم نظام يستطيع التعرف على لغة الإشارة للصم والبكم<br />
تصميم مثل هذا النظام صعب، بعض الحلول لتجواز الصعوبة:<br />
1- ان المستخدم يلبس قفازات خاصة، تساعد الكمبيوتر على تمييز اليد من الخلفية اللي وراء اليد<br />
2- ان يلبس المستخدم حساسات على يده تساعد الكمبيوتر على معرفة مكان اليد وحركاتها واتجاهاتها</p>
<p style="text-align:center;">كل النظامين السابقين يسمون <strong>haptic computing</strong><br />
الـhaptic computing ثنائي الاتجاه، بمعنى ممكن يكون human to computer interaction أو computer to human interaction</p>
<p style="text-align:center;">توجد أبحاث هذه الأيام تحاول عمل نظام يتعرف على حركة العين</p>
<p style="text-align:center;"><strong>Ubiquitous Computing</strong><br />
مفهوم يعني بأن الكمبيوترات ستكون منتشرة بشكل كبير وستصبح صغيرة جداً واستخداماتها كثيرة وستكون غير مرئية بالنسبة للمستخدم</p>
Posted in شروحات Tagged: Learner, M150B, unit-13 <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aoum150.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aoum150.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aoum150.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aoum150.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aoum150.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aoum150.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aoum150.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aoum150.wordpress.com/210/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aoum150.wordpress.com/210/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aoum150.wordpress.com/210/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=210&subd=aoum150&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-13/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">المعتصم</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/newsm/g.gif" medium="image">
			<media:title type="html">G</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/newsm/biggrin23.gif" medium="image">
			<media:title type="html">Biggrin23</media:title>
		</media:content>
	</item>
		<item>
		<title>شرح الوحدة 12</title>
		<link>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-12/</link>
		<comments>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-12/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 22:26:01 +0000</pubDate>
		<dc:creator>المعتصم</dc:creator>
				<category><![CDATA[شروحات]]></category>
		<category><![CDATA[Learner]]></category>
		<category><![CDATA[M150B]]></category>
		<category><![CDATA[unit-12]]></category>

		<guid isPermaLink="false">http://aoum150.wordpress.com/?p=208</guid>
		<description><![CDATA[

الوحدة 12:
User Interface &#8211; UI
واجهة المستخدم
واجهة المستخدم هي الغلاف الخارجي اللي يغطي شغل المبرمج وأكواده بشكل جميل ولطيف
مثلاً الويندوز واجهة المستخدم فيه تحتوي على سطح المكتب ومجلدات مرتبة وشكلها يفتح النفس
واجهة المستخدم الجميلة، هي اللي تساعد المستخدم على تنفيذ مهامه بسهولة وسرعة وفعالية عالية.
إذا كانت البيانات الموجودة في واجهة الاستخدام معروضة بشكل سيء بحيث يصعب [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=208&subd=aoum150&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:center;">
<p style="text-align:center;"><span id="more-208"></span></p>
<p style="text-align:center;"><span style="font-size:medium;">الوحدة 12:</span></p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">User Interface &#8211; UI</span></span><br />
واجهة المستخدم</p>
<p style="text-align:center;">واجهة المستخدم هي الغلاف الخارجي اللي يغطي شغل المبرمج وأكواده بشكل جميل ولطيف<br />
مثلاً الويندوز واجهة المستخدم فيه تحتوي على سطح المكتب ومجلدات مرتبة وشكلها يفتح النفس</p>
<p style="text-align:center;">واجهة المستخدم الجميلة، هي اللي تساعد المستخدم على تنفيذ مهامه بسهولة وسرعة وفعالية عالية.</p>
<p style="text-align:center;">إذا كانت البيانات الموجودة في واجهة الاستخدام معروضة بشكل سيء بحيث يصعب على المستخدم التعامل معها، فانها ستتسبب أحياناً بنتائج وخيمة &lt;&lt; متعوب على الكلمة <img title="Biggrin23" src="http://www.aoua.com/vb/images/newsm/biggrin23.gif" border="0" alt="" />.</p>
<p style="text-align:center;">مثال على أضرار واجهات الاستخدام السيئة:<br />
- في أحد الدول حدث عطل في مضخات المياه، وبسبب سوء واجهة استخدام النظام، لم يستطع العاملون التعرف على السبب، وكاد أن ينفجر أحد المفاعلات النووية بسبب هذا الخلل.</p>
<p style="text-align:center;">- موقع boo.com لبيع المنتجات الرياضية، كان تصميم الموقع سيء جداً وصعب الاستخدام، وبالتالي خسر عملاءه، وبعد 6 شهور فقط أغلق نشاطه التجاري.</p>
<p style="text-align:center;">HCI اختصاراً لـ <span style="color:black;">Human and Computers Interaction</span> هي دراسة عن كيفية تفاعل البشر مع الكمبيوتر وتطبيقاته. وهي تخبرنا بكيفية بناء واجهات استخدام تكون: سهلة ، وكفاءتها عالية، وآمنة، واستخدامها يكون ممتع، وبالتأكيد تكون تعمل!</p>
<p style="text-align:center;">* المستخدم يتواصل مع الكمبيوتر عن طريق واجهة المستخدم UI</p>
<p style="text-align:center;">* يعني واجهة الاستخدام تعتبر وسيط بين الكمبيوتر والمستخدم.</p>
<p style="text-align:center;">* مماسبق نستنتج بأن أكثر شيء يهم المستخدم في النظام هو واجهة الاستخدام. لأنه لايهتم بمايحدث في داخل النظام. فالنظام <span style="text-decoration:underline;">بالنسبة للمستخدم</span> هو واجهة المستخدم UI.</p>
<p style="text-align:center;">تتميز واجهات المستخدم الجيدة بالتالي:<br />
- أن تكون سهلة الاستخدام.<br />
- أن يكون فهمها سهل من قبل المستخدم.<br />
- أن تلبي متطلبات المستخدمين للنظام.<br />
- أن تدعم المستخدمين في المهام التي يريدون تنفيذها.</p>
<p style="text-align:center;">* مصمم واجهات الاستخدام الممتاز، دائماً يفكر بالمستخدم واحتياجاته ورغباته، وليس برغباته الشخصية. ويهتم بسهولة استخدام Usability الـ UI بالنسبة للمستخدم.</p>
<p style="text-align:center;">ما المقصود بسهولة الاستخدام <span style="color:black;">Usability</span> ؟<br />
يقصد بها النظام الذي يسمح للمستخدم أن يحقق أهداف معينة في مجال استخدام معين عن طريق تحقيق الثلاث عوامل التالية:<br />
effectiveness &#8211; Efficiency &#8211; Satisfaction</p>
<p style="text-align:center;"><span style="color:black;">Effectiveness</span> : يقصد بها أن يتم تحقيق الأهداف والمهام بشكل كامل ودقيق<br />
<span style="color:black;">Efficiency</span> : يقصد بها الموارد المستخدمة من قبل النظام في سبيل تحقيق الأهداف<br />
كل ماقلت الموارد المستخدمة .. كل ماكان النظام أفضل، والموارد يقصد فيها مثلاً استهلاك ذاكرة الجهاز أو البطارية (لو كان برنامج للجوال) أو غيرها.<br />
<span style="color:black;">Satisfaction</span> : يقصد بها مدى رضا وراحة المستخدم في استخدام النظام</p>
<p style="text-align:center;">* سهولة استخدام Usability النظام يقصد بها سهولة استخدام الـ UI أو واجهة استخدام النظام.</p>
<p style="text-align:center;">* المنظمات اللي تعتمد على الكمبيوتر في عملها، صعوبة استخدام النظام poor usability ممكن تؤدي إلى تقليل انتاجية المنظمة، وعدم رضا الموظفين، وغيرها من المشاكل الكثيرة.</p>
<p style="text-align:center;">* مدى سهولة أو صعوبة استخدام النظام في أي منظمة، يحدد مدى كفاءة وانتاجية هذه المنظمة. بمعنى كل ماكان النظام سهل الاستخدام كل مازادت كفاءة المنظمة وإنتاجيتها.</p>
<p style="text-align:center;">* لايقصد بسهولة الاستخدام الواجهات الفخمة أو الفلاشية أو غيرها، يعني سهولة الاستخدام Usability لاتعتمد على المنظر الخارجي وشكل للنظام.</p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">User-centered Design</span></span></p>
<p style="text-align:center;">لتصميم واجهة مستخدم UI جيدة ، يجب أن نعرف أربع أشياء هامة:<br />
- من هم المستخدمون الذين سيستخدمون النظام.<br />
- ماهي خبرات المستخدمين؟<br />
- ماهي المهارات التي يمتلكونها؟<br />
- ماهي أهدافهم أو المهام التي يريدون تحقيقها من خلال استخدام النظام.</p>
<p style="text-align:center;">إذا كانت واجهة النظام التي سنصممها ستكون بديلة لواجهة نظام سابق (مثل تغيير تصميم موقع) يجب أن نعرف المعلومات التالية:<br />
- ماهي توقعات المستخدمين؟<br />
- كيف يقوم المستخدم في <span style="text-decoration:underline;">النظام القديم</span> بتحقيق أهدافه؟<br />
- كيف سيؤثر النظام الجديد على تحقيق أهداف المستخدمين ومهامهم؟</p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">User Interface Design Principles</span></span><br />
مبادئ تصميم واجهة المستخدم</p>
<p style="text-align:center;">UI widgets هي عبارة عن كل شيء موجود في واجهة المستخدم، مثل القوائم والأزرار والرسائل التنبيهية والأيقونات وغيرها</p>
<p style="text-align:center;">توجد سبع مبادئ لتصميم واجهات الاستخدام:</p>
<p style="text-align:center;"><span style="color:black;">1- Visibility</span><br />
هذا المبدأ يعني، أن نجعل عمل وفائدة كل عنصر من عناصر واجهة المستخدم واضحة عند رؤية العنصر.<br />
مثال: الريموت الخاص بالفيديو نقدر نعرف زر التشغيل عن طريق العلامة اللي تشبه المثلث الموجودة فوق الزر، ونقدر نعرف رز الإيقاف بنفس الطريقة.</p>
<p style="text-align:center;"><span style="color:black;">2- Feedback</span><br />
يعني هذا المبدأ، أن نقوم بتوضيح مالذي قمنا بعمله بعد استخدام أي عنصر من عناصر واجهة المستخدم.<br />
مثال: عند الضغط على أي زر في الجوال، نسمع صوت تنبيه صغير يخبرنا بأننا ضغطنا على الزر.</p>
<p style="text-align:center;"><span style="color:black;">3- Affordance</span><br />
معناه، أن نجعل فائدة استخدام كل عنصر واضحة للمستخدم.<br />
مثال: عندما نرى في الويب كلمات لونها أزرق وتحتها خط نعرف بأن الضغط عليها سينقلنا إلى صفحة ويب أخرى.</p>
<p style="text-align:center;"><span style="color:black;">4- Simplicity</span><br />
جعل الأشياء بسيطة بأكبر شكل ممكن<br />
مثال: توجد أزرار لعملية حفظ الملف أو فتح ملف جديد في كل البرامج في مكان واضح. لأن هذه العمليات هي من العمليات الشائعة لدى المستخدمين فمن المفترض أن نجعلها واضحة وسهلة الوصول.</p>
<p style="text-align:center;">هذا المبدأ يتطلب مننا فهم المستخدمين وحوائجهم، وماهي الأشياء التي يعتبرونها طبيعية بالنسبة لهم.</p>
<p style="text-align:center;"><span style="color:black;">5- Structure</span><br />
هذا المبدأ يعني بأن نقوم بوضع عناصر واجهة المستخدم اللي مرتبطة مع بعض في نفس المكان والقسم.<br />
مثال: عند الدخول على قائمة file من برنامج الوورد، ثم الذهاب إلى طباعة، ستظهر لنا صفحة مقسمة، كل قسم يحتوي على أشياء مرتبطة مع بعضها البعض، مثلاً قسم يحتوي على إعدادات الطابعة، وقسم يحتوي على اعدادات الصفحات مثل كم عدد الصفحات وهل تريد طباعة الصفحة بالعرض أو بالطول وهل تريد طباعة كل الصفحات أم جزء معين منها.</p>
<p style="text-align:center;"><span style="color:black;">6- Consistency</span><br />
الثبات في التصميم، بمعنى أن نجعل مثلاً صفحات موقع الانترنت كلها تحتوي على نفس التصميم والقوائم وغيرها، وتختلف فقط في مضمون الصفحة.<br />
ومثال آخر عليها: برنامج مايكروسوفت يستعمل تصميم ثابت (تقريباً) لبرامجه الثلاثة المشهورة وورد واكسل وبور بوينت، وهذا الشيء يجعل المستخدم يتعامل مع البرامج بسهولة.</p>
<p style="text-align:center;"><span style="color:black;">7- Tolerance</span><br />
القدرة على منع حدوث الأخطاء، أو سهولة التعافي منها في حال حدوثها.<br />
مثال: اذا جينا نسجل في منتدى ونسينا مثلاً نكتب البريد الالكتروني وضغطنا على إكمال عملية التسجيل، راح نرجع لنفس الصفحة وبنلاقي علامة عند مكان البريد توضح لنا اننا ماكتبناه.</p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">Recoverability</span></span><br />
التعافي من الأخطاء</p>
<p style="text-align:center;">الـ error recovery ينقسم لقسمين<br />
backward error recovery و forward error recovery</p>
<p style="text-align:center;"><span style="color:black;">backward error recovery</span> مثال عليه هو إذا جينا نسجل مستخدم جديد في المنتدى وكتبنا اليوزر والباسوورد لكن نسينا نكتب إيميل<br />
اذا ضغطنا على زر إتمام التسجيل راح يرجعنا لنفس الصفحة وبنلاقي مكتوب انه لم يتم تعبئة جميع البيانات وبنلاقي علامة عند مكان الإيميل عشان نعرف وين الخطأ<br />
هذا معناه انه ماحولنا على طريقة ثانية للتسجيل ولكنه رجعنا ورنا ونبهنا على الخطأ اللي صار</p>
<p style="text-align:center;"><span style="color:black;">forward error recovery</span> لو افترضنا ان نظام المنتدى بدل مايرجعنا لنفس الصفحة ويوضح لنا الخطأ اللي صار فتح لنا صفحة جديدة على الهوت ميل يطلب مننا نسوي تسجيل دخول في الإيميل واذا تم تسجيل الدخول بنجاح المنتدى راح يكمل عملية التسجيل بالإيميل اللي دخلنا فيه في الهوت ميل<br />
هنا النظام مارجعنا للصفحة نفسها ولكنه حولنا للهوت ميل عشان يقدر يعرف الإيميل الخاص فينا ويستعمله في التسجيل</p>
<p style="text-align:center;">شكلي بدال ما أوضحها عقدتها أكثر بهالأمثلة اللي مثل وجهي <img title="يضحك" src="http://www.aoua.com/vb/images/smilies/biggrin.gif" border="0" alt="" /></p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">Visual Representation of Data</span></span></p>
<p style="text-align:center;">هي عملية عرض البيانات data من خلال رسومات بيانية أو مخططات أو خرائط بطريقة يستطيع فيها المستخدم تحويل هذه البيانات إلى معلومات.<br />
مثل مؤشر سوق الأسهم، يقوم بإعطائنا معلومات عن مستوى ارتفاع أو انخفاض المؤشر عن طريق تجميع البيانات (أسعار الشركات المختلفة) وعرضها عن طريق رسم بياني</p>
<p style="text-align:center;">عملية أخذ المعلومات بهذه الطريقة (عن طريق الرسومات البيانية) تسمى <span style="color:black;">information visualization</span></p>
<p style="text-align:center;">الكتابة النصية هي أكثر طريقة متعارف عليها لعرض المعلومات لأنها الطريقة الطبيعية.</p>
<p style="text-align:center;">لذلك يجب علينا أن نجعل النص قابل للقراءة Readable ، و سهل القراءة Legible</p>
<p style="text-align:center;">قابل للقراءة <span style="color:black;">readable</span> تعني بأن نختار نوع نص واضح (مثل arial) ونجعل حجم الخط مناسب للشاشة (لا يكون كبير جداً ولا صغير جداً)</p>
<p style="text-align:center;">سهل القراءة <span style="color:black;">Legible</span> تعني بأن نجعل المسافات بين الأسطر والكلمات والأحرف معقولة (هذي لمن يصمم مواقع انترنت سيفهمها) ، ببساطة بعض المواقع تجعل الأسطر قريبة من بعض هذه الحركة تكون مؤذية وغير مريحة للعين حتى تستطيع القراءة بسهولة. وأيضاً يجب أن لايكون عرض السطر طويل حتى يستطيع القارئ التنقل من سطر لآخر بسهولة.</p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">أنواع الرسومات البيانية:</span></span><br />
<span style="color:black;">1- line graph</span></p>
<p style="text-align:center;"><img src="http://www.aoua.com/vb/attachment.php?attachmentid=54107&amp;stc=1&amp;d=1244688718" border="0" alt="" /></p>
<p style="text-align:center;"><span style="color:black;">2- bar chart</span></p>
<p style="text-align:center;"><img src="http://www.aoua.com/vb/attachment.php?attachmentid=54106&amp;stc=1&amp;d=1244688718" border="0" alt="" /></p>
<p style="text-align:center;">عبارة عن أعمدة أو bars وكل عمود يمثل شيء مختلف. هذا النوع يستعمل إذا أردنا المقارنة بين أكثر من شيء، مثل انتاجية موظفين.</p>
<p style="text-align:center;"><span style="color:black;">3- pie chart</span></p>
<p style="text-align:center;"><img src="http://www.aoua.com/vb/attachment.php?attachmentid=54108&amp;stc=1&amp;d=1244688718" border="0" alt="" /></p>
<p style="text-align:center;">رسمة الكيكة، هذي نستخدمها مثلاً اذا أردنا أن نعرف ماهي مصروفات الشركة التي تنفق عليها بشكل أكبر، عن طريق إدخال جميع المصروفات، وبعدين الرسمة تبين لنا أي نوع مصاريف تم إنفاقها بشكل أكبر.</p>
<p style="text-align:center;">عموماً تحديد نوع الرسمة المستخدمة يعتمد بشكل كبير على الهدف من الرسمة. يعني لازم نعرف الغرض من الرسمة عشان نقدر نحدد أي نوع هو المناسب.</p>
<p style="text-align:center;">في الرسومات البيانية توجد ثلاثة أشياء:<br />
<span style="color:black;">1- data-ink</span><br />
هي أهم شيء في الرسمة البيانية، وهي الجزء الذي يساهم في تحويل البيانات إلى معلومات كما هو مطلوب.</p>
<p style="text-align:center;"><span style="color:black;">2- non-data ink</span><br />
هي عكس الأولى، هي أي شيء في الرسمة البيانية لايضيف أي شيء مفيد للمستخدم، بل على العكس هي تشتت المستخدم عن التركيز على مايريد.</p>
<p style="text-align:center;"><span style="color:black;">3- redundant data-ink</span><br />
هو الجزء الذي يعرض بيانات، ولكنه لايضيف معلومات.</p>
<p style="text-align:center;">* الرسومات البيانية يجب أن تكون كلها أو الجزء الأكبر منها من نوع data-ink</p>
<p style="text-align:center;"><span style="color:black;">Chart junk</span><br />
هذا يعتبر عدو الـ simplicity لأنه يشتت القارئ عن التركيز على هدفه.<br />
مثل:في بعض مواقع الانترنت، الخلفيات والزخرفة الزائدة أو الصور الغير مفيدة والتي لاتضيف شيء للقارئ والخطوط الغريبة والتي يصعب قراءتها.</p>
<p style="text-align:center;">في عملية عرض المعلومات <span style="color:black;">information visualization</span> يوجد شيئين هامين:<br />
<span style="color:black;">1- selection:</span><br />
وهي عملية اختيار البيانات data الأكثر ملاءمة للقارئ ولهدفه من رؤية هذا العرض أو الرسمة.</p>
<p style="text-align:center;"><span style="color:black;">2- representation:</span><br />
وهي طريقة العرض،مثل أن يستخدم لون معين لربط الأشياء المرتبطة مع بعض وغيرها من الحركات لتسهيل تحقيق الهدف للقارئ.</p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">Designing for the Web</span></span><br />
التصميم للويب</p>
<p style="text-align:center;"><span style="color:black;">توجد سبع قواعد لتصميم مواقع الانترنت:</span></p>
<p style="text-align:center;">1- إذا أردنا أن نصمم موقع، يجب أن نفكر فقط بالأشياء المفيدة للقارئ والتي تهمه. (user-centered design)</p>
<p style="text-align:center;">2- يجب تحديث الموقع بشكل مستمر، ويجب أن يعرف المستخدم متى آخر مرة تم تحديث الموقع.</p>
<p style="text-align:center;">3- القاعدة الثالثة:<br />
consistent layou: كلما كان تصميم الموقع ثابت في جميع الصفحات، كلما زادت سهولة استخدام الموقع.</p>
<p style="text-align:center;">simple structure: اذا كان تخطيط الموقع بسيط، سيساعد ذلك على إبراز عناصر موقع وأقسامه بشكل أكبر.</p>
<p style="text-align:center;">4- قم بلفت نظر المستخدم للأشياء التي تعتقد بأنها تهمه وتفيده. ممكن عملها عن طريق الألوان أو الخلفيات أو الأيقونات أو حجم الخط.</p>
<p style="text-align:center;">5- يجب أن يتيح الموقع للمستخدم أن يحقق أهدافه بسهولة وبدون أخطاء.</p>
<p style="text-align:center;">6- يجب أن يضيف الموقع بمحتوياته شيء جديد إلى عالم الويب. لأنه لن تكون لموقعك فائدة اذا كان محتواه موجود في مواقع أخرى!</p>
<p style="text-align:center;">7- يجب أن تهتم بسرعة تحميل صفحات الموقع. ولتسريع تحميل الصفحات (أو فتحها) يجب أن نقوم بإزالة الصور التي لاتضيف شيء مفيد للقارئ لأنها تزيد الحجم بدون فائدة. وأيضاً أن نستبدل الصور المصغرة thumbnails بدلاً من الصور الكبيرة. والابتعاد عن استخدام الفلاش لأنه يؤدي إلى تبطيء تحميل الصفحة.</p>
<p style="text-align:center;"><span style="color:red;">* أصعب صفحة للتصميم هي الصفحة الرئيسية، لأنها هي التي يحكم من خلالها المستخدم على موقعك.</span></p>
<p style="text-align:center;">* يجب أن تحتوي الصفحة الرئيسية home page على الأشياء التالية:<br />
- شيء يثبت للزائر بأنه موقعك. (لو كانت مدونة شخصية ممكن تضع صورتك واسمك وسيرتك وبيانات الاتصال بك)<br />
- اسم الموقع.<br />
- يجب أن يستطيع الزائر معرفة مكانه في الموقع (في أي صفحة يتواجد).<br />
- مقدمة مختصرة عن موقعك، تبين للزائر فائدة موقعك ، حتى يستطيع معرفة المحتوى الذي يمكن أن يجده في الموقع.</p>
<p style="text-align:center;">عند تصميم الصفحات الداخلية interior pages للموقع يجب الانتباه للنقاط التالية:<br />
- المعلومات يجب أنت تكون على علاقة بهدف الزائر Relevant، وموثوقة Credible ، ومفيدة Useful وجديدة أو محدثة up-to-date.<br />
- المحتوى يجب أن يكون معروض بترتيب جميل ومنظم.<br />
- الصفحات الداخلية يجب أن تحتوي على محتوى أكثر ، ومعلومات تعريفية بالموقع أقل.<br />
- التنسيق يجب أن يكون ثابت (حجم العناوين والألوان ونوع الخط وغيرها).<br />
- يجب أن تحتوي جميع الصفحات الداخلية على رابط ينقلنا للصفحة الرئيسية.<br />
- يجب الاهتمام بالأخطاء الإملائية والقواعد بقدر الإمكان حتى لو كانت بسيطة، لأنها تقلل من جودة موقعك.</p>
<p style="text-align:center;">* المحتوى الهام وروابط الموقع من الأفضل أن تكون واضحة للمستخدم بدون أن يحتاج إلى النزول في الصفحة Scrolling.</p>
<p style="text-align:center;">* يجب أن تراعي في تصميم الموقع الناس الذين لديهم مشاكل في النظر، أحد الحلول الممكنة هي استخدام حجم أكبر للنص. شخصياً أختلف مع هالنقطة كلياً، لأن المتصفحات نفسها صارت فيها ميزة تكبير الخط، وغير كذا هم قالوا قبل شوي اننا نستعمل حجم خط مناسب (غير كبير ولا صغير!)</p>
Posted in شروحات Tagged: Learner, M150B, unit-12 <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aoum150.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aoum150.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aoum150.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aoum150.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aoum150.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aoum150.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aoum150.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aoum150.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aoum150.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aoum150.wordpress.com/208/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=208&subd=aoum150&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-12/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">المعتصم</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/newsm/biggrin23.gif" medium="image">
			<media:title type="html">Biggrin23</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/smilies/biggrin.gif" medium="image">
			<media:title type="html">يضحك</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/attachment.php?attachmentid=54107&#38;stc=1&#38;d=1244688718" medium="image" />

		<media:content url="http://www.aoua.com/vb/attachment.php?attachmentid=54106&#38;stc=1&#38;d=1244688718" medium="image" />

		<media:content url="http://www.aoua.com/vb/attachment.php?attachmentid=54108&#38;stc=1&#38;d=1244688718" medium="image" />
	</item>
		<item>
		<title>شرح الوحدة 11</title>
		<link>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-11/</link>
		<comments>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-11/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 22:19:41 +0000</pubDate>
		<dc:creator>المعتصم</dc:creator>
				<category><![CDATA[شروحات]]></category>
		<category><![CDATA[Learner]]></category>
		<category><![CDATA[M150B]]></category>
		<category><![CDATA[unit-11]]></category>

		<guid isPermaLink="false">http://aoum150.wordpress.com/?p=206</guid>
		<description><![CDATA[

الوحدة 11:
Wildness
أي نظام يسمى wild إذا كان :
1- unpredictable يعني لايمكن توقع ماسيفعل
2- uncontrollable  يعني لايمكن التحكم فيه
3- irrational غير منطقي أو غير عقلاني
نظام سوق الأسهم هو مثال على مثل هذه الأنظمة اللي تسمى wild
أمثلة على wildness لها علاقة بالكمبيوتر:
- الفايروسات viruses
- رسائل البريد المزعجة spams لأنه لايمكن التحكم فيها والسيطرة عليها
- الروبوتات robots [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=206&subd=aoum150&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:center;">
<p style="text-align:center;"><span id="more-206"></span></p>
<p style="text-align:center;"><span style="font-size:medium;">الوحدة 11:</span></p>
<p style="text-align:center;"><span style="font-size:small;"><span style="color:black;">Wildness</span></span></p>
<p style="text-align:center;">أي نظام يسمى wild إذا كان :<br />
1- unpredictable يعني لايمكن توقع ماسيفعل<br />
2- uncontrollable  يعني لايمكن التحكم فيه<br />
3- irrational غير منطقي أو غير عقلاني</p>
<p style="text-align:center;">نظام سوق الأسهم هو مثال على مثل هذه الأنظمة اللي تسمى wild</p>
<p style="text-align:center;">أمثلة على wildness لها علاقة بالكمبيوتر:<br />
- الفايروسات viruses<br />
- رسائل البريد المزعجة spams لأنه لايمكن التحكم فيها والسيطرة عليها<br />
- الروبوتات robots لأنها أحياناً لايمكن لنا توقع ماستفعله والتحكم فيها يكون صعب أحياناً.<br />
- الشبكات العصبية الصناعية Artificial neural networks والتي تحاكي عمل عقل الإنسان.<br />
- اللوغاريتمات الجينية Genetic logarithms لأنها نتائجها تكون غير متوقعة.</p>
<p style="text-align:center;">الانترنت والويب هي أفضل مثال على wildness بسبب:<br />
- حركة البيانات، لايمكن توقعها أو التحكم فيها ولاتعتبر منطقية.<br />
- عملية الاتصال بين المعلومات ، والتي تعني بكيف يتم ربط صفحات الويب مع بعضهم البعض.</p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">The Four Dimensions of Reach</span></span></p>
<p style="text-align:center;">- البشر يتواصلون مع بعضهم البعض عن طريق الإدراك (عن طريق الحواس الخمس) والفعل في زمان ومكان محددين.</p>
<p style="text-align:center;">يعني مجالات التواصل هي:<br />
- Perception ويعني الإدراك<br />
- Action ويعني الفعل<br />
- Time وقت أو زمان<br />
- Space  مكان أو فضاء أو مساحة</p>
<p style="text-align:center;">* يعني الإدراك والفعل لابد أن يحدثوا في زمان ومكان.<br />
* التقنية سمحت لنا بتطوير قدراتنا على التواصل، بمعنى انها زادت من قوة إدراكنا وفعلنا</p>
<p style="text-align:center;"><span style="color:black;">Perception</span><br />
الإدراك الطبيعي يكون عن طريق الحواس الخمس، فالعين تستطيع الرؤية في مدى محدد، لكن التقنية زادت هذا المدى فأصبحنا نستطيع رؤية الأشياء البعيدة جداً عن طريق التلسكوب ورؤية الأشياء الصغيرة جداً عن طريق المايكروسكوب.</p>
<p style="text-align:center;"><span style="color:black;">Action</span><br />
بالنسبة للفعل له نوعين:<br />
- الأفعال التي لاتدخل فيها التقنية  Technologically unaided action<br />
في هذا النوع لايتم الاستعانة بأي آلة أو أداة في أفعالنا.</p>
<p style="text-align:center;">- الأفعال التي تكون بمساعدة التقنية Technologically enhanced action<br />
مثل استخدامنا للتلسكوب لرؤية الأشياء البعيدة</p>
<p style="text-align:center;"><span style="color:black;">Space</span><br />
* التلسكوب والصواريخ ساعدتنا على الوصول للفضاء الخارجي outer space<br />
* المايكروسكوب ساعدنا على الوصول للفضاء الصغير (فضاء المايكروبوات الدقيقة)<br />
* الكمبيوترات ساعدت على إنشاء مساحات جديدة، مثل:<br />
- مساحة الهارد دسك والسي دي.<br />
- المساحات اللي تكون في البرامج. مثل برنامج إكسل.<br />
- المساحة اللي نتجت بسبب الانترنت والويب. Cyberspace or virtual space</p>
<p style="text-align:center;">* الانترنت والويب يعتبرون cyberspaces ولايعتبرون virtual space</p>
<p style="text-align:center;">Time<br />
مافيه شيء هام من وجهة نظري يستحق الذكر بالنسبة للوقت.<br />
كلنا نعرف ان الوقت مهم، صح؟ <img title="Biggrin23" src="http://www.aoua.com/vb/images/newsm/biggrin23.gif" border="0" alt="" /></p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">Humans and Computers as Agents</span></span></p>
<p style="text-align:center;">* اذا أردنا حجز مقعد على طائرة للسفر، نحتاج للتواصل مع وسيط أو وكيل للسفر والرحلات، هذا الوسيط يسمى agent</p>
<p style="text-align:center;">* العامل المشترك بين الوسطاء، هو انهم يفعلون أشياء عن قصد لأنفسهم أو بالنيابة عن أشخاص آخرين.</p>
<p style="text-align:center;">* أفعال الوسطاء يمكن تنفيذها عن طريق الانترنت.</p>
<p style="text-align:center;"><span style="color:black;">Avatars</span><br />
تعريفها في الكتاب:<br />
Avatars are computer agents that act for human agents in virtual environments.<br />
معناها: الآفاتار هو وسيط آلي يقوم بالعمل نيابة عن الوسيط البشري في البيئات الافتراضية.</p>
<p style="text-align:center;">مادري أحس التعريف غير واضح صراحة، فهمي للآفاتار هو انها أشياء يستخدمها الناس في الكمبيوتر والانترنت لتمثيلهم، مثل الصور الرمزية مثلاً، الناس يحطونها كتمثيل لصورتهم.</p>
<p style="text-align:center;">توجد خاصيتين للوسطاء أو الوكلاء:<br />
- <span style="color:black;">Autonomy</span><br />
بمعنى ان الوسيط يجب أن أن تكون أفعاله وفقاً لمبادئه الشخصية وأن تحقق أفعاله الأهداف اللي يطمح لتحقيقها أو الأهداف اللي مطالب بتحقيقها (من قبل المدير مثلاً).</p>
<p style="text-align:center;">- <span style="color:black;">Identity</span><br />
معناها الشخصية، بمعنى ان كل وسيط أو وكيل تكون له شخصية مختلفة عن الآخر.</p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">Computing as Interaction</span></span></p>
<p style="text-align:center;">توجد أربع أنواع في عملية التواصل بين البشر والكمبيوتر:</p>
<p style="text-align:center;">- من الإنسان إلى الكمبيوتر : مثل أن يقوم المستخدم بتشغيل برنامج.</p>
<p style="text-align:center;">- من الكمبيوتر إلى الكمبيوتر : مثل تنبيه نظام التشغيل بأنه يجب إغلاق برنامج معين.</p>
<p style="text-align:center;">- من الكمبيوتر إلى الإنسان : إختفاء صفحة من الشاشة (نتيجة لضغط المستخدم على زر الإغلاق)</p>
<p style="text-align:center;">- من الإنسان إلى الإنسان : عملية تواصل شفهية عادية (سوالف وكلام بين الناس)</p>
<p style="text-align:center;">قوانين الأخلاقيات تقول: بأن مصمم البرامج لايجب أن يكون مسؤول عن عملية إيذاء أو ضرر حدث بسبب برامجه في هذه الحالات:<br />
- إذا كان الضرر الحاصل غير مقصود من قبل المبرمج. Unintentional<br />
- إذا كان حدوث الضرر صعب التوقع. Not reasonably predictable<br />
- إذا كان الضرر نتيجة لسوء استخدام من قبل شخص آخر. unethical use of the computer by another</p>
<p style="text-align:center;">يعني في هذي الحالات الثلاثة المبرمج يعتبر بريء في حالة حدوث ضرر من برنامجه.</p>
<p style="text-align:center;">لكن لو مثلاً كان الضرر مقصود من المبرمج أو كان حدوثه سهل التوقع فالمبرمج يعتبر مسؤول عن الضرر الذي حصل.</p>
<p style="text-align:center;"><span style="color:black;">Delegation</span><br />
هي عملية الثقة في شخص أو كمبيوتر للقيام بمهمة معينة</p>
<p style="text-align:center;"><span style="color:black;">Trust</span><br />
هي الثقة بشكل عام. وهي تكتسب مع الوقت.<br />
غالباً الناس يثقون في شخص حتى يستطيعون تنفيذ أشياء مهمة بالنسبة لهم.<br />
حتى نثق في شخص يجب يكون جدير بالثقة <span style="color:black;">reliable</span></p>
<p style="text-align:center;">Delegating a task to a computer is done through programming<br />
عندما نريد إعطاء مهمة للكمبيوتر لتنفيذها، تكون عن طريق البرمجة</p>
<p style="text-align:center;"><span style="color:black;">Universal Computer</span><br />
عندما نعطيه ذاكرة ووقت كافيين وبرنامج مناسب، يستطيع محاكاة (أو تقليد) أي كمبيوتر آخر.</p>
<p style="text-align:center;">* نحن نعطي الكمبيوتر مهام لينفذها لأننا نثق به. ونحن نثق به لأننا نعتقد بأنه جدير بالثقة.</p>
<p style="text-align:center;">* الكمبيوتر هو جدير بالثقة لأنه دائماً يعطي نفس النتيجة المطلوبة منه مهما كانت الظروف.</p>
<p style="text-align:center;">* كلما فهمنا وتعرفنا على طريقة عمل الكمبيوتر ، كلما زادت ثقتنا فيه.</p>
<p style="text-align:center;"><span style="color:black;"><span style="font-size:small;">The Currency of Computing</span></span><br />
اذا صحت الترجمة ممكن نقول: مجالات استخدام الحاسب</p>
<p style="text-align:center;">المجالات ممكن تكون:<br />
- مجال لتبادل المعلومات.<br />
- مجال لتخزين المعلومات.<br />
- أو كوحدة قياس.</p>
<p style="text-align:center;">المجالات الأساسية في عالم الحاسب هي:<br />
البيانات data<br />
والمعلومات information</p>
<p style="text-align:center;">يعني عن طريق البيانات و المعلومات راح تتم عملية الاتصال بين الكمبيوتر والناس.</p>
<p style="text-align:center;">أول شيء خلونا نتذكر تعريف البيانات والمعلومات ..<br />
البيانات data : هي ممكن تكون أرقام أو أي شيء لا يعطينا معلومة، مثلاً لو قلت 45 .. هذا الرقم يعتبر من ضمن الdata لأنه ماله معنى لحاله، ولو قلت مثلاً كلمة ريال ، نفس الشي الكلمة مالها معنى وغير مفيدة .. ريال ممكن يقصد فيها قيمة شيء معين هي ريال ، وممكن يقصد فيها عملة دولة &#8230; الخ</p>
<p style="text-align:center;">المعلومات information : هي اللي تعطينا معلومة مفيدة ، وهي تتكون من عدة بيانات data مدموجة مع بعض بحيث انها تعطينا شيء مفيد ومفهوم، مثل لو قلت 45 ريال هو سعر البترول. هذي معلومة مفيدة وتتكون من عدة بيانات.</p>
<p style="text-align:center;">طيب الحين نرجع لعملية التواصل بين البشر والكمبيوتر، مثل ماذكرنا فوق توجد أربع اتجاهات لعملية الاتصال ..</p>
<p style="text-align:center;">- من الإنسان إلى الإنسان: الناس كيف يتواصلون مع بعض؟ ببيانات؟ ولا معلومات؟ ولا كلهم؟<br />
أكيد نتواصل مع بعض بمعلومات، لازم تكون الجمل اللي نقولها لبعض مفهومة ومفيدة وتدل على شيء.<br />
لذلك هنا بيكون مجال التواصل information to information</p>
<p style="text-align:center;"><span style="color:red;">دائماً الإنسان يتعامل مع المعلومات information والكمبيوتر يتعامل مع بيانات data</span></p>
<p style="text-align:center;">فلو جينا لنوع ثاني مثل .. من الكمبيوتر إلى الإنسان .. الكمبيوتر يتعامل مع بيانات والإنسان مع معلومات، لذلك هنا بتتم عملية تحويل البيانات إلى معلومات وتسمى بالانجليزي Expansion of data into information<br />
بمعنى توسعة البيانات إلى معلومات</p>
<p style="text-align:center;">والنوع من الإنسان إلى الكمبيوتر .. هنا نحتاج لتحويل المعلومات إلى بيانات، بالانجليزي contraction of information into data أو reduction of information into data<br />
بمعنى تحليل المعلومات إلى بيانات</p>
<p style="text-align:center;">وفي النوع الأخير .. من كمبيوتر إلى كمبيوتر .. راح تكون العملية عبارة عن نقل بيانات إلى بيانات أخرى<br />
Transformation of data into other data</p>
<p style="text-align:center;">هذي العمليات اللي ذكرتها تسمى <span style="color:black;">information loop</span><br />
بمعنى دورة المعلومات</p>
<p style="text-align:center;"><span style="color:black;">Emergence</span><br />
يقصد بهذا المصطلح، أي عملية ظهور جديد لظاهرة من ظواهر wildness<br />
أمثلة عليها:<br />
- الانترنت وعملية تنقل البيانات فيه.<br />
- نظام البريد الالكتروني.</p>
<p style="text-align:center;">* البشر هم أكثر من يتسبب في ظواهر wildness .. وبسبب اتصال البشر بعالم الكمبيوتر فهو معرض لإحدى هذه الظواهر في أي وقت.<br />
بمعنى انه ممكن يجي واحد ويسوي فايروس يتسبب مثلاً في تخريب الانترنت بشكل كامل! هذي من ظواهر wildness وسببها إنسان.</p>
Posted in شروحات Tagged: Learner, M150B, unit-11 <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aoum150.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aoum150.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aoum150.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aoum150.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aoum150.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aoum150.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aoum150.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aoum150.wordpress.com/206/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aoum150.wordpress.com/206/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aoum150.wordpress.com/206/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=206&subd=aoum150&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://aoum150.wordpress.com/2009/07/05/%d8%b4%d8%b1%d8%ad-%d8%a7%d9%84%d9%88%d8%ad%d8%af%d8%a9-11/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">المعتصم</media:title>
		</media:content>

		<media:content url="http://www.aoua.com/vb/images/newsm/biggrin23.gif" medium="image">
			<media:title type="html">Biggrin23</media:title>
		</media:content>
	</item>
		<item>
		<title>بعض الاختصارات ومعانيها</title>
		<link>http://aoum150.wordpress.com/2009/07/05/%d8%a8%d8%b9%d8%b6-%d8%a7%d9%84%d8%a7%d8%ae%d8%aa%d8%b5%d8%a7%d8%b1%d8%a7%d8%aa-%d9%88%d9%85%d8%b9%d8%a7%d9%86%d9%8a%d9%87%d8%a7/</link>
		<comments>http://aoum150.wordpress.com/2009/07/05/%d8%a8%d8%b9%d8%b6-%d8%a7%d9%84%d8%a7%d8%ae%d8%aa%d8%b5%d8%a7%d8%b1%d8%a7%d8%aa-%d9%88%d9%85%d8%b9%d8%a7%d9%86%d9%8a%d9%87%d8%a7/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 21:29:38 +0000</pubDate>
		<dc:creator>المعتصم</dc:creator>
				<category><![CDATA[شروحات]]></category>
		<category><![CDATA[M150A]]></category>

		<guid isPermaLink="false">http://aoum150.wordpress.com/?p=201</guid>
		<description><![CDATA[قام بكتابة هذ الموضوع .. الطالبة ][LAMAR][ من منتديات طلاب الجامعة العربية المفتوحة .. جزاها الله خيراً

الاختصارات ومعانيها &#8211; بصيغة word
الاختصارات ومعانيها &#8211; بصيغة pdf
Posted in شروحات Tagged: M150A      <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=201&subd=aoum150&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:center;">قام بكتابة هذ الموضوع .. الطالبة <a href="http://www.aoua.com/vb/member.php?u=70041">][LAMAR][</a> من منتديات طلاب الجامعة العربية المفتوحة .. جزاها الله خيراً</p>
<p style="text-align:center;">
<p style="text-align:center;"><a href="http://aoum150.files.wordpress.com/2009/07/d8a7d984d8a7d8aed8aad8b5d8a7d8b1d8a7d8aa-d988d985d8b9d8a7d986d98ad987d8a7.doc">الاختصارات ومعانيها &#8211; بصيغة word</a></p>
<p style="text-align:center;"><a href="http://aoum150.files.wordpress.com/2009/07/d8a7d984d8a7d8aed8aad8b5d8a7d8b1d8a7d8aa-d988d985d8b9d8a7d986d98ad987d8a7.pdf">الاختصارات ومعانيها &#8211; بصيغة pdf</a></p>
Posted in شروحات Tagged: M150A <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aoum150.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aoum150.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aoum150.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aoum150.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aoum150.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aoum150.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aoum150.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aoum150.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aoum150.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aoum150.wordpress.com/201/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aoum150.wordpress.com&blog=8231405&post=201&subd=aoum150&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://aoum150.wordpress.com/2009/07/05/%d8%a8%d8%b9%d8%b6-%d8%a7%d9%84%d8%a7%d8%ae%d8%aa%d8%b5%d8%a7%d8%b1%d8%a7%d8%aa-%d9%88%d9%85%d8%b9%d8%a7%d9%86%d9%8a%d9%87%d8%a7/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">المعتصم</media:title>
		</media:content>
	</item>
	</channel>
</rss>