<?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/"
	>

<channel>
	<title>وبلاگ سیاوش محمودیان &#187; programming</title>
	<atom:link href="http://blog.syavash.com/fa/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.syavash.com/fa</link>
	<description>خلق کن و به اشتراک بگذار...</description>
	<lastBuildDate>Fri, 30 May 2014 18:53:02 +0000</lastBuildDate>
	<language>fa-IR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>اولین نرم افزار ایرانی آیفون</title>
		<link>http://blog.syavash.com/fa/%d8%a7%d9%88%d9%84%db%8c%d9%86-%d9%86%d8%b1%d9%85-%d8%a7%d9%81%d8%b2%d8%a7%d8%b1-%d8%a7%db%8c%d8%b1%d8%a7%d9%86%db%8c-%d8%a2%db%8c%d9%81%d9%88%d9%86/</link>
		<comments>http://blog.syavash.com/fa/%d8%a7%d9%88%d9%84%db%8c%d9%86-%d9%86%d8%b1%d9%85-%d8%a7%d9%81%d8%b2%d8%a7%d8%b1-%d8%a7%db%8c%d8%b1%d8%a7%d9%86%db%8c-%d8%a2%db%8c%d9%81%d9%88%d9%86/#comments</comments>
		<pubDate>Fri, 25 Jan 2008 15:17:12 +0000</pubDate>
		<dc:creator>Siavash</dc:creator>
				<category><![CDATA[خبر]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Web Application]]></category>

		<guid isPermaLink="false">http://siavash.co/blog/fa/?p=281</guid>
		<description><![CDATA[<p>خوب این خبر به نظر من که خوشحال کنندست. اپل اولین نرم افزار تحت وب ایرانی برای آیفون رو تایید کرد! لینک تایید شدن این نرم افزار: http://www.apple.com/webapps/calculate/dateconvertor.html معرفی نرم افزار خوب حالا این نرم افزار چیکار می کنه؟  &#8221; این برنامه یه کار خیلی سادرو انجام میده. یعنی تاریخ میلادی رو به شمسی تبدیل می [...]</p><p>نوشته <a href="http://blog.syavash.com/fa/%d8%a7%d9%88%d9%84%db%8c%d9%86-%d9%86%d8%b1%d9%85-%d8%a7%d9%81%d8%b2%d8%a7%d8%b1-%d8%a7%db%8c%d8%b1%d8%a7%d9%86%db%8c-%d8%a2%db%8c%d9%81%d9%88%d9%86/">اولین نرم افزار ایرانی آیفون</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></description>
				<content:encoded><![CDATA[<p>خوب این خبر به نظر من که خوشحال کنندست.<br />
اپل اولین نرم افزار تحت وب ایرانی برای آیفون رو تایید کرد!<br />
لینک تایید شدن این نرم افزار: <a href="http://www.apple.com/webapps/calculate/dateconvertor.html">http://www.apple.com/webapps/calculate/dateconvertor.html</a></p>
<h2>معرفی نرم افزار</h2>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />خوب حالا این نرم افزار چیکار می کنه؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; این برنامه یه کار خیلی سادرو انجام میده. یعنی تاریخ میلادی رو به شمسی تبدیل می کنه و بر عکس. اما مهم اینه که اپل یه برنامه که توش لینک به یه فروم کاملا ایرانی بود رو تایید کرده. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />میشه بگی این برنامه چطوری ساخته شده؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; حتما! این برنامه با استفاده از php و aJax و فریم ورک (Framwork) ساخت برنامه ی تحت وب برای آی فون ساخته شده و توش تمامی معیار هایی که از نظر شرکت اپل در ساخت یک برنامه ی تحت وب آیفون باید رعایت می شده در نظر گرفته شده. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />میبینم که اپل لینک هم به این سایت داده!</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; آره دستش درد نکنه! &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 1 " src="http://www.syavash.com/portal/images/blog/q1.gif" />اگر مقدوره عکس این برنامرو میشه ببینیم؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; البته! اینم یه عکس از این برنامه در محیط آیفون! &#8220;</div>
</dd>
</dl>
<div><img title="The first Iranian web application for iPhone" alt="The first Iranian web application for iPhone" src="http://www.syavash.com/portal/files/siavash/blogs/the-first-persian-iranian-web-application-for-iphone/screenshot.png" /></div>
<div></div>
<div></div>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />ااااااه! این که کپ برنامه های آیفونه!</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; خوب قاعدتا هم باید همینطوری باشه. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 5 " src="http://www.syavash.com/portal/images/blog/q5.gif" />عجیبه!</div>
</dt>
<dt>
<div><img alt="Question level 1 " src="http://www.syavash.com/portal/images/blog/q1.gif" /><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" /><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" /><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />چی عجیبه؟؟؟</div>
</dt>
<dt>
<div><img alt="Question level 5 " src="http://www.syavash.com/portal/images/blog/q5.gif" />مگه AT&amp;T توی ایران هم خط میده؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; خوشم میاد تیزی! نه توی ایران خط نمیده! اما خوب من نمی تونستم عکس برنامرو توی یه آیفون آنلاک شده نشون بدم که! در نتیجه یه کاری کردم که به نظر آنلاک شده نیاد که احتمالا خودت الان حدس زدی. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 5 " src="http://www.syavash.com/portal/images/blog/q5.gif" />آره، فهمیدم!</div>
</dt>
<dt>
<div><img alt="Question level 1 " src="http://www.syavash.com/portal/images/blog/q1.gif" /><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" /><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" /><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />ما نفهمیدیم!</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; نکته ی خیلی مهمی رو از دست ندادین! &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 5 " src="http://www.syavash.com/portal/images/blog/q5.gif" />یه سوال دیگه! به نظرتون اولین برنامه ی نیتیو (Native) ایرانی مورد تایید اپل کی میاد؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; سوال خوبیه! در حال حاضر هیچ نرم افزار نیتیوی وجود نداره که مورد تایید اپل باشه! اصلا قرار نبوده تا الآن برنامه ی نیتیو برای آیفون نوشته بشه! اما یه خبر خوب دیگه، آقای استیو جابز اعلام کردن به زودی یک SDK برای ساخت برنامه های نیتیو آیفون ارائه میشه! که این برای برنامه نویسایی که دوست دارن برای آیفون برنامه بسازن خیلی عالیه. توی Firmware آخر آیفون یعنی ۱٫۱٫۳ هم تغییرات زیرساختی زیادی داده شده که نشون میده اپل داره خودشو برای دادن این SDK آماده می کنه. مثلا اسم یوزر اصلی از root به mobile تغییر پیدا کرده و&#8230; &#8220;</div>
</dd>
</dl>
<p>انشاالله هر چه زودتر اولین نرم افزار نیتیو ایرانی مورد تایید اپل رو هم ببینیم!<br />
اینم یک عکس یادگاری از سایت اپل:</p>
<div><a href="http://www.syavash.com/portal/files/siavash/blogs/the-first-persian-iranian-web-application-for-iphone/applescreenshot.png"><img title="Screen shot of Apple for the first Iranian web application in iPhone" alt="Screen shot of Apple for the first Iranian web application in iPhone" src="http://www.syavash.com/portal/files/siavash/blogs/the-first-persian-iranian-web-application-for-iphone/applethumb.png" /></a></div>
<p>&nbsp;</p>
<p>نوشته <a href="http://blog.syavash.com/fa/%d8%a7%d9%88%d9%84%db%8c%d9%86-%d9%86%d8%b1%d9%85-%d8%a7%d9%81%d8%b2%d8%a7%d8%b1-%d8%a7%db%8c%d8%b1%d8%a7%d9%86%db%8c-%d8%a2%db%8c%d9%81%d9%88%d9%86/">اولین نرم افزار ایرانی آیفون</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.syavash.com/fa/%d8%a7%d9%88%d9%84%db%8c%d9%86-%d9%86%d8%b1%d9%85-%d8%a7%d9%81%d8%b2%d8%a7%d8%b1-%d8%a7%db%8c%d8%b1%d8%a7%d9%86%db%8c-%d8%a2%db%8c%d9%81%d9%88%d9%86/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>ساخت روبات یاهو مسنجر &#8211; قسمت دوم</title>
		<link>http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%af%d9%88%d9%85/</link>
		<comments>http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%af%d9%88%d9%85/#comments</comments>
		<pubDate>Wed, 02 Jan 2008 02:06:28 +0000</pubDate>
		<dc:creator>Siavash</dc:creator>
				<category><![CDATA[آموزشی]]></category>
		<category><![CDATA[messenger]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://siavash.co/blog/fa/?p=273</guid>
		<description><![CDATA[<p>توجه در صورتی که قصد دانستن جزئیات پروتوکل یاهو! مسنجر را ندارید و هدف شما تنها آنلاین کردن یک بات در یاهو! مسنجر می باشد، می توانید به اینجا مراجعه کرده و سورس کد یک بات پایه یاهو! مسنجررا به زبان Visual Basic دریافت نمایید. جلسه دوم خیلی خوب با نام خدا جلسه دوم آموزش ساختن روبات یاهو! مسنجر رو [...]</p><p>نوشته <a href="http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%af%d9%88%d9%85/">ساخت روبات یاهو مسنجر &#8211; قسمت دوم</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></description>
				<content:encoded><![CDATA[<h2>توجه</h2>
<p>در صورتی که قصد دانستن جزئیات پروتوکل یاهو! مسنجر را ندارید و هدف شما تنها آنلاین کردن یک بات در یاهو! مسنجر می باشد، می توانید به <a href="http://artificial.ir/intelligence/%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%87%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%AF%D8%B1-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86/2-%D8%B3%D8%A7%DB%8C%D9%81%D8%B1-%D8%B1%D9%88%D8%A8%D8%A7%D8%AA-cypher-robot.html">اینجا</a> مراجعه کرده و سورس کد یک <a href="http://artificial.ir/intelligence/%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%87%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%AF%D8%B1-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86/2-%D8%B3%D8%A7%DB%8C%D9%81%D8%B1-%D8%B1%D9%88%D8%A8%D8%A7%D8%AA-cypher-robot.html">بات پایه یاهو! مسنجر</a>را به زبان Visual Basic دریافت نمایید.</p>
<h2>جلسه دوم</h2>
<p>خیلی خوب با نام خدا جلسه دوم آموزش ساختن <b>روبات یاهو! مسنجر</b> رو شروع می کنیم&#8230;</p>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />ایول ایول&#8230;</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; به به میببنم که این جلسه خیلی سر حالی&#8230; &#8220;</div>
</dd>
</dl>
<p>خوب جلسه پیش به طور خلاصه توضیح دادیم که <b>یاهو مسنجر</b> چطوری به سرور کانکت میشه و چطوری ما به وسیله یاهو! مسنجر لاگین میشیم. جالا این جلسه میخوایم یه سری تعریفای مقدماتی مثل آی پی (IP) و پورت (Port) و سوکت (Socket)، و یه سری مفاهیم مثل طریقه فرستادن اطلاعات تو شبکه و انواع اون رو بگیم. چون اینا برای درست کردن یک <b>روبات یاهو! مسنجر</b> نیاز میشن!</p>
<h2>تعاریف مقدماتی</h2>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" /> آقا اجازه؟ این<i> آی پی</i> چیه؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; خودم الان داشتم می گفتم&#8230; یکم گوش بده چی می گم بعد سوال بپرس&#8230; &#8220;</div>
</dd>
</dl>
<h3>تعریف آی پی و پورت</h3>
<p>خوب. اولین تعریفها <b>آی پی</b> و <b>پورت</b> هستن. بذارید معنی اینا رو با مثال توضیح بدم. ببینید توی یه شهر کلی خونه هست که هر کدوم از خونه ها یه آدرس و پلاک مخصوص خودشونو دارن&#8230; مثلا میگیم تهران. خ شریعتی &#8230;. پلاک ۹٫۱٫ آدرس همیشه منحصر به فرد هست یعنی دو تا خونه وجود ندارن که آدرسشون یکی باشه&#8230;</p>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />کی گفته آقا ما یه دوست داریم پلاک خونشون با پلاک خونه بقلیشون یکیه!!!</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; ببین من منظورم یه شهر قانونمند بود تهران رو نمیگفتم&#8230; &#8220;</div>
</dd>
</dl>
<p>خوب داشتم می گفتم. آدرس منحصر به فرد هست. این آدرس توی شهر همون آی پی هست توی شبکه. یعنی توی اینترنت (و کلا توی شبکه) هر کامپیوتری یه آدرس داره که بهش میگن <b>آی پی</b>.<br />
حالا مثلا به دوستتون آدرس میدین بعد میگین رسیدی به خونمون از در جلو بیا تو یا از مثلا از در عقب بیا. یا اصلا میگی از پنجره بیا تو. به این میگن پورت. در اصل<b>پورت</b> یعنی از چه راهی به اون آدرس وصل بشیم. شاید این مثال بهتری باشه. آی پی آدرس هست و پورت جاده. از جاده های مختلف می شه با یه آدرس رسید.</p>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />آقا اجازه ما یه دوست دیگه داریم&#8230;</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; ساکت!!! میدونم چی میخوای بگی. تو شهری که من گفتم بین هر دو تا خونه حداقل چند تا راه هست&#8230; &#8220;</div>
</dd>
</dl>
<p>حالا که مفهوم <i>آی پی</i> و <i>پورت</i> رو فهمیدیم یکم در باره شکل ظاهری اونا توضیح میدم.<br />
آی پی به شکل ###.###.###.### هستش که به جای هر کدوم از #ها یک عدد قرار میگیره. مثلا ۸۴٫۲۴۱٫۳۲٫۶۴<br />
پورت هم به طور معمول یک عدد هستش بین ۱ تا ۶۵۵۳۶ (۲ به توان ۱۶) و پورت های کوچک هم (زیر ۱۰۲۴) معمولا رزرو شده هستن یعنی معلومه مخصوص چه کاری هستن. مثلا پورت ۸۰ برای http هست یعنی وقتی میرید تو یه سایت اطلاعات اون سایت از طریق این پورت فرستاده میشه یا مثلا پورت ۲۱ برای FTP هست. بعدا بیشتر درباره پورت توضیح میدم. قاعدتا الان زیاد نباید چیزی ازش فهمیده باشین.</p>
<dl>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" /> آقا اجازه؟ ما فکر کنیم شما دارین آی پی پورت رو اشتباه تعریف می کنین. آی پی پورت از اون چیزاییه که وارد می کنیم بعد از فیلتر باهاش رد میشیم. همین دیروزم دوستم یه آی پی پورت حدید بهم داد.</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; ای بابا&#8230; چه ربطی داره! بذار برات توضیح بدم. ببین اول مختصرا باید بدونی چطوری سایتا رو فیلتر میکنن. شما وقتی میرید تو یه سایت اول براوزرتون (Browser) یه پیغام به آی اس پی (Internet Service Provider) میفرسته که من این سایت رو میخوام بعد آی اس پی آدرس رو چک می کنه اگه آدرس سایت جزو لیستی که باید فیلتر شه باشه اون صفحرو با اکسس بلاکد (Access Blocked) یا هر چیزی که براش تنظیم کرده باشن عوض میکنه و اونو بجای صفحه اصلی براتون میفرسته.<br />
اون آی پی و پورتی که شما وارد میکنید آی پی و پورت یه <b>پراکسی سرور</b> (Proxy Server) هستش. کار پراکسی سرور اینه که اطلاعات رو بصورت غیر مستقیم بفرسته. یعنی وقتی شما اون آدرس رو وارد میکنید از اون به بعد میرید تو هر سایتی به جای اینکه براوزر به آی اس پی مستقیم بگه من این سایتو میخوام به پراکسی سرور میگه اون صفحرو بگیره بعد برای شما بفرسته. اینطوری در واقع گول می خوره آی اس پی.<br />
پس شما اینو درست گفتین که اونا آی پی و پورت هستن ولی تعریف آی پی و پورت نیستن بلکه آی پی و پرت یا آدرس اون پراکسی سرور هستن. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />آهان پس اینطوریه.</div>
</dt>
</dl>
<p>خوب. یه قرار دادم میگم حالا. اگه یکی به شما بگه برو به فلان آی پی وصل شو معنی نداره. چون معلوم نیست از کدوم راه باید بهش وصل بشی. چون پورت رو مشخص نکرده. عین اینه که یه تک سیم به شما بدن بعد بگن اینو بزن به پریز و نگن به فاز بزن یا نول.<br />
برای اینکه هی نگن به فلان <b>آی پی</b> با فلان <b>پرت</b> وصل شو یه قرار داد گذاشتن. میگن به IP:Port وصل شو. یعنی آی پی رو میگن و بعدش یه دو نقطه میذارن و بعد پورت رو میگن، مثلا: ۸۴٫۲۴۱٫۳۲٫۶۴:۲۱</p>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />ببخشید ما نفهمیدیم این فاز و نول چین؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; هیچی ولش کن. اونارو ندونیم می تونی روبات یاهو! مسنجر بسازی. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />آقا آی پی خودمونو از کجا میتونیم پیدا کنیم؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; اگر ویندوزتون XP باشه که خیلی راحت میتونن دوبار کلیک (Double Click) کنید روی عکس دو تا کامپیوترا که وقتی به نت وصل میشید میان بعد بزنید رو Details و آی پی که جلوی Client Address نوشته شده آی پی شماست. راه دیگشم اینه که برید تو Start-&gt;Run و بعد بنویسید cmd و اینتر (Enter) کنید تا Command Prompt باز شه و بعد بنویسید ipconfig و اینتر کنید. جلوی IP Address آی پی شما رو نوشته. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 5 " src="http://www.syavash.com/portal/images/blog/q5.gif" />ببخشید من وقتی تو کامپیوترم ipconfig رو میزنم دو تا IP Address میاد. ماجرا چیه؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; شما کامپیوترتون به شبکه داخلی هم وصله. درست عین اینه که دو تا خونه داشته باشی. حالا اینجا شاید سوال پیش باید بالاخره آدرس من کدومه؟ جوابشم اینه که شما تو شبکه داخلی (مثلا LAN) یک آدرس دارین و تو اینترنت هم یه آدرس دیگه. فهمیدن این هم که کدوم آدرس داخلیه و کدوم آدرس اینترنته معمولا آسونه چون آی پی داخلی معمولا با ۱۹۲٫۱۶۸ شروع میشه. در ضمن بالای هر آدرس نوشته مربوط به کجاست مثلا اگه اینترنتتون دیال آپ (Dial Up) باشه بالای آدرس اینترنتتون نوشته PPP adapter. &#8220;</div>
</dd>
</dl>
<h3>تعریف سوکت</h3>
<p>خوب حالا میگیم سوکت چیه! سوکت یه مکانیسم ارتباط هست که اولین دفه روی ورژن BSD از سیستم عامل یونیکس ارائه داده شد. ما زیاد به این تعریفش کاری نداریم. شما در این حد بدونید که با استفاده از سوکت می تونیم اطلاعات رو تو اینترنت و کلا تو شبکه انتقال بدیم.<br />
میشه به دو طریق با سوکت اطلاعات رو روی شبکه انتقال داد: TCP و UDP<br />
که ما در بیشتر مراحل ساختن روبات باهو! مسنجر (به جز Voice Chat و Webcam) به نوع اول یعنی TCP نیاز داریم.<br />
مختصرا توضیح میدم فرق این دو تا چیه:</p>
<ul>
<li><b>TCP</b> که مخفف Transmission Control Protocol هستش یه تیکه از اطلاعات رو میفرسته و بعدش منتظر میشه ببینه تمام اطلاعات کامل رسیده یا نه و اطلاعاتی که نرسیدرو دوباره میفرسته و دوباره همین کارو تکرار می کنه. خوبیشم اینه که تمام اطلاعات مطمعنا فرستاده میشه و بدیشم اینه که سرعتش کمتره نسبت به UDP چون کلی اطلاعات اضافی ردو بدل میشه برای اینکه چک بشه تمام اطلاعات کامل منتقل شده یا نه.</li>
<li><b>UDP</b> که مخفف User Datagram Protocol هست دقیقا برعکس TCP هست یعنی پشت سر هم اطلاعات فرستاده میشه و چک نمیشه که همش رسیده.</li>
</ul>
<p>وقتی شما دارین یه فایل رو <i>دانلود</i> (Download) میکنید از TCP استفاده میشه چون باید تمام اطلاعات به طور کامل دریافت شه اما وقتی مثلا ویس چت (Voice Chat) میکنید از UDP استفاده میشه چون مهم اینه چیزی که الان گفته میشه برسه برای همینه بعضی اوقات صدا قطع و وصل میشه. در ضمن ترتیب رسیدن هم معلوم نیست تو UDP یعنی ممکنه وقتی abc فرستاده میشه acb دریافت بشه برای همینه بعضی اوقات تو ویس چت صدا روباتی یا شطرنجی میشه.<br />
خوب دیگه برای این جلسه کافیه! جلسه دیگه یاد میگیریم چطوری بفهمیم یه برنامه چه اطلاعاتی رو داخل شبکه ردو بدل می کنه و بعد میریم سراغ یاهو! مسنجر که ببینیم چیا میفرسته و دریافت میکنه تا بتونیم اصل روبات ساختن رو شروع کنیم.</p>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />خوب آقا&#8230; آخه خوب&#8230; خوب نمیشه الان بگین؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; اولا که ادا منو در نیار. دست خودم نیست میخوام حرفمو شروع کنم باید خوب رو بگم. دوما تو که تمام مدت داشتی میشمردی من چند بار خوب گفتم. چه فرقی برات میکنه بقیشو الان بگم یا نگم وقتی اصلا گوش نمیکنی. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />آخه تا الان شده ۶ تا خوب اگه بقیشم الان بگید ممکنه بشه ۱۰ تا خوب تو یه جلسه. اونطوری بهتره.</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; ببین شوخی بسه. خودتونو آماده کنید برای جلسه دیگه. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />ببخشید میشه به آقای <img alt="Question level 4" src="http://www.syavash.com/portal/images/blog/q4.gif" /> بگید آی پی پورت پراکسی سرورو بلند بخونه؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; نه. بعد از کلاس خودتون ازش بپرسین. &#8220;</div>
</dd>
</dl>
<p>خوب دیگه بسه دیگه. خداحافظ.</p>
<p>نوشته <a href="http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%af%d9%88%d9%85/">ساخت روبات یاهو مسنجر &#8211; قسمت دوم</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%af%d9%88%d9%85/feed/</wfw:commentRss>
		<slash:comments>49</slash:comments>
		</item>
		<item>
		<title>ساخت روبات یاهو مسنجر &#8211; قسمت اول</title>
		<link>http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%a7%d9%88%d9%84/</link>
		<comments>http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%a7%d9%88%d9%84/#comments</comments>
		<pubDate>Mon, 31 Dec 2007 22:20:11 +0000</pubDate>
		<dc:creator>Siavash</dc:creator>
				<category><![CDATA[آموزشی]]></category>
		<category><![CDATA[messenger]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://siavash.co/blog/fa/?p=270</guid>
		<description><![CDATA[<p>توجه در صورتی که قصد دانستن جزئیات پروتوکل یاهو! مسنجر را ندارید و هدف شما تنها آنلاین کردن یک بات در یاهو! مسنجر می باشد، می توانید به اینجا مراجعه کرده و سورس کد یک بات پایه یاهو! مسنجررا به زبان Visual Basic دریافت نمایید. جلسه اول در این سری از نوشته ها ما می خوایم یاد بگیریم [...]</p><p>نوشته <a href="http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%a7%d9%88%d9%84/">ساخت روبات یاهو مسنجر &#8211; قسمت اول</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></description>
				<content:encoded><![CDATA[<h2>توجه</h2>
<p>در صورتی که قصد دانستن جزئیات پروتوکل یاهو! مسنجر را ندارید و هدف شما تنها آنلاین کردن یک بات در یاهو! مسنجر می باشد، می توانید به <a href="http://artificial.ir/intelligence/%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%87%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%AF%D8%B1-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86/2-%D8%B3%D8%A7%DB%8C%D9%81%D8%B1-%D8%B1%D9%88%D8%A8%D8%A7%D8%AA-cypher-robot.html">اینجا</a> مراجعه کرده و سورس کد یک <a href="http://artificial.ir/intelligence/%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%87%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%AF%D8%B1-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86/2-%D8%B3%D8%A7%DB%8C%D9%81%D8%B1-%D8%B1%D9%88%D8%A8%D8%A7%D8%AA-cypher-robot.html">بات پایه یاهو! مسنجر</a>را به زبان Visual Basic دریافت نمایید.</p>
<h2>جلسه اول</h2>
<p>در این سری از نوشته ها ما می خوایم یاد بگیریم که چطوری یه <b>روبات</b> (bot) <b>یاهو مسنجر</b> بسازیم.<br />
بذارید اول چند تا از دانش پژوهان رو معرفی کنم:</p>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />یه دانش پژوه نرمال که تا حدودی کار با کامپیوتر رو بلده.</div>
</dt>
<dt>
<div><img alt="Question level 1 " src="http://www.syavash.com/portal/images/blog/q1.gif" />یه دانش پژوه گیر که کار با کامپیوتر رو خوب بلده و سر هر چیزی گیر میاد سوال میکنه.</div>
</dt>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />یه دانش پژوه تیز که کار با کامپیوتر رو خیلی خوب بلده اما برنامه نویسی با ویژوال بیسیک رو بلد نیست.</div>
</dt>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />یه دانش پژوه خیلی قوی از نظر کامپیوتر که زبان برنامه نویسی ویژوال بیسیک رو کاملا بلده.</div>
</dt>
<dt>
<div><img alt="Question level 5 " src="http://www.syavash.com/portal/images/blog/q5.gif" />این دانش پژوه کلا چیزی بلد نیست فقط بلده تیکه بپرونه و شیطونی کنه.</div>
</dt>
</dl>
<h2>روبات یاهو مسنجر چیست؟</h2>
<p>خوب حالا باید بدونیم یک <b>ربات یاهو</b> چی هست اصلا! یعنی مثلا چطوری آنلاین می شه و چه فرقی با یه آی دی (ID) معمولی دار.<br />
در اصل آی دی یه <b>روبات یاهو مسنجر</b> هیچ فرقی با آی دی های دیگه نداره فقط نحوه لاگین (Login) کردنش فرق میکنه. یعنی بر عکس من و شما که با <b>یاهو! مسنجر</b> (Yahoo! Messenger) لاگین می کنیم یه <i>روبات</i> با یاهو! مسنجر لاگین نمی کنه و با یه برنامه ی دیگه که بهش اصطلاحا میگن شبیه سازی شده یاهو! مسنجر (Yahoo! Messenger Clone) لاگین می کنه! کار ما هم برای <b>روبات ساختن</b> دقیقا همینه یعنی باید یه <b>یاهو مسنجر</b> کلون بسازیم.</p>
<h2>یاهو! مسنجر چگونه لاگین می شود؟</h2>
<p>خوب برای اینکه بتونیم یه چیزی عین یاهو! مسنجر بسازیم اول باید ببینیم یاهو! مسنجر وقتی ما دکمه Sign In رو می زنیم چیکارا میکنه&#8230;<br />
فعلا یه توضیح مختصر میدم بعدا سعی میکنم هر تیکشو به طور مفصل توضیح بدم:<br />
یاهو! مسنجر اول میاد به <b>سرور یاهو</b>! پیغام میفرسته که میخوام بهت کانکت (Connect) بشم.<br />
سوال دارین بکنین&#8230;</p>
<dl>
<dt>
<div><img alt="Question level 1 " src="http://www.syavash.com/portal/images/blog/q1.gif" />ببخشید، سرور چیه؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; کلا به هر کامپیوتری که هر نوع سرویسی بده میگن سرور! مثلا توی شبکه داخلی (LAN) به اون کامپیوتری که همه کامپیوترا بهش کانکت میشن رو میگن سرور!<br />
اما تو اینترنت وقتی صحبت از سرور میشه منظور یه کامپیوتره که همیشه آنلاینه! (معنی اصلیش اونیه که بالا گفتما! بعدا نگی این سیاوش همه چیو اشتباه میگه) &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" /> این سرور که <b>یاهو! مسنجر</b> یهش وصل میشه ربطی به همون وب سرور (Web Server) اینا داره که روش سایت می ریزن؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; نه عزیز من! این سرورا اصلابرنامه وب سرور (Web Server) روش نصت نیست. بجاش تمام یوزرنیم (Username) ها و پسورد های آی دی های یاهو روی این کامپیوترا ذخیره هستن&#8230; روی این سرورا یه برنامه نصب هست که کارش اینه که وقتی یاهو! مسنجر بهش خواست وصل شه اول بهش اجازه وصل شدن بده و بعد یه سری از اطلاعات (مثل یوزرنیم و پسوورد) رو چک کنه و اگه درست نبود ارتباط رو قطع کنه.<br />
دز ضمن تقریبا تمام پی ام (PM) هایی هم که میفرستین اول میاد تو این سرورا و بعد به وسیله همین برنامه از سرور به اون شخصی که قرار بوده پی ام بهش برسه فرستاده میشه! &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />ببخشید شما چرا تو جوابتون گفتین سرورا؟ مگه بیشتر از یکین؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; آفرین! خوشم میاد تیزی! یک سرور برای این که این همه اطلاعات رو چک کنه و دریافت کنه و بفرسته کمه&#8230; یعنی اصلا نمی کشه. در نتیجه <i>یاهو</i>! اومده این کار رو بین کلی کامپیوتر تقسیم کرده. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />پس چرا آخرش گفتین از سرور به اون شخص میفرسته به جای از سرورا؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; یه بار گیر دادی ازت تعریف کردم. حالا دیگه گیر ملا لغتی نده. منظورم اون سرور خاص بود که پیغام رو دریافت کرده. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" /> اونوقت یه سوال دیگه! چرا گفتین تقریبا تمام پی ام ها اول میرن تو سرور بعد از اونجا فرستاده میشن؟ چرا نگفتین همشون؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; انگار جو گرفتتا! تو قرار نیست پشت سر هم سوال کنی. آقای <img alt="Question level 1" src="http://www.syavash.com/portal/images/blog/q1.gif" /> قراره اینطوری باشه!<br />
برای این گفتم تقریبا چون بعضی اوقات که یاهو ببینه ترافیک زیاده ارتباط مستقیم (Direct Connection) بر قرار می کنه یعنی پی ام ها دیگه به سرور نمی رن و مستقیم سند (Send) میشن به کسی که قراره بگیردش.<br />
بعضی از برنامه های مسنجر مثل AOL همیشه ارتباط مستقیم بین کاربراشون بر قرار میکنن اینطوری هم سرورا زیاد بارشون سنگین نمیشه هم اگه مثلا اگر لاگ اوت (Logout) کنین خود AOL رو، می تونین به چتتون ادامه بدین چون برای ادامه چت نیازی به سرور نیست. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />ببخشید، ما میتونیم بفهمیم کی ارتباط غیر مستقیمه کی مستقیم؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; آره! وقتی تو مسنحر داری چت می کنی بالای هر پنجره چت اسم تو و کسی که داری باهاش چت می کنی رو نوشته و یه &#8211; (dash) بینشون گذاشته. اگه به جای یک &#8211; دو تا دش ( &#8212; ) اومد بینشون یعنی ارتباط مستقیم بر قرار شده.<br />
خوب سوال دیگه بسه &#8230; از موضوع اصلی خیلی دور شدیم. داشتیم میگفتیم یاهو! مسنجر اول به یکی از سرور پیغام میفرسته که میخوام کانکت شم. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />ببخشید &#8230;</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; بسه دیگه. الان سوال نکن. یه ذره وایسا این تیکرو گفتم دوباره سوال کن. &#8220;</div>
</dd>
</dl>
<p>خلاصه بعد <b>سرور یاهو</b>! قبول میکنه و کانکت میشن&#8230; اینجا باید دقت کنید که منظور از کانکت شدن لاگین شدن نیست. بلکه فقط کانکت شدن که اطلاعات بتونن به هم بفرستن. خوب حالا یاهو! مسنجر یوزرنین (Username) رو میفرسته و سرور بر حسب یوزرنیم و زمان یه اطلاعاتی رو میفرسته که به اون Seed میگن. حالا یاهو! مسنجر با توجه به Seed و یوزرنیم، پسورد رو encrypt میکنه و میفرسته به سرور یاهو!!! این تیکه مشکل ساز ترین قسمت برای ساختن یه یاهو! مسنجر کلون (Clone) هست. چون باید بفهمیم پسورد رو <b>یاهو! مسنجر</b> چطوری با توجه به یوزرنیم و سید، encrypt میکنه. این کار خیلی سخت هست و کار من و شما نیست در نتیجه ما برای این قسمت از یک DLL استفاده می کنیم که عمل encrypt کردن پسورد رو مثل یاهو مسنجر انجام میده (این DLL رو مدیون پروژه گیم (Gaim Project) هستیم! از همینجا از تمام دست اندر کاران این پروژه تشکر میکنم&#8230;)<br />
حالا اگر سوالی دارین بپرسین&#8230;</p>
<dl>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />ببخشید، من نفهمیدم encrypt چیه اصلا.</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; خوب حق داری. ببین عزیز من معمولا برای امنیت بیشتر پسورد ها و اطلاعاتی که به راحتی نباید درز کنرو رمز میکنن. رمز کردن بطور کلی به دو دسته تقسیم میشه:<br />
دسته اول encrypt یا encode کردن هست. مثل base64 encoding<br />
این دسته همیشه دوطرفه هستن یعنی میشه از رمز شده دوباره به اصلش برگشت.<br />
بعضی encrypt ها هم یک یا چند پارامتر به عنوان key میگیرن. یعنی با توجه به اون اطلاعات encrypt میکنن.<br />
مثلا encrypt کردن کلمه syavash به وسیله الگوریتم Blowfish با کی a1 میشه No0ICOlDP6E= و با کی b2 میشه cu/FsS9kwvg= و مینونیم با داشتن کی (key) دوباره این دو تا رو به syavash برگردوند.<br />
encryption پسورد یاهو! مسنجر هم تقریبا همینطوریه&#8230; یعنی چند تا پارامتر مثل Seed و یوزرنیم رو میگیده و پسورد رو encrypt میکنه!<br />
دسته دوم رو hash بهشون میگن. در این مدل رمز کردن، ممکنه رمز برگشت پذیر نباشه چون تابع یک به یک نیست. برای مثال وقتی syavash رو با الگوریتم md5 هش میکنیم این شکلی میشه : ۰۷fcf2ae7ef576f7d31d845e91001097<br />
حالا از همین رمزی که بالا در اومده امکان نداره بشه به syavash رسید. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />یاهو برای چی اصلا Seed رو میفرسته؟ خوب بر حسب یوزرنیم و پسورد این کارو انجام میداد.</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; دلیل اصلی اینه که زمان هم در اون تاثیر داشته باشه. چون اگه اینطوری نباشه یکی راحت میتونه encrypt شده پسورد یکی دیگرو رو به وسیله یه sniffer (بعدا دربارش توضیح میدم) بدست بیاره و بعدا هر وقت خواست با آی دی اون لاگین کنه. اما اگر زمان هم توش اثر داشته باشه فقط در همون لحظه (که دیگه تکرار نخواهد شد) از اون پسورد encrypt شده استفاده می شه کرد. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 1 " src="http://www.syavash.com/portal/images/blog/q1.gif" />DLL چیه دیگه؟ ربطی به download داره؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; نه&#8230; DLL مخفف <b>D</b>ynamic <b>L</b>ink <b>L</b>ibrary هست و یه سری فرمان های اجرایی توش قرار دارن که میشه ازشون در هر برنامه ای استفاده کرد. فقط باید به این توجه داشته باشیم که DLL ها فقط برای ویندوزن و تو بقیه سیستم عامل ها نمیشه ازشون استفاده کرد.<br />
کار DLL ای که بالا دربارش توضیح دادم اینه که پسورد رو همونطوری که یاهو! مسنجر رمز میکنه، رمز کنه! &#8220;</div>
</dd>
</dl>
<p>آقای <img alt="Question level 4" src="http://www.syavash.com/portal/images/blog/q4.gif" /> انگار سوال داشتی؟</p>
<dl>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />اممم&#8230; یادم رفت&#8230;</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; باشه پس وقتی یادت اومد بگو. &#8220;</div>
</dd>
</dl>
<p>خوب وقتی ما این اطلاعات رو فرستادیم سرور یاهو! چک میکنه اطلاعاتی که بهش دادیم (همون یوزرنیم و پسورد) درست هستن یا نه. در صورتی که غلط باشن برای یاهو! مسنجر یه پیغام میفرسته که پسورد و یوزرنیم مطابقت ندارن و قطع میکنه ارتباط رو. در صورتی هم که درست باشه یه پیغام میفرسته که لاگین انجام شد و دقیقا در همون لحظست که چراغ آی دی شما تو یاهو! مسنجر دوستاتون روشن میشه و بعدشم لیست دوستان (Friend List) و سایر اطلاعات فرستاده میشه.<br />
خوب! برای این جلسه بسه دیگه&#8230; این دفعه فقط همینطوری فهمیدیم چه اتفاقی میوفته که ما از طریق <b>یاهو مسنجر</b> <b>آنلاین</b> میشیم. جلسه ی دیگه میبینیم دقیقا چه اطلاعاتی فرستاده و دریافت میشن و چطوری میتونیم یه برنامه درست کنیم که دقیقا همون کارارو بکنه.<br />
خوب دیگه سوالی نیست؟</p>
<dl>
<dt>
<div><img alt="Question level 1 " src="http://www.syavash.com/portal/images/blog/q1.gif" /><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" /><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" /><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" /><img alt="Question level 5 " src="http://www.syavash.com/portal/images/blog/q5.gif" />&#8230;</div>
</dt>
</dl>
<p>عجیبه این جلسه خانوم <img alt="Question level 2" src="http://www.syavash.com/portal/images/blog/q2.gif" /> چیزی نگفت&#8230; انشالله از جلسه دیگه حضور فعالانشونو میبینیم.</p>
<p>نوشته <a href="http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%a7%d9%88%d9%84/">ساخت روبات یاهو مسنجر &#8211; قسمت اول</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.syavash.com/fa/%d8%b3%d8%a7%d8%ae%d8%aa-%d8%b1%d9%88%d8%a8%d8%a7%d8%aa-%db%8c%d8%a7%d9%87%d9%88-%d9%85%d8%b3%d9%86%d8%ac%d8%b1-%d9%82%d8%b3%d9%85%d8%aa-%d8%a7%d9%88%d9%84/feed/</wfw:commentRss>
		<slash:comments>136</slash:comments>
		</item>
		<item>
		<title>مقدمه ای بر PHP &#8211; قسمت دوم</title>
		<link>http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%d9%8a-%d8%a8%d8%b1-php-%d9%82%d8%b3%d9%85%d8%aa-%d8%af%d9%88%d9%85/</link>
		<comments>http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%d9%8a-%d8%a8%d8%b1-php-%d9%82%d8%b3%d9%85%d8%aa-%d8%af%d9%88%d9%85/#comments</comments>
		<pubDate>Sat, 29 Sep 2007 23:00:12 +0000</pubDate>
		<dc:creator>Siavash</dc:creator>
				<category><![CDATA[آموزشی]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://siavash.co/blog/fa/?p=252</guid>
		<description><![CDATA[<p>توی این قسمت میخوایم یکی از ساده ترین مفاهیم اکثر زبان های برنامه نویسی رو درک کنیم. مفهوم اگر یا if رو تقریبا شما هر روز بار ها توی حرف زدنتون استفاده می کنید! این مفهوم تو اکثر زبان های برنامه نویسی هم وجود داره که در ادامه با مثال می بینیم که توی php چطوری میشه بکارش برد. [...]</p><p>نوشته <a href="http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%d9%8a-%d8%a8%d8%b1-php-%d9%82%d8%b3%d9%85%d8%aa-%d8%af%d9%88%d9%85/">مقدمه ای بر PHP &#8211; قسمت دوم</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></description>
				<content:encoded><![CDATA[<p>توی این قسمت میخوایم یکی از ساده ترین مفاهیم اکثر زبان های برنامه نویسی رو درک کنیم.<br />
مفهوم <b>اگر</b> یا <b>if</b> رو تقریبا شما هر روز بار ها توی حرف زدنتون استفاده می کنید! این مفهوم تو اکثر زبان های برنامه نویسی هم وجود داره که در ادامه با مثال می بینیم که توی php چطوری میشه بکارش برد.</p>
<h2>عبارت های if، else و elseif</h2>
<p>اول با یه مثال ساده شروع می کنیم. یه نفر از شما می پرسه &#8220;آیا ۵ بزرگ تر از ۶ است؟&#8221; شما پیش خودتون میگید اگر با منطق من ۵ بزرگتر از ۶ هست بگو آره در غیر این صورت بگو خیر، و در نهایت می گی خیر چون ۵ بزرگتر از ۶ نیست. حالا همین مثال رو توی php مینویسیم:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//Is 5 greater than 6?</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">5</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">6</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Yes!&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">else</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;No!&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>if در واقع همون <b>اگر</b> تو زبان فارسی هست و همیشه جلوش داخل پرانتز یه گزاره قرار می گیره! گزاره یعنی یک عبارت که یا درست باشه (true) یا غلط (false). در صورتی که درست باشه کمپایلر php عبارت های بعد از if رو که بین { و } هستند رو اجرا می کنه در غیر این صورت عبارت های بعد از else رو که توی } و { هستند رو اجرا می کنه. مثلا توی این مثال ما همه می دونیم که ۵ &gt; 6 نیست پس نتیجه ی این گزاره false هست و در نتیجه عبارات بعد از else اجرا می شن. یعنی توی صفحه می نویسه No! که جوابی هست که ما انتظار داشتیم.<br />
حالا اگر به جای ۵ &gt; 6 گزاره ی ۶ &gt; 5 رو داشتیم، جواب گزاره true می شد و در نتیجه نتیجه ی Yes! رو می گرفتیم.<br />
اصلا نگران نباشید اگر هنوز درست متوجه نشدین. با مثال های بیشتر این موضوع کاملا جا میفته.</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #000088;">$age</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$age</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">80</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;You are old!&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>توی این مثال ما اول مقدار ۱۰۰ رو توی $age ریختیم . توی خط سوم می به دستور if میرسیم. که میگه اگر $age &gt; 80 یه گزاره ی صحیح بود عبارت You are old! رو به عنوان خروجی بده. همونطوری که می بینیم $age بزرگ تر از ۸۰ هست پس روی خروجی You are old! رو خواهیم دید.</p>
<dl>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />ببخشید چرا اینجا عبارت else رو نداریم؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; عبارت else یه عبارت Optional یا اختیاریه و ما می تونیم if بدون else داشته باشیم. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />خوب حالا اگر مقدار $age کمتر از ۸۰ میشد چه اتفاقی میفتاد؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; اگر مقدار $age مثلا ۵۰ بود وقتی کمپایلر به خط سوم می رسید می دید گزاره غلط هست و در نتیجه عبارات بین { و } بعد از if رو اجرا نمی کرد و خروجی ما خالی می شد. &#8220;</div>
</dd>
</dl>
<p>حالا یه مثال دیگه:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$grade</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">18</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$grade</span> <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">19</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;A&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$grade</span> <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">17</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;B&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$grade</span> <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">14</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;C&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">else</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;D&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//Output: B</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>توی این مثال چند تا نکته ی جدید داریم. یکی علامت &gt;= هست که به مفهوم بزرگتر مساویه، همونطوری که حدس زدید &lt;= هم به مفهوم کوچکتر مساویه. و بعدی elseif هست که الان خط به خط جلو می ریم و می بینیم چیه!<br />
خوب کمپالر توی خط دوم مقدار ۱۸ رو توی $grade قرار میده و خط سوم به if میرسه و می بینه که ۱۸ بزرگتر مساوی ۱۹ نیست پس گزاره غلطه و دستور echo &#8220;A&#8221; اجرا نمیشه. بعد از اون به اولین elseif میرسه. دستور elseif به معنی در غیر این صورت اگر هست. کمپایلر می بینه که $grade بزرگتر از ۱۷ هست پس این شرط درسته و در نتیجه دستورات داخل { و } جلوی این elseif رو اجرا می کنه و دیگه elseif ها و else بعدی رو چک نمی کنه! پس در نتیجه خروجی ما &#8220;B&#8221; خواهد بود.<br />
این از خاصیت های ساختار if، elseif و else هست. یعنی هر جا شرطی درست بود دیگه شرط های دیگرو چک نمی کنه. که اسمش هم همین رو نشون میده. ما می گیم اگر این گزاره درست بود فلان کار رو بکن، <b>در غیر این صورت</b>اگر این یکی درست بود یکار دیگه بکن و در نهایت هم اگر هیچ کدوم درست نبودن عملیات بین { و } بعد از else رو انجام بده.<br />
حالا می ریم سراغ مثال بعد:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$grade</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">20</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$grade</span> <span style="color: #339933;">=</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">20</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Full mark&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Keep trying&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>توی این مثال هم دو تا نکته ی جدید داریم.<br />
همونطور که می بینید توی خط سوم ما از گزاره ی $grade = = 20 استفاده کردیم. حالا این = = یعنی چی؟ توی زبان php و خیلی زبان های دیگه برای اینکه چک کنیم دو تا مقدار با هم مساوی هستند یا نه از = = استفاده می کنیم. پس باید حواستون باشه که از = برای چک کردن اینکه دو مقدار با هم مساوی هستند یا نه استفاده نکنید چون اگر این کار رو بکنید php به شما هیچ errorای هم نمی ده اما شما نتیجه ی مورد انتظارتون رو دریافت نخواهید کرد. مثلا توی همین مثال اگر بجای = =، علامت = رو قرار بدیم همیشه خروجی Full mark رو خواهیم گرفت.</p>
<dl>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />ببخشید میشه بیشتر توضیح بدید که چرا؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; اول باید یه نکترو بگم! اکثر زبان های برنامه نویسی ۰ رو به عنوان false یا غلط در نظر می گیرن و هر عدد دیگه بجز اون رو به عنوان true یا درست! php هم جزو همون زبان هاست.حالا اگر به جای = = از = استفاده کنیم کمپایلر به خط سوم که میرسه مقدار ۲۰ رو توی متغیر $grade میریزه بجای اینکه اون دو تارو مقایسه کنه و در نهایت می بینه مقدار $grade عددی بجز صفر هست پس این گزاررو درست در نظر می گیره و Full mark رو اکو می کنه. اگر مقدار $grade بجای ۲۰، ۱۷ یا ۱۸ یا هر عدد دیگه ای هم می بود باز به ما Full mark رو می داد که نتیجه ی مطلوب ما نبود. پس حواستون باشه توی if برای مقایسه باید از = = استفاده کنیم و = برای اینکار غلطه. &#8220;</div>
</dd>
</dl>
<p>نکته ی دیگری که احتمالا تا الان دیدید اینه که ما تو این مثال از { و } نه بعد از if استفاده کردیم و نه بعد از else. دلیلش اینه که بعد از دستور if و esle فقط یه دستور دیگه وجود داره. در صورتی که بعد از if یا elseif یا else فقط یه دستور وجود داشته باشه می تونیم { و } رو نگذاریم. پس برای تمام مثال های قبل هم می تونستیم { و } رو نگذاریم. اما اگر دو خط دستور یا بیشتر داشته باشیم حتما باید از { و } استفاده کنیم.</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Siavash&quot;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Siavash&quot;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Hello Siavash&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">else</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;I don't know you!&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/die"><span style="color: #990000;">die</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;bYe&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp;<br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;How are you?&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">// The rest of the program goes here...</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>همونطوری که توی این مثال می بینید ما بعد از if از { و } استفاده نکردیم. چون فقط یه خط بعد از if بود اما بعد از else چون دو خط دستور داشتیم باید حتما از { و } استفاده می کردیم.<br />
چیزی که شاید ذهنتون رو مشغول کرده باشه خط هشتم هست. که از دستور die() استفاده کردیم. این دستور هر جا که بیاد ادامه ی برنامرو متوقف می کنه. یعنی کمپایلر به این دستور که میرسه دیگه ادامه ی خط ها رو اجرا نمی کنه علاوه بر اون یه رشته هم جلوی خودش داخل پرانتز می گیره و قبل از اتمام برنامه اون رو چاپ می کنه. مثلا توی این مثال اگر مقدار $name به جای &#8220;Siavash&#8221; هر چیز دیگه ای بود کمپایلر چون می دید گزاره ی خط سوم درست نیست داخل else رو اجرا می کرد یعنی اول &#8220;I don&#8217;t know you!&#8221; رو اکو می کرد و بعدش می نوشت &#8220;bYe&#8221; و برنامه تموم می شد. یعنی خط ۱۰ مثلا اجرا نمی شد.<br />
اما اگر مثال به همین شکل بالا باشه یعنی مقدار $name همون &#8220;Siavash&#8221; باشه خط ۴ اجرا می شه و در نتیجه &#8220;Hello Siavash&#8221; اکو میشه و بعد از اون هم خط ۱۰ اجرا میشه و &#8220;How are you?&#8221; هم اکو میشه!<br />
پس دستور die() هر جایی اجرا شه کمپایلر کارش رو متوقف می کنه!<br />
دستور if توی چند زبان دیگه بصورت زیره:<br />
<b>PHP</b></p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$grade</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">20</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$grade</span> <span style="color: #339933;">=</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">20</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Great!&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$grade</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">15</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Good!&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">else</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Bad!&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Study more!&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p><b>C++</b></p>
<div class="codecolorer-container cpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339900;">#include &lt;iostream.h&gt;</span><br />
<span style="color: #0000ff;">void</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> grade<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; grade <span style="color: #000080;">=</span> <span style="color: #0000dd;">20</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>$grade <span style="color: #000080;">=</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">20</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Great!&quot;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>$grade <span style="color: #000080;">&gt;</span> <span style="color: #0000dd;">15</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Good!&quot;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">else</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Bad!n&quot;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Study more!&quot;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span></div></div>
<p><b>Pascal</b></p>
<div class="codecolorer-container pascal default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="pascal codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">var</span><br />
&nbsp; &nbsp; grade <span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">integer</span>;<br />
<span style="color: #000000; font-weight: bold;">begin</span><br />
&nbsp; &nbsp; grade <span style="color: #339933;">:=</span> <span style="color: #cc66cc;">20</span>;<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> grade <span style="color: #339933;">=</span> <span style="color: #cc66cc;">20</span> <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">writeln</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'Great!'</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> grade &gt; <span style="color: #cc66cc;">15</span> <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">writeln</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'Good!'</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">begin</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">writeln</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'Bad!'</span><span style="color: #009900;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">writeln</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'Study more!'</span><span style="color: #009900;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">end</span>;<br />
<span style="color: #000000; font-weight: bold;">end</span>.</div></div>
<p><b>Visual Basic</b></p>
<div class="codecolorer-container vb default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="vb codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #151B8D; font-weight: bold;">Dim</span> grade <span style="color: #151B8D; font-weight: bold;">As</span> <span style="color: #F660AB; font-weight: bold;">Integer</span><br />
<span style="color: #E56717; font-weight: bold;">Private</span> <span style="color: #E56717; font-weight: bold;">Sub</span> Form_Load()<br />
&nbsp; &nbsp; grade = 100<br />
&nbsp; &nbsp; <span style="color: #8D38C9; font-weight: bold;">If</span> grade = 100 <span style="color: #8D38C9; font-weight: bold;">Then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; MsgBox <span style="color: #800000;">&quot;Great&quot;</span><br />
&nbsp; &nbsp; <span style="color: #8D38C9; font-weight: bold;">ElseIf</span> grade &gt; 15 <span style="color: #8D38C9; font-weight: bold;">Then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; MsgBox <span style="color: #800000;">&quot;Good&quot;</span><br />
&nbsp; &nbsp; <span style="color: #8D38C9; font-weight: bold;">Else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; MsgBox <span style="color: #800000;">&quot;Bad&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; MsgBox <span style="color: #800000;">&quot;Study more!&quot;</span><br />
&nbsp; &nbsp; <span style="color: #8D38C9; font-weight: bold;">End</span> <span style="color: #8D38C9; font-weight: bold;">If</span><br />
<span style="color: #8D38C9; font-weight: bold;">End</span> <span style="color: #E56717; font-weight: bold;">Sub</span></div></div>
<p><b>Java</b></p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> test <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> args<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> grade<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; grade <span style="color: #339933;">=</span> <span style="color: #cc66cc;">20</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>grade <span style="color: #339933;">=</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">20</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Great!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>grade <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">15</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Good!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Bad&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Study more!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<h2>لینک های داخلی</h2>
<p><a href="http://www.syavash.com/portal/users/siavash/blogs/introduction-on-php-part-1-fa">http://www.syavash.com/portal/users/siavash/blogs/introduction-on-php-part-1-fa</a></p>
<p>&nbsp;</p>
<p>نوشته <a href="http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%d9%8a-%d8%a8%d8%b1-php-%d9%82%d8%b3%d9%85%d8%aa-%d8%af%d9%88%d9%85/">مقدمه ای بر PHP &#8211; قسمت دوم</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%d9%8a-%d8%a8%d8%b1-php-%d9%82%d8%b3%d9%85%d8%aa-%d8%af%d9%88%d9%85/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>مقدمه ای بر PHP &#8211; قسمت اول</title>
		<link>http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%d9%8a-%d8%a8%d8%b1-php-%d9%82%d8%b3%d9%85%d8%aa-%d8%a7%d9%88%d9%84/</link>
		<comments>http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%d9%8a-%d8%a8%d8%b1-php-%d9%82%d8%b3%d9%85%d8%aa-%d8%a7%d9%88%d9%84/#comments</comments>
		<pubDate>Sat, 29 Sep 2007 22:40:12 +0000</pubDate>
		<dc:creator>Siavash</dc:creator>
				<category><![CDATA[آموزشی]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://siavash.co/blog/fa/?p=246</guid>
		<description><![CDATA[<p>تا حالا براتون سوال پیش اومده این همه سایت های رنگارنگ با این همه قابلیت های متفاوت چطوری درست می شن؟ خیلی از شماها جواب میدید آره با html که جواب کاملا درستیه! حتی خیلی از شما با html وبسایت شخصی خودتون رو ساختید ولی هر چی سعی کردید نتونستید برای سایتتون یه Search یا [...]</p><p>نوشته <a href="http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%d9%8a-%d8%a8%d8%b1-php-%d9%82%d8%b3%d9%85%d8%aa-%d8%a7%d9%88%d9%84/">مقدمه ای بر PHP &#8211; قسمت اول</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></description>
				<content:encoded><![CDATA[<p>تا حالا براتون سوال پیش اومده این همه سایت های رنگارنگ با این همه قابلیت های متفاوت چطوری درست می شن؟<br />
خیلی از شماها جواب میدید آره با html که جواب کاملا درستیه! حتی خیلی از شما با html وبسایت شخصی خودتون رو ساختید ولی هر چی سعی کردید نتونستید برای سایتتون یه Search یا صفحه ی Login بسازید.<br />
خوب این آموزش مربوط به افرادیه که html رو تا حدودی بلد هستند و البته php بلد نیستند.<br />
اول از همه باید ببینیم این php اصلا چی هست؟<br />
php یه زبان برنامه نویسی server-side هست که قابلیت ساختن صفحات پویا رو داره.</p>
<dl>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />server-side یعنه چی؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; سوال خوبیه! ببین مثلا html رو در نظر بگیر، وقتی یه صفحه ی html رو باز می کنی browser کد html رو می خونه و تبدیلش می کنه به اون چیزی که تو توی صفحه ی browser می بینی! پس html یه زبان client-side هست چون کل کد رو browser تبدیل به صفحه ی نهایی کرد.<br />
اما توی php یه مقدار فرق می کنه. این تیکرو با مثال توضیح میدم. سایت سیاوش . کام با php نوشته شده، خوب حالا شما وقتی وارد www.syavash.com می شید چه اتفاقاتی میفته؟ اول مرورگر (browser) شما یه درخواست میفرسته که من فایل index.php رو می خوام! تا اینجا شبیه وقتیه که یه سایت ساخته شده با html رو باز می کنید، اما از اینجا به بعدش فرق داره. بعد سروری که www.syavash.com روش هست می بینه این فایلی که درخواست شده یه فایل php هست پس اول اون رو میفرسته برای کمپایلر php و کمپایلر php اون رو طبق کد توش اجرا میکنه و در نهایت یه صفحه ی html می سازه و اون صفحرو برای کاربر میفرسته و مرور گر شما صفحه ی html ساخته شدرو نشونتون میده! &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 1 " src="http://www.syavash.com/portal/images/blog/q1.gif" />گفتید اگه صفحه html بود فرق میکرد. اون موقع چجوری می شد؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; اگر صفحه html بود بعد از اینکه مرورگر شما اون صفحرو درخواست میکرد سرور بلا فاصله کد اون صفحرو برای مرورگر میفرستاد و اون صفحرو شما می دیدید! &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />پس یعنی اگه من بخوام کد php سایت syavash.com رو ببینم نمی تونم چون اصلا اون فایل برای مرورگر من فرستاده نمیشه، درسته؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; آفرین! کاملا درسته!!! یکی از خوبی های زبان های server-side اینه که کد اصلی اون صفحرو نمی تونه کسی ببینه! &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />اما من تو صفحه ی syavash.com وقتی راست کلیک می کنم و View page source رو میزنم بهم کد اون صفحرو نشون میده که!</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; همونطوری که گفتم اون کد، کد php نیست و کد تولید شده ی htmlای هست که توسط سرور از اون فایل php تولید شده! &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />خوب حالا که server-side رو گفتید چیه، میشه صفحات پویا رو هم بگید؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; ببینید وقتی شما یه صفحه ی html می سازید هر دفعه که اون رو باز کنید عین دفعه ی قبله و هیچی توش تغییر نمیکنه! اما مثلا وقتی میرید توی صفحه ی bbc هر دقیقه صفحه ی اول تغییر می کنه! یا مثلا بعضی سایت ها رو وقتی توش لاگین می کنید با وقتی توش لاگین نیستید فرق می کنن، یا مثلا وقتی توی یه سایت سرچ می کنید نسبت به هر سرچ یه صفحه ی مجزا برای شما میاره! خوب این کار هارو با html نمیشه انجام داد. یه خوبی اساسی زبان های server-side اینه که می تونن به بانک اطلاعاتی وصل شن که بعدا بیشتر دربارش حرف می زنیم. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />ببخشی حالا اگر بخوایم به جای صفحات پویا صفحات حسین بسازیم باید چیکار کنیم؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; &#8230; &#8220;</div>
</dd>
</dl>
<p>بجز php خیلی زبان های server-side دیگه ای هم وجود داره مثل JSP، ColdFusion، Ruby on Rails یا ASP اما ما توی این آموزش فقط به php میپردازیم! شاید براتون جالب باشه که بیش از ۴۰% از ۵۰۰۰ سایت برتر توی اینترنت از php استفاده می کنن!<br />
تا یادم نرفته این رو هم بگم که PHP در ابتدا مخفف عبارت <b>P</b>ersonal <b>H</b>ome<b>p</b>age بوده اما بعد از ورژن ۳ از اون به عنوان مخفف برگشتی <b>P</b>HP: <b>H</b>ypertext <b>P</b>reprocessor یاد شده!</p>
<dl>
<dt>
<div><img alt="Question level 1 " src="http://www.syavash.com/portal/images/blog/q1.gif" />مخفف برگشتی دیگه یعنی چی؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; مخفف برگشتی یعنی خود مخفف توی عبارتی که مخففش هست بیاد! &#8220;</div>
</dd>
</dl>
<h2>نصب php</h2>
<p>خوب حالا که این همه گفتیم php اول روی سرور باید اجرا بشه و از این جور چیزا خوب پس اگه سرور نداشته باشیم باید چیکار کنیم؟ یا اگه بخوایم طراحی وبسایتمون رو توی کامپیوتر خودمون انجام بدیم؟<br />
برای اینکه بتونیم روی کامپیوتر خودمون صفحات php رو باز کنیم باید چند تا برنامرو روی کامپیوترون داشته باشیم:</p>
<ul>
<li>Apache webserver</li>
<li>PHP</li>
<li>mySql</li>
</ul>
<p>اول از همه باید یه وب سرور داشته باشیم که هر چیزی می تونه باشه اما بهترینش برای php آپاچی هست!<br />
mySql رو حتما برای اجرای php نباید داشته باشیم اما اگر بخوایم به بانک اطلاعاتی وصل شیم باید حتما نصبش کنیم. البته به جای mySql از سیستم های بانک اطلاعاتی دیگه هم میشه استفاده کرد اما بازم سازگار ترینش با php همین mySql هست.<br />
برای اینکه این هارو نصب کنیم یه راهش اینه که جدا جدا پکیج هارو از اینترنت بگیریم و اونا رو طبق دستورالعمل نصب کنیم. اما راه آسونتر که من برای ابتدا پیشنهاد می کنم اینه که برید و <a href="http://firepages.com.au/phpdev4u1.htm">پکیج phpdev</a> رو که شامل هر سه پکیج بالا و چند پکیج دیگه هست رو دانلود و نصب کنید.<br />
یادتون باشه که این پکیج رو باید حتما توی C:\phpdev نصبش کنید.<br />
برای دوستانی که از لینوکس استفاده می کنن باید بگم که تو اکثر ورژن های لینوکس آپاچی و php بصورت پیش فرض نصب هستن و اگر هم نباشن از Application Manager میتونید اونو نصب کنید یا می تونید توی شل بویسید:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">yum install</span> php4</div></div>
<p>من از اینجا به بعد فرض رو بر این می گیرم که شما phpdev رو نصب کردید. خوب حالا توی مرورگری که استفاده می کنید (که انشاالله FireFox هست) آدرس <a href="http://localhost/">http://localhost/</a> رو وارد کنید!<br />
اگر دیدید بالا نمیاد این صفحه از My Computer برید توی C:\phpdev\ و اونجا فایل ۲K-NT-XP-phpdev_start.bat رو در صورتی که ونیدوزتون XP یا Vista هست یا فایل ۹۸-ME-phpdev_start.bat رو در صورتی که ویندوزتون ۹۸ یا ME هست اجرا کنید! یه سری صفحه باز و بسته میشن و در نهایت احتمالا یه صفحه با تیتر Apache باز می مونه که اون رو نباید ببندید! هر دفعه که دیدید صفحه ی http://localhost/ باز نمیشه کافیه همین کار رو تکرار کنید!<br />
خوب پس الآن باید صفحه ی http://localhost جلوتون باشه که لیست یه مشت فولدر و فایل رو نشون میده. حالا این فایل ها و فولدر هایی که اینجا لیستش هست توی کدوم فولدر قرار دارن؟<br />
کافیه از My Computer به آدرس c:\phpdev\www\ برید. می بینید که اون لیستی که توی http://localhost/ می بینید کاملا با فایل ها و فولدر های توی این آدرس مطابقن.<br />
حالا می خوایم اولین صفحه ی php رو طراحی کنیم. برای اینکار می تونید از هر ویرایشگری که دوست دارید استفاده کنید. برای شروع از notepad استفاده می کنیم. برای اینکار کافیه توی c:\phpdev\www\ یه فایل با پسوند php بسازید. مثلا Hello.php .</p>
<dl>
<dt>
<div><img alt="Question level 1 " src="http://www.syavash.com/portal/images/blog/q1.gif" />ببخشید میشه توضیح بدید چطوری این فایل رو بسازم؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; البته! راه برای این کار زیاده اما آسونترین راهی که به ذهنم می رسه اینه که اول notepad رو باز کنی (توی استارت برو Run و اونجا تایپ کن notepad و انتر رو بزن) بعد File رو انتخاب کن و بعد Save as بعد برو توی آدرس c:\phpdev\www\ و Save as type رو All Files انتخاب کن. بعد جلوی File Name بنویس Hello.php و Save رو بزن!<br />
به همین سادگی یه فایل خالی با پسوند php ساختی. فقط حواست باشه که Save as type رو All Files انتخاب کنی وگرنه یه اسم فایلت میشه Hello.php.txt که چیزی که ما می خوایم نیست. &#8220;</div>
</dd>
</dl>
<p>حالا اگر توی مرورگرت صفحه ی http://localhost/ رو refresh کنی باید فایل جدیدی که ساختی رو اونجا هم ببینی. اگر روی اون کلیک کنی یه صفحه ی خالی می بینی چون هنوز کدی برای اون فایل ننوشتی خوب!</p>
<h2>ساخت اولین برنامه ی php</h2>
<p>الان می خوایم اولین کد phpمون رو بنویسیم! برای اینکار اگر notepad رو بستین دوباره برید c:\phpdev\www\ و روی فایل Hello.php کلیک راست کنید و Open With رو بزنید و توی Choose Program&#8230; برنامه ی Notepad رو انتخاب کنید. می تونید تیک Always use the selected program to open this kind of file رو بزنید تا از دفعه ی دیگه با دابل کلیک کردن روی فایل های php ویندوز اونارو بصورت اتومات تو Notepad باز کنه. بعد از اینکه فایل Hello.php رو توی Notepad باز کردید توش کد زیر رو بنویسید و اون رو Save کنید:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Salaaaaam!&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>حالا اگر توی مرورگرتون صفحه ی <a href="http://localhost/Hello.php">http://localhost/Hello.php</a> رو refresh کنید میبینید که توی صفحه نوشته Salaaaaaam!.<br />
خوب بهتون تبریک می گم شما همین الان اولین کد phpتون رو با موفقیت نوشتید!<br />
از اینجا به بعد من همیشه اول کد php رو بصورت کامل می نویسم و بعد خط به خط اون رو توضیح میدم. فکر کنم اینطوری بهتر باشه.<br />
و اما توضیح این سه خط:<br />
ما هر کد php رو با &lt;?php یا &lt;? شروع می کنیم و با ?&gt; تمومش می کنیم. با این کار به کمپایلر php میگیم که این قسمت ها php هستن و باید کمپایل بشن. هر چیزی توی فایل php خارج از این ها باشه به عنوان html محسوب میشه یعنی به وسیله ی کمپایلر کمپایل نمیشه.<br />
خط دوم دستور echo هست. فکر کنم الان همتون می دونید چیکار میکنه. این دستور نقش خروجی php رو داره. یعنی هر چی جلوی echo قرار بدید بعد از کمپایل شدن توی فایل خروجی قرار می گیره (اون فایل htmlی که درست میشه).<br />
حالا چرا بین دو تا &#8221; قرار داره؟ توی php مثل خیلی زبان های برنامه نویسی دیگه رشته ها یا String (همون متن یا مجموعه ای از کاراکتر ها) رو بین دو تا &#8221; قرار میدیم! بعدا در این رابطه بیشتر حرف می زنیم.<br />
حالا یه مثال دیگه:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Salam &lt;b&gt;Siavash&lt;/b&gt;&lt;br /&gt;&lt;i&gt;Chetori?&lt;/i&gt;&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>به نظر شما این کد چیکار می کنه?<br />
بله درسته! این کد دقیقا چیزی که جلوی echo هست رو توی مرورگر نشون میده. یعنی:</p>
<p>Salam <b>Siavash</b><br />
<i>Chetori?</i></p>
<h2>متغیر یعنی چه؟</h2>
<p>همونطوری که می دونید توی هر زبان برنامه نویسی ما به متغیر داریم. متغیر یعنی چی؟<br />
متغیر در واقع مثل یه جعبه می مونه که یه اسم داره و هر چیزی بخوای رو می تونی توی اون قرار بدی و هر وقتم خواستی می تونی ببینی توی اون جعبه چی گذاشتی و ازش استفاده کنی.</p>
<h3>متغیر از جنس رشته</h3>
<p>خوب حالا یه مثال برای متغیر ها:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Siavash&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$name</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>توی این مثال طریقه ی پر کردن و صدا زدن یه متغیر نشون داده شده. خوب حالا خط به خط توضیح میدم:<br />
خط اول و آخر رو که تو مثال های قبل فهمیدیم چیه. توی خط دوم ما اومدیم و رشته ی Siavash رو توی متغیری به نام name ریختیم. با این کار کامپیوتر یه فضایی رو توی رم به این متغیر اختصاص میده و مقداری که داخل متغیر ریختیم رو داخل اون فضا ذخیره می کنه و مشخص می کنه اسم name مربوط به این فضاست. از این به بعد هر وقت متغیر name رو صدا بزنیم کامپیوتر میره و مقداری که توی اون فضا برای این اسم ذخیره شدرو بجای متغیر قرار میده.<br />
یه نکته ای رو باید توجه داشته باشیم و اونم اینه که متغیر ها توی php همیشه با $ شروع میشن! مثلا اینجا ما $name استفاده کردیم. می تونست بجای $name هر چیز دیگه هم باشه اما بهتره اسم رو مربوط به مقداری که توش می ریزیم انتخاب کنیم.<br />
نام متغیر حتما باید با حرف یا _ شروع بشه در ادامه می تونه شامل حروف، اعداد و _ باشه. و اینم باید مد نظر داشته باشیم که اسم متغیر توی php نسبت به بزرگ و کوچک بودن حروف حساسه! یعنی $Name و $name دو تا متغیر مختلف هستند. پس حواستون باشه.<br />
خوب میریم سراغ خط سوم. توی خط سوم از دستور echo استفاده کردیم پس هر چی جلوی اونه باید به عنوان خروجی چاپ شه. حالا چی جلوشه؟ متغیر $name! پس کامپیوتر میره به قسمتی از حافظه که مقدار متغیر $name توشه سر میزنه و می بینیه Siavash اونجا ذخیره شده! پس Siavash رو چاپ می کنه.</p>
<dl>
<dt>
<div><img alt="Question level 1 " src="http://www.syavash.com/portal/images/blog/q1.gif" />ببخشید مگه Siavash یه رشته نیست، پس چرا دور $name دو تا &#8221; نگذاشتیم؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; البته اگر میگذاشتیم توی php کار می کرد. اما در کل $name یه متغیره و خودش یه رشته نیست و برای صدا زدن متغیر نیاز به &#8221; نداریم اما اگه دقت کنید موقعی که Siavash رو توی $name ریختیم دور اون &#8221; گذاشتیم چون Siavash یه رشته بوده. &#8220;</div>
</dd>
</dl>
<p>خوب حالا یه مثال ساده ی دیگه!</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #000088;">$firstname</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Siavash&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$surname</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Mahmoudian&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$firstname</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$surname</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>توی این مثال اول دو متغیر $firstname و $surname رو مقدار دهی کردیم بعد توی خط چهارم از یه چیز جدید استفاده کردیم! نقطه. کار نقطه چسبوندن دو تا رشته به هم هست! مثلا توی این مثال مقدار داخل دو متغیر $firstname و $surname رو که هر دوشون رشته هستند به هم می چسبونه و در نهایت SiavashMahmoudian رو به عنوان خروجی چاپ می کنه! اما ما می خواستیم بین اسم و فامیل فاصله بیفته! باید چیکار کنیم؟</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #000088;">$firstname</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Siavash&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$surname</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Mahmoudian&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$firstname</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$surname</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>کافیه رشته ی فاصلرو بین اسم و فامیل اضافه کنیم! شاید زیاد معنی دار به نظرتون نیاد در ابتدا اما ما کار خاصی نکردیم. فقط این دفعه سه تا رشترو به هم چسبوندیم که دومیش فقط یه space توشه. مثلا می تونست $firstname . &#8221; Salam &#8221; . $surname باشه. که اونطوری خروجی می شد Siavash Salam Mahmoudian! حالا ما سلامش رو حذف کردیم و فقط space مونده!<br />
تقریبا توی تمام زبان های برنامه نویسی متغیر ها وجود دارن و اتفاقا توی خیلیاشون شبیه php تعریف می شن، تنها فرقش اینه که جنس متغیر رو توی php خودش تشخیص میده و نیازی نیست بگیم یه متغیر جنسش عدد هست یا رشته یا یه کاراکتر!</p>
<h3>متغیر از جنس عدد</h3>
<p>مثال برای تعریف یه متغیر عدد توی php:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #000088;">$age</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">19</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$age</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">// Output: 19</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>اینجا ما یه متغیر از جنس integer یا عدد تعریف کردیم. و بعد هم با دستور echo اون رو چاپ کردیم! اینجا دو تا نکته ی جدید وجود داره:<br />
یکی اینکه ما دور عدد ۱۹ علامت &#8221; نگذاشتیم که دلیلش اینه که ما نمی خواستیم رشته ی ۱۹ رو توی age قرار بدیم بلکه می خواستیم ۱۹ رو به عنوان یک عدد داخل $age بریزیم. اگر به جای ۱۹ از &#8220;۱۹&#8243; استفاده می کردیم ۱۹ رو به عنوان رشته توی $age ریخته بودیم. فرقش چی بود؟ عملیات جمع و تفریق و کلا عملیات ریاضی روی رشته ها تعریف شده نیست و فقط روی اعداد می شه از اون ها استفاده کرد! البته توی php هر جا نیاز باشه و بتونه عدد رو به رشته و یا رشته رو به عدد تبدیل می کنه اما بهتره این نکات رو رعایت کنیم که بعد خواستیم زبان های دیگرو یاد بگیریم گیج نشیم.<br />
نکته ی جدید دیگه خط ۴ هست که اول خط // گذاشتیم و بعد یه متن نوشتیم. توی php هر چیزی بعد از // نوشته بشه Comment محسوب میشه یعنی کمپایلر php اون خط ها رو اصلا نمی بینه و در ابتدای کمپایل حذفشون می کنه! حالا فایدش چیه؟ بعضی اوقات ممکنه یه نکته ای درباره ی کدتون بعد از یه خط اضافه کنید که بعدا خودتون خواستید ادامه ی اون خط رو بنویسید یا کس دیگری خواست اون رو بخونه گیج نشه! یا شاید بخواین یه متنی رو برای خودتون اضافه کنید. این خط ها رو همیشه قبلشون // میگذارن. همونطور که می بینید ما هم توی خط چهارم یه کامنت گذاشتیم و خاطر نشان کردیم که خروجی این خط ۱۹ میشه.<br />
اکثر زبان های برنامه نویسی شبیه هم هستن و اگه شما یه زبان برنامه نویسی رو کامل یاد بگیرید بقیه ی زبان هارو خیلی راحت با دیدن چند تا مثال می تونید یاد بگیرید. مثلا همین مثال پر کردن یه متغیر از یک عدد توی زبان های مختلف به شکل زیر میشه:<br />
<b>PHP</b></p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #000088;">$age</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p><b>C++</b></p>
<div class="codecolorer-container cpp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0000ff;">void</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
<span style="color: #0000ff;">int</span> age<span style="color: #008080;">;</span><br />
age <span style="color: #000080;">=</span> <span style="color: #0000dd;">100</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span></div></div>
<p><b>Pascal</b></p>
<div class="codecolorer-container pascal default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="pascal codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">var</span><br />
age <span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">integer</span>;<br />
<span style="color: #000000; font-weight: bold;">begin</span><br />
age <span style="color: #339933;">:=</span> <span style="color: #cc66cc;">100</span>;<br />
<span style="color: #000000; font-weight: bold;">end</span>.</div></div>
<p><b>Visual Basic</b></p>
<div class="codecolorer-container vb default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="vb codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #151B8D; font-weight: bold;">Dim</span> age <span style="color: #151B8D; font-weight: bold;">as</span> <span style="color: #F660AB; font-weight: bold;">Integer</span><br />
<span style="color: #E56717; font-weight: bold;">Private</span> <span style="color: #E56717; font-weight: bold;">Sub</span> Form_Load()<br />
age = 100<br />
<span style="color: #8D38C9; font-weight: bold;">End</span> <span style="color: #E56717; font-weight: bold;">Sub</span></div></div>
<p><b>Java</b></p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> example <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> args<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> age<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; age <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>همونطور که می بینید تقریبا شبیه هم هستن، فقط توی php نیازی به تعریف اولیه ی متغیر نیست اما توی مثال های دیگه اول جنس متغیر که int یا integer هست رو تعریف کردیم و مقدار ۱۰۰ رو داخلش قرار دادیم. پس از این نظر php آسونتر از بقیه ی زبان هاست چون جنس رو خودش تشخیص میده!</p>
<h3>عملگر ها</h3>
<p>حالا چند تا مثال دیگه درباره ی متغیر های عدد توی php می زنیم:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$j</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$k</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$j</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">//$k: 3</span><br />
<span style="color: #000088;">$k</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$i</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">//$k: 4</span><br />
<span style="color: #000088;">$k</span> <span style="color: #339933;">+=</span> <span style="color: #000088;">$i</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">//$k: 5</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>توی این مثال ما اول به دو متغیر $i و $j مقدار های ۱ و ۲ رو دادیم. تا اینجاش که عین قبل بوده. بعد توی خط ۴ به متغیر $k مقدار $i + $j رو دادیم. یعنی کامپیوتر میره و میبینه توی رم به $i و $j چه مقداری داده شده بود و بعد جمع اون دو تارو توی $k میریزه که میشه ۳٫ خط بعد برای خودمون کامنت گذاشتیم که تا اینجا مقدار $k، ۳ شده. خط ۶ هم دقیقا مثل خط ۴ هست با این تفاوت که خود $k هم سمت چپ هست هم راست. افرادی که تازه برنامه نویسی رو شروع می کنن یکم اینجا گیج میشن اما گیج شدن نداره. کافیه از سمت راست شروع کنید و مقادیر رو قرار بدین و نتیجش رو سمت چپ بریزید. مثلا اینجا اول مقدار $k رو می بینیم که ۳ هست و بعد مقدار $i که ۱ هست و جمع این دو تا رو توی $k که سمت چپه می ریزیم پس $k مقدار ۴ رو می گیره. توی خط ۸ ما از اپراتور += استفاده کردیم. += یعنی مقدار سمت راست رو به مقدار سمت چپ اصافه کن. یعنی توی این مثال خط ۶ و ۸ یک کار رو انجام میدن و مقدار $i رو به $k اضافه می کنن!<br />
بجز عملگر + توی php می تونیم از -، *، /، ^ هم استفاده کنیم که به ترتیب تفریق، ضرب، تقسیم و توان هستند. پس عملگر های -= و *= و /= و ^= هم به همون ترتیب تعریف می شن!<br />
به جز این عملگر ها ما خیلی عملگر های دیگری داریم که بعدا باهاشون آشنا می شیم.<br />
ما قبلا یه مثال برای عملگر . زدیم و گفتیم این عملگر دو تا رشترو به هم می چسبونه. حالا بد نیست یه مثال دیگه از اون رو ببینیم:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$j</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$k</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$j</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">//$k: 8</span><br />
<span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$j</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">//$str: 35</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>خوب تا خط چهارم که فکر کنم مشخص باشه. توی خط چهارم جمع دو متغیر $i و $j رو ریختیم توی $k که قبلا هم داشتیم و مقدار ۸ بدست اومده. اما توی خط ۶ از عملگر . استفاده کردیم! اگه یادتون باشه گفتیم . دو تا رشترو به هم متصل می کنه ولی اینجا ما دو تا عدد رو به اون دادیم. پس php میاد و ابتدا هر دو رو به رشته تبدیل می کنه یعنی &#8220;۳&#8243; و &#8220;۵&#8243; و بعد اون ها رو مثل دو تا رشته به هم می چسبونه پس در نهایت مقدار &#8220;۳۵&#8243; رو توی $str میریزه!<br />
تا اینجا تا حدودی فهمیدیم متغیر ها چی هستند. اما حالا به چه دردی می خورن؟ باهاشون چیکارا می شه کرد؟ همه ی اینارو جلوتر متوجه میشیم.</p>
<h2>لینک های داخلی</h2>
<p><a href="http://www.syavash.com/portal/users/siavash/blogs/introduction-on-php-part-2-fa">http://www.syavash.com/portal/users/siavash/blogs/introduction-on-php-part-2-fa</a></p>
<p>نوشته <a href="http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%d9%8a-%d8%a8%d8%b1-php-%d9%82%d8%b3%d9%85%d8%aa-%d8%a7%d9%88%d9%84/">مقدمه ای بر PHP &#8211; قسمت اول</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%d9%8a-%d8%a8%d8%b1-php-%d9%82%d8%b3%d9%85%d8%aa-%d8%a7%d9%88%d9%84/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>مقدمه ای بر شبیه سازی فوتبال</title>
		<link>http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%db%8c-%d8%a8%d8%b1-%d8%b4%d8%a8%db%8c%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%88%d8%aa%d8%a8%d8%a7%d9%84/</link>
		<comments>http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%db%8c-%d8%a8%d8%b1-%d8%b4%d8%a8%db%8c%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%88%d8%aa%d8%a8%d8%a7%d9%84/#comments</comments>
		<pubDate>Thu, 06 Sep 2007 02:23:12 +0000</pubDate>
		<dc:creator>Siavash</dc:creator>
				<category><![CDATA[آموزشی]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[robocup]]></category>
		<category><![CDATA[simulation]]></category>
		<category><![CDATA[soccer simulation]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://siavash.co/blog/fa/?p=223</guid>
		<description><![CDATA[<p>شبیه سازی یعنی چی؟ شاید این اولین سوالی باشه که بعد از شنیدن شبیه سازی فوتبال یا Soccer Simulation به ذهنتون برسه! به طور کلی شبیه سازی تو رایانه یعنی محیطی مثل واقعیت توی رایانه بسازیم و عملیاتی روی محیط شبیه سازی شده انجام بدیم و نتیجه ی اون رو ببینیم! حالا چرا شبیه سازی [...]</p><p>نوشته <a href="http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%db%8c-%d8%a8%d8%b1-%d8%b4%d8%a8%db%8c%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%88%d8%aa%d8%a8%d8%a7%d9%84/">مقدمه ای بر شبیه سازی فوتبال</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></description>
				<content:encoded><![CDATA[<p>شبیه سازی یعنی چی؟<br />
شاید این اولین سوالی باشه که بعد از شنیدن شبیه سازی فوتبال یا Soccer Simulation به ذهنتون برسه! به طور کلی شبیه سازی تو رایانه یعنی محیطی مثل واقعیت توی رایانه بسازیم و عملیاتی روی محیط شبیه سازی شده انجام بدیم و نتیجه ی اون رو ببینیم!</p>
<dl>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />حالا چرا شبیه سازی کنیم وقتی می تونیم تمام جوانب رو در واقعیت بررسی کنیم؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; بعضی از وقایع یا آزمایش ها بسیار پر هزینه هستند و حتی بعضی از اونا در زمان مورد نظر قابل آزمایش نیستند. به عنوان مثال می خوایم روش های مختلف مدیریتی رو بعد از وقوع زلزله بررسی کنیم! واضحه که ایجاد یک زلزله ممکن نیست و حتی اگر ممکن بود خسارت مالی و جانی فراوانی به همراه داشت. اینجاست که شبیه سازی به کمک ما میاد. در حال حاضر در زمینه ی مدیریت پس از زلزله هر سال مسابقاتی در سطح جهان برگزار میشه!. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />در زمینه ی فوتبال هم مسابقه برگزار می شه؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; بله، هر سال مجموعه مسابقاتی با نام روبوکاپ برگزار میشه که در زمینه ی شبیه سازی میشه از شبیه سازی نجات، شبیه سازی فوتبال دوبعدی و سه بعدی و شبیه سازی روبات های مجازی یا Virtual Robots نام برد!<br />
این مسابقات هر سال توی یکی از نقاط دنیا برگزار میشه، امسال توی آمریکا بود و سال دیگه توی چین خواهد بود. &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 5 " src="http://www.syavash.com/portal/images/blog/q5.gif" />جریان مسابقات اپن چی هست؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; این سوالت نشون میده تا حدودی در جریان مسابقات روباتیک هستی! هر سال توی چند کشور مسابقات اپن در رشته های مختلف انجام میشه که از جاهای مختلف دنیا توی این مسابقات شرکت میکنند. هر تیم بخواد توی مسابقات جهانی شرکت کنه اول باید یک بار مینیمم توی مسابقات اپن شرکت کرده باشه. اتفاقا هر ساله توی کشور خودمون هم مسابقات اپن به پشتیبانی دانشگاه آزاد اسلامی واحد قزوین که تیم روباتیک بسیار قدرتمندی داره برگزار میشه! و جالب تر از اون این نکته هست که ایران در زمینه ی شبیه سازی در دنیا حرف برای گفتن داره و توی شبیه سازی نجات هر سال دو تیم از چهار تیم اول جهان (یا حتی بیشتر) از ایران هست! &#8220;</div>
</dd>
<dt>
<div><img alt="Question level 2 " src="http://www.syavash.com/portal/images/blog/q2.gif" />وااای، چه عااالییی!</div>
</dt>
</dl>
<p>عجیبه که هیچ کدومتون این سوال رو نپرسیدین که چرا فوتبال رو شبیه سازی می کنیم؟ فوتبال که نه هزینه ی زیادی می خواد نه سخته بازی کردنش! دلیل شبیه سازی فوتبال خیلی چیزا میتونه باشه که از مهمترین دلایلش تمرین هوش مصنوعی، شبیه سازی شبکه های عصبی و منطق فازی رو میشه نام برد! در ضمن قراره در آینده ی نه چندان دور تیم فوتبال روبات ها با قهرمان فوتبال دنیا مسابقه بده و اونو ببره! از اونجایی که هنوز سخت افزار روبات ها زیاد پیشرفت نکرده الان دارن روی تصمیم گیری روبات ها جلوتر کار می کنند! پس یه دلیل شبیه سازی فوتبال این هست که هنوز بدنه ی مناسبی برای بازی فوتبال برای روبات ها درست نشده!</p>
<h2>شروع می کنیم</h2>
<p>برای وارد شدن به دنیای شبیه سازی فوتبال اولین کاری که باید بکنیم اینه که برنامه های شبیه سازی رو نصب کنیم!<br />
اصولا برنامه های شبیه سازی که تو مسابقات مرسوم هستند دو بخش دارند! یک بخش سرور که قوانین محیط توش قرار داره و یه بخش کلاینت که نمیتونه قوانین رو تغییر بده اما می تونه با توجه به قوانین محیط و اختیاراتی که داره تصمیم گیری کنه و دستور بفرسته. مثلا در شبیه سازی زلزله یک سرور داریم که محیط بعد از زلزله رو شبیه سازی می کنه، بعضی جاها آتیش میگیره یا یعضی خیابونا بسته میشه و حتی جهت باد یا وضعیت آدم های مجروح رو تعیین می کنه! و بخش کلاینت در واقع اون بخشی هست که نحوه ی عملکرد آتش نشان ها، پلیس ها و آمبلانس ها رو تعیین می کنه! هر تیم که بهتر عمل کنه و با کمترین خسارت بتونه محیط رو کنترل کنه برنده هستش!<br />
شبیه سازی فوتبال هم به همین شکل هست! سرور زمین فوتبال و جهت باد و تغییر موقعیت توپ و قوانین فیزیکی و خیلی چیز های دیگرو شبیه سازی می کنه و کلاینت که مسابقه سر بهتر شدن اونه دستورات رو می ده که بازیکن ها و Coach چطور بازی کنند!</p>
<dl>
<dt>
<div><img alt="Question level 4 " src="http://www.syavash.com/portal/images/blog/q4.gif" />کلاینت باید به زبان خاصی نوشته شه؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; خوشبختانه در این زمینه محدودیتی وجود نداره! کلاینت به وسیله ی پروتکل UDP/IP به سرور وصل میشه در نتیجه هر زبان برنامه نویسی که این پروتکل رو ساپرت کنه قابل استفاده هست، البته اکثر تیم ها C++ یا Java استفاده می کنن! &#8220;</div>
</dd>
</dl>
<p>شاید بد نباشه قبل از شروع به نصب شبیه ساز فوتبال چند تا عکس از محیط شبیه سازی شده ببینیم!</p>
<div><img title="محیط شبیه سازی فوتبال قبل از وصل شدن کلاینت ها" alt="محیط شبیه سازی فوتبال قبل از وصل شدن کلاینت ها" src="http://www.syavash.com/portal/files/siavash/blogs/installing-robocup-soccer-simulation/1.png" /></div>
<p>بعد از اینکه کلاینت ها (دو تیم) به سرور وصل شدن بازیکن های هر تیم در جایگاه های خودشون با توجه به چینش اولیه ی انتخاب شده قرار می گیرن</p>
<div><img title="محیط شبیه سازی فوتبال بعد از وصل شدن کلاینت ها" alt="محیط شبیه سازی فوتبال بعد از وصل شدن کلاینت ها" src="http://www.syavash.com/portal/files/siavash/blogs/installing-robocup-soccer-simulation/2.png" /></div>
<p>بازی دقیقا بعد از اینکه داور دکمه ی کیک آف رو بزنه شروع میشه</p>
<div><img title="محیط شبیه سازی فوتبال بعد از شروع بازی" alt="محیط شبیه سازی فوتبال بعد از شروع بازی" src="http://www.syavash.com/portal/files/siavash/blogs/installing-robocup-soccer-simulation/3.png" /></div>
<h2>نصب شبیه ساز فوتبال</h2>
<h3>توجه</h3>
<p>تمامی فایل های مورد نیاز در این آموزش به جز پکیج Boost (به علت حجم زیاد) در <a href="http://www.syavash.com/portal/files/siavash/blogs/installing-robocup-soccer-simulation/soccer-simulation-package.zip">این فایل</a> موجود است، در صورتی که <a href="http://www.syavash.com/portal/files/siavash/blogs/installing-robocup-soccer-simulation/soccer-simulation-package.zip">این فایل</a> را دریافت کنید نیازی به گرفتن فایل هایی که در ادامه ی این آموزش آمده نیست!<br />
پکیج بوست را میتوانید از <a href="http://www.boost.org/more/getting_started/unix-variants.html">اینجا</a> بگیرید!</p>
<h3>مراحل نصب</h3>
<p>برای نصب پکیچ Soccer Simulation شما باید یه کامپیوتر با سیستم عامل لینوکس داشته باشید!</p>
<dl>
<dt>
<div><img alt="Question level 5 " src="http://www.syavash.com/portal/images/blog/q5.gif" />به جای لینوکس میشه از Cygwin توی ویندوز استفاده کرد؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; خوشبختانه شما می تونید از Cygwin برای نصب و اجرای سرور استفاده کنید! راه دیگه برای نصبش تو ویندوز هم اینه که برنامه ی VMWare Workstation رو نصب کنید و روی اون لینوکس نصب کنید! اینطوری به محیط گرافیکی لینوکس هم توی ویندوز دسترسی خواهید داشت! &#8220;</div>
</dd>
</dl>
<p>من روی کامپیوتر خودم از Linux Suse 10.1 استفاده کردم، اما شما می تونید از هر کدوم از ورژن های لینوکس چه تو محیط KDE چه محیط Gnome استقاده کنید!<br />
از اینجا به بعد رو باید با یوزر root تولی لینوکس لاگین کنید!<br />
قبل از شروع نصب باید مطمئن شید که gcc روی لینوکستون نصب هست! اگر نیست می تونید از توی سی دی لینوکستون و با استقاده از Software Management توی YaST اونو نصبش کنید یا توی Terminal بزنید:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">yum install</span> <span style="color: #c20cb9; font-weight: bold;">gcc</span></div></div>
<dl>
<dt>
<div><img alt="Question level 3 " src="http://www.syavash.com/portal/images/blog/q3.gif" />ببخشید، gcc دقیقا چیکار می کنه؟</div>
</dt>
<dd>
<div><img alt="Answer" src="http://www.syavash.com/portal/images/blog/a.gif" /> &#8221; gcc یکی از کمپایلر های C هستش که توی لینوکس خیلی استفاده میشه. &#8220;</div>
</dd>
</dl>
<p>بعد از اینکه مطمئن شدید gcc نصب هست باید یه پکیج دیگه بنام boost رو نصب کنید!<br />
توی <a href="http://www.boost.org/more/getting_started/unix-variants.html">این صفحه</a> آموزش نصب این پکیج هست! نصب این پکیج زمان خیلی زیادی می گیره و حدود ۱ گیگ هم هارد نیاز داره! البته سرور شبیه ساز فوتبال فقط نیاز به دو تا از Library های اون داره، شما می تونید فقط همون دو تا رو make و make install کنید:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">libboost_filesystem-gcc.so<br />
libboost_program_options-gcc.so</div></div>
<p>بصورت پیش فرض این Library ها توی /usr/local/lib ذخیره میشن! اما یه مشکلی که وجود داره اینه که اسم این Library ها توی پکیج جدید Boost نسبت به زمانی که Soccer Simulation Server ساخته شده فرق کرده پس باید اسم اونا رو عوض کنیم!<br />
برای این کار به /usr/local/lib برین و اسم دو تا فایل رو با این دوخط دستور عوض کنید:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">mv</span> libboost_filesystem-gcc41-<span style="color: #000000;">1</span>_34_1.so libboost_filesystem-gcc.so<br />
<span style="color: #c20cb9; font-weight: bold;">mv</span> libboost_program_options-gcc41-<span style="color: #000000;">1</span>_34_1.so libboost_program_options-gcc.so</div></div>
<p>اگه ورژن Boostای که گرفتین فرق داشته باشه ممکنه اون عدد های آخر فرق کنن!خوب حالا رسیدیم به مرحله ی اصلی یعنی نصب rcssbase و rcssserver که سرور رو تشکیل میدن!<br />
برای این کار باید دو تا پکیج RoboCup Soccer Simulator Base Code و Robocp Soccer Simulator Server رو از <a href="http://sserver.sourceforge.net/downloads.html">اینجا</a> بگیرید!<br />
بعد از گرفتن این دو تا فایل اونا رو توی یه فولدر که دوست دارین قرار بدین و اونا رو Untar کنید! برای Untar کردن کافیه توی Terminal بنویسید:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">--bzip2</span> <span style="color: #660033;">-xf</span> FileName</div></div>
<p>هر دو تا فایل رو با استفاده از این دستور Untar کنید، یادتون نره بجای FileName اسم فایلی که میخواین Untar شه رو بزنید!<br />
بعد از اینکه Untar کردید اول توی فولدر rcssbase-&#8230; برید و دستورای زیر رو بزنید:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">.<span style="color: #000000; font-weight: bold;">/</span>configure<br />
<span style="color: #c20cb9; font-weight: bold;">make</span><br />
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></div></div>
<p>اکثر برنامه ها که با سورس ارائه میشن نصبشون به این شکل هست. ./configure با توجه به مشخصات رایانه و سیستم عاملتون یه MakeFile میسازه و اون MakeFile هم طریقه ی کمپایل شدن فایل ها رو تو خودش داره! وقتی دستور make رو می زنید اون فایل ها کمپایل میشن و make install هم اون فایل ها رو نصب می کنه! ممکنه هر کدوم از این مرحله ها یه مقدار وقت بگیره البته از دفعه قبلی که این کار رو برای boost انجام دادین کمتر وقت می گیره.<br />
حالا برید توی فولدر rcssserver-&#8230; و همین دستور هارو برای اون بزنید.<br />
به این ترتیب شما سرور رو نصب کردید! اما سرور چیزی رو به شما نمایش نمیده برای اینکه بتونید فعالیت سرور رو ببینید نیاز به Robocup Soccer Simulator Monitor دارین! و برای اینکه بتونید عملیات سرور و کلاینت رو بعدا دوباره بررسی کنید باید Robocup Soccer Simulator Log Player رو نصب کنید که مثل این میمونه که یه مسابقه ی فوتبال رو رکورد کنید و بعد اونو تماشا کنید!<br />
نصب این دو تا برنامه دقیقا مثل rcssbase و rcssserver هست! یعنی Untar می کنید و توی فولدرشون میرید و اون دستور هارو می زنید!<br />
الآن باید دیگه بتونید پکیج Robocup Soccer Simulator رو بطور کامل اجرا کنید!<br />
برای اینکار اول برید توی فولدر /rcssserver-&#8230;/src و بعد توی ترمینال بزنید:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">.<span style="color: #000000; font-weight: bold;">/</span>rcssserver</div></div>
<p>اگه ارور گرفتین که گفته دایرکتوری یا فایل مورد نظر موجود نیست و اسم یه .so فایل رو به شما داده وحشت نکنید!<br />
تو بعضی از ورژن های لینوکس این مشکل با یه Restart حل میشه! اما اگر نشد کافیه این کار هارو بکنید!<br />
اگر فرض کنیم پکیچ rcssserver و rcssbase رو توی /home/siavash/rcssserver-11.1.1 و /home/siavash/rcssbase-11.1.0 ریختید این دستور ها رو توی Terminal اجرا کنید:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>siavash<span style="color: #000000; font-weight: bold;">/</span>rcssbase-11.1.0<span style="color: #000000; font-weight: bold;">/</span>rcssbase<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/</span>.libs<span style="color: #000000; font-weight: bold;">/*</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>siavash<span style="color: #000000; font-weight: bold;">/</span>rcssserver-11.1.1<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span><br />
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>siavash<span style="color: #000000; font-weight: bold;">/</span>rcssbase-11.1.0<span style="color: #000000; font-weight: bold;">/</span>rcssbase<span style="color: #000000; font-weight: bold;">/</span>net<span style="color: #000000; font-weight: bold;">/</span>.libs<span style="color: #000000; font-weight: bold;">/*</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>siavash<span style="color: #000000; font-weight: bold;">/</span>rcssserver-11.1.1<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span><br />
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>siavash<span style="color: #000000; font-weight: bold;">/</span>rcssbase-11.1.0<span style="color: #000000; font-weight: bold;">/</span>rcssbase<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>.libs<span style="color: #000000; font-weight: bold;">/*</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>siavash<span style="color: #000000; font-weight: bold;">/</span>rcssserver-11.1.1<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span><br />
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>siavash<span style="color: #000000; font-weight: bold;">/</span>rcssbase-11.1.0<span style="color: #000000; font-weight: bold;">/</span>rcssbase<span style="color: #000000; font-weight: bold;">/</span>gzip<span style="color: #000000; font-weight: bold;">/</span>.libs<span style="color: #000000; font-weight: bold;">/*</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>siavash<span style="color: #000000; font-weight: bold;">/</span>rcssserver-11.1.1<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span></div></div>
<p>یادتون نره /home/siavash/ رو با جایی که سرور و بیس رو نصب کردین عوض کنید! این دستورا در اصل Library هارو در دسترس rcssserver قرار میده! البته راه بهتر این بود که path این فایل هارو به rcssserver بدیم اما این راه برای افرادی که برای اولین بار این کار رو انجام میدن راحت تره!<br />
اگر باز هم با مشکل روبرو شدید لطفا تو همین صفحه گزارش بدین! حالا دوباره میریم سر اجرای سرور!<br />
برای این کار اول برید توی /rcssserver-&#8230;/src/ و دستور زیر رو توی Terminal وارد کنید:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">.<span style="color: #000000; font-weight: bold;">/</span>rcssserver</div></div>
<p>قاعدتا نباید با پیغام خطا روبرو بشید. حالا باید مونیتور رو اجرا کنید!<br />
برای این کار کافیه به فولدر rcssmonitor-&#8230;/src/ برید و توی Terminal بزنید:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">.<span style="color: #000000; font-weight: bold;">/</span>rcssmonitor</div></div>
<p>حالا دیگه تنها قسمتی که مونده وصل کردن کلاینت یا کد خودتون هست! می تونید برای شروع <a href="http://staff.science.uva.nl/~jellekok/robocup/2003/trilearn_base_sources-3.3.tar.gz">این کد</a> رو بگیرید!. که یک نمونه برای شروع هست با نام Trilearn base sources.این برنامه نصبش مثل پکیج های قبلی هست! برای اجراشم کافیه به فولدر trilearn_base_sources-3.3 برید و توی Terminal دستور زیر رو بزنید:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">.<span style="color: #000000; font-weight: bold;">/</span>start.sh localhost TeamName</div></div>
<p>واضح هست که باید دو بار این دستور رو تو دو تا صفحه ی Terminal مجزا با دو TeamName مختلف بزنید چون وگرنه یه تیم بدون رقیب توی زمین خواهد بود. برای شروع بازی هم کافیه kick-off رو توی rcssmonitor بزنید! می تونید برای شرکت توی مسابقات همین سورس کد کلاینت رو توسعه بدید یا اینکه از base client های دیگه استفاده کنید! با کمی Search کلاینت هایی به زبون های دیگه مثل Java هم پیدا میشه!<br />
انشاالله در جلسات بعدی درباره ی Objectها و Classهای شبیه سازی فوتبال و طریقه ی کد نویسی برای اون صحبت می کنیم. و البته کمی هم در رابطه با شبیه سازی زلزله که به نظر من خیلی جالب تر هست!</p>
<h2>شبیه سازی فوتبال در عمل</h2>
<div>قطعه ای از بازی دو تیم مشابه در مقابل هم!<br />
<object width="320px" height="240px" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.syavash.com/portal/includes/flvplayer.swf" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="flashvars" value="&amp;file=http://www.syavash.com/portal/files/siavash/blogs/installing-robocup-soccer-simulation/1.flv&amp;frontcolor=0xFFFFFF&amp;backcolor=0x000000&amp;lightcolor=0xFFFFFF" /><embed width="320px" height="240px" type="application/x-shockwave-flash" src="http://www.syavash.com/portal/includes/flvplayer.swf" allowfullscreen="true" allowscriptaccess="always" flashvars="&amp;file=http://www.syavash.com/portal/files/siavash/blogs/installing-robocup-soccer-simulation/1.flv&amp;frontcolor=0xFFFFFF&amp;backcolor=0x000000&amp;lightcolor=0xFFFFFF" /></object></div>
<h2>لینک های داخلی</h2>
<ul>
<li><a href="http://www.syavash.com/portal/files/siavash/blogs/installing-robocup-soccer-simulation/soccer-simulation-package.zip">فایل های مورد نیاز در این آموزش</a></li>
</ul>
<h2>لینک های خارجی</h2>
<ul>
<li><a href="http://www.boost.org/more/getting_started/unix-variants.html">پکیج Boost</a></li>
<li><a href="http://sserver.sourceforge.net/">وبسایت رسمی شبیه سازی فوتبال</a></li>
<li><a href="http://artificial.ir/intelligence/">انجمن هوش مصنوعی ایران</a></li>
</ul>
<p>نوشته <a href="http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%db%8c-%d8%a8%d8%b1-%d8%b4%d8%a8%db%8c%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%88%d8%aa%d8%a8%d8%a7%d9%84/">مقدمه ای بر شبیه سازی فوتبال</a> اولین بار در <a href="http://blog.syavash.com/fa">وبلاگ سیاوش محمودیان</a> پدیدار شد.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.syavash.com/fa/%d9%85%d9%82%d8%af%d9%85%d9%87-%d8%a7%db%8c-%d8%a8%d8%b1-%d8%b4%d8%a8%db%8c%d9%87-%d8%b3%d8%a7%d8%b2%db%8c-%d9%81%d9%88%d8%aa%d8%a8%d8%a7%d9%84/feed/</wfw:commentRss>
		<slash:comments>59</slash:comments>
		</item>
	</channel>
</rss>
