<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2titles.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.mytoolbox.ir/~d/styles/itemtitles.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>جعبه ابزار</title>
    <description>اینترنت دات نت</description>
    <link>http://mytoolbox.ir/blog/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.5.0.7</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://mytoolbox.ir/blog/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:title>جعبه ابزار</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <feedburner:info uri="mytoolbox" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/3.0/</creativeCommons:license><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.mytoolbox.ir/mytoolbox" /><feedburner:emailServiceId>mytoolbox</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.mytoolbox.ir/mytoolbox" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.mytoolbox.ir%2Fmytoolbox" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
      <title>jQuery Plugins</title>
      <description>&lt;h3 dir="rtl"&gt;پلاگین در جی کوئری&lt;/h3&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="jqeuryplugins" border="0" alt="jqeuryplugins" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=jqeuryplugins_1.png" width="264" height="200" /&gt; استفاده از پلاگین‌ها یکی از امکانات جی‌کوئری هستند که باعث فراگیر شدن جی‌کوئری با سرعت زیاد شدند. امکان استفاده از کدهای آماده و نوشته شده توسط اشخاص دیگر و به اصطلاح پلاگین های آماده، استفاده از این کتابخونه جاوا اسکریپتی رو بسیار ساده و لذت بخش کرده‌است. پلاگین‌ها مجموعه‌ای از کدهای جاوا اسکریپت هستند که برای هدفی به خصوص نوشته شده‌اند و می‌توان از آنها به سادگی استفاده کرد بدون اینکه در مورد چگونگی عملکرد آنها نیازی باشد که چیزی بدانیم.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;البته از همان ابتدای کار، سایت jQuery محلی رو برای معرفی پلاگین‌های نوشته شده، معرفی کرد و همین باعث شد تا تمامی پلاگین‌ها به سادگی قابل دسترس باشند و بتوان کدهایی که نیاز داریم رو به سادگی با جشتجو و دسته بندیی که انجام شده پیدا کنیم. این مساله هم کمک بسیار زیادی در پراستفاده بودن jQuery در دنیای طراحی وب امروز شد. مجموعه‌ای از پلاگین‌های جی‌کوئری با بیش از 4000 پلاگین رو در &lt;a title="jQuery Plugins" href="http://plugins.jquery.com/" target="_blank"&gt;این لینک&lt;/a&gt; میتونید ببینید. &lt;/p&gt;  &lt;div align="center" class="boxcaption" dir="rtl"&gt;تبلیغات: &lt;a target="_blank" href="http://mytoolbox.ir/blog/page/The-Smashing-Book.aspx" title="Order Smashing Book in Iran"&gt;سفارش خرید The Smashing Book در ایران؛ کلیک کنید.&lt;/a&gt;&lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;استفاده از پلاگین در jQuery      &lt;br /&gt;&lt;/strong&gt;استفاده از پلاگین‌ها در جی‌کوئری بسیار ساده هست و می‌توان آن را مرحله به مرحله به صورت زیر نشون داد:&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;1. پیدا کردن پلاگین مورد نظر با استفاده از جستجو در سایت &lt;a title="jQuery Plugins" href="http://plugins.jquery.com/" target="_blank"&gt;پلاگین‌های جی‌کوئری&lt;/a&gt; و یا در سرچ انجین‌های اینترنت مثل بینگ و گوگل و یاهو.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;2. دانلود کردن فایل js مربوط به پلاگین. توجه کنید در برخی موارد ممکن است این پلاگین در یک CDN پیوست شده باشه و دیگر نیازی با دانلود کردن اون نیست و فقط باید از آدرس اینترنتی اون CDN استفاده کنید. (&lt;a title="در مورد CDN بیشتر بخوانید" href="http://mytoolbox.ir/blog/post/Use-jQuery-CDN-from-Microsoft-or-Google.aspx" target="_blank"&gt;در مورد CDN بیشتر بخوانید&lt;/a&gt;.)&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;3. اضافه کردن پلاگین به سورس html با استفاده از تگ &amp;lt;script&amp;gt;. دقت کنید که این پلاگین بعد از کتابخونه اصلی jQuery به سورس اضافه بشه.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;4. تنظیمات مربوط به پلاگین و کدهایی که برای کار کردن این پلاگین در jQuery باید نوشت. تمامی این اطلاعات رو میتونید از همونجایی که پلاگین رو دانلود کردید، پیدا کنید. سازندگان پلاگین در سایت خود یا در مطلبی که مربوط به اون پلاگین نوشته شده، در اکثر موارد نحوه استفاده از پلاگین رو هم به همراه مثال، نوشته‌اند.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در ادامه این پست یک پلاگین را معرفی کرده و نحوه استفاده از اون توضیح داده خواهد شد. سعی میشه که در ادامه مطالب در موضوع jQuery در جعبه ابزار، پلاگین‌های کاربردی و مفید معرفی بشه.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;پلاگین فید خوان      &lt;br /&gt;&lt;/strong&gt;در &lt;a title="خواندن آر اِس اِس فید سایتهای دیگر با استفاده از جی کوئری" href="http://mytoolbox.ir/blog/post/jQuery-Cross-Domain-RSS-Reader.aspx" target="_blank"&gt;پست قبلی&lt;/a&gt; دیدید که چگونه با استفاده از یک API از گوگل، تونستیم RSS Feed سایت دیگری را به JSONP تبدیل کرده و با jQuery بخوانیم. در ادامه پلاگینی معرفی میشه که فقط کافی هست اون رو در سورس html اضافه کرده و با دستورالعملی که در ادامه خواهید دید، از اون در خواندن فید های دیگر استفاده کنید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;نسخه اصلی این پلاگین که jGFeed نام داره رو میتونید از &lt;a title="jGFeed" href="http://jquery-howto.blogspot.com/2009/05/google-feeds-api-jquery-plugin.html" target="_blank"&gt;آدرس اصلی&lt;/a&gt; سازنده اون دانلود کنید. البته شما میتونید این پلاگین رو بعد از اعمال یک سری تغییرات برای Error Handling بهتر و استفاده ساده تر، از سایت جعبه ابزار دانلود کنید. برای دانلود این پلاگین، روی لینک زیر کلیک کنید و فایل دانلود شده را از حالت زیپ خارج کنید.     &lt;br /&gt;&lt;a title="پلاگین فیدخوان برای جی‌کوئری" href="http://mytoolbox.ir/blog/files/jgfeed.zip" target="_blank"&gt;پلاگین فیدخوان برای جی‌کوئری، بر اساس پلاگین اصلی jGFeed&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;سپس این پلاگین را به همراه کتابخونه اصلی jQuery در سورس html اضافه کنید. مثال &lt;a title="خواندن آر اِس اِس فید سایتهای دیگر با استفاده از جی کوئری" href="http://mytoolbox.ir/blog/post/jQuery-Cross-Domain-RSS-Reader.aspx" target="_blank"&gt;پست قبلی&lt;/a&gt; رو با استفاده از پلاگین، به صورت زیر تغییر بدید: (در این مثال از RSS Feed مربوط به سایت &lt;a title="iDevCenter" href="http://www.idevcenter.com" target="_blank"&gt;iDevCenter&lt;/a&gt; برای پیشفرض استفاده شده‌است.)&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;&lt;a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;"&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;lt;html xmlns=&amp;quot;&lt;a href="http://www.w3.org/1999/xhtml&amp;quot;"&gt;http://www.w3.org/1999/xhtml&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;lt;head&amp;gt;       &lt;br /&gt;&amp;lt;meta content=&amp;quot;text/html; charset=utf-8&amp;quot; http-equiv=&amp;quot;Content-Type&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;lt;title&amp;gt;jQuery Feed Reader Plugin&amp;lt;/title&amp;gt;       &lt;br /&gt;&amp;lt;script src=&amp;quot;&lt;a href="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js&amp;quot;"&gt;http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js&amp;quot;&lt;/a&gt; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;       &lt;br /&gt;&amp;lt;script src=&amp;quot;jgfeed.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;       &lt;br /&gt;&amp;lt;/head&amp;gt;       &lt;br /&gt;&amp;lt;body&amp;gt;       &lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;       &lt;br /&gt;$(function() {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $(&amp;quot;#getfeed&amp;quot;).click(function() {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&amp;quot;#feeds&amp;quot;).text(&amp;quot;loading...&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var feedcount =4 ;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $.jGFeed($(&amp;quot;#feedinput&amp;quot;).val(), feedcount, function(feeds){       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // کنترل خطا       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(!feeds){       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // خطایی رخ داده       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&amp;quot;#feeds&amp;quot;).html(&amp;quot;ERROR!&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return false;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // اطلاعات فید به درستی برگشت داده شده       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var webtitle;//Website title       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; webtitle = feeds.title;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var weblink;//Website Link       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; weblink = feeds.link;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&amp;quot;#feeds&amp;quot;).html(&amp;quot;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; + weblink + &amp;quot;\&amp;quot;&amp;gt;&amp;quot; + webtitle + &amp;quot;&amp;lt;/a&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; for(var i=0; i&amp;lt;feeds.entries.length; i++){       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var entry = feeds.entries[i];       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&amp;quot;#feeds&amp;quot;).append(&amp;quot;&amp;lt;div&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; + entry.link + &amp;quot;\&amp;quot;&amp;gt;&amp;quot; + entry.title + &amp;quot;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;quot; );       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; });      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; });       &lt;br /&gt;});       &lt;br /&gt;&amp;lt;/script&amp;gt;       &lt;br /&gt;&amp;lt;div&amp;gt;       &lt;br /&gt;&amp;lt;input id=&amp;quot;feedinput&amp;quot; style=&amp;quot;width:300px;&amp;quot; type=&amp;quot;text&amp;quot;       &lt;br /&gt;value=&amp;quot;&lt;a href="http://www.idevcenter.com/links/upcoming/feed/&amp;quot;/"&gt;http://www.idevcenter.com/links/upcoming/feed/&amp;quot;/&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;lt;br /&amp;gt;       &lt;br /&gt;&amp;lt;input type=&amp;quot;button&amp;quot; value=&amp;quot;Load&amp;quot; id=&amp;quot;getfeed&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;lt;hr /&amp;gt;       &lt;br /&gt;&amp;lt;div id=&amp;quot;feeds&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;       &lt;br /&gt;&amp;lt;/div&amp;gt;       &lt;br /&gt;&amp;lt;/body&amp;gt;       &lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;در این مثال از Google CDN استفاده شده (&lt;a title="در مورد CDN بیشتر بخوانید" href="http://mytoolbox.ir/blog/post/Use-jQuery-CDN-from-Microsoft-or-Google.aspx" target="_blank"&gt;در مورد CDN بیشتر بخوانید&lt;/a&gt;.) و فایل پلاگین jgfeed.js هم بعد از آن به سورس اضافه شده. اگر در مثال دقت کنید، از دستور jGFeed استفاده شده که در واقع این دستور از پلاگین به کد جی‌کوئری ارسال میشود.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;برای اینکه سادگی استفاده از پلاگین رو ببینید، به کد زیر دقت کنید که تنها نشان دهنده استفاده از پلاگین هست:&lt;/p&gt;  &lt;div class="coder"&gt;$.jGFeed(feedurl, feedcount, function(feeds){    &lt;br /&gt;// کنترل خطا در متغیر و خواندن و نوشتن آن     &lt;br /&gt;}&lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;در واقع در مثالی که زده شد، برنامه کامل نوشته شد، اما اصل قضیه دستور jGFeed هست که به آن 2 مقدار آدرس فید و تعداد فید رو پاس میدیم و این پلاگین به ما مقدار feeds رو برمیگردونه. اگر feeds برابر false باشد یعنی خطایی رخ داده، مثلا آدرس فید اشتباه است.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;اگر مقدار feeds برابر false نباشد، بنابراین حاوی فید مورد نظر به فرمت JSON هست که میتوان آن را به هر شکل و فرمتی خواند و نوشت که یک نمونه آن در کد بالا گفته شد. در واقع، انتظار نداشته باشید با استفاده از پلاگین، از نوشتن کد جی‌کوئری بی‌نیاز هستید. می‌بینید که در این مثال بعد از استفاده از پلاگین حدود 15 خط دستورات JQuery نوشته شده. البته پلاگین مربوط به این مثال، یک نمونه ساده بود و برخی پلاگین‌ها کدهای بسیار سنگینی دارند که فوق العاده کار رو راحت تر و سریعتر میکنند.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div dir="rtl" class="cr"&gt;این مطلب به صورت اختصاصی برای &lt;a title="وبلاگ جعبه ابزار" href="http://mytoolbox.ir/blog" target="_blank"&gt;وبلاگ جعبه ابزار&lt;/a&gt; نوشته شده است. استفاده از این مطلب به شرط ذکر منبع، آزاد می‌باشد. &lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/kw8asal4Y-0" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/kw8asal4Y-0/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/jQuery-Plugins.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=23ecf5f4-f23c-4a83-ade8-6157a492dc6d</guid>
      <pubDate>Tue, 09 Mar 2010 16:05:00 +0300</pubDate>
      <category>jQuery</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=23ecf5f4-f23c-4a83-ade8-6157a492dc6d</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=23ecf5f4-f23c-4a83-ade8-6157a492dc6d</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/jQuery-Plugins.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=23ecf5f4-f23c-4a83-ade8-6157a492dc6d</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=23ecf5f4-f23c-4a83-ade8-6157a492dc6d</feedburner:origLink></item>
    <item>
      <title>jQuery Cross Domain RSS Reader</title>
      <description>&lt;h3 dir="rtl" align="justify"&gt;خواندن آر اِس اِس فید سایتهای دیگر با استفاده از جی کوئری&lt;/h3&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="jqueryrss" border="0" alt="jqueryrss" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=jqueryrss.png" width="292" height="161" /&gt; در سری مطالب قبلی، چگونگی استفاده از فرمت XML و متد JSONP برای خواندن فایلهای موجود در سایتهای دیگر از طریق جاوا اسکریپت را دیدیم. برای کار با JSONP نیاز هست که سرور مورد نظر از این روش پشتیبانی کند. حالا فرض کنید می‌خواهید RSS Feed سایتهای انتخاب شده رو در وبلاگ یا وب‌سایت خودتون نشون بدید. البته با استفاده از جاوا اسکریپت در سمت کلاینت! &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;به صورت مستقیم نمیتونید آدرس یک RSS Feed را در صفحه خود بخوانید مگر اینکه اون فید، مربوط به دامین خودتون باشه. در اکثر موارد هم سایتهای مختلف برای تشکیل خروجی RSS خودشون از JSONP پشتیبانی نمیکنند. پس چه باید کرد؟ &lt;/p&gt;  &lt;div dir="rtl" class="boxcaption" align="center"&gt;تبلیغات: &lt;a title="Order Smashing Book in Iran" href="http://mytoolbox.ir/blog/page/The-Smashing-Book.aspx" target="_blank"&gt;سفارش خرید The Smashing Book در ایران؛ کلیک کنید.&lt;/a&gt;&lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;ارسال درخواست به سایتها و دامین‌های دیگر از طرف برنامه نویسی سمت سرور مثل ASP.Net مشکلات حالت جاوا اسکریپت را ندارد و محدود نیست. بنابراین برای خواندن RSS های دیگران، میتوانیم با برنامه سمت سرور، آنها را بخوانیم و سپس مطالب خوانده شده را به سمت کلاینت منتقل کنیم. در واقع در این روش، از سایت خود به عنوان یک واسطه بین جاوااسکریپت و سایت مورد نظر استفاده میکنیم و در سمت کلاینت، فرمت XML را که از سرور و دامین خودمان رسیده میخوانیم، بنابراین دیگر محدودیت Cross Domain وجود ندارد. &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;علاوه بر روش بالا، میتوان از Google API هم استفاده کرد. یکی از API های گوگل، فید خوان گوگل هست که در واقع یک پیوندی هست بین شما و RSS Feed سایت مورد نظر؛ یعنی همان کار واسطه را انجام میدهد. کاری که API فید خوان گوگل انجام میدهد بسیار مورد پسند jQuery هست چرا که از JSONP پشتیبانی میکند و فقط کافیست به آدرس مشخص شده از این API، از جی کوئری یک درخواست getJSON داده شود تا گوگل فید را در سرور خودش خوانده و نتیجه را با فرمت JSON برای ما می‌فرستد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;برای استفاده از این API فقط کافیست یک درخواست به آدرس زیر فرستاده شود. به جای آدرس فید نوشته شده، شما هر آدرسی که بنویسید، فید مورد نظر را با فرمت تبدیل شده به JSON تحویل میگیرید. برای تعیین تعداد فیدهای برگشتی هم باید متغیر num رو تغییر بدید. در این مطلب، از RSS Feed سایت &lt;a title="iDevCenter" href="http://www.idevcenter.com/" rel="nofollow" target="_blank"&gt;iDevCenter&lt;/a&gt;، قسمت &lt;a title="iDevCenter" href="http://www.idevcenter.com/links/upcoming/" rel="nofollow" target="_blank"&gt;لینکهای تازه ارسال شده&lt;/a&gt;، برای مثال استفاده میشه و درخواست 2 مقدار شده است:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;&lt;a href="http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&amp;amp;callback=?&amp;amp;q=http://www.idevcenter.com/links/upcoming/feed/&amp;amp;num=2"&gt;http://ajax.googleapis.com/ajax/services/feed/load?        &lt;br /&gt;v=1.0&amp;amp;callback=?&amp;amp;q=http://www.idevcenter.com/links/upcoming/feed/&amp;amp;num=2&lt;/a&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;این آدرس رو اگر در مرورگر خودتون بنویسید، پیغام خطا میگیرید. چون برای تابع برگشتی JSONP اسم تعیین نشده (متغیر callback) و به جای آن ؟ گذاشته شده. به جای علامت سوال، هر اسمی که دوست دارید بنویسید و نتیجه رو مشاهده کنید. این که چرا از ؟ استفاده میشه، در ادامه متوجه خواهید شد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;حالا با jQuery یک درخواست به این آدرس میدهیم. در جی‌کوئری تابع getJSON برای گرفتن پاسخ به فرمت JSON استفاده میشود به این صورت که آدرس مورد نظر را به آن پاس داده و نامی برای تابع برگشتی از JSONP تعیین نمیکنیم (callback) و علامت سوال ؟ به جای آن میگذاریم. علت استفاده از ؟ این است که برای سادگی کار، خود jQuery در هر درخواستی که ارسال میکند یک نام به صورت تصادفی برای این تابع انتخاب کند و ما دیگر درگیر نام تابع نشویم.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;برای خواندن این تابع، چون نام آن را نمیدونیم، از این روش استفاده میشه که در خود getJSON یک تابع را به صورت داینامیک و بدون اسم تعریف کرده و برای آن یک ورودی در نظر میگیریم. به این صورت، جی‌کوئری خودش میاد یه تابع با اسم رندوم درست میکنه، اون رو به جای ؟ پاس میده و بعد تابع برگشتی رو مرتبط میکنه با این تابع بدون اسمی که نوشتیم و مقدار بازگشتی با فرمت JSON به ورودی این تابع پاس داده میشه:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;var googleapi = &amp;quot;&lt;a href="http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&amp;amp;callback=?&amp;amp;"&gt;http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&amp;amp;callback=?&amp;amp;&lt;/a&gt;&amp;quot;;       &lt;br /&gt;var feedurl = &amp;quot;&lt;a href="http://www.idevcenter.com/links/upcoming/feed/"&gt;http://www.idevcenter.com/links/upcoming/feed/&lt;/a&gt;&amp;quot;;       &lt;br /&gt;var num = 2       &lt;br /&gt;var fullurl = googleapi + &amp;quot;q=&amp;quot; + feedurl + &amp;quot;&amp;amp;num=&amp;quot; + num;       &lt;br /&gt;$.getJSON(fullurl, function(&lt;strong&gt;data&lt;/strong&gt;){ &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //data is the RSS Feed converted to JSON      &lt;br /&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;یک نمونه فرمت JSON رو که از گوگل API برمیگرده و توسط jQuery در متغیر data قرار داده میشه، در کد زیر ببینید. به نام تابع که به صورت رندوم توسط jQuery ایجاد شده دقت کنید.&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;&lt;strong&gt;jsonp1267359064813&lt;/strong&gt;(       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&amp;quot;responseData&amp;quot;:       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;quot;feed&amp;quot;:       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;quot;title&amp;quot;:&amp;quot;iDevCenter Upcoming Links&amp;quot;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;link&amp;quot;:&amp;quot;&lt;a href="http://www.idevcenter.com/links/upcoming/&amp;quot;"&gt;http://www.idevcenter.com/links/upcoming/&amp;quot;&lt;/a&gt;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;entries&amp;quot;:[       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;title&amp;quot;:&amp;quot;\u202bسیستم\u200cهای متن\u200cباز مشابه StackOverflow&amp;quot;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;link&amp;quot;:&amp;quot;&lt;a href="http://www.idevcenter.com/link/1156/&amp;quot;"&gt;http://www.idevcenter.com/link/1156/&amp;quot;&lt;/a&gt;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;author&amp;quot;:&amp;quot;lajevardi&amp;quot;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;publishedDate&amp;quot;:&amp;quot;Fri, 26 Feb 2010 03:19:08 -0800&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; },       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;title&amp;quot;:&amp;quot;\u202bطراحی برنامه یا سایت تحت وب با استفاده از فونت های ویندوز&amp;quot;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;link&amp;quot;:&amp;quot;&lt;a href="http://www.idevcenter.com/link/1153/&amp;quot;"&gt;http://www.idevcenter.com/link/1153/&amp;quot;&lt;/a&gt;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;author&amp;quot;:&amp;quot;hajloo&amp;quot;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;publishedDate&amp;quot;:&amp;quot;Thu, 25 Feb 2010 00:34:11 -0800&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ]       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; },       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;responseDetails&amp;quot;: null,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;responseStatus&amp;quot;: 200       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;)&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;هر چه که داخل تابع &lt;strong&gt;jsonp1267359064813 &lt;/strong&gt;برمیگردد، توسط جی کوئری، به متغیر data که در تابع getJSON معرفی کردیم، پاس داده می‌شود. مقدار data در واقع همون RSS Feed سایت idevcenter هست که توسط سویس گوگل به JSON تبدیل میشه و به تابع ما پاس داده میشه. بنابراین در حال حاضر، اطلاعاتی که نیاز داشتیم رو داریم، حالا باید اون رو بخونیم و در صفحه بنویسیم.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;خوندن فرمت JSON در جاوااسکریپت خیلی ساده هست. فقط کافیه ساختار درختی JSON رو شناسایی کنید و سپس به صورت سلسله مراتبی، به قسمت های مختلفش دست پیدا کنید. مثلا برای رسیدن به آدرس وب سایت مربوط به فید، باید این مسیر را طی کنید: responseData.feed.link و برای رسیدن به عنوان مورد دوم در فید ها به این صورت responseData.feed.entries[1].title عمل میکنیم.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در JSON آرایه ها در [ ] قرار میگیرند و entries هم یک آرایه از فید های سایت هست که در این مثال تعداد 2 فید برگشت داده شده است. برای بیشتر شدن فید های ارسالی، مقدار num را در API گوگل تغییر بدهید. برای خواندن entries از یک حلقه for استفاده میکنیم و مقادیر هر فید رو در قسمتی از html که تعیین کردیم مینویسیم. &lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;for(var i=0; i&amp;lt;responseData.feed.entries.length; i++){      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; var entry = responseData.feed.entries[i];       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; var feedtitle = entry.title;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; var feedlink= entry.link;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; var feeddate= entry.publishedDate;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // add variables to html&lt;/p&gt;    &lt;p&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;در مدل کار ما، تمامی این اطلاعات با فرمت JSON داخل متغیر data ریخته میشود. بنابراین شروع ساختار JSON از data میشود. در زیر کد کامل این مثال رو میتونید ببینید. در این مثال، از Google CDN برای استفاده از JQuery استفاده شده. (&lt;a title="در مورد CDN بیشتر بخوانید" href="http://mytoolbox.ir/blog/post/Use-jQuery-CDN-from-Microsoft-or-Google.aspx" target="_blank"&gt;در مورد CDN بیشتر بخوانید&lt;/a&gt;) &lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;&lt;a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;"&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&lt;/a&gt;&amp;gt;       &lt;br /&gt;&amp;lt;html xmlns=&amp;quot;&lt;a href="http://www.w3.org/1999/xhtml&amp;quot;"&gt;http://www.w3.org/1999/xhtml&amp;quot;&lt;/a&gt;&amp;gt; &lt;/p&gt;    &lt;p&gt;&amp;lt;head&amp;gt;      &lt;br /&gt;&amp;lt;meta content=&amp;quot;text/html; charset=utf-8&amp;quot; http-equiv=&amp;quot;Content-Type&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;lt;title&amp;gt;jQuery RSS Reader&amp;lt;/title&amp;gt;       &lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;&lt;a href="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js&amp;quot;"&gt;http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js&amp;quot;&lt;/a&gt;&amp;gt;&amp;lt;/script&amp;gt;       &lt;br /&gt;&amp;lt;/head&amp;gt; &lt;/p&gt;    &lt;p&gt;&amp;lt;body&amp;gt;      &lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;       &lt;br /&gt;$(function() {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; var googleapi = &amp;quot;&lt;a href="http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&amp;amp;callback=?&amp;amp;&amp;quot;;"&gt;http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&amp;amp;callback=?&amp;amp;&amp;quot;;&lt;/a&gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; var feedurl = &amp;quot;&lt;a href="http://www.idevcenter.com/links/upcoming/feed/&amp;quot;;"&gt;http://www.idevcenter.com/links/upcoming/feed/&amp;quot;;&lt;/a&gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; var num = 5       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; var fullurl = googleapi + &amp;quot;q=&amp;quot; + feedurl + &amp;quot;&amp;amp;num=&amp;quot; + num;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $.getJSON(fullurl, function(data){       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Website title       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var webtitle;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; webtitle = data.responseData.feed.title;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //Website Link       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var weblink;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; weblink = data.responseData.feed.link; &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&amp;quot;#feeds&amp;quot;).html(&amp;quot;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; + weblink + &amp;quot;\&amp;quot;&amp;gt;&amp;quot; + webtitle + &amp;quot;&amp;lt;/a&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; for(var i=0; i&amp;lt;data.responseData.feed.entries.length; i++){       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var entry = data.responseData.feed.entries[i];       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&amp;quot;#feeds&amp;quot;).append(&amp;quot;&amp;lt;div&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; + entry.link + &amp;quot;\&amp;quot;&amp;gt;&amp;quot; + entry.title + &amp;quot;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;quot; );       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }); &lt;/p&gt;    &lt;p&gt;});      &lt;br /&gt;&amp;lt;/script&amp;gt; &lt;/p&gt;    &lt;p&gt;&amp;lt;div id=&amp;quot;feeds&amp;quot;&amp;gt;      &lt;br /&gt;&amp;lt;/div&amp;gt; &lt;/p&gt;    &lt;p&gt;&amp;lt;/body&amp;gt; &lt;/p&gt;    &lt;p&gt;&amp;lt;/html&amp;gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div dir="rtl" class="cr"&gt;این مطلب به صورت اختصاصی برای &lt;a title="وبلاگ جعبه ابزار" href="http://mytoolbox.ir/blog" target="_blank"&gt;وبلاگ جعبه ابزار&lt;/a&gt; نوشته شده است. استفاده از این مطلب به شرط ذکر منبع، آزاد می‌باشد.     &lt;p&gt;&lt;/p&gt; &lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/S1n01oRQDpY" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/S1n01oRQDpY/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/jQuery-Cross-Domain-RSS-Reader.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=44e8651e-7ad2-4556-8d81-a6b8ececc576</guid>
      <pubDate>Sun, 28 Feb 2010 16:19:34 +0300</pubDate>
      <category>jQuery</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=44e8651e-7ad2-4556-8d81-a6b8ececc576</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=44e8651e-7ad2-4556-8d81-a6b8ececc576</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/jQuery-Cross-Domain-RSS-Reader.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=44e8651e-7ad2-4556-8d81-a6b8ececc576</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=44e8651e-7ad2-4556-8d81-a6b8ececc576</feedburner:origLink></item>
    <item>
      <title>Cross Domain Javascript</title>
      <description>&lt;h3 dir="rtl" align="justify"&gt;ایجاد ارتباط در وب از طریق جاوا اسکریپت بین دامین‌های متفاوت&lt;/h3&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="mytoolbox-ir-crossdomainjavascript" border="0" alt="mytoolbox-ir-crossdomainjavascript" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=mytoolbox-ir-crossdomainjavascript.png" width="302" height="133" /&gt; &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;به علت یک سری مسایل امنیتی و امکان استفاده های نادرست و غیرقانونی، مرورگرهای اینترنتی از طریق جاوا اسکریپت و به اصطلاح به صورت کلاینت ساید، مجاز به خواندن فرمت XML از سرور های دیگر نیستند و فقط میتوانند فایلهای XML موجود در همان آدرس سایتی را بخوانند که خودشان در آن دامین قرار دارند. &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;مثلا اگر در صفحه mytoolbox.ir/blog/FeedReader.html با استفاده از جاوا اسکریپت و ای‌جکس، درخواستی برای msn.com/test/test.xml بفرستیم، پیغام خطا برای مرورگر ما برگشت خواهد خورد با این عنوان که اجازه دسترسی به text.xml را در دامین msn.com نداریم و از FeedReader.html فقط میتوان به فایلهای XML موجود در آدرس mytoolbox.ir بدون پیغام خطا، درخواست داد.&lt;/p&gt;  &lt;div dir="rtl" class="boxcaption" align="center"&gt;تبلیغات: &lt;a title="Order Smashing Book in Iran" href="http://mytoolbox.ir/blog/page/The-Smashing-Book.aspx" target="_blank"&gt;سفارش خرید The Smashing Book در ایران؛ کلیک کنید.&lt;/a&gt;&lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;در شکل زیر، همونطور که مشخص شده، یک فایل در آدرس localhost اجرا شده و درخواستی رو برای mytoolbox.ir فرستاده؛ این ارتباط موفقیت آمیز بوده (200 OK) اما هیچ اطلاعاتی به localhost فرستاده نمیشود و در واقع یک فایل xml خالی فرستاده شده که کلاینت هم در خوندن اون دچار مشکل شده و پیغام خطا میده که چیزی در فایل درخواستی نیست.&lt;/p&gt;  &lt;p dir="rtl"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="خواندن آر اِس اِس فید سایت‌های دیگر با استفاده از جی کوئری" border="0" alt="خواندن آر اِس اِس فید سایت‌های دیگر با استفاده از جی کوئری" src="http://mytoolbox.ir/blog/image.axd?picture=crossdomainxmlrequest-mytoolbox_1.png" width="684" height="510" /&gt; &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;همونطور که میدونید، RSS Feed هم به فرمت XML هست. بنابراین اگر بخواهیم فید وبسایت و یا وبلاگ دیگری را در سایت خودمون به کتر ببریم، با توجه به محدودیت فوق، این کار امکان پذیر نیست. قبل‌تر در جعبه ابزار نحوه خواندن فایلهای XML با جی‌کوئری را دیدید (&lt;a title="تجزیه و تحلیل ایکس اِم اِل در جی‌کوئری" href="http://mytoolbox.ir/blog/post/Parse-XML-in-jQuery.aspx" target="_blank"&gt;تجزیه و تحلیل ایکس اِم اِل در جی‌کوئری&lt;/a&gt;). همونطور که اونجا هم اشاره شد، این روش برای وقتی هست که فایل XML روی سرور خود شما قرار گرفته باشد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;بر خلاف حالت کلاینت ساید، ارسال درخواست به سرورهای دیگر از طریق برنامه نویسی سمت سرور مثل ASP.Net و PHP، هیچ مشکلی ندارد و در صورت اجازه دسترسی به منابع سایتی مکه به آن درخواست میدهیم، پاسخ مناسب به سرور ما خواهد رسید. بنابریان به صورت سرورساید به سادگی و بدون مشکل می‌شود RSS سایتهای دیگر رو خواند و استفاده کرد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;اهمیت استفاده از جاوا اسکریپت و AJAX (بخوانیم ای جکس!) در طراحی های مدرن و به اصطلاح Web2.0 برخی مواقع شما رو مجبور می‌کنه که از تکنیکی برای خواندن فید و XML در کلاینت استفاده کنید. برای این کار، روشی به اسم &lt;strong&gt;JSONP&lt;/strong&gt; ابداع شده است.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;JSONP چیست؟      &lt;br /&gt;&lt;/strong&gt;با توجه به مطالب بالا فهمیدیم که domain1 نمی‌تواند با domain2 انتقال اطلاعات در جاوا اسکریپت داشته باشد. اما آیا به این فکر نیوفتادید که پس CDN ها چطور کار میکنند؟ (&lt;a title="در مورد CDN بیشتر بدانید" href="http://mytoolbox.ir/blog/post/Use-jQuery-CDN-from-Microsoft-or-Google.aspx" target="_blank"&gt;در مورد CDN بیشتر بدانید&lt;/a&gt;.) در محدودیت ارتباط مرورگرها یک استثنا وجود داره و اون هم تگ اسکریپت &amp;lt;script&amp;gt; هست. تگ اسکریپت میتواند توسط src به یک فایل در دامین دیگری اشاره کند و آن فایل را بخواند.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;بنابراین از همین روش میتوان محدودیت موجود را دور زد. سناریوی زیر را بخاونید تا کامل متوجه موضوع شوید؛ در این متن، mytoolbox.ir میخواهد با جاوا اسکریپت، RSS Feed سایت msn.com را بخواند:&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;اول&lt;/strong&gt;: سایت msn.com یک آدرس رو معرفی میکند مثلا msn.com/feed/load.aspx و آن را در اختیار اشخاصی قرار میدهد که قصد دارند با جاوااسکریپت به فید دسترسی داشته باشند. پاسخ این فایل، همان مقادیر فید به صورت متنی خواهد بود.     &lt;br /&gt;&lt;strong&gt;دوم:&lt;/strong&gt; سایت mytoolbox.ir آدرس فوق را در یک تگ اسکریپت به کار می‌برد به این صورت:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;&amp;lt;script src=http://msn.com/feed/load.aspx&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;      &lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;طرح مشکل:&lt;/strong&gt; در حال حاضر، با اجرای صفحه حاوی اسکریپت، فید از سایت msn.com دانلود میشود اما چگونه باید به آن دسترسی داشته باشیم؟ در جاوا اسکریپت برای گرفتن مقادیر لود شده از یک فایل دیگر، باید از AJAX استفاده کنیم. اما دیدیم که در این مورد با AJAX اجازه نداریم این کار را بکنیم، پس با تکنیک کنونی باید چه کرد؟ &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;راه حل: برای رفع این مشکل، msn.com اطلاعات خودش را به صورت یک تابع جاوااسکریپت برمی‌گرداند. یعنی در این مثال، اگر load.aspx را در مرورگر اینترتی ببینیم، به صورت زیر هست: (دقت کنید این مثال به صورت شماتیک قصد دارد موضوع رو بیان کند، بنابراین فرمت اطلاعات برگشتی خارج از بحث میباشد و فقط به صورت شماتیک data مینویسیم.)&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;ReadData(&amp;quot;data data data ...&amp;quot;)&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;در واقع پاسخ، یک تابع با یک مقدار ورودی هست. بنابراین با تعریف این تابع، میتوانیم بعد از لود شدن این مقدار در تگ اسکریپت، به جاوا اسکریپت بفهمانیم که حالا با این تابع چی کار کند. بنابراین مشکل حل میشود!&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;سوم:&lt;/strong&gt; تعریف تابع بازگشتی از msn.com در صفحه مورد نظر در mytoolbox.ir :&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;&amp;lt;script src=http://msn.com/feed/load.aspx&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;      &lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; function ReadData(f) {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // do anything with f, for example:       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // alert(f)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;حالا وقتی اطالاعات از سرور msn.com لود شد، در واقع تابع ReadData صدا زده میشود که در آن گفته‌ایم مثلا این فید ارسالی را با فلان فرمت در فلان جای صفحه بنویسد. بدین ترتیب مشکل خواندن از دامین های دیگر، به این صورت حل می‌شود. به این مدل &lt;strong&gt;JSONP&lt;/strong&gt; گفته میشود.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;چرا به اسمِ JSONP ؟      &lt;br /&gt;&lt;/strong&gt;در انتقال اطلاعات بین منابع مختلف، یکی از فرمتهای رایج XML هست، اما فرمت و ساختارهای دیگری هم وجود دارد. یکی از این فرمت ها که بسیار هم طرفداران پیدا کرده و روز به روز رواج بیشتری پبدا میکنه، فرمت JSON هست. این فرمت بیشتر در انتقال اطلاعات بین یک زبان سمت سرور مثل ASP.Net و برنامه نویسی سمت کلاینت یعنی جاوا اسکریپت استفاده میشود. شاید دلیلش این باشه که خوندن JSON (تلفظ: جِی سان) در جاوا اسکریپت خیلی ساده تز خوندن XML هست و نکته بعدی اینکه حجم فایلهای JSON در اکثر موارد مخصوصا زمانی که اطلاعات در حال انتقال حجم زیادی داشته باشند، نسبت به فرمت XML، کم حجم تر هست. (&lt;a title="در مورد JSON بیشتر بدانید" href="http://www.json.org/json-fa.html" target="_blank"&gt;در مورد JSON بیشتر بدانید&lt;/a&gt;)     &lt;br /&gt;نمونه کد JSON بازگشتی از تکنیک JSONP به صورت زیر می‌باشد. دقت کنید که کد اصلی JSON از خط دوم شروع میشود و myfunc نام تابع جاوا اسکریپت هست.&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;&amp;#160; myfunc(      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;wesbite&amp;quot;:&amp;quot;&lt;a href="http://mytoolbox.ir"&gt;http://mytoolbox.ir&lt;/a&gt;&amp;quot;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;language&amp;quot;:&amp;quot;Persian&amp;quot;,&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;post&amp;quot;: {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;title&amp;quot;:&amp;quot;Cross Domain Javascript&amp;quot;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;date&amp;quot;:&amp;quot;25 Feb 2010&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160; );&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;تکنیک ذکر شده برای ایجاد ارتباط بین دامین های مختلف در سمت کلاینت، اولین بار که مطرح شد در مورد انتقال اطلاعات در فرمت JSON بود که توسط سرویس های یاهو استفاده شد. برای همین اسم این روش رو هم JSON with Padding و به اختصار JSONP نامیده شد. و البته این تکنیک با هر فرمتی میتونه اعمال شه چرا که در روش پیاده سازی این تکنیک، هیچ محدودیتی برای اطلاعات منتقل شده وجود ندارد، چه XML باشد چه JSON چه یک خط متن!&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;به دلیل استفاده سرویس‌های بزرگ در اینترنت از فرمت JSON در انتقال اطلاعات به وسیله API های خودشون، تقریبا این فرمت در حال همه گیر شدن هست و یه جورایی داره استاندارد میشه و البته شخصا عقیده ندارم که JSON بتونه جای XML رو بگیره. حداقل اینکه مایکروسافت همچنان از فرمت XML در سرویس‌های دات نت مثل WCF و XAML استفاده میکنه.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;کتابخونه jQuery برای سهولت کار، از JSONP پشتیبانی می‌کند و شما نیازی نیست به صورت دستی اقدام به پیاده سازی تکنیک ذکر شده در این مطلب، کنید. در مورد نحوه استفاده از JSONP در jQuery در مطالب آینده جعبه ابزار خواهم نوشت.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;مطلب آخر این که توجه کنید، برای استفاده از تکنیک JSONP، سروری که شما به آن درخواست میفرستید، باید از این تکنیک پشتیبانی کنه وگرنه سروری که به اون درخواست داده‌ایم اگر منظور ما رو از درخواست JSONP متوجه نشود، پاسخ مناسب رو به ما نخواهد داد. از کجا بفهمیم از JSONP پشتیبانی میکند؟ در 99% موارد میشه گفت اگر سرویسی پاسخ خود به درخواست رسیده رو به فرمت JSON بدهد، از JSONP پشتیبانی میکند.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;*این مطالب از خودم میباشد! اگر در اون مورد اشتباهی میبینید، ممنون میشم که اعلام کنید و استفاده از این مطلب آزاد هست و اگر دوست دارید با انصاف باشید، منبع رو هم ذکر کنید.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/LEe0U6WgQK0" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/LEe0U6WgQK0/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/Cross-Domain-Javascript.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=203361a5-524a-4e5c-b89f-b29ee6824631</guid>
      <pubDate>Wed, 24 Feb 2010 15:42:39 +0300</pubDate>
      <category>Web 2.0</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=203361a5-524a-4e5c-b89f-b29ee6824631</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=203361a5-524a-4e5c-b89f-b29ee6824631</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/Cross-Domain-Javascript.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=203361a5-524a-4e5c-b89f-b29ee6824631</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=203361a5-524a-4e5c-b89f-b29ee6824631</feedburner:origLink></item>
    <item>
      <title>Parse XML in jQuery</title>
      <description>&lt;h3 dir="rtl" align="justify"&gt;تجزیه و تحلیل ایکس اِم اِل در جی‌کوئری&lt;/h3&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a href="http://mytoolbox.ir/blog/image.axd?picture=image_1.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=image_thumb.png" width="292" height="161" /&gt;&lt;/a&gt; یکی از فرمت‌های رایج در انتقال اطلاعات، فرمت &lt;a title="تعریف ایکس ام ال در ویکی پدیا" href="http://fa.wikipedia.org/wiki/%D8%A7%DA%A9%D8%B3%E2%80%8C%D8%A7%D9%85%E2%80%8C%D8%A7%D9%84" rel="nofollow" target="_blank"&gt;XML&lt;/a&gt; می‌باشد که با ساختاری مرتب و منظم می‌تواند اطلاعات طبقه‌بندی و دسته‌بندی شده را در خودش نگهداری کند. به علت همین نظمی که در ساختار XML وجود داره، به راحتی میشه که اطلاعات اون رو در جایی دیگر استفاده کرد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;یکی از بارزترین مثالهایی که میشه از استفاده از فرمت XML در انتقال اطلاعات دنیای وب، عنوان کرد، RSS Feed هست. RSS در واقع شکلی از XML به همراه ساختار استاندارد و ثابت می‌باشد که همین تعریف ساختار یکسان برای اون باعث میشه تا کاربردپذیری اون در وب بسیار بالا باشه. مثلا شما اگر یک برنامه بنویسید که RSS Feed یک سایت رو بخونه، میتونید مطمئن باشید که این برنامه شما هر RSS Feed رو میتونه بخونه چون ساختار این فایلها یکسان هستند. &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;اگر بخواهید از مطالب موجود در آر اِس اِسِ بخشی از سایت خودتون مثلا وبلاگ سایت، در قسمتی دیگر از سایت استفاده کنید، به طور مثال در قسمت محصولات سایت شرکتی، بخواهید که چند پست آخری که در وبلاگ شرکت نوشته‌شده نمایش داده بشه، دو راه پیش رو دارید:&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;راه اول استفاده از برنامه‌نویسی سمت سرور برای سایت شماست. برای این کار شما اول نیاز به داشتن دسترسی به سورس سایت و هاست سایت دارید. بعد از فراهم شدن این امکانات، میتوانید RSS وبلاگ را از طریق برنامه نویسی سمت سرور مثلا با استفاده از تکنیک Linq to XML خوانده و به شکل دلخواه بنویسید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در حالتی که امکانات بیشتری نیاز دارید، باید با ساختار دیتابیس وبلاگ و یا نحوه دسترسی به اطلاعات اون رو از طریق کدنویسی آشنا باشید. مثلا با ASP.Net از دیتابیس وبلاگ (و یا لایه دیتا و یا هر الگوی دیگری که در کدنویسی دارید) پست های آخر رو بخونید و اونها رو توسط مثلا یک Repeater در وب فرم خودتون قرار بدید. مثلا شما از بلاگ انجین دات نت و یا وردپرس برای وبلاگ شرکت در کنار سایت اصلی اون، استفاده کرده‌اید. برای اینکه در سمت سرور بتونید به پست های وردپرس دسترسی داشته باشید، نیاز به شناخت از API وردپرس و یا هر سیستمی که از اون استفاده کردید، دارید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;راه دوم استفاده از جاوا اسکریپت و در واقع استفاده از برنامه نویسی سمت کلاینت و البته برای سهولت کار استفاده از jQuery هست. ممکن است مدل طراحی رابط کاربری شما، نیازمند استفاده از jQuery باشد و یا اصلا دسترسی به هاست نداشته باشید و یا دچار محدودیت‌هایی که در روش اول گقته شد، باشید. به هر حال، هر دلیلی که هست، شما نیاز به خواندن RSS به وسیله جاوا اسکریپت در سمت کلاینت دارید.    &lt;br /&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;خواندن XML در jQuery&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;همونطور که اشاره شد، RSS هم از فرمت XML استفاده میکنه، پس نحوه خواندن XML در jQuery ، خواندن RSS هم در برمیگیره. خواندن فایلهای XML در jQuery بر خلاف جاوا اسکریپت معمولی، بسیار ساده هست. فایل info.xml را به صورت زیر را در نظر بگیرید:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;      &lt;br /&gt;&amp;lt;products&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;product&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;productname&amp;gt;Product one&amp;lt;/productname&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;productprice&amp;gt;100&amp;lt;/productprice&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/product&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;product&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;productname&amp;gt;Product two&amp;lt;/productname&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;productprice&amp;gt;200&amp;lt;/productprice&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/product&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;product&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;productname&amp;gt;Product three&amp;lt;/productname&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;productprice&amp;gt;300&amp;lt;/productprice&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/product&amp;gt;       &lt;br /&gt;&amp;lt;/products&amp;gt;&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;برای خواندن مطالب این فایل، ابتدا نیاز به دسترسی به این فایل رو داریم. بنابراین یک درخواست برای دسترسی به این فایل به سرور ارسال میکنیم؛ البته document.ready که نشان دهنده آغاز jQuery هست رو فراموش نمی‌کنیم:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;$(document).ready(function() { &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160; $.ajax({      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; type: &amp;quot;GET&amp;quot;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; url: &amp;quot;info.xml&amp;quot;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataType: &amp;quot;xml&amp;quot;,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; success: ReadXML       &lt;br /&gt;&amp;#160;&amp;#160; });&lt;/p&gt;    &lt;p&gt;});&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;با استفاده از دستور ajax در jQuery، درخواستی را به سرور ارسال می‌کنیم تا فایلی که در url مشخص شده است به ما بازگرداند. چون اطلاعاتی را به سرور منتقل نمیکنیم و هدف فقط خواندن هست از متد GET استفاده کرده و نوع مقدار بازگشتی هم که xml هست، توسط dataType مشخص می‌کنیم و نکته مهم اینکه باید به jQuery، تابعی که قرار است اطلاعات رسیده از سرور رو تجزیه تحلیل کنه، معرفی کنیم. در این مثال، فایل info.xml از سرور گرفته میشود و اطلاعات داخل آن به تابع ReadXML پاس داده می‌شود.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در این مرحله تمام کار ما با تابع ReadXML خواهد بود. این تابع رو به صورت زیر تعریف میکنیم:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;function ReadXML(xmldata) { &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; $(xmldata).find(&amp;quot;product&amp;quot;).each(function() {&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&amp;quot;#fromxml&amp;quot;).append('&amp;lt;p&amp;gt;' + 'Name: '      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + $(this).find(&amp;quot;productname&amp;quot;).text()       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + '&amp;lt;br /&amp;gt;Price: '       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + $(this).find(&amp;quot;productprice&amp;quot;).text()       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + '&amp;lt;/p&amp;gt;'); &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; });      &lt;br /&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;تابع ReadXML داری یک ورودی به اسم xmldata هست که در واقع همان مطالب info.xml هست که از طریق ajax (بخوانیم اِی‌جکس و نخوانیم آژاکس) به تابع پاس داده میشود و من هم اسم اون رو xmldata&amp;#160; گذاشتم. شما هر اسمی خواستید بگذارید! &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;سادگی کار با xml در jQuery از اینجا شروع می‌شود که با استفاده از find تگ تگرار شونده رو پیدا میکنیم که در مثال ما product هست. بعد از پیدا کردن تگ تکرارشونده که در واقع همان سرفصل اطلاعات xml هستند، با استفاده از each، یک تابع را به هرکدام از این product ها که در فایل هستند نسبت می‌دهیم. تابع each را مثل یک حلقه for در برنامه‌نویسی تصور کنید که ابتدا و انتهای آن در این مثال از اولین تگ product هست تا آخرین.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;سپس برای خواندن اطلاعات زیرشاخه‌های هر product باز هم از find استفاده میکنیم با نسبت دادن آن به this که this در این مثال برمی‌گردد به آبجکتی که این تابع برای آن نوشته میشود یعنی product و در نهایت با استفاده از قابلیت text مقدار داخل تگهای داخلی را میخوانیم و با استفاده از append به قسمتی از صفحه که تعیین شده، اضافه میکنیم. با استفاده از each، این پروسه برای تمامی product های موجود در فایل، تکرار میشود و در نهایت به هدف خود میرسیم.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p dir="rtl" align="justify"&gt;نکته: اگر از IE استفاده میکنید، به دلایل نا معلومی، وقتی فایل html نهایی را از روی هارد خود به صورت لوکال باز میکنید، این روش جواب نمیدهد. البته اگر روی وب سرور، چه در لوکال خودتون چه روی اینترنت، امتحان کنید، همه چیز به درستی کار خواهد کرد. برای تست لوکال اگر با فایل html کار میکنید و میخواهید با اجرا کردن فایل با کلیک، کد را تست کنید از فایرفاکس استفاده کنید. اگر هم که از php یا asp و یا هر فرمت تحت سرور دیگری استفاده میکنید که خوب مجبورید فایل رو از طریق وب سرور ببینید و در این صورت اصلا مشکلی شما رو تهدید نمیکنه! &lt;/p&gt; &lt;/blockquote&gt;  &lt;p dir="rtl" align="justify"&gt;همه چیز با هم به صورت زیر خواهد شد:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;      &lt;br /&gt;&amp;lt;head&amp;gt;       &lt;br /&gt;&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;lt;title&amp;gt;Read XML with jQuery&amp;lt;/title&amp;gt;       &lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;&lt;strong&gt;&lt;em&gt;path_to_jquery&lt;/em&gt;&lt;/strong&gt;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;       &lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;       &lt;br /&gt;$(document).ready(function() { &lt;/p&gt;    &lt;p&gt;$(&amp;quot;#fromxml&amp;quot;).text(&amp;quot;loading...&amp;quot;); &lt;/p&gt;    &lt;p&gt;$.ajax({      &lt;br /&gt;&amp;#160;&amp;#160; type: &amp;quot;GET&amp;quot;,       &lt;br /&gt;&amp;#160;&amp;#160; url: &amp;quot;info.xml&amp;quot;,       &lt;br /&gt;&amp;#160;&amp;#160; dataType: &amp;quot;xml&amp;quot;,       &lt;br /&gt;&amp;#160;&amp;#160; success: ReadXML       &lt;br /&gt;}); &lt;/p&gt;    &lt;p&gt;function ReadXML(xmldata) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $(&amp;quot;#fromxml&amp;quot;).empty();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $(xmldata).find(&amp;quot;product&amp;quot;).each(function() {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&amp;quot;#fromxml&amp;quot;).append('&amp;lt;p&amp;gt;' + 'Name: '       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + $(this).find(&amp;quot;productname&amp;quot;).text()       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + '&amp;lt;br /&amp;gt;Price: '       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + $(this).find(&amp;quot;productprice&amp;quot;).text()       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; + '&amp;lt;/p&amp;gt;');       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; });       &lt;br /&gt;} &lt;/p&gt;    &lt;p&gt;});      &lt;br /&gt;&amp;lt;/script&amp;gt;       &lt;br /&gt;&amp;lt;/head&amp;gt;       &lt;br /&gt;&amp;lt;body&amp;gt;       &lt;br /&gt;&amp;lt;div id=&amp;quot;fromxml&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;       &lt;br /&gt;&amp;lt;/body&amp;gt;       &lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;اگر به کد کامل دقت کرده باشید،&amp;#160; قبل از ارسال ajax، عبارتی در formxml نوشته میشود تا کاربر در هنگام دیدن این صفحه، متوجه شود که در قسمتی از صفحه، اطلاعاتی در حال لود شدن هست؛ و البته در نهایت، در تابع ReadXML یعنی وقتی که پاسخ درخواست رسیده است، اول formxml زا با استفاده از روش empty خالی میکنیم و سپس اطلاعات خوانده شده و به شکل دلخواه درآمده را در آن قسمت اضافه میکنیم.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در ضمن برای استفاده از کتابخونه اصلی jQuery که در مثال به صورت &lt;strong&gt;&lt;em&gt;path_to_jquery &lt;/em&gt;&lt;/strong&gt;آمده است، آدرس دهی مناسب رو یا از روی فایلهای خودتان و یا از طریق &lt;a title="افزایش سرعت لود شدن jQuery با استفاده از CDN" href="http://mytoolbox.ir/blog/post/Use-jQuery-CDN-from-Microsoft-or-Google.aspx" target="_blank"&gt;CDN&lt;/a&gt; انجام دهید. این نکته رو برای این یادآوری کردم چون اگر همین کد را copy-paste کنید، کار نخواهد کرد :دی&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;به همین ترتیب می‌توان RSS را هم در قسمتی از صفحه وب اضافه کرد. تنها تفاوت با نمونه کد نوشته شده، نام تگ های موجود در RSS هست که به سادگی میتوان آن ها را در کد نوشته شده، جایگزین کرد. مثلا در RSS، تگ تکرار شونده item هست و تگ های داخلی اون هم تگ هایی مثل title، description و link هست که این تگ ها رو به سادگی با دیدن سورس RSS سایت خودتون میتونید پیدا کنید.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p dir="rtl" align="justify"&gt;نکته: در جاوا اسکریپت به علت رعایت مسائل امنیتی، فقط و فقط درخواست ajax باید از فایلهای موجود در دامین مشابه با جایی که درخواست دهنده هست، صورت بپذیرد. مثلا از mytoolbox.ir &lt;strong&gt;نمی‌توان&lt;/strong&gt; به styles.ir درخواست فایل RSS را توسط jQuery داد.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;برای استفاده از jQuery یرای درخواست های بین دو سایت با دامین مختلف که به اصطلاح به اون Cross Domain گفته میشه، راه های دیگری وجود دارد که در پست های آینده جعبه ابزار به اونها اشاره خواهد شد؛ پس منتظر باشید.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;*این مطالب از خودم میباشد! اگر در اون مورد اشتباهی میبینید، ممنون میشم که اعلام کنید و استفاده از این مطلب آزاد هست و اگر دوست دارید با انصاف باشید، منبع رو هم ذکر کنید.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/P55cBvzd7mo" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/P55cBvzd7mo/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/Parse-XML-in-jQuery.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=b3acc34b-d3ea-4a94-b146-28d9db242ddb</guid>
      <pubDate>Sat, 20 Feb 2010 16:57:36 +0300</pubDate>
      <category>jQuery</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=b3acc34b-d3ea-4a94-b146-28d9db242ddb</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=b3acc34b-d3ea-4a94-b146-28d9db242ddb</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/Parse-XML-in-jQuery.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=b3acc34b-d3ea-4a94-b146-28d9db242ddb</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=b3acc34b-d3ea-4a94-b146-28d9db242ddb</feedburner:origLink></item>
    <item>
      <title>VB.Net Extension Methods</title>
      <description>&lt;h3 dir="rtl" align="justify"&gt;توسعه و گسترش توابع و کلاسها در ویژوال بیسیک دات نت &lt;/h3&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="VbDotNetExtensionMethods" border="0" alt="VbDotNetExtensionMethods" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=VbDotNetExtensionMethods.png" width="304" height="203" /&gt; در هنگام استفاده از کلاسها در برنامه‌نویسی، ممکن است برخی مواقع نیاز به کارایی بیشتری از کلاس مورد نظر داشته باشیم. مثلا نیاز به یک تابع اضافه در کلاس داریم که کار به خصوصی که مورد انتظارمون هست رو انجام بده. برای این کار چند راه حل وجود دارد:&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;یک راه، تغییر سورس کلاس مورد نظر هست. در این روش کاملا مشخصه که باید به سورس این کلاس دسنرسی داشته باشیم، تابع دلخواه رو به سورس اضافه کنیم و این کلاس رو در دات نت دوباره کامپایل کنیم.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;خوب، اگه به سورس کلاس دسترسی نداشته باشیم چی؟ و یا در یک تیم برنامه نویسی، اجازه تغییر سورس کلاس‌های نوشته شده توسط بخشهای دیگه رو نداشته باشیم، یا کلا این تابع مورد نظر ما اونقدر استفاده به خصوص و شخصی داره که نیازی به وارد کردن اون در ساختار اصلی کلاس نباشه. حالا باید چه کرد؟     &lt;br /&gt;اگر به این فکر می‌کنید که میشه کلاس جدیدی ساخت و از کلاس مورد نظر ارث برد و متدهای جدید رو به اون اضافه کرد، بیخیال بشید. چون از هر کلاسی که نمیشه ارث پذیری داشت. ممکنه جلوی این قابلیت در کل کلاس گرفته شده باشه (NotInheritable) و یا این محدودیت در مورد برخی توابع وجود داشته باشه. خیلی دردسر داره نه؟&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;یک راه معمول دیگه در برنامه‌نویسی استفاده از کلاس‌های کمکی هست که به صورت Shared در VB.Net ساخته میشه (همون static دز سی شارپ). به این کلاس‌ها معمولا اسم Helper یا Utility گفته میشه چون که نقش کمکی در کدنویسی دارند و ممکن است چندین بار در یک برنامه از اونها استفاده بشه.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;برای مثال نیاز به کنترل کردن آدرس ای‌‍میل وارد شده از طرف کاربر سایت هست تا ببینیم این ای‌میل درست نوشته شده یا نه؟ برای این کار یک کلاس به اسم AppUtility ایجاد می‌کنیم و یک تابع به اسم CheckEmail در اون به صورت Shared می‌سازیم:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;Public Class MyUtility &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Public Shared Function CheckEmail(ByVal email As String) As Boolean &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Dim regex = New Regex(&amp;quot;^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$&amp;quot;)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Return regex.IsMatch(email) &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; End Function &lt;/p&gt;    &lt;p&gt;End Class&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;و برای استفاده از این تابع به صورت زیر می‌توان عمل کرد:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;Dim inputEmail = EmailTextbox.Text      &lt;br /&gt;If &lt;strong&gt;&lt;em&gt;MyUtility.CheckEmail(inputEmail)&lt;/em&gt;&lt;/strong&gt; Then       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 'Email is valid..       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SubscribeUser()       &lt;br /&gt;Else       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 'Email is invalid       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Throw New Exception(&amp;quot;Email is invalid&amp;quot;)       &lt;br /&gt;End If&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;همونطور که می‌بینید نیازی به ساختن یک آبجکت جدید از کلاس MyUtility نیست چرا که به صورت Shared تعریف شده. در کلاس MyUtility هر تعدادی از این مدل توابع که نیاز دارید می‌توانید بنویسید و از آن هر چند بار که نیاز دارید در طول برنامه، استفاده کنید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;     &lt;br /&gt;Extension Methods&lt;/strong&gt;     &lt;br /&gt;از ورژن دات نت 3 به بعد، یک قابلیت جدید با عنوان Extension Methods در همین راستا اضافه شد که کار را بسیار راحت تر کرد. با استفاده از Extension Methods شما میتوانید به هر کلاسی قابلیت های جدید رو اضافه کنید بدون اینکه به سورس و حتی ساختار اون کلاس دسترسی داشته باشید و هیچ نیازی به دوباره کامپایل کردن کلاس مورد نظر هم نیست. در واقع شما تابع مورد نظر خودتون رو نوشته و اون رو با این تکنیک وصل میکنید به کلاس مورد نظر.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;برای استفاده از اکستنشن متد در VB.Net ابتدا باید یک Module بسازید. سپس باید مشخص کنید که تابع جدید را به چه نوع کلاسی میخواهید اضافه کنید؛ هر کلاسی که بود، باید اولین مقدار پاس شونده به تابع از نوع این کلاس باشد. نمونه کد زیر را ببینید:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;Imports System.Runtime.CompilerServices      &lt;br /&gt;&lt;strong&gt;&lt;em&gt;Public&lt;/em&gt;&lt;/strong&gt; Module MyExtenstionMethods &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160; &lt;em&gt;&lt;strong&gt;&amp;lt;Extension()&amp;gt; _          &lt;br /&gt;&lt;/strong&gt;&lt;/em&gt;&amp;#160;&amp;#160;&amp;#160; Function CheckEmail(ByVal email As String) As Boolean       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Dim regex = New Regex(&amp;quot;^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$&amp;quot;)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Return regex.IsMatch(email)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; End Function &lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;em&gt;&lt;strong&gt;&amp;#160;&amp;#160; &amp;lt;Extension()&amp;gt; _          &lt;br /&gt;&lt;/strong&gt;&lt;/em&gt;&amp;#160;&amp;#160;&amp;#160; Function MathWork(ByVal Number1 As Integer, ByVal Number2 As Integer) As Decimal       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Return (Number1 * Number2)/((Number1 + Number2)^2/3)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; End Function &lt;/p&gt;    &lt;p&gt;End Module&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;در این مثال دو تابع به صورت Extension Method ساخته شده. تابع اول به اسم CheckEmail یک تابع کمکی برای کلاس String هست. چرا؟ به اولین مقدار پاس داده شده به تابع دقت کنید. متغیر email از نوع string هست. نام انتخاب شده برای email مهم نیست. چیزی که مهمه اینه که تون این متغیر از توع کلاس String هست. پس این تابع به کلاس String اضافه میشود و میتوان از آن استفاده کرد:&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="extenstionmethods1" border="0" alt="extenstionmethods1" src="http://mytoolbox.ir/blog/image.axd?picture=extenstionmethods1.png" width="270" height="103" /&gt;     &lt;br /&gt;همونطور که در شکل میبینید، متغیر mystring از نوع String ساخته شده و امکان استفاده از تابع CheckEmail برای آن فراهم شده است. در واقع در تابع CheckEmail متغیر اول الان در واقع خود mystring می‌باشد.     &lt;br /&gt;و البته مشخص است که ویژوال استودیو در هنگام کدنویسی، توابع اضافه شده را هم به سیستم intellisense خودش اضافه کرده که کار را بسیار راحت میکند. به علامتی که برای توابع اکتنشن استفاده شده است دقت کنید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;تابع دوم هم برای کلاس Integer تعریف می‌کنیم تا یک عملیات ریاضی را بین دو عدد انجام دهد (زیاد روی فرمول نوشته شده فکر نکنید!).&amp;#160; برای همین متغیر اول باید از نوع Integer تعریف شود تا این تابع به صورت خودکار به کلاس Integer اضافه شود. به این تابع میخواهیم یک عدد دیگر هم بفرستیم تا بین 2 عدد این فرمول ریاضی، یک عدد جدید را محاسبه کرده و تحویل دهد. نحوه استفاده از این اکستنشن به صورت زیر هست:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;Dim FirstNumber as Integer = 22      &lt;br /&gt;ResultTextbox.Text = FirstNumber.MathWork(45)&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;در این حالت متغیر اول پاس داده شده به اکستنشن، FirstNumber یعنی عدد 20 هست و متغیر دوم هم عدد 45 میباشد. دقت کنید که Extension Method نوشته شده همواره تعداد ورودی های آن از تعداد متغیرهایی که باید هنگام کدنویسی به آن پاس دهید یکی بیشتر هست. چون متغیر اول پاس داده شده، همون آبجکتی هست که این اکستنشن رو برای کلاسش نوشتیم.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;مثالی که در ابتدا با روش Helper Class نوشته شده بود را میتوان به صورت زیر نوشت:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;If EmailTextbox.Text&lt;strong&gt;&lt;em&gt;.CheckEmail&lt;/em&gt;&lt;/strong&gt; Then       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 'Email is valid..       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SubscribeUser()       &lt;br /&gt;Else       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 'Email is invalid       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Throw New Exception(&amp;quot;Email is invalid&amp;quot;)       &lt;br /&gt;End If&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;چند نکته بسیار مهم وجود داره که اگر رعایت نکنید،ممکن هست Extension Method های شما کار نکند و برای زمان زیادی سر کار باشید:&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;حتما از Public Module استفاده کنید. اگر کلمه Public رو فراموش کنید، Extension Method شما کار نخواهد کزد.&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;نکته بعدی اینکه Imports System.Runtime.CompilerServices فراموش نشود و برای هر تابعی که میخواهید نقش Extension را بازی کند از فیلتر &amp;lt;Extension&amp;gt; همونطور که در نمونه کد می‌بینید استفاده کنید. &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;و در نهایت، بعد از نوشتن Module همواره حواستون باشه که ابتدا این فایل رو کامپایک کرده باشید و بعدا به سراغ استفاده از اون در قسمتهای دیگه مد بروید. اگر این کار را نکنید، ویژوال استودیو توابع اکستنشن شما رو در intellisense نمیاره. برای کامپایل کردن در ویژوال استودیو از منو Build و بعد از اون Build class name استفاده کنید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;*این مطالب از خودم میباشد! اگر در اون مورد اشتباهی میبینید، ممنون میشم که اعلام کنید و استفاده از این مطلب آزاد هست و اگر دوست دارید با انصاف باشید، منبع رو هم ذکر کنید.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/8TG0B63PYZk" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/8TG0B63PYZk/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/VBNet-Extension-Methods.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=ead9e400-9b2d-4f5e-8207-4b76411d41f7</guid>
      <pubDate>Wed, 03 Feb 2010 22:02:02 +0300</pubDate>
      <category>ASP.Net</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=ead9e400-9b2d-4f5e-8207-4b76411d41f7</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=ead9e400-9b2d-4f5e-8207-4b76411d41f7</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/VBNet-Extension-Methods.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=ead9e400-9b2d-4f5e-8207-4b76411d41f7</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=ead9e400-9b2d-4f5e-8207-4b76411d41f7</feedburner:origLink></item>
    <item>
      <title>jQuery 1.4 New Features</title>
      <description>&lt;h3&gt;بررسی قابلیتهای جدید جی‌کوئری در ورژن 1.4&lt;/h3&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=image.png" width="292" height="161" /&gt; نسخه جدید jQuery که در حال حاضر یکی از پرطرفدارترین کتابخونه‌های جاوا اسکریپت هست، معرفی شده‌است. نسخه جدید یعنی ورژن 1.4 نسبت به ورژن‌های قبلی خودش، تغییرات بسیار چشمگیری داشته که اکثر اونها در جهت بهبود jQuery هستند و چندین قابلیت جدید هم به اون اضافه شده. این نسخه در CDN ها هم اکنون موجود میباشد و میتوانید از آن استفاده کنید. (&lt;a title="در مورد CDN بیشتر بخوانید" href="http://mytoolbox.ir/blog/post/Speed-up-your-website-using-Sub-Domains-and-CDNs.aspx"&gt;در مورد CDN بیشتر بخوانید&lt;/a&gt;)     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;معرفی برخی ویژگی‌ها و امکانات جدید در jQuery 1.4&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;اضافه کردن چندین Event Handler در یک زمان      &lt;br /&gt;&lt;/strong&gt;در نسخه‌های قبلی، اگر نیاز به نسبت دادن چندین event handler در یک خط دستور داشتیم باید اصطلاحا آنها را به صورت زنجیروار پشت سر هم مینوشتیم. مثلا:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;$(&amp;quot;p&amp;quot;).click(fucntion() {      &lt;br /&gt;&amp;#160; //do something on click event       &lt;br /&gt;&amp;#160; }).mouserover(function(){       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //do something on mouse over event       &lt;br /&gt;&amp;#160; }).dblclick(function() {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //do something on double click event       &lt;br /&gt;&amp;#160; });       &lt;br /&gt;});&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;اما در ورژن 1.4 میتوان به صورت زیر عمل کرد:&lt;/p&gt;  &lt;div class="coder"&gt;$(&amp;quot;p&amp;quot;).bind({    &lt;br /&gt;&amp;#160; click: function() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // do something on click     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; },     &lt;br /&gt;&amp;#160; mouserover: function() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //do something on mouse over event     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; },     &lt;br /&gt;&amp;#160; dblclick: function() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //do something on double click event&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;});&lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;می‌بینید که کدنویسی به این صورت بسیار خواناتر و مدیریت آن در آینده بسیار راحت‌تر شده است و دیگر نیازی به قطار کردن توابع پشت سر هم نیست.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;انتخاب نوع انیمیشن در چندین حالت مختلف&lt;/strong&gt;     &lt;br /&gt;در نسخه های قبلی هنگام استفاده از تابع animate امکان مقداردهی نوع انیمیشن فقط در حالت کلی امکان داشت. مثلا اگر میخواستیم یک عکس را توسط jQuery حرکت دهیم، باید در تابع animate، مقادیر top و left آن را به طور مثال، تغییر میدادیم و نوع این حرکت یا همون easing رو به طور کلی به کل این انیمیشن اضافه میکردیم. اما در نسخه 1.4، برای هر جهت و یا هر تغییر مشخصه‌ای که برای انیمیشن معرفی کردیم، میتوانیم یک مدل انیمیشن انتخاب کنبم. &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a title="مثال" href="http://mytoolbox.ir/blog/examples/jQuery-14-New-Features.html" target="_blank"&gt;این مساله را برای مثال در اینجا ببینید.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;سورس این مثال به صورت زیر است:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;&amp;lt;input type=&amp;quot;button&amp;quot; id=&amp;quot;jq&amp;quot; value=&amp;quot;before 1.4&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;lt;input type=&amp;quot;button&amp;quot; id=&amp;quot;jq14&amp;quot; value=&amp;quot;version 1.4&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;lt;div id=&amp;quot;box&amp;quot; style=&amp;quot;width:200px;height:200px;background-color:red;&amp;quot;&amp;gt;       &lt;br /&gt;&amp;lt;/div&amp;gt; &lt;/p&gt;    &lt;p&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;      &lt;br /&gt;src=&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js&amp;quot;&amp;gt;       &lt;br /&gt;&amp;lt;/script&amp;gt;       &lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;easing.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;      &lt;br /&gt;$(function(){       &lt;br /&gt;      &lt;br /&gt;$('#jq').click(function() {       &lt;br /&gt;&amp;#160; $('#box').animate({       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; width: 'toggle',       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; height: 'toggle'       &lt;br /&gt;&amp;#160; }, 500,'easeOutBounce'       &lt;br /&gt;&amp;#160; );       &lt;br /&gt;});&amp;#160; &lt;br /&gt;      &lt;br /&gt;$('#jq14').click(function() {       &lt;br /&gt;&amp;#160; $('#box').animate({       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; width: ['toggle','easeInCirc'],       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; height: ['toggle', 'easeOutBounce']       &lt;br /&gt;&amp;#160; }, 500&amp;#160; );       &lt;br /&gt;});       &lt;br /&gt;      &lt;br /&gt;});       &lt;br /&gt;&amp;lt;/script&amp;gt;       &lt;br /&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;در این مثال از پلاگین easing استفاده شده که شما هم برای درست کار کردن این مثال باید این پلاگین رو از &lt;a title="Easing Plugin" href="http://gsgd.co.uk/sandbox/jquery/easing/" rel="nofollow" target="_blank"&gt;این آدرس&lt;/a&gt; دانلود کنید. خود کتابخونه jQuery فقط 2 مدل انیمیشن دارد که مقادیر آنها &amp;quot;swing&amp;quot; و &amp;quot;linear&amp;quot; هستند. با پلاگین easing که دانلود میکنید، میتونید بیشتر از 20 مدل انیمیشن داشته باشید. مثل همین 2 تایی که در مثال استفاده شده است.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;دقت کنید که در ورژن های قبلی 1.4 چگونه انیمیشن فقط یک نوع دارد، اما در ورژن 1.4، در دو جهتی که مربع قرمز کوچک و بزرگ می‌شود، در هر جهت با یک مدل انیمیشن easing متفاوت که برای آن تعیین کرده‌ایم، عمل میکند.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;همچنین در این مثال میبینید که از CDN گوگل برای استفاده از jQuery 1.4 استفاده شده‌است. (&lt;a title="در مورد CDN بیشتر بخوانید" href="http://mytoolbox.ir/blog/post/Speed-up-your-website-using-Sub-Domains-and-CDNs.aspx"&gt;در مورد CDN بیشتر بخوانید&lt;/a&gt;)&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;منتظر پست‌های بعدی در مورد قابلیت‌های جدید jQuery باشید.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;*این مطالب از خودم میباشد! اگر در اون مورد اشتباهی میبینید، ممنون میشم که اعلام کنید و استفاده از این مطلب آزاد هست و اگر دوست دارید با انصاف باشید، منبع رو هم ذکر کنید.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/1bOoD1cnXBQ" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/1bOoD1cnXBQ/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/jQuery-14-New-Features.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=86859604-8aba-428e-8008-426f68d9eabd</guid>
      <pubDate>Wed, 20 Jan 2010 16:18:04 +0300</pubDate>
      <category>jQuery</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=86859604-8aba-428e-8008-426f68d9eabd</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=86859604-8aba-428e-8008-426f68d9eabd</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/jQuery-14-New-Features.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=86859604-8aba-428e-8008-426f68d9eabd</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=86859604-8aba-428e-8008-426f68d9eabd</feedburner:origLink></item>
    <item>
      <title>CSS Positioning</title>
      <description>&lt;h3 dir="rtl" align="justify"&gt;انواع قرارگیری و موقعیتهای عناصر صفحه وب در CSS&lt;/h3&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="csspositioning" border="0" alt="csspositioning" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=csspositioning_1.png" width="304" height="223" /&gt;در یک صفحه وب، تمامی اجزاء و عناصری که در صفحه مشاهده میکنید مثل عکسها، پاراگرافها و به طور کلی تمامی تگ های HTML استفاده شده دز صفحه، نسبت به هم در جاهای خود قرار گرفته اند. اما این مکانها برای این عناصر چگونه تعیین میشوند؟&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در CSS یک خاصیت به اسم Position وجود دارد که وظیفه دارد جای هر بخش از کد HTML ما، که در واقع همون اجزاء تشکیل دهنده صفحه وب هستند، را مشخص کند. Position میتواند 5 مقدار Static، Relative،&amp;#160; Absolute و Fixed داشته باشد که در ادامه هرکدام توضیح داده میشود.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;همجنین 4 خاصیت top،bottom،left و right نیز برای نشان دادن فاصله عناصر صفحه از 4 ضلع صفحه مرورگر، استفاده میشوند. از ترکیب این مقادیر با انواع postition میتوان جایگاه های مختلفی برای اجزاء صفحه وب ایجاد کرد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;انواع حالتهای پوزیشن در CSS به شرح زیر میباشد:&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;1. حالت استاتیک: Static&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;حالت استاتیک، مقدار پیش فرض postition میباشد و مفهومش این است که هر تگ اچ‌تی‌ام‌ال همونطور که باید، در صفحه می‌آید. در این حالت مقادیر پیش فرضی که web browser شما میداند در مورد اون تگ اعمال میکند. شما وقتی از یک تگ استفاده میکنی و در استایل اون هیچ مقداری برای position در نظر نمیگیری در واقع داری از استاتیک استفاده میکنی که بر اساس استانداردها در وب، خود web browser اون رو سر جای خودش قرار میده. بنابراین در حالت پیش فرض یا استاتیک، نیازی به تعیین فاصله از 4 جهت یعنی top،left،bottom و up نیست.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در این مورد اکثر مرورگرهای وب با هم تفاوتی ندارند و خروجی آنها به یک شکل هست. پس نگران نباشید! حتی اگر تا الان نمیدونستید position در css چیه، در واقع تا الان هر چی طراحی کردید، از همین استاتیک استفاده کرده اید. پس از این به بعد هم اگر نیاز به خصوصی به انواهع دیگر پوزیشن که در ادامه میاد، ندارید، بیخیال پوزیشن بشید و نیازی نیست که position:static رو در کد خودتون بیارید. ، چون حالت استاتیک، مقدار پیش فرض هست.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;2. حالت مطلق: Absolute&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در حالت Absolute یا مطلق، اجزاء صفحه دقیقا در جایی ظاهر میشوند که شما به تعیین میکنید. بنابراین تگی که حالت مطلق دارد باید برای آن فاصله از چپ یا راست و فاصله از بالا یا پایین را حتما مشخص کنید. در این حالت عنصر مربوطه، هیچ کاری به بقیه موارد صفحه ندارد و فقط به مختصاتی که برای آن تعیین کرده اید رجوع کرده و در آنجا ظاهر میشود.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;دقت کنید مبدا مختصات در این حالت برای top و left، گوشه بالا سمت چپ صفحه مرورگر شما هست. (البته نیاز به توضیح نیست که برای bottom و right مبدا کدام نقطه میشود!) یعنی وقتی تعیین میکنید left:100px مفهومش این هست که در هر حالتی این تگ شما از ضلع سمت چپ مرورگر شما 100 پیکسل فاصله دارد. بنابراین در صورت تغییر سایز مرورگر شما، این تگ جایش عوض میشود و دیگر آنجایی نیست که شما مثلا در حالت maximize بودن مرورگر خودتون تنظیم کرده بودید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;این کد css را امتحان کنید تا موضوع کاملا مشخص شود:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;#absoluteBox {      &lt;br /&gt;&amp;#160;&amp;#160; position:absolute;       &lt;br /&gt;&amp;#160;&amp;#160; top:100px;       &lt;br /&gt;&amp;#160;&amp;#160; left:250px;       &lt;br /&gt;&amp;#160;&amp;#160; width:300px;       &lt;br /&gt;&amp;#160;&amp;#160; height:300px;       &lt;br /&gt;&amp;#160;&amp;#160; background-color:red;       &lt;br /&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;3. حالت نسبی: Relative&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;نام مدل Relative ممکن است شکا رو به شک بندازه. برخی شاید تصور کنند که ریلیتیو به مفهوم نسبی بودن موقیت یک عنصر نسبت به بقیه عناصر هست. اما این گونه نیست. به زبان خیلی ساده میشه گفت که موقعیت نسبی در سی‌اس‌اس به مفهوم موقعیت عنصر مورد نظر نسبت به مکان آن عنصر در حالت استاتیک هست.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;برای روشن شدن موضوع مثالی میزنم: اگر به یک عنصری در صفحه وب مثلا تگ div موقعیت relative بدهیم و بعد مقدار top رو برابر 10 پیکسل قرار بدیم، تگ DIV به اندازه 10 پیکسل از جایگاه پیش فرض خودش میاد پایینتر و البته باعث تغییر جای عناصر پایینی خودش نمیشود. &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;تا اینجا شاید حالت های Absolute و Relative به نظر بی استفاده بیایند چون کنترل موقعیت تگ html در صفحه از دست شما خارج هست و در سایزها و رزولوشن های مختلف از طرف مرورگر و کاربر شما، طراحی شما به هم میریزد. اما ترکیب این 2 حالت، یک مدل بسیار عالی و پرکاربرد در طراحی وب را به وجود می آورد:&lt;/p&gt;  &lt;div align="justify"&gt;   &lt;blockquote dir="rtl"&gt;     &lt;p&gt;یک تگ اچ‌تی‌ام‌ال با حالت Relative، برای عناصر داخلی خودش در حالت Absolute، نقش مبدا مختصات را پیدا میکند.&lt;/p&gt;   &lt;/blockquote&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;نکته اول اینکه واضح هست که تگ مادر باید از نوع بلاک باشد که اکثرا در این مدل از div استفاده میکنیم و نکته دوم اینکه برای تگ مادر که در حالت نسبی هست نیازی نیست که top و left تعریف کنیم. به این ترتیب از نظر موقعیت، مثل حالت استاتیک با آن برخورد خواهد شد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;حالا در داخل تگ relative از حالت absolute استفاده میکنیم. این بار برای top و left، گوشه بالا سمت چپ تگ relative میشود مبدا مختصات. بنابراین در این حالت میتوانیم اطمینان داشته باشیم که صفحه همانطور که ما میخواهیم نشان داده میشود بدون نگرانی از سایز مرورگر! در مثال زیر اندازه مرورگر خودرا عوض کنید و resize کنید، نباید تغییری در حالت دو مربع بزرگ و کوچیک به وجود آید. به کد آن دقت کنید:&lt;/p&gt;  &lt;div style="text-align: center; margin: 0px auto"&gt;   &lt;div style="margin: 0px auto;position: relative; background-color: maroon; width: 150px; height: 150px"&gt;     &lt;div style="position: absolute; background-color: orange; width: 50px; height: 50px; top: 10px; right: -30px"&gt;&lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;div class="coder"&gt;   &lt;p&gt;&amp;lt;div style=&amp;quot;position:relative;      &lt;br /&gt;background-color:maroon;       &lt;br /&gt;width:150px;height:150px;&amp;quot;&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;div style=&amp;quot;position:absolute;      &lt;br /&gt;background-color:orange;       &lt;br /&gt;width:50px;height:50px;       &lt;br /&gt;top:10px;right:-30px;&amp;quot;&amp;gt;       &lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/p&gt;    &lt;p&gt;&amp;lt;/div&amp;gt;&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;در این مثال مربع بزرگتر در حالت relative و مربع نارنجی هم در حالت absolute هست که از ضلع بالای مربع بزرگتر 10 پیکسل پایین تر است و 30 پیکسل از ضلع سمت راست مربع بزرگتر، به بیرون رفته است. این بیرون رفتن به خاطر مقدار منفی 30 پیکسل هست.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;4. حالت ثابت: Fixed&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;مدل ثابت را میتوان همان مدل absolute دانست با این تفاوت که در حالت fixed، تگ شما به نسبت پنجره مرورگر ثابت خواهد ماند. یعنی اگر یک تصویر را به صورت fixed در top:0px و left:0px قرار دهید، این تصویر همواره در گوشه بالای سمت چپ صفحه نمایش داده میشود، حتی اگر شما اسکرول کنید به قسمت های پایینی صفحه، این عکس باز هم در جای خود ثابت خواهد ماند. از این مدل در تبلیغات و منوی سایت ها معمولا استفاده میکنند.   &lt;br /&gt;نمونه کد زیر را برای خود امتحان کنید:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;&amp;lt;div style=&amp;quot;position:fixed;      &lt;br /&gt;background-color:maroon;       &lt;br /&gt;width:150px;height:150px;      &lt;br /&gt;top:10px;left:10px;&amp;quot;&amp;gt;      &lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;نکته اینکه یک div که در حالت fixed (و همچنین absolute) میباشد، اصلا مهم نیست کد آن در کجای صفحه قرار گرفته باشد. میتوانید آن را دقیقا قبل از بستن تگ body وارد کنید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;*این مطالب از خودم میباشد! اگر درآن اشتباهی میبینید، ممنون میشم که اعلام کنید. استفاده از این مطلب آزاد هست و اگر دوست دارید با انصاف باشید، منبع رو هم ذکر کنید.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/fxdZfh74RhA" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/fxdZfh74RhA/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/CSS-Positioning.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=2520017f-0c09-4fbe-85be-1798756c13ca</guid>
      <pubDate>Sun, 10 Jan 2010 14:25:04 +0300</pubDate>
      <category>CSS</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=2520017f-0c09-4fbe-85be-1798756c13ca</pingback:target>
      <slash:comments>14</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=2520017f-0c09-4fbe-85be-1798756c13ca</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/CSS-Positioning.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=2520017f-0c09-4fbe-85be-1798756c13ca</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=2520017f-0c09-4fbe-85be-1798756c13ca</feedburner:origLink></item>
    <item>
      <title>Clicky: Web Analytics in Real Time</title>
      <description>&lt;h3 dir="rtl" align="justify"&gt;گزارش آمار سایت خود را از سرویس &lt;a title="سیستم امارگیری کلیکی" href="http://getclicky.com/139802" rel="nofollow" target="_blank"&gt;کلیکی&lt;/a&gt; بخواهید&lt;/h3&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clickylogo" border="0" alt="clickylogo" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=clickylogo.gif" width="208" height="73" /&gt; آگاهی از آمار وب‌سایت ها از نکات بسیار مهمی هست که باید به اون توجه بشه. مطالعه منظم و دقیق این آمار میتونه شما رو به سمت بهبود سایت خودتون پیش ببره.     &lt;br /&gt;این امار فقط شامل تعداد بازدیدکننده های سایت شما نمیشه. بلکه دونستن اینکه کاربرهای شما از چه کشوری هستند، در چه ساعتهایی به سایت شما وارد شدند و همچنین با جستجوی چه کلماتی به سایت شما وارد شده اند بسیار حائز اهمیت می‌باشد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;یک سیستم آمارگیری مناسب و کامل، گزارش های مفصلی از هر گونه جرییاتی که ممکن است شما در مورد سایت خودتون نیاز داشته باشید به شما باید ارائه بده و همچنین امکانات جانبی به خصوصی هم در نظر گرفته باشه.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;شاید وقتی صحبت از یک سیستم و نرم افزار آمارگیری برای سایت، میشه خیلی ها از گوگل نام ببرند. اما اگر با این سیستم کار کرده باشید، متوجه یه سری کمبود در سیستم گوگل میشوید که تعدادیش رو من در پایین مینویسم:    &lt;br /&gt;- آمار گوگل، لحظه ای نیست. بنابراین بازدیدکندده های فعال در 1 دقیقه اخیر را نمیتوانید ببینید یا تعداد کاربرانی که الان در حال بازدید از سایت شما هستند.     &lt;br /&gt;- اگر بازدیدکننده سایت شما، جاوا اسکریپت نداشته باشد، آمار گوگل نمیتواند این کاربر را شناسایی کند. یعنی اصلا کار نمیکند!     &lt;br /&gt;- آمار سایت شما را به حالت عمومی نشان نمیدهد و اگر هم بخواهید از API های گوگل استفاده کنید، کار بسیار پیچیده خواهد شد.     &lt;br /&gt;- آمار کلیک های روی لینک هایی که شما به آدرس هایی به غیر از سایت خودتان داده اید در حالت عادی توسط گوگل قابل دسترسی نیست. این مورد برای شما هنگامی مهم هست که&amp;#160; اگر لینکی به سایت دیگری دادید و یا بنر تبلیغاتی بر روی سایت خود قرار دادید، ببینید که آمار کلیک شدن روی آن چقدر بوده.     &lt;br /&gt;- اطلاعات آماری به صورت تجمعی هست و شما به ازای تک تک بازدید ها نمیتوانید ریز اطلاعات همون بازدیدکننده رو ببینید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;البته سیستم گوگل مزیتهای خیلی زیادی هم داره مثلا برای وبمسترهایی که از adsence یا adword استفاده میکنند، از طریق سرویس آمار گوگل، اطلاعات خوبی در مورد اکانت تبلیغاتشون میتونن بگیرن.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;سیستم آمارگیری که قراره معرفی کنم، تمامی مشکلاتی که در بالا&amp;#160; گفته شده رو حل میکنه و به نظر من کامل ترین سیستم آمارگیری بوده که تا به حال با اون کار کردم. اسم این سیستم &lt;a title="سیستم امارگیری کلیکی" href="http://getclicky.com/139802" rel="nofollow" target="_blank"&gt;کلیکی&lt;/a&gt; (Clicky) هست به آدرس: &lt;a title="getclicky.com" href="http://getclicky.com/139802" rel="nofollow" target="_blank"&gt;getclicky.com&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a title="برای دمو، کلیک کنید" href="http://getclicky.com/139802" rel="nofollow" target="_blank"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clicky1" border="0" alt="clicky1" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=clicky1.jpg" width="304" height="248" /&gt;&lt;/a&gt; &lt;a title="سیستم امارگیری کلیکی" href="http://getclicky.com/139802" rel="nofollow" target="_blank"&gt;کلیکی&lt;/a&gt;، با یک رابط کاربری بسیار بسیار ساده میتونه اطلاعات کاملی رو برای تک تک بازدیدکننده های شما نشون بده. آمار کاملی از سایتهایی که به شما لینک داده اند و یا کلیک هایی که&amp;#160; بر روی لینکهای سایت شما به سوی آدرسهای خارج سایت شما شده، در اختیار شما قرار میده.    &lt;br /&gt; &lt;a title="سیستم امارگیری کلیکی" href="http://getclicky.com/139802" rel="nofollow" target="_blank"&gt;کلیکی&lt;/a&gt; میتونه آمار فیدبرنر شما رو هم نشون بده و با اتصال اکانت شما به توییتر، آمار توییت شدن سایت شما رو هم نشون بده. همچنین شما میتوانید با اضافه کردن آی پی آدرس هایی که نمیخواهید مانیتور شوند (مثل آی پی خودتان) آنها را از آمار حذف کنید. و البته قابلیت مقایسه آماری سایت خودتان با روزها، هفته ها و دوره های زمانی قبل، تنها با چند کلیک در پیش روی شماست. امکان محدود کردن آمار در یک مورد به خصوص نیز از قابلیت های بسیار مفید &lt;a title="سیستم امارگیری کلیکی" href="http://getclicky.com/139802" rel="nofollow" target="_blank"&gt;کلیکی&lt;/a&gt; هست. مثلا شما تمامی آماری که به شما نشون داده میشه میخواهید در مورد کاربر های باشد که با جستجوی کلمه کلیکی به سایت شما رسیده اند.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a title="برای دمو، کلیک کنید" href="http://getclicky.com/139802" rel="nofollow" target="_blank"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clicky2" border="0" alt="clicky2" align="right" src="http://mytoolbox.ir/blog/image.axd?picture=clicky2.jpg" width="304" height="262" /&gt;&lt;/a&gt; همچنین با خرید اکانت پرو در &lt;a title="سیستم امارگیری کلیکی" href="http://getclicky.com/139802" rel="nofollow" target="_blank"&gt;کلیکی&lt;/a&gt; میتونید در یک اکانت، 10 وب سایت رو مانیتور کنید و همچنین یکی از امکانات اضافی که به شما داده میشه و فوق العاده مفید هست دیدن بازدیدکننده های سایت به صورت زنده هست. به صورتی که هر کاربری که با سایت شما وارد میشه بالافاصله به شما در این قسمت نشون داده میشه به همراه اطلاعات کاملی که از کجا آمده و در حال دیدن چه صفحاتی میباشد.     &lt;br /&gt;در اکانت پرو، اطلاعات سایت شما هیچ گاه از بین نمیره و شما آمار سالهای قبل سایت رو میتونید ببینید.    &lt;br /&gt; همچنین گزارشهای اختصاصی میتوانید برای خودتان بسازید و حتی این گزارش ها رو میتونید به صورت منظم در آدرس ای میل خودتون دریافت کنید.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p dir="rtl" align="justify"&gt;&lt;a title="اکانت کلیکی" href="http://getclicky.com/stats/home?site_id=32020" rel="nofollow" target="_blank"&gt;برای دیدن امکاناتی که یک اکانت پرو در اختیار شما قرار میدهد، کلیک کنید.&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p dir="rtl" align="justify"&gt;میتوانید یک سری هدف Goal برای سایت تعریف کنید مثلا به محض ورود فلان کاربر به سایت شما و یا اگر از فلان سایت به سایت شما بازدیدکننده آمد، به توییتر شما پیغام داده بشه. همچنین یک لینک امن تعریف کنید و اون رو به شخصی که آمار سایت شما رو میخواد ببینه نشون بدید بدون اینکه یوزر پسورد بهش بدید و یا اینکه کلا آمار سایت خودتون رو عمومی کنید.    &lt;br /&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a title="برای دمو، کلیک کنید" href="http://getclicky.com/139802" rel="nofollow" target="_blank"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clicky3" border="0" alt="clicky3" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=clicky3.jpg" width="304" height="280" /&gt;&lt;/a&gt;یکی از نکات قوت &lt;a title="سیستم امارگیری کلیکی" href="http://getclicky.com/139802" rel="nofollow" target="_blank"&gt;کلیکی&lt;/a&gt;، داشتن REST API های بسیار ساده میباشد که با استفاده از آنها میتوانید گزارش های سفارشی برای خود بسازید و هر جا که میخواهید از آنها استفاده کنید. همچنین کلیکی در حال حاضر نرم افزارهای اختصاصی برای استفاده در iphone و android را طراحی کرده است. &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;بسیاری از امکانات ذکر شده در نسخه رایگان &lt;a title="سیستم امارگیری کلیکی" href="http://getclicky.com/139802" rel="nofollow" target="_blank"&gt;کلیکی&lt;/a&gt; موجود هست. شما میتونید یک اکانت رایگان در &lt;a title="سیستم امارگیری کلیکی" href="http://getclicky.com/139802" rel="nofollow" target="_blank"&gt;کلیکی&lt;/a&gt; بسازید و اگر همه چیز مورد پسند بود، یک اکانت پرو برای خودتون بخرید.     &lt;br /&gt;در اکانت پرو شما میتونید تا 10 وب سایت رو زیر نظر بگیرید و با مطالعه و مانیتور دقیق آمار وبسایت های خودتون، راه های مفیدی رو برای افزایش بازدیدکننده ها و بهبود عملکرد سایت ها پیدا کنید. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p dir="rtl" align="justify"&gt;&lt;a title="اکانت کلیکی" href="http://getclicky.com/stats/home?site_id=32020" rel="nofollow" target="_blank"&gt;برای دیدن امکاناتی که یک اکانت پرو در اختیار شما قرار میدهد، کلیک کنید.&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p dir="rtl" align="justify"&gt;اکانت پرو برای کلیکی، سالیانه 60 دلار میباشد که به نظر من در مقابل امکاناتی که به شما میدهد، هزینه معقولی می باشد. همچنین شما میتونید با خرید اکانت پرو برای مشتریان و دوستان خودتون، پورسانت هم دریافت کنید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;اگر مایل به خرید اکانت هستید، وبلاگ جعبه ابزار میتواند این کار را برای شما انجام دهد. کافیست که فقط یک بار &lt;a title="سیستم امارگیری کلیکی" href="http://getclicky.com/139802" rel="nofollow" target="_blank"&gt;کلیکی&lt;/a&gt; را امتحان کنید و در صورت نیاز به اکانت پرو با جعبه ابزار &lt;a title="تماس" href="http://mytoolbox.ir/blog/contact.aspx" target="_blank"&gt;تماس&lt;/a&gt; بگیرید.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/sTBq5H1ewYo" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/sTBq5H1ewYo/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/Clicky-Web-Analytics-in-Real-Time.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=bb1948ff-56a4-4180-8ed4-415620da7bea</guid>
      <pubDate>Sat, 09 Jan 2010 14:48:25 +0300</pubDate>
      <category>Web</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=bb1948ff-56a4-4180-8ed4-415620da7bea</pingback:target>
      <slash:comments>9</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=bb1948ff-56a4-4180-8ed4-415620da7bea</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/Clicky-Web-Analytics-in-Real-Time.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=bb1948ff-56a4-4180-8ed4-415620da7bea</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=bb1948ff-56a4-4180-8ed4-415620da7bea</feedburner:origLink></item>
    <item>
      <title>ASP.Net Database Connection Errors</title>
      <description>&lt;h3 dir="rtl" align="justify"&gt;خطاهای معمول در ارتباط با دیتابیس در ASP.NET&lt;/h3&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="YSOD" border="0" alt="YSOD" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=YSOD.png" width="324" height="258" /&gt; در برنامه نویسی وب مخصوصا از مدل ASP.Net همه چیز بعد از نوشتن کامل سایت و برنامه روی کامپیوتر خودتان، تمام نمیشود. قسمت بسیار مهمی در پیش است:     &lt;br /&gt;&lt;strong&gt;انتقال سایت به هاست اصلی در اینترنت&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;اگر در کدنویسی و طراحی HTML اصول لازم رو رعایت کرده باشید، از بابت آدرس دهی تصاویر و فایلهای استایل و اسکریپت نگرانیی نخواهید داشت. بیشترین نگرانی زمانی هست که شما از دیتابیس استفاده کرده اید. این مساله زمانی خودش رو مهمتر نشون میده که از SQL Server استفاده شده باشه.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;چرا؟ چون وقتی شما به صورت آفلاین و روی سیستم خودتون در حال برنامه نویسی و طراحی هستید، باید از SQL Server که روی دستگاه خود شما نصب است استفاده کنید. اما وقتی سایت به هاست نهایی میخواهد منتقل شود، واضح است که باید از یک دیتابیس دیگری استفاده کند.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;اولین کاری باید انجام شود، گرفتن اطلاعات SQL Server جدید هست.&amp;#160; این اطلاعات باید شامل موارد زیر باشد:&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;- آدرس اینترنتی دیتابیس که میتواند هم به صورت IP باشد هم یک آدرس URL    &lt;br /&gt;- یوزرنیم و پسورد یا همون نام کاربری و کلمه عبور!&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;با داشتن این سه مورد به سادگی میتوانید کانکشن استرینگ Connection String جدید را بسازید و آن را در وب کانفیگ web.config ذخیره کنید. دقت کنید که اسمی که برای connection قبلا روی سیستم خودتون تعریف کرده اید و تمامی دیتا کنترل ها و کدهای شما با این اسم کار میکنند، حالا باید به این connection string جدید داده شود و connection string قبلی رو چون باهاش کاری ندارید میتونید پاک کنید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;البته لازم به گفتن نیست که کار وقتی انقدر ساده هست که از connection string در تک تک قسمتهای کد خودتون که به دیتابیس نیاز داشته، به صورت مستقیم استفاده نکرده باشید! وگرنه مجبورید تو کل کد خودتون همه این قسمتها رو عوض کنید. خوب به هر حال یکی از خوبیهای استفاده از web.config برای ذخیره دستورات و متغیر هایی که در کل برنامه قابل استفاده هست، همین هست.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;برای ساختن کانکشن استرینگ برای هر مدل دیتابیس، نیازی نیست همه چیز را به خاطر بسپرید. همواره میتونید از &lt;a title="ConnectionStrings.com" href="http://www.connectionstrings.com/" rel="nofollow" target="_blank"&gt;این سایت&lt;/a&gt; استفاده کنید.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p dir="rtl" align="justify"&gt;تا اینجای کار اگر همه چی از روی اصول و سیستماتیک انجام شده باشه، زیاد سخت نبود. اما زمانی که از App_Data در ASP.Net&amp;#160; استفاده میکنید باید نیم نگاهی هم به امنیت و اجازه های دسترسی هم داشته باشید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;App_Data یکی از Folder (بخوانید فلدر؛ نخوانید فولدر!) های مخصوص در ASP.Net هست که مخصوص نگه داری فایلهای از نوع دیتابیس میباشد. از ویژگی هاش اینه که IIS فایلهای داخل اون رو به کاربر بر نمیگردونه حتی اگه آدرس درست و کامل زده شده باشه. مثلا: mysite.com/app_data/password.mdb برای شما دانلود این دیتابیس رو نتیجه نمیدهد بلکه پیغام خطایی از طرف سرور برای شما میاد با این مفهوم که شما اجازه دسترسی به این بخش رو ندارید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;بنابراین اگر از دیتابیس های فایلی مثل access یا excel یا xml یا حتی notepad استفاده میکنید میتونید اونها در داخل این فلدر قرار داده و در برنامه خودتون با آدرس دهی مناسب، به اونها دسترسی داشته باشید. وقتی اسم فلدر و فایل به میون میاد، در ویندوز بحث امنیت و اجازه دسترسی به این فایل ها و فلدر ها هم مطرح میشه.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;معمول ترین خطایی که ممکنه به شما نشون داده باشه خطای زیر هست:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Failed to update database &amp;quot;Path to your DB&amp;quot; because the database is read-only&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;دو مورد را چک کنید:&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="noReadOnly" border="0" alt="noReadOnly" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=Noreadonly.png" width="204" height="242" /&gt;1. فلدر APP_Data در حالت Read Only نباشد. البته شما ممکن است به این صورت در هاست خود به فلدر ها دسترسی نداشته باشید. باید ببینید از طریق کنترل پنل هاست میتونید attribute فلدرها و فایلهاها رو تغییر بدید یا نه. اگر اجازه این کار را نداشتید، باید به مسسول هاست تماس بگیرید و از آنها درخواست این کار را بکنید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;2. در ASP.Net در حالت پیشفرض وب سرور شما که همون IIS باشه و حداقل دیگه الان ورژن 6 باید باشه، توسط کاربر Network Service به دیتابیس شما دسترسی داره. بنابراین این حساب کاربری باید به فلدر و فایلهای شما دسترسی داشته باشه هم از نوع خوندن و هم از نوع نوشتن.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;بنابراین این حساب کاربری رو باید از بخش اجازه دسترسی یا user access یا security یا ACL یا هر چی که کنترل پنل سایت شما به اون اشاده کرده در این مورد، اضافه کنید و به اون full access بدید. &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;اگر روی لوکال و سیستم خودتون به چنین پیغامی برخورد کردید، در App_Data Folder Properties به قسمت Security رفته و Network Service را اضافه کنید و تیک Full Control را بزنید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در کنار این مشکل، ممکنه خطاهای دیگه ای هم از برنامه شما گرفته بشه که با رعایت دو نکته زیر از پس اونها هم بر خواهید آمد:    &lt;br /&gt;1. حتما به این موضوع دقت کنید که ورژن دات نت نصب شده روی سرور از ورژن مورد استفاده شما بیشتر یا برابر باشه.     &lt;br /&gt;2. در وب کانفیگ web.config قسمت customErrors را به صورت زیر تغییر دهید تا تمامی خطاهای ایجاد شده به شما نشان داده شود:&lt;/p&gt;  &lt;div class="coder"&gt;&amp;lt;customErrors mode=&amp;quot;Off&amp;quot;&amp;#160; /&amp;gt;&lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;اگر در این حالت هم جزییات خطا به شما نشان داده نشد و&amp;#160; فقط پیغام وجود خطا نمایش داده میشد، به احتمال فراوان ورژنی که شما از آن استفاده کردید در دات نت، به اونی که رو سرور هست یکی نیست و یا اینکه خود web.config شما مشکل دارد.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;وقتی که روی لوکال از SQL Express استفاده میکنیم.&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;روی سیستم خودتان و در Visual Studio کدنویسی و طراحی خود را انجام داده اید و همه چی در سرور ویژوال استودیو خوب و کامل به نظر میرسد. یعنی در ویژوال استودیو وقتی F5 را میزنید سایت کار میکند، اطلاعات دیتابیس خونده میشه، میتونید اطلاعات جدید رو وارد کنید و خلاصه همه چی همونطور هست که باید باشه&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;به علت یک سری محدودیت های وب سرور ویژوال استودیو، مجبور میشید سایت رو در IIS که روی سیستم خودتان نصب شده هم ببینید. Virtual Directory را در IIS اضافه کرده و تنظیمات مربوطه را انجام میدهید. زمانی که میخواهید سایت را از طریق IIS ببینید به مشکل زیر برمیخورید:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Login failed for user NT AUTHORITY\NETWORK SERVICE&lt;/p&gt; &lt;/blockquote&gt;  &lt;p dir="rtl" align="justify"&gt;به ویژوال استودیو برمیگردید، F5 را میزنید. همه چیز درست کار میکند. مجوزهای دسترسی رو چک میکنید. همه چیز درست است. پس اشکال از کجاست؟&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;اگر به اینجا رسیدید، میتوان یقین داشت شما از ورژن Express در SQL Server استفاده میکنید. باید بدانید این نسخه به صورت رایگان پخش شده است و فقط برای استفاده شخصی شما در سیستم خودتان در زمان برنامه نویسی هست. بنابراین دقت کنید که:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;در SQL Server Express Edition در یک زمان فقط امکان ایجاد یک ارتباط میباشد.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p dir="rtl" align="justify"&gt;خوب، پس باید ویژوال استودیو را ببندید، چند ثانیه صبر کنید.. و حالا از طریق IIS دوباره امتحان کنید. می بینید که سایت شما به درستی کار خواهد کرد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;اگر از خاصیت Attach کردن فایل mdf یه sql server express استفاده میکنید، مثلا در حالت استفاده از membership پیش فرض دات نت، ممکن است مشکل برطرف نشود. ممکن است (به هر دلیلی) این فایل mdf شما به sql server به صورت فیزیکی attach شده باشد. در این حالت باید از طریق نرم افزار SSMS یا همون نرم افزار Sql Server Management Studio به سرور express نصب شده روی لوکال خود برید و با رایت کلیک کردن روی دیتابیس مربوطه، آن را Detach کنید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;چند پیشنهاد برای مواجهه با خطای کمتر&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;- از خاصیت Attach کردن فایلهای Mdf در sql server استفاده نکنید. درصد بالایی از هاست ها مخصوصا از نوع Shared Hosting، این امکان را در SQL Server خودشون به طور کامل غیر فعال کرده اند.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;- هنگام ساختن قسمتهایی از web.config که نیاز به تعریف یک اسم دارند، مثل تعریف Provider ها و همچنین&amp;#160; connection string ها از اسامی مخصوص به خودتان استفاده کنید و از نامهای پیش فرض که در web.config یا machine.config استفاده میشه، استفاده نکنید تا جلوی تداخل های احتمالی رو بگیرید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;- در هنگامی که روی لوکال و با IIS کار میکنید، بعد از تغییراتی که روی تنظیمات IIS و مجوز های دسترسی دادید، IIS را یکبار restart کنید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در مواجهه با خطا در برنامه خودتون، نه الکی عصبی بشید نه اینکه بیخیال! به دنبال راه حل اون مشکل باشد و مطمئن باشید در این راه مطالب جدیدی را حتما یاد میگیرید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;مطالبی که عنوان شد تجربه های شخصی خودم بود و نه تمام خطاهایی که ممکن هست با اون مواجه بشید. اگر خطای دیگه ای هست به نظر شما به این موضوع ارتباط داره، عنوان کنید تا به مطلب اضافه بشه.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;*این مطالب از خودم میباشد! اگر درآن اشتباهی میبینید، ممنون میشم که اعلام کنید. استفاده از این مطلب آزاد هست و اگر دوست دارید با انصاف باشید، منبع رو هم ذکر کنید. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/m9dBWkAWbkM" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/m9dBWkAWbkM/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/ASPNet-Database-Connection-Errors.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=5451921b-9d7f-45a6-82b0-859450affd68</guid>
      <pubDate>Sun, 03 Jan 2010 16:38:02 +0300</pubDate>
      <category>ASP.Net</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=5451921b-9d7f-45a6-82b0-859450affd68</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=5451921b-9d7f-45a6-82b0-859450affd68</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/ASPNet-Database-Connection-Errors.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=5451921b-9d7f-45a6-82b0-859450affd68</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=5451921b-9d7f-45a6-82b0-859450affd68</feedburner:origLink></item>
    <item>
      <title>E-Banking in Iran</title>
      <description>&lt;h3 dir="rtl" align="justify"&gt;بانکداری الکترونیکی در ایران از نگاهی دیگر&lt;/h3&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ebanking" border="0" alt="ebanking" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=ebanking.png" width="204" height="91" /&gt; بانکداری الکترونیکی، پول الکترونیکی، پرداخت قبوض از طریق اینترنت یا خودپرداز مطالب جدیدی هستند که چند وقتی هست در تبلیغات رنگارنگ بانکهای ایرانی در تلویزیون میبینیم. حجم این تبلیغات روز به روز زیادتر میشود و البته یکی از خوبی هاش اینه که بانکها توجه خودشون رو به وعده دادن میلیاردها ریال جوایز نقدی و غیر نقدی، کمتر کرده اند؛ البته فقط یه کم.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;البته این دعوت گسترده از مردم برای استفاده از خدمات الکترونیکی بانکی در ایران، خوبی های دیگه ای هم داره که تو چند سناریو که کاملا واقعی هست و شاهد عینی خودم بودم، به اونها اشاره میشه:&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;سناریو اول&lt;/strong&gt;     &lt;br /&gt;مکان: اتاق خودم، پشت میز&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;به یک شماره حساب باید پول واریز کنم. حساب خودم بانک سامان هست. به سایت بانک سامان میرم، شماره مشتری رو وارد میکنم و وارد اینترنت بانک میشم.    &lt;br /&gt;از منوی سمت راست، انتقال وجه رو میزنم. گزینه های مثل حساب پرمراجعه اونجا هست که نمیدونم اصلا چیه. گزینه حسابهای دیگر رو میزنم. شماره حساب مقصد رو مینویسم. اما پیغام خطا میده به این شماره حساب.. خوب شاید این گزینه برای حسابهای سامان هست فقط و من باید به حساب بانک صادرات پول بریزم.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;یه مقداری تو منوها میگردم، گزینه دیگه ای پیدا نمیکنم. برمیگردم به صفحه اول سایت بانک سامان تا ببینم شماره ای چیزی پیدا میکنم که با مرکز کمک رسانیی چیزی تماس بگیرم یا نه. در قسمت تماس سایت، میتونم پیداش کنم. البته قبل از اینکه شماره رو بگیرم، به این فکر میکنم که &lt;a title="right to left خیلی وقته توی وب ابداع شده" href="http://mytoolbox.ir/blog/image.axd?picture=sb242.png" target="_blank"&gt;right to left خیلی وقته توی وب ابداع شده&lt;/a&gt;.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;تماس میگیرم و بالافاصله یکی از مسوولین جواب میده.    &lt;br /&gt;- ببخشید از کجا من میتونم پول به حساب کسی بریزم؟     &lt;br /&gt;- از قسمن مدیریت پرداخت های الکترونیکی ، به سایت تشریف ببرید ، یه عکسی هست اون پایین ، روی اون کلیک کنید و با شماره کارت و رمز خرید اینترنتی کارت وارد بشید.     &lt;br /&gt;- ممنون.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a href="http://mytoolbox.ir/blog/image.axd?picture=sb241.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="sb241" border="0" alt="sb241" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=sb241_thumb.png" width="304" height="220" /&gt;&lt;/a&gt; عجیبه که چرا این بخش حداقل در منوی بالای سایت نیست یا حداقل لینک اون در همون اینترنت بانک نیست یا اینکه کلا چرا این کار رو از همون اینترنت بانک نمیشه انجام داد! حتی در نگاه اول نمیشه این بخش که احتمالا باید مهم هم باشه رو نمیشه دید. باید اسکرول کرد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;وارد این بخش میشم. به قسمت واریز پول میرم. شماره حساب یا شماره کارت میخواد. شماره حساب رو تایپ میکنم اما جا زیاد میارم. انگار کهه باید چند تا عدد دیگه هم بنویسم..&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;شماره حسابی که دستم بود حتما درست بود چون قبلا تو خود بانک به صورت حضوری پول واریز کرده بودم بهش. به ناچار با طرف تماس میگیرم و ازش شماره کارت میخوام. اینبار به کارتش در کمتر از چندثانیه پول واریز میشه.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;به اینترنت بانک برمیگردم برای چک کردن حساب. صورت حساب امروز رو چک میکنم. خیلی تعجب میکنم وقتی میبینم 500 تومان به عنوان کارمزد از حساب من کم شده. به این فکر میکنم که در روز چه درآمدی نصیب بانک میشه از این کارمزد، و دریغ از یک طراحی مناسب برای صفحه اول سایت.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;انتقال پول همیشه در مقیاس میلیون تومن نیست که بگیم 500 تومن چیزی نیست. اگر بخواهید 3000 تومن برای کسی واریز کنید باید 3500 خرج کنید. خیلی ها برای همین 500 تومن میرن بانک و قید اینترنت رو میزنن. ای بابا، پس دوباره شد بانکداری بی الکترونیکی که.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;شاید بهتر باشه (نظر شخصی) برای انتقال پول به صورت حضوری چنین کارمزدی رو بگیرن و برای انتقال الکترونیکی کارمزد نباشه، اینجوری مردم بیشتر راغب به استفاده از بانکداری اینترنتی میشوند.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;سناریو دوم&lt;/strong&gt;     &lt;br /&gt;مکان:بانک ملت&lt;/p&gt;  &lt;p&gt;برای یک سری کار چکی و بانکی و این چیزا رفتم بانک ملت. به حساب بانک ملی شخصی هم باید پول واریز میکردم. یادم افتاد که تو تبلیغ روزنامه خونده بودم یا تو تلویزیون دیده بودم که بانک ملت سرویسی به اسم “ساتنا” راه اندازی کرده که میتونه به حسابهای بانکهای دیگه پول رو به صورت لحظه ای واریز کنه. &lt;/p&gt;  &lt;p&gt;به مسوول بانک این موضوع رو گفتم، و در پاسخ گفت: شما فقط وقتی میتونی از این سرویس ایتفاده کنی که خودت حساب جام داشته باشی. مجبور شدم 10 دقیقه بیشتر راهم رو دور کنم تا یه بانک ملی پیدا کنم.&lt;/p&gt;  &lt;p&gt;تو این 10 دقیقه نتونستم به این نتیجه برسم که چرا کل سیستم نباید هماهنگ باشه؟ هر کی ساز خودش رو میزنه. هر روز تو تبلیغات یه حساب جدید، یه کارت جدید معرفی میشه و اکثرا هم خدماتشون انحصاریه؟ یاد این دفترچه های کوچیک که مثل آلبوم هستند برای نگه داری کارتهای ویزیت میفتم. شاید برای اینکه همه کارهات سریع راه بیفته باید یکی از اون آلبوم ها داشته باشی برای کارت های بانکیت، البته تو ایران.&lt;/p&gt;  &lt;p&gt;و البته اگر هم این ساتنا قراره در شعبه ای خدمات بده که اونجا حساب داری، چرا این رو واضح در تبلیغات اعلام نمیکنند؟ دیگه این هم مگه تبلیغ ماشینه که نگران باشند با نشان دادن کامل ماشین از چند زاویه مردم منصرف از پیش خرید بشن و فقط به تصویرهای بسیار مرموز و نامفهوم تکیه کنند؟ البته از شفافیت هایی نظیر “دارای ساعت” “دارای زیرسیگاری” و البته امکانات به روزی مثل “دارای کمربند ایمنی عقب” در تبلیغات خودروهای داخلی نباید گذشت.&lt;/p&gt;  &lt;p&gt;پ.ن: &lt;a title="بخش آموزش بانک ملت" href="http://www.bankmellat.ir/ghobooz/ghobooz.htm" target="_blank"&gt;بخش آموزش بانک ملت&lt;/a&gt; جای تقدیر و تشکر دارد البته.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;سناریو سوم&lt;/strong&gt;     &lt;br /&gt;مکان:تجریش، مغازه موبایل فروشی&lt;/p&gt;  &lt;p&gt;بعد از گشت زدن در طبقه سوم پاساژ قائم (یا چندم؛ یادم نیست، 100 بار دیگه هم برم، بازم این طبقات قائم رو حفظ نمیشم.. البته این یکی ربطی به مشکلات بانکداری الکترونیکی نداره! :دی ) و تعجب چندباره از اینکه از اول تا آخر پاساژ، اختلاف قیمتی در حدود 30 هزار تومن برای یک گوشی 150 هزار تومنی وجود داشت، بالاخره گوشی رو از یه مغازه که منصف ترین بود گرفتم.&lt;/p&gt;  &lt;p&gt;موقع پرداخت صورتحساب، کارت بانکم رو دادم به فروشنده تا بکشه تو دستگاه و من به عنوان شهروند الکترونیک، پرداخت الکترونیک انجام بدم.    &lt;br /&gt;- بفرمایید، از این کارت حساب کنید. رمزش هم اینه..     &lt;br /&gt;- شرمنده، پول نقد دارید؟     &lt;br /&gt;- چرا؟ دستگاه خرابه؟     &lt;br /&gt;- نه والا، اگه از دستگاه پرداخت بشه، 3 هزار تومن کارمزد کم میشه. من قیمت پایین دادم برای سود کم، که اونم میره برای کارمزد دستگاه&lt;/p&gt;  &lt;p&gt;با رفقا که اونجا بودیم پول نقد جمع آوری کردیم و گوشی رو خریدیم. مبارکمون باشه و سود فروش این گوشی حلال فروشنده. اما بانکداری الکترونیکی به کجا میرود وقتی از شما درخواست میشود به جای کارت، پول نقد بدید؟&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;سناریو چهارم&lt;/strong&gt;     &lt;br /&gt;مکان: مغازه لباس فروشی&lt;/p&gt;  &lt;p&gt;خیلی خوشحال و خندون لباسی خریداری شد و کارت به فروشنده اعطا شد تا از اون پرداخت رو انجام بده. اما دستگاه کارت‌خون خراب بود. روش رو نگاه کردم نوشته بود مرکز در حال به روز رسانی. فروشنده گفت دو روز هست که اینجوریه و هی میگن فردا درست میشه.&lt;/p&gt;  &lt;p&gt;خوب این بار رفقا پول تو جیبشون نقدینگی لازم رو نداشت و بنابراین خریدی انجام نشد. درس عبرتی شد برای من تا پول نقد به همراه داشته باشم و به علت خطری که الکترونیک و الکتریسیته دارند و برای بدن مضر هستند، از آنها دوری کنم.&lt;/p&gt;  &lt;p&gt;نظر شما چیه؟ وضعیت راضی&amp;#160; کننده هست یا نه؟ بهتر نیست به جای تبلیغات رنگارنگ و حجیم، روی گسترش زیرساخت ها و&amp;#160; بازبینی قوانین بانکی وقت و هزینه صرف شه؟&lt;/p&gt;  &lt;p&gt;یه زمان میگفتیم این مسایل فرهنگ سازی میخواد، خیلی از مردم این مسایل رو نمیدونن و آشنا نیستند، اما الان خیلی ها آشنا هستند اما موانع انقدر هست که پشیمون میشن.&lt;/p&gt;  &lt;p&gt;برادر یا خواهر مسوول، ممنون از فرهنگ سازی شما، کافیست. حالا کمی به ساختن سیستمهای خودتون بپردازید!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/bsIbe72YBHw" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/bsIbe72YBHw/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/EBanking-in-Iran.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=1fea8f3f-46dc-4200-9c68-c766fb8d6775</guid>
      <pubDate>Mon, 28 Dec 2009 14:04:45 +0300</pubDate>
      <category>Off Topic</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=1fea8f3f-46dc-4200-9c68-c766fb8d6775</pingback:target>
      <slash:comments>6</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=1fea8f3f-46dc-4200-9c68-c766fb8d6775</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/EBanking-in-Iran.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=1fea8f3f-46dc-4200-9c68-c766fb8d6775</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=1fea8f3f-46dc-4200-9c68-c766fb8d6775</feedburner:origLink></item>
    <item>
      <title>Proper Way of Embedding Flash Movies in Webpages</title>
      <description>&lt;h3 dir="rtl" align="justify"&gt;بهترین راهکار برای قراردادن فلش در صفحات وب&lt;/h3&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 15px 15px 0px; display: inline; border-top: 0px; border-right: 0px" title="swfobject" border="0" alt="swfobject" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=swfobject.png" width="254" height="137" /&gt; استفاده از کلیپ های فلش در وب چه به صورت بنرهای تبلیغاتی و چه به صورت بخشی از طراحی سایت و منوها، از همون ابتدای به وجود اومدن فلش، مورد بحث بود. عده‌ای به طور کلی مخالف این کار هستند و برخی فقط استفاده از بنرهای فلش رو مناسب میدونند.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;به هر حال بعد از سالها همچنان استفاده کردن یا نکردن از فلش به عنوان یک استاندارد بیان نشده است اما بر روی چگونگی به کار گزفتن آنها در وب، بسیار بحث شده است.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;توجه به نکاتی مثل افزایش حجم صفحه و طولانی شدن مدت دانلود و نمایش صفحه همواره باید مورد توجه باشد. اگر یک بنر فلش که باید بالافاصله در چشم بازدید کننده بیاد تا نظر اون رو جلب کنه، انقدر حجم بالایی داشته باشه که تا بخواد لود بشه، بازدیدکننده از صفحه رفته، اون وقت دیگه این بنر به چه دردی میخوره؟&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;و یا برای طراحی های حجیم که لود شدن فلش ممکن است طول بکشد، نشان دادن یه چیزی به بازدیدکننده مثل درصد لود شدن فلش و یا حتی یک کلمه “Loading” ضروری به نظر میرسد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;اما در نهایت، این کلیپ یا بنر یا نمونه کار فلش رو باید در وب جای سازی کنیم. کد اچ تی ام ال که از دیرباز مورد استفاده قرار میگرفت به صورت زیر بود:&lt;/p&gt;  &lt;div class="coder"&gt;&amp;lt;object    &lt;br /&gt;classid=&amp;quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&amp;quot;     &lt;br /&gt;codebase=&amp;quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0&amp;quot;     &lt;br /&gt;width=&amp;quot;300&amp;quot; height=&amp;quot;300&amp;quot;&amp;gt;     &lt;br /&gt;&amp;lt;param name=&amp;quot;movie&amp;quot; value=&amp;quot;movie.swf&amp;quot;&amp;gt;     &lt;br /&gt;&amp;lt;embed src=&amp;quot;movie.swf&amp;quot; quality=&amp;quot;high&amp;quot; width=&amp;quot;300&amp;quot; height=&amp;quot;300&amp;quot;     &lt;br /&gt;name=&amp;quot;movie&amp;quot; type=&amp;quot;application/x-shockwave-flash&amp;quot;     &lt;br /&gt;pluginspage=&amp;quot;http://www.macromedia.com/go/getflashplayer&amp;quot;&amp;gt;     &lt;br /&gt;&amp;lt;/object&amp;gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;اما این کد به علت وجود تگ embed استاندارد نیست!&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;استاندارد سازی این کد از یک طرف و ایجاد امکاناتی از قبیل ارتباط با فلش از طریق جاوااسکریپت، تشخیص ورژن فلش پلیر و آپدیت خودکار اون در صورت نیاز و مواردی دیگر باعث به وجود آمدن قطعه کد و تکنیک جدیدی در جاوااسکریپت به نام &lt;a title="swfobject" href="http://code.google.com/p/swfobject/" target="_blank"&gt;swfobject&lt;/a&gt; شد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;نمونه کدی که برای استفاده از فلش در صفحات وب استاندارد میشود به صورت زیر است:&lt;/p&gt;  &lt;div class="coder"&gt;&amp;lt;object classid=&amp;quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&amp;quot;    &lt;br /&gt;width=&amp;quot;300&amp;quot; height=&amp;quot;300&amp;quot; id=&amp;quot;movie1&amp;quot;&amp;gt;     &lt;br /&gt;&amp;lt;param name=&amp;quot;movie&amp;quot; value=&amp;quot;movie.swf&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;lt;param name=&amp;quot;quality&amp;quot; value=&amp;quot;high&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;lt;param name=&amp;quot;allowfullscreen&amp;quot; value=&amp;quot;false&amp;quot; /&amp;gt;     &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;&amp;lt;!--[if !IE]&amp;gt;--&amp;gt;     &lt;br /&gt;    &lt;br /&gt;&amp;lt;object type=&amp;quot;application/x-shockwave-flash&amp;quot;     &lt;br /&gt;data=&amp;quot;movie.swf&amp;quot; width=&amp;quot;300&amp;quot; height=&amp;quot;300&amp;quot;&amp;gt;     &lt;br /&gt;&amp;lt;param name=&amp;quot;quality&amp;quot; value=&amp;quot;high&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;lt;param name=&amp;quot;allowfullscreen&amp;quot; value=&amp;quot;false&amp;quot; /&amp;gt;     &lt;br /&gt;    &lt;br /&gt;&amp;lt;!--&amp;lt;![endif]--&amp;gt;     &lt;br /&gt;    &lt;br /&gt;شما باید فلش پلیر نصب کنید     &lt;br /&gt;    &lt;br /&gt;&amp;lt;!--[if !IE]&amp;gt;--&amp;gt;     &lt;br /&gt;&amp;lt;/object&amp;gt;     &lt;br /&gt;&amp;lt;!--&amp;lt;![endif]--&amp;gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;این کد هم استاندارد هست و هم با تمامی مرورگرهای امروزی سازگار.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;نقش swfobject چیست؟ &lt;/strong&gt;    &lt;br /&gt;توسط این کتابخونه جاوا اسکریپتی، امکانات اضافی در اختیار ما قرار داده میشود. ابتدا باید این فایل رو به صفحه خودمون اضافه کنیم. گوگل این فایل را در شبکه CDN خودش قرار داده است. پس چه بهتر که به صورت زیر استفاده کنیم:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;      &lt;br /&gt;src=&amp;quot;http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js&amp;quot;&amp;gt;       &lt;br /&gt;&amp;lt;/script&amp;gt; &lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;حالا به توابع swfobject دسترسی داریم. توسط این توابع میتوانیم مقادیری را به صورت داینامیک به فلش ارسال کنیم و همینطور فایل فلش را هم به صورت داینامیک لود کنیم:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;      &lt;br /&gt;&amp;lt;html xmlns=http://www.w3.org/1999/xhtml&amp;quot; lang=&amp;quot;en&amp;quot; xml:lang=&amp;quot;en&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;head&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; src=&amp;quot;http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/script&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var flashvars = {};       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var params = {};       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; params.menu = &amp;quot;false&amp;quot;;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; params.quality = &amp;quot;high&amp;quot;;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; params.allowfullscreen = &amp;quot;false&amp;quot;;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var attributes = {};       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; swfobject.embedSWF(&amp;quot;untitled.swf&amp;quot;, &amp;quot;movieDIV&amp;quot;, &amp;quot;800&amp;quot;, &amp;quot;600&amp;quot;, &amp;quot;9.0.0&amp;quot;, false, flashvars, params, attributes);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/script&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/head&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;body&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;div id=&amp;quot;movieDIV&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; شما باید فلش پلیر نصب کنید       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/div&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/body&amp;gt;       &lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;در این مثال یک تگ div با آی دی movieDIV ایجاد کرده ایم و توسط جاوا اسکریپت، فلش را داخل آن قرار میدهیم. کار بسیار ساده هست. اگر فلش پلیر موجود نباشد، متن داخل div نمایش داده خواهد شد: “شما باید فلش پلیر نصب کنید” &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;این مدل، یک مشکل دارد و اون هم وابستگی به جاوا اسکریپت هست. اگر بازدیدکننده سایت شما جاوا اسکریپت نداشته باشد، نمیتواند فلش شما را ببیند. بنابراین اگر در مورد این مساله حساس هستید، از قطعه کدی در بالاتر ذکر شد میتوانید استفاده کنید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;شما نیازی نیست این کدها رو خودتون بنویسید! تیم سازنده swfobject برای شما یک برنامه نوشته که شما فقط پارامترها را مشخص میکنید و اون خودش چه به صورت داینامیک و چه به صورت قطعه کد استاتیک، کد نهایی را به شما میدهد. از آنجا که دسترسی به گوگل کد، برای ما مقدور نیست، من این برنامه تولید کننده کد رو آپلود کردم که میتونید از لینک زیر دانلود کنید:    &lt;br /&gt;&lt;a title="swfobject generator 1.2 html" href="http://www.4shared.com/file/179543877/340d32d8/swfobject_generator_1_2_html.html" target="_blank"&gt;swfobject generator 1.2 html&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;نکته ای در مورد ExpressInstall&lt;/strong&gt;     &lt;br /&gt;یکی از امکاناتی که توابع ExpressInstall در فلش به شما میدهد این است که ورژن فلش پلیر را در سیستم بازدیدکننده چک می کند و اگر ورژن قدیمی داشت به او پیغام داده می شود که باید ورژن جدیدتر را بگیرد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در مجموعه swfobject یک فایل فلش با اکشن اسکریپت های مناسب طراحی شده است تا این کار را برای شما انجام دهد. پس اگر از این امکان میخواهید استفاده کنید، در هنگام ساختن کد مورد نظر از طریق swfobject generator تیک این گزینه را بزنید. همچنین نیاز به خود این فایل هم دارید که به همون دلیل گفته شده در بالا، من تمامی فایلهای مربوط به این پروژه در گوگل کد را آپلود کردم که میتونید از لینک زیر دانلود کنید:    &lt;br /&gt;&lt;a title="swfobject version 2.2" href="http://www.4shared.com/file/179543878/a4b22f49/swfobject_2_2.html" target="_blank"&gt;swfobject version 2.2&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;جلوگیری از خطای Nested Object      &lt;br /&gt;&lt;/strong&gt;در حالت استفاده از قطعه کد استاتیک، اگر به خطای زیر برخورد کردید:&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;Active Server Pages error 'ASP 0139'      &lt;br /&gt;Nested Object &lt;/p&gt;    &lt;p&gt;An object tag cannot be placed inside another object tag.&lt;/p&gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;فقط کافی هست که اولین تگ object را به صورت زیر تغییر دهید تا مشکل دیدن دو تگ object داخل هم از بین برود:&lt;/p&gt;  &lt;div class="coder"&gt;&amp;lt;%=&amp;quot;&amp;lt;&amp;quot;%&amp;gt;object classid=&amp;quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&amp;quot;&amp;gt;   &lt;br /&gt;&amp;lt;param name=&amp;quot;movie&amp;quot; value=&amp;quot;movie.swf&amp;quot; /&amp;gt;    &lt;br /&gt;.    &lt;br /&gt;.    &lt;br /&gt;.    &lt;br /&gt;&amp;lt;!--[if !IE]&amp;gt;--&amp;gt;    &lt;br /&gt;    &lt;br /&gt;&amp;lt;object type=&amp;quot;application/x-shockwave-flash&amp;quot; data=&amp;quot;movie.swf&amp;quot;&amp;gt;    &lt;br /&gt;.    &lt;br /&gt;.    &lt;br /&gt;.    &lt;br /&gt;&amp;lt;!--&amp;lt;![endif]--&amp;gt;    &lt;br /&gt;شما باید فلش پلیر نصب کنید    &lt;br /&gt;&amp;lt;!--[if !IE]&amp;gt;--&amp;gt;    &lt;br /&gt;&amp;lt;/object&amp;gt;    &lt;br /&gt;&amp;lt;!--&amp;lt;![endif]--&amp;gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;*این مطالب از خودم میباشد! اگر درآن اشتباهی میبینید، ممنون میشم که اعلام کنید. استفاده از این مطلب آزاد هست و اگر دوست دارید با انصاف باشید، منبع رو هم ذکر کنید.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/M1tDnf_613M" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/M1tDnf_613M/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/Proper-Way-of-Embedding-Flash-Movies-in-Webpages.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=4d2683cb-e942-4e10-9f9c-62898abab0b9</guid>
      <pubDate>Wed, 23 Dec 2009 15:58:45 +0300</pubDate>
      <category>Web</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=4d2683cb-e942-4e10-9f9c-62898abab0b9</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=4d2683cb-e942-4e10-9f9c-62898abab0b9</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/Proper-Way-of-Embedding-Flash-Movies-in-Webpages.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=4d2683cb-e942-4e10-9f9c-62898abab0b9</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=4d2683cb-e942-4e10-9f9c-62898abab0b9</feedburner:origLink></item>
    <item>
      <title>Google Pagerank</title>
      <description>&lt;h3 dir="rtl" align="justify"&gt;کاهش pagerank سایت شما در گوگل&lt;/h3&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;img style="border-right-width: 0px; margin: 0px 15px 15px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Google Pagerank" border="0" alt="Google Pagerank" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=pagerank.jpg" width="304" height="229" /&gt; Pagerank در گوگل یک عدد بین 0 تا 10 میباشد که به مفهوم رتبه صفحه وب از دید گوگل است. این مقدار بستگی به شرایط زیادی دارد و گوگل برای محاسبه آن الگوریتم های پیچیده ای را در نظر گرفته که البته در مدل محاسبه خودش هم تغییراتی رو هر سال انجام میده. شاید به زبان خیلی ساده بشه گفت که pagerank یک صفحه میزان محبوبیت اون صفحه رو در اینترنت “از دید گوگل” بیان میکند.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;pagerank به طور کلی موجود پیچیده و ناشناخته‌ای هست که به نظر من بیش از حد به اون پرداخته شده در حالیکه انقدر هم مهم و تعیین کننده برای یک وبسایت نیست! چه داخل و چه خارج ایران برخی شرکت ها و اشخاص با روشهایی در برابر پرداخت هزینه از طرف شما، pagerank سایت شما را بالا می برند و کم نیستند اشخاصی هرچند متخصص که برای رتبه بندی و مقایسه وب سایتها فقط به همین pagerank گوگل توجه میکنند.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در یک سال اخیرگوگل در سیستم pagerank خودش تغییراتی رو به وجود آورد که در نتیجه این تغییرات رتبه صفحه یا همون pagerank تعدادی از سایت ها و وبلاگ ها کاهش چشمگیری داشته به طوریکه سایتهای بزرگ در اینترنت نیز به این مساله پرداختند چرا که برای همه این کاهش رتبه عجیب بود و عجیب تر از اون اینکه رتبه برخی سایتهای نسبتا بزرگ که خودشون منبع اخبار و اطلاعات در اینترنت بودند نیز کاهش یافته است.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;با اینکه بحث های زیادی در این مورد، در چند ماه اخیر در سایت های بزرگ مثل techcrunch انجام شده، اما مسوولین گوگل به صورت واضح در این مورد پاسخی نداده‌ند و تنها به مسایلی اشاره کرده اند که برخی از آنها حرفهای همیشگی و تکراری هست. از نظر گوگل این کاهش رتبه صفحات به دلایل زیر است:&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;- سایتهایی که به هر شکلی قصد گول زدن گوگل رو در جهت افزایش رتبه اونها در جستجوها، دارند. &lt;a href="http://mytoolbox.ir/blog/post/Spam-Report-from-Google-Webmaster-Tools.aspx"&gt;توضیح بیشتر&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;- یکی از شرایط بالا رفتن رتبه صفحات در گوگل، لینکهایی هست که سایتهای با رتبه بالاتر به اون صفحه بدهند. برای همین برخی از سایتها که رتبه بالایی در گوگل دارند، جدا از اینکه این رتبه از چه راهی به دست آمده، اقدام به فروش لینک در سایت خود میکنند. این مساله در بین برخی سایتهای ایرانی هم کاری معمول شده است. باید دقت کنید که گوگل به شدت با این مساله در یک ماه اخیر برخورد کرده است و رتبه سایتهایی که این ترفند رو به کار میبرند، در برخی موارد حتی 3 تا 4 رتبه پایین برده است.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;- رعایت نکردن استانداردهای وب و ضعف صفحهات از نظر وب مفهومی semantic web&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;اما برخی کارشناسان این کم شدن pagerank رو حاصل سیاست جدید گوگل میدونند که قصد داره مفهوم pagerank رو در بین اهالی اینترنت کم رنگ تر کنه. مفهومی که به نظر خودم هم زیاد نشون دهنده بهتر یا بدتر بودن چند وب سایت در مقایسه با هم نیست. همچنین گفته میشود گوگل با این کاهش، قصد از بین بردن بازار خرید فروش لینک ها در وب سایت های با رتبه بالا رو داشته تا باز هم نشون بده که معروف شدن سایت شما و ایندکس شدن سایت شما در گوگل، فقط همین مورد نیست! به موارد دیگر هم فکر کنید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;البته این حرکت گوگل، مورد اعتراض برخی سایتها قرار گرفته مبنی بر اینکه هر سایتی که در صفحات خود لینکهای زیادی داشت دلیل بر این نیست که برای اون لینکها پولی رو دریافت کرده باشه. مثلا سایتهای خبری در این دسته هستند.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;این مورد برای چند تا از وبسایتهای خود من هم اتفاق افتاد چند روز پیش که در واقعی مقدمه ای شد برای نوشتن این مطلب. اما بازبینی ترافیک و آمار سایتهایی که pagerank از دست داده اند، کاملا نامربوط بودن pagerank صفحات به ایندکس شدن صفحات در گوگل رو حداقل به خود من نشون داد. در ترافیک سایت از طرف جستجوی گوگل هیچ نغییری ایجاد نشده و جایگاه وب سایت ها برای برخی کلمات کلیدی در گوگل، همانند قبل هست. بنابراین من شخصا هیچ نگرانی از این مساله برام پیش نیومد :دی&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;اگر شما هم با این مساله مواجه شدید:    &lt;br /&gt;اول: اصلا نترسید، هول هم نکنید! هیچ اتفاق به خصوصی نیوفتاده. شما از گوگل حذف نشدید. شما همچنان در جستجوهاس گوگل مثل قبل خواهید بود.     &lt;br /&gt;دوم: شاید این بهانه ای برای شما بشه که بیشتر به ساختار سایت خودتون اهمیت بدید، اصلاحاتی رو در اون انجام بدید و به بهتر دیده شدن سایت خودتون توسط سرچ انجین ها فکر کنید.     &lt;br /&gt;سوم: اصلا قضیه pagerank را فراموش کنید! به آمار و ترافیک سایت خودتون رجوع کنید و اونها رو آنالیز کنید.     &lt;br /&gt;چهارم: اگر در خرید و فروش لینک برای بالا بردن pagerank فعالیت دارید، اگر خریدار بوده اید، سعی کنید دیگه این کار رو نکنید. اگر فروشنده هستید، بهتر است به فکر فعالیتی دیگر باشید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در نهایت، به فکر تبلیغات سایت خود باشید، به دنبال لینک گذاشتن در وب سایت و وب لاگ دوستان باشید، اما نه برای بالا بردن pagerank؛ بلکه برای بالا بردن ترافیک و بازدید کننده های وبسایت خودتون، این کار رو بکنید!&lt;/p&gt;  &lt;blockquote&gt;   &lt;p dir="rtl" align="justify"&gt;تبلیغات در اینترنت برای بالا بردن رتبه صفحه شما برای گوگل نیست.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p dir="rtl" align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;*این مطالب از خودم میباشد! اگر درآن اشتباهی میبینید، ممنون میشم که اعلام کنید. استفاده از این مطلب آزاد هست و اگر دوست دارید با انصاف باشید، منبع رو هم ذکر کنید.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/C3v1jebgmyk" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/C3v1jebgmyk/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/Google-PageRank.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=ce7273b9-e87a-47d3-8195-0c215891d764</guid>
      <pubDate>Mon, 14 Dec 2009 15:30:34 +0300</pubDate>
      <category>Web</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=ce7273b9-e87a-47d3-8195-0c215891d764</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=ce7273b9-e87a-47d3-8195-0c215891d764</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/Google-PageRank.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=ce7273b9-e87a-47d3-8195-0c215891d764</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=ce7273b9-e87a-47d3-8195-0c215891d764</feedburner:origLink></item>
    <item>
      <title>Webmaster Tools</title>
      <description>&lt;h3 dir="rtl" align="justify"&gt;بالا بردن کیفیت وب‌سایت، با کمک ابزار بهینه سازی؛ مخصوص وب‌مسترها&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://mytoolbox.ir/blog/image.axd?picture=googlebingyahoo.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 15px 15px 0px; display: inline; border-top: 0px; border-right: 0px" title="googlebingyahoo" border="0" alt="googlebingyahoo" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=googlebingyahoo_thumb.jpg" width="244" height="133" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;یکی از مهمترین مسایلی که همواره چه در زمان طراحی، چه در زمان اجرا و همچنین در زمان نگهداری و به روزرسانی یک وب‌سایت همواره باید به آن توجه داشت، رتبه سایت در موتورهای جستجو و نحوه ایندکس شدن آن توسط این سرویس ها می‌باشد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در کنار برنامه های تبلیغاتی شما برای وبسایت خود، هیچ گاه نباید فراموش کنید که همچنان درصد زیادی از کاربران اینترنت، وبسایت ها را از طریق جستجو، شناسایی میکنند و از آن بازدید میکنند. پس یکی از اصول مهم در ایجاد ترافیک برای سایت شما، موتورهای جستجو هستند. باید همواره تلاش کنید تا در میان انبوه وب سایت های موجود، سایت شما رتبه بالاتری پیدا کند تا بتواند ترافیک بیشتری به خود راه دهد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;برای افزایش محبوبیت سایت خود در موتورهای جستجو چه باید کرد؟ به راه های متعددی می توان اشاره کرد:   &lt;br /&gt;- استفاده از کدها و الگوهای طراحی استاندارد و اصولی    &lt;br /&gt;- رعایت اصول سئو SEO    &lt;br /&gt;- به روز نگاه داشتن سایت و یا وبلاگ با مطالب پرطرفدار، جدید و خلاقانه    &lt;br /&gt;- تبلیغات آنلاین و یا تبادل لینک    &lt;br /&gt;- و …&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در این پست، قصد توضیح این موارد نیست، بلکه معرفی سیستمهایی مد نظر هست که به شما کمک میکند، راهنمایی میکند و حتی پیشنهاد میدهد که چه بکنید تا وب سایت شما بهتر در موتورهای جستجو دیده شود.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;این ابزار به شکلهای متفاوت توسط سه کمپانی مایکروسافت بینگ، گوگل و یاهو، تا کنون معرفی شده است. نحوه کار با آنها زیاد پیچیده نیست. در هر سه مدل این سرویس ها، ابتدا شما باید وارد سایت شده و با نام کاربری مخصوص هر یک، لاگین کنید. &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;ابزار وب‌مستر گوگل&lt;/strong&gt;    &lt;br /&gt;&lt;a title="http://www.google.com/webmasters/" href="http://www.google.com/webmasters"&gt;http://www.google.com/webmasters&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a title="Google Webmaster Tools" href="http://www.google.com/webmasters/"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="googlewebmastertools" border="0" alt="googlewebmastertools" src="http://mytoolbox.ir/blog/image.axd?picture=googlewebmastertools.jpg" width="304" height="175" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;ابزار وب‌مستر بینگ مایکروسافت&lt;/strong&gt;    &lt;br /&gt;&lt;a title="http://www.bing.com/webmaster" href="http://www.bing.com/webmaster"&gt;http://www.bing.com/webmaster&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a title="Bing Webmaster Center" href="http://www.bing.com/webmaster"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="bingwebmastercenter" border="0" alt="bingwebmastercenter" src="http://mytoolbox.ir/blog/image.axd?picture=bingwebmastercenter.jpg" width="304" height="150" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;ابزار وب‌مستر یاهو&lt;/strong&gt;    &lt;br /&gt;&lt;a title="http://siteexplorer.search.yahoo.com/" href="http://siteexplorer.search.yahoo.com"&gt;http://siteexplorer.search.yahoo.com&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a title="Yahoo Site Explorer" href="http://siteexplorer.search.yahoo.com/"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="yahoositeexplorer" border="0" alt="yahoositeexplorer" src="http://mytoolbox.ir/blog/image.axd?picture=yahoositeexplorer.jpg" width="304" height="134" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;بعد از ورود به هر یک از سرویس ها، باید سایت یا وبلاگ خودتون رو به اون اضافه کنید. محدودیتی در تعداد سایت های اضافه شده در یک اکانت وجود ندارد و میتوانید تمامی بلاگ ها و سایت های خودتون رو در یک اکانت وارد کنید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در تمامی سرویس ها، برای اطمینان از اینکه اطلاعات فقط به صاحب سایت داده می شود، از شما درخواست میشود تا این موضوع رو از 2 روش برای آنها اثبات کنید:&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;روش اول، اضافه کردت کد اچ‌تی‌ام‌ال: &lt;/strong&gt;    &lt;br /&gt;این روش مناسب صاحبین سرویس های وبلاگ و یا CMS ها میباشد که ممکن است به فضای FTP سایت خودشون دسترسی نداشته باشند. به این ترتیب که به شما یک کد HTML که معمولا یک کد meta tag هست داده میشه و از شما خواسته میشه که این کد رو در سورس سایت و یا وبلاگ خودتون قرار بدید تا به این صورت سرویس بتونه سایت شما رو اعتبارسنجی کنه و مطمئن شه شما صاحب آن هستید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;روش دوم، آپلود کردن یک فایل بر روی هاست:&lt;/strong&gt;    &lt;br /&gt;در این روش اگر شما به فضای هاست خودتون دسترسی دارید میتونید فایلی که خود سرویس به شما میه، در سایت آپلود کنید تا اعتبارسنجی انجام بشه.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;بعد از این مرحله، سایت شما برای آنالیز شدن آماده هست و البته باید حداقل دو روز صبر کنید تا اطلاعات مربوط به سایت شما که در این سرچ انجین ها ثبت شده جمع اوری شه و به شما نشون داده بشه. در این فاصله شما میتونید یک سری تنظیمات رو برای سایت انجام بدید. تقریبا هر سه سرویس در این مورد هم مشابه هستند.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;معرفی لینک sitemap و feed سایت شما به این سرویس ها:&lt;/strong&gt;    &lt;br /&gt;با این کار، هم&amp;#160; لطف بزرگی به این سرچ انجین ها کرده اید هم کمک زیادی به بالارفتن میزان ایندکس شدن سایت خودتون کردید. به این ترتیب سرچ انجین ها میتوانند اسکلت سایت شما رو از روی سایت مپ متوجه شده و مطالب شما رو از روی فید، دنبال کنند.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;اصلاح آدرس صفحات داینامیک و مشابه:&lt;/strong&gt;    &lt;br /&gt;اگر سایت شما از کوئری استرینگ استفاده میکند، ممکن است برخی از این کوئری استرینگ ها تنها برای رد و بدل کردن اطلاعات خاصی که پشت پرده در هنگام برنامه نویسی از آنها استفاده میشود، به کار رفته باشد. به این ترتیب وجود این کوئری استرینگ ها در تولید صفحه نقشی ندارند، اما همین وجود آنها، باعث به وجود آمدن چند آدرس برای یک صفحه میشود. این مساله، هم به رتبه دهی سایت شما لطمه میزند و هم ممکن است توسط سرچ انجین به علت تولید مطالب یکسان در آدرس های مختلف، امتیاز منفی هم بگیرید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در این حالت باید این کوئری استرینگ رو شناسایی کرده و اون رو به این سرویس ها معرفی کنید و تنظیم کنید که اون رو در نظر نگیره. مثلا دو آدرس زیر از نظر کاربر نهایی و سرچ انجین ها یکسان هستند:&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;http://mytoolbox.ir/article.aspx?view=25&amp;amp;sessionID=66658   &lt;br /&gt;http://mytoolbox.ir/article.aspx?view=25&amp;amp;sessionID=25419&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;sessionID برای اهداف برنامه نویسی ممکن است به کار رفته باشد و یا حتی برای جلوگیری از کش شدن صفحه، به هر حال، تاثیری در صفحه نهایی ندارد. بنابراین باید در این سرویس ها، کلمه sessionID تنظیم شود که ignore یا exclude شود.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;با همین دو کار که گفته شد، بعد از چند هفته، حتما تاثیر مثبت ان را در سایت و یا وبلاگ خودتون خواهید دید.   &lt;br /&gt;هر کدام از این سرویس ها، تنظیمات مخصوصی هم دارد. مثلا در گوگل شما این امکان رو دارید که تنظیم کنید گوگل سایت شما را با www نگاه کند یا بدون آن. مثلا اگر تنظیم کنید بدون www یعنی به صورت mytoolbox.ir به سایت نگاه کند، به صورت اتوماتیک تمامی آدرسهایی که از سایت شما با www دارد را به مدل جدید تغییر میدهد که البته این تغییر، چند هفته ای طول خواهد کشید!&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;بعد از چند روز که اطلاعات سایت شما جمع آوری شد، با بررسی این اطلاعات میتوانید به بهینه سازی سایت خودتون مشغول شوید. اطلاعاتی که این سرویس ها به شما میدهند شامل موارد زیر میباشد که البته کاملا به همین صورت در هر سه سرویس نیست، اما در نگاه کلی چنین است و در جزء، با هم تفاوت دارند.&lt;/p&gt;  &lt;ul dir="rtl"&gt;   &lt;li&gt;     &lt;div dir="rtl" align="justify"&gt;مشکلاتی که سرچ انجین در زمان بازدید سایت شما به آنها برخورد کرده است. مثل نداشتن فایل robots.txt یا نداشتن اجازه دسترسی به صفحات و یا وجود صفحات تکراری&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;سایتهای که به سایت شما لینک داده اند و سایت هایی که شما از سایت خودتون به آنها لینک داده اید.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div dir="rtl" align="justify"&gt;کلمات کلیدی سایت شما به تشخیص سرچ انجین و همچنین کلماتی که کاربران با جستجوی انها به سایت شما رسیده اند.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div dir="rtl" align="justify"&gt;صفحات ایندکس شده شما در سرچ انجین&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p dir="rtl" align="justify"&gt;   &lt;br /&gt;همچنین سرویس گوگل به شما پیشنهادهایی برای بهتر شدن سایت و صفحه های داخلی آن می‌هد که البته اکثرا در راستای جلوگیری از ایجاد مطالب یکسان با آدرس های تکراری می‌باشد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;شاید در نگاه اول، اطلاعاتی که به شما داده میشود کم اهمیت جلوه کند، اما مطالعه روی این اطلاعات و شناخت رفتار سرچ انجین ها در برابر تغییرات سایت شما، از قدرتمندترین اقداماتی میتونه باشه که برای بهینه ساختن یک وب سایت برای موتورهای جستجو و بالا بردن رتبه سایت، میتونید انجام بدید.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p align="justify"&gt;فراموش نکنید این اطلاعات توسط نرم افزارهای شرکت های دیگر به شما داده نشده. این اطلاعات از قلب خود سرچ انجین هایی که روزانه میلیونها نفر در حال جستجو در آنها هستند، بیرون می آید. پس میتواند مطمئن ترین روش و سالم ترین اطلاعات رو به شما نشون بده.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p dir="rtl" align="justify"&gt;بسیار توصیه میشه که در کنار روش های دیگری که دارید مثل تبلیغات و استاندارد سازی وب و اصول سئو، حتما از این ابزارها هم استفاده کنید و اطلاعات آنها رو مورد مطالعه قرار دهید.   &lt;br /&gt;این اطلاعات حتی برای بازاریابی سایت و محصولات و خدمات شما هم به درد میخورند، چرا که شما میتوانید از روی کلمه های جستجو شده و کلمات کلیدی سایت خود، برنامه ریزی هایی رو جهت رشد سایت و سرویس خودتون انجام بدید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;*این مطالب از خودم میباشد! اگر درآن اشتباهی میبینید، ممنون میشم که اعلام کنید. استفاده از این مطلب آزاد هست و اگر دوست دارید با انصاف باشید، منبع رو هم ذکر کنید.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/dz8Ml6VCHlM" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/dz8Ml6VCHlM/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/Webmaster-Tools.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=f1769df6-5749-4e7a-a81a-3f09ec8a3207</guid>
      <pubDate>Tue, 08 Dec 2009 22:52:42 +0300</pubDate>
      <category>Web</category>
      <category>Tools</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=f1769df6-5749-4e7a-a81a-3f09ec8a3207</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=f1769df6-5749-4e7a-a81a-3f09ec8a3207</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/Webmaster-Tools.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=f1769df6-5749-4e7a-a81a-3f09ec8a3207</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=f1769df6-5749-4e7a-a81a-3f09ec8a3207</feedburner:origLink></item>
    <item>
      <title>Spam Report from Google Webmaster Tools</title>
      <description>&lt;h3 dir="rtl" align="justify"&gt;گزارش اسپم به گوگل &lt;/h3&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;img style="border-right-width: 0px; margin: 0px 15px 15px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="google-webmaster-spam" border="0" alt="google-webmaster-spam" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=google-webmaster-spam.jpg" width="204" height="134" /&gt; چندی پیش در فرندفید بحثی در راستای برخی سایتهای فارسی شد که با ساختن محتوای نامربوط و گول زدن سرچ انجین ها مثل گوگل، در نتایج جستجوی برخی کلمات، رتبه بالایی پیدا کرده‌اند و در واقع به نوعی در حال اسپم کردن گوگل هستند. &lt;a title="Report Spams to Google" href="http://imilad.com/1388/08/24/google-fake-results/" rel="nofollow"&gt;(در این زمینه این پست ار وبلاگ میلاد را بخوانید)&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;این نوع سایتها در واقع یا از خودشون چیزی ندارند و یا مطالب دیگر وبسایتها را کپی برداری کرده و با ایجاد کلمات کلیدی گوناگون و نامربوط به سایتشون، رتبه خودشون رو در گوگل بالا می‌برند، بنابراین هنگام سرچ کردن، نتیجه اول تا پنجم می‌آیند و با کلیک کردن یوزر روی لینک اونها، این رتبه بالاتر هم میره. &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;سایتهای آگهی را هم به این گروه اضافه کنید که با این روش سعی در بالابردن رنک خود در گوگل شده تا با استناد به رتبه خودشون، بتونن یوزر ها رو تشویق به تبلیغ در سایت خودشون بکنن. البته همه سایت های تبلیغاتی این گونه نیستند و استثنا هم وجود دارد. &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;سرویس سرچ و ایندکس کردن گوگل، تا حدود زیادی میتونه جلوی اسپم رو بگیره و تشخیص بده که سایتی که قراره ایندکس کنه، جزو اسپمرها محسوب میشه یا نه. اما رشد قارچ گونه این سرویس ها، بعضی وقت ها گوگل رو هم دچار مشکل میکنه.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در همین راستا گوگل از همه یوزرهاش دعوت میکنه که توسط &lt;a title="Google Webmaster Tool" href="https://www.google.com/webmasters/tools/spamreport?hl=en&amp;amp;pli=1" rel="nofollow"&gt;فرمی&lt;/a&gt; که در سایتش گذاشته، این موارد اسپم رو بهش معرفی کنند که این مورد در پست میلاد کاملا توضیح داده شده.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در وبلاگ های فارسی کمتر به موضوعاتی مثل اسپم، اشاره شده برای همین فکر کردم یک سری توضیحات در مورد انواع اسپم از دید گوگل که البته یک سری مفاهیم جامع هستند، بتونه فایده داشته باشه. شاید که برخی از این موارد در مورد سایت شما هم صدق کنه در حالی که نمیدونید با این کار دارید اسپم میکنید و دیر یا زود در لیست سیاه سرچ انجین ها قرار خواهید گرفت.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در &lt;a title="Google Webmaster Tool" href="https://www.google.com/webmasters/tools/spamreport?hl=en&amp;amp;pli=1" rel="nofollow"&gt;فرمی&lt;/a&gt; که در سایت گوگل وجود داره، از شما خواسته شده که نوع اسپمی که دارید گزارش میکنید هم مشخص کنید که توضیح هر مورد رو در ادامه میارم:&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;&lt;u&gt;Hidden text or links&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;وقتی که گوگل به صفحه شما سر میزنه که اون رو برای خودش ذخیره کنه و در سرچ از اون استفاده کنه، طرح گرافیکی که بقیه آدم ها میبینن رو نمیبینه. به زبون خیلی ساده، اون در واقع سورس صفحه رو میبینه. حالا فرض کنیم که یک سایت با زمینه سفید، شروع به نوشتن ده ها و صد ها کلمه با رنگ سفید در انتهای صفحه بکنه. در واقع با این کار کلمات کلیدی سایت رو به تعداد زیادی به گوگل نشون بده.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;من و شما که به سایت میریم این کلمات رو نمیبینیم چون همرنگ زمینه هست و بعضا با فونت خیلی خیلی ریز. اما گوگل که به این سایت میاد، این کلمات رو میتونه در سورس صفحه ببینه و اونها رو به عنوان کلمات کلیدی این سایت، ذخیره کنه که نتیجه ای جز جواب اشتباه دادن به جستجوی مرتبط نداره.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;ممکنه برخی “متخصصین” دیگر اعلام کنند که در تگ متا در بالای صفحه این صد کلمه رو قرار میدیم و اینجوری مشکل قانونی هم وجود نداره. خدمت اون دسته هم باید عرض کنم که &lt;a title="Google ignores keywords meta tag" href="http://googlewebmastercentral.blogspot.com/2009/09/google-does-not-use-keywords-meta-tag.html" rel="nofollow"&gt;گوگل و یاهو&lt;/a&gt; که دیگه به این تگ دقت نمیکنند و دیگر سرچ انجین ها هم که دقت میکنند، اگر تعداد کلمه های این تگ زیاد باشند، ازش میگذرند و توجهی نمیکنند. بنابراین فقط “کلیدی ترین” کلمات رو در این تگ قرار بدید.&lt;/p&gt;  &lt;div class="coder"&gt;&amp;lt;meta name=&amp;quot;keywords&amp;quot; content=&amp;quot;کلمه های مهم و کلیدی شما&amp;quot;&amp;gt; &lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;&lt;u&gt;Misleading or repeated words&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;این مورد در سایتهایی که در زمینه آگهی های اینترنتی هستند و ماشاالله کم هم نیستند، بسیار واضح دیده میشه. اسکریپتی که برای این مدل سایت ها استفاده میشه، در هر آگهی که مشتریان در سایت وارد کرده‌اند کلماتی رو به صورت کاملا آشکار و با عنوان جستجوهای مرتبط با صفحه اضافه میکنه که کاملا مشخص هست که این کار برای گول زدن سرچ انجین هست و عنوان “بر چسب” یا تگ برای این کار به هیچ وجه قابل قبول نیست. چون اولا تگ برای یک موضوع به مفهوم کلمات کلیدی اون مضوع هست و دوما تعداد این کلمات کلیدی چهار تا، پنج تا خیلی دیگه اصرار کنی ده تا میتونه باشه! نه اینکه برای یک محصول که فرضا دی وی دی یانگو قسمت 18 هست، شما بیای و براش تگ بذاری: جومونگ، لاست، پشت صحنه امپراطور دریا، اوشین… به این صورت شما داری حقه میزنی، پس حقته که گوگل هم شما رو در لیست سیاه قرار بده. و یا مورد دیگه ای که کاملا میشه مشاهده کرد استفاده از کلمات تکراریه که حتی استفاده از تگ های h1 تا h6 هم در دستور کار قرار گرفته تا از این حربه سئو، بر ضد خودش استفاده بشه که به این صورت گوگل فکر کنه این کلمه در متن شما اهمیت زیادی داره و رنک اون رو بالا ببره:&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a href="http://mytoolbox.ir/blog/image.axd?picture=payamsara.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="payamsara" border="0" alt="payamsara" src="http://mytoolbox.ir/blog/image.axd?picture=payamsara_thumb.jpg" width="304" height="59" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;&lt;u&gt;Page does not match Google's description &lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در نهایت وقتی با هر روشی، گوگل فریب خورد و آنچه گوگل در مورد یک سایت اعلام میکنه در نتایج جستجو، به اون سایت ربطی نداشته باشه، میشه نتیجه گرفت که سایت مور نظر، خطایی مرتکب شده که میتونه منجر به حذفش ار فهرست گوگل بشه.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;&lt;u&gt;Cloaked page&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;برخی از متخصصین روشهای پیچیده تر و نوین تری اختراع کردند. فرض کنید سایتی بسازید که من به عنوان یک یوزر اون رو یه جور ببینم، اما گوگل که سر میزنه به این سایت، اون رو یه جور دیگه ببینه!    &lt;br /&gt;این کار در پشت صحنه اتفاق میوفته. صفحه شما تشخیص میده که درخواستی که ازش شده توسط انسان بوده یا سرچ انجین. در صورت مواجهه شدن با سرچ انجین، به اون یک لیست بلند بالا از بهترین کلمات کلیدی رو نشون میده و کلمات زیادی رو بار این مامور سرچ میکنه. سرچ انجین هم از همه جا بیخبر، کل این لیست رو به نام این سایت ثبت میکنه. من این مورد رو در ایران ندیدم جایی انجام بده.(البته خوشبختانه) اما در خارج ایران شرکت هایی هستند که این کار رو انجام میدن و کارشون رو هم توجیه میکنن. اما دقت کنید، گوگل به طور صریح اعلام کرده این کار ممنوع میباشد!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;&lt;u&gt;Deceptive redirects&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;وقتی یک صفحه رو به جایی ریدایرکت میکنیم، یعنی توسط کدنویسی، بازدید کننده اون صفحه رو به جایی دیگر منتقل میکنیم. این انتقال چند مدل داره. یک مدل اون کد 302 هست که به درخواست پاسخ میده که “این صفحه موقتا منتقل شده و ممکن است در آینده خود این صفحه، حاوی مطالب باشد” حالا فرض کنید سایتی، یکی از صفحات خود را بر روی سایت دیگری که رتبه خیلی خوبی در گوگل دارد، انتقال 302 بدهد. گوگل هم منتقل میشود اما از آنجا که انتقال موقتی هست، فکر میکند صفحه جدید جایگزین موقتی برای سایت است بنابراین اطلاعات صفحه جدید را به نام سایت متقلب ثبت میکند. &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;نوع دیگر این نوع تقلب، استفاده از انواع تکنیک ها مثل RSS reader یا استفاده از فریم و آی‌فریم برای خواندن مطالب سایتهای دیگر و استفاده آنها در سایت خود است تا از ارزشی که گوگل برای اون مطالب اعمال میکنه، سایت متقلب هم شریک بشه. به هر حال این روش هر چه هست، همون دزدی مطلب به زبون عامیانه خودمون هست. این کار، وجدانی، قانونی(کپی رایت) و گوگلی! ممنوعه و جزو راه های اسپم شناخته میشه.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;&lt;u&gt;Doorway pages&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;یکی دیگر از مواردی که برخی شرکتهای فعال در امر سئو، به انجام اون مشغول هستند و برای خودشون توجیه هم میارن، استفاده از صفحات واسطه برای لینک دادن به صفحه اصلی و مورد نظر هست. صفحاتی که صرفا برای سرچ انجین ها ساخته میشوند و دارای لینکهایی به صفحات اصلی سایت هستند. &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;این صفحان واسطه در نقشه سایت وجود ندارند و شما هیچ گاه اونها رو نمیتونید در منوهای سایت پیدا کنید. این صفحات تنها به گوگل معرفی میشوند و به خاطر داشتن کلمات کاربردی و کلیدی، میتوانند رتبه خود را در جستجو افزایش دهند و با لینکی که به صفحه اصلی دارند، بازدید کننده رو به سایت اصلی هدایت کنند. توجیه شرکتهایی که این کار رو برای مشتری هاشون انجام میدهند اینه که دسترسی به سورس اصلی صفحات ندارند و بنابراین تمیتوانند بهینه سازی را در خورد صفحات انجام دهند. بنا براین از صفحات واسطه استفاده میکنند. اما گوگل این کار رو هم جزو اسپم حساب میکنه.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;نوع دیگر این روش اسپم استفاده از ساب دامین به عنوان کلمه کاربردی هست. مثل keyword1.domain.com another-keyword.domain.com این مدل آدرسها به صورت داینامیک توسط سرور سایت ساخته میشوند و در واقع وجود فیزیکی ندارند. گوگل بسیاری از این مدل اسپم رو در سالهای اخیر شناسایی کرده و حذف کرده، اما همچنان میشه این مورد رو دید. نمونه این مدل اسپم رو میشه در همین اسکریپت های رایج برای ساختن سیستم های آگهی فارسی پیدا کرد. این حرکت نیز اسپم میباشد و ممنوع.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;strong&gt;&lt;u&gt;Duplicate site or pages&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;گوگل به شدت مخالف مطالب تکراری در سایت های اینترنتی هست. نه فقط مطالب، حتی اگر &amp;lt;title&amp;gt; صفحات هم مثل هم باشه، اون رو به عنوان فاکتور منفی حساب میکنه. بنابراین اصلا به دنبال این نباشید که صفحات تکراری داشته باشید که حجم مطالب رو بالا ببرید یا از اون بدتر،&amp;#160; چند سایت با یک مضمون با مثلا طراحی مختلف داشته باشید که گوگل رو گول بزنید! یا خودش میفهمه یا کسی پیدا میشه که شما رو گزارش بده. در نهایت شما اسپمر شناخته میشوید!&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;نکته: برای گزارش اسپم به گوگل، حتما از فرم موجود در &lt;a title="Google Webmaster Tools" href="https://www.google.com/webmasters/tools/spamreport?hl=en&amp;amp;pli=1" rel="nofollow"&gt;قسمت وبمستر تولز&lt;/a&gt; اقدام کنید چون به گفته خود گوگل، گزارش های ارسالی از این فرم بسیار سریع تر از &lt;a title="Google Spam Report" href="http://www.google.com.vn/contact/spamreport.html" rel="nofollow"&gt;فرم همگانی گوگل&lt;/a&gt;، مورد بررسی قرار خواهد گرفت.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در نهایت، به فکر گول زدن سرچ انجین ها نباشیم. دلمون رو به چند ماه در اوج بودن خوش نکنیم. اصولی کار کنیم. و حتما منتظر چوب بالاسر نباشیم تا قانون رعایت کنیم.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p dir="rtl" align="justify"&gt;این مطلب تنها جنبه اطلاع رسانی دارد و هدف آن جلوگیری از اسپمر شناخته شدن شما و رفتن سایت شما در لیست سیاه سرچ انجین ها می باشد. اگر مطالب رو برعکس گرفتید و جنبه بدآموزی مساله رو مورد توجه قرار دادید، هیچ مسوولیتی بر دوش اینجانب نمی باشد و هر چه پیش بیاید، حق شماست! &lt;/p&gt; &lt;/blockquote&gt;  &lt;p dir="rtl" align="justify"&gt;*این مطالب از خودم میباشد! اگر درآن اشتباهی میبینید، ممنون میشم که اعلام کنید. استفاده از این مطلب آزاد هست و اگر دوست دارید با انصاف باشید، منبع رو هم ذکر کنید.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/cBSTrGmhVP0" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/cBSTrGmhVP0/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/Spam-Report-from-Google-Webmaster-Tools.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=3bcac864-e60a-45f9-9aea-4f1d974d3416</guid>
      <pubDate>Sat, 28 Nov 2009 03:33:32 +0300</pubDate>
      <category>Web</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=3bcac864-e60a-45f9-9aea-4f1d974d3416</pingback:target>
      <slash:comments>10</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=3bcac864-e60a-45f9-9aea-4f1d974d3416</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/Spam-Report-from-Google-Webmaster-Tools.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=3bcac864-e60a-45f9-9aea-4f1d974d3416</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=3bcac864-e60a-45f9-9aea-4f1d974d3416</feedburner:origLink></item>
    <item>
      <title>Live Writer 2009 Full Setup</title>
      <description>&lt;h3 dir="rtl"&gt;مشکل نصب ویندوز لایو رایتر&lt;/h3&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a href="http://mytoolbox.ir/blog/image.axd?picture=windowslive.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 15px 15px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="windowslive" border="0" alt="windowslive" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=windowslive_thumb.jpg" width="204" height="154" /&gt;&lt;/a&gt; با مراجعه به سایت ویندوز لایو، همونطور که در &lt;a title="Windows Live Writer 2009" href="http://mytoolbox.ir/blog/post/Windows-Live-Writer-2009.aspx"&gt;پست قبلی&lt;/a&gt; اشاره شد، میتونید فایل ستاپ رو دانلود کنید و بعد از اجرا کردن فایل ستاپ، انتخاب کنید که چه محصولاتی از لایو میخواهید که برای شما نصب شود.     &lt;br /&gt;بعد از این مرحله، به نسبت انتخاب هایی که انجام دادید، فایل های مورد نظر برای شما دانلود میشوند و نصب میشوند.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;فایل ستاپ اولیه که تقریبا 1 مگابایت حجم دارد، بر روی بعضی ورژن های ویندوز مثل ورژن های ویندوز سرور، نصب نمیشه و از فایل ایراد میگیره. در این صورت نیاز به فایل ستاپ کامل داریم. برای این کار باید این فایل رو از روی سیستمی که یک بار لایو رایتر روی اون نصب شده، کپی کنیم. در ویندوز ایکس پی از این ادرس میشه فایل رو پیدا کرد:&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;C:\Program Files\Common Files\Windows Live\.cache\9d9d24601ca6ea6&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;اگر به یک سیستم دیگه دسترسی ندارید، من آخرین ورژن یعنی ورژن 2009 (14.0.8089.726) رو آپلود کردم که میتونید از آدرس زیر دانلود کنید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a title="Live Writer 2009 Full Setup" href="http://www.4shared.com/file/160248348/10fc619f/LiveWriter2009.html" rel="nofollow" target="_blank"&gt;Live Writer 2009 Full Setup&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;آپدیت: برای دانلود کل پکیج محصولات لایو، میتونید از &lt;a title="Windows Live Full Setup" href="http://wl.dlservice.microsoft.com/download/E/3/E/E3EEC6D6-1141-40C4-840F-770F99B67986/en/wlsetup-all.exe" rel="nofollow" target="_blank"&gt;این لینک&lt;/a&gt; استفاده کنید. حجم آن حدود 135 مگابایت و لینک مستقیم از خود سرور مایکروسافت هست.     &lt;br /&gt;ممنون از &lt;a title="فرشاد" href="http://mytoolbox.ir/blog/post/Live-Writer-2009-Full-Setup.aspx#id_c544ed3e-3dcb-483a-aa19-be45ba2e93d2" rel="nofollow"&gt;فرشاد&lt;/a&gt; برای اشاره به این نکته&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/LblJqk6dFh0" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/LblJqk6dFh0/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/Live-Writer-2009-Full-Setup.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=04a0ac61-e17e-4383-8d6d-d6851bb17df9</guid>
      <pubDate>Thu, 26 Nov 2009 18:58:47 +0300</pubDate>
      <category>Tools</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=04a0ac61-e17e-4383-8d6d-d6851bb17df9</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=04a0ac61-e17e-4383-8d6d-d6851bb17df9</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/Live-Writer-2009-Full-Setup.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=04a0ac61-e17e-4383-8d6d-d6851bb17df9</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=04a0ac61-e17e-4383-8d6d-d6851bb17df9</feedburner:origLink></item>
    <item>
      <title>Windows Live Writer 2009</title>
      <description>&lt;h3 align="justify"&gt;ویندوز لایو رایتر به زبان ساده&lt;/h3&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;img style="border-right-width: 0px; margin: 0px 20px 15px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WLWLogo" border="0" alt="WLWLogo" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=WLWLogo.jpg" width="154" height="154" /&gt;برای ارسال پست جدید به وبلاگ خود، از چه روشی استفاده میکنید؟&amp;#160;&amp;#160; &lt;br /&gt;ساده ترین روش استفاده از ویرایشگرهایی هست که در خود سیستم وبلاگ شما موجود میباشند. در این روش شما باید به سیستم مدیریت وبلاگ خود بروید و در آنجا پست جدید خود را بنویسید، ویرایش کنید و در نهایت پست جدید را به وبلاگ اضافه کنید و اصطلاحا پابلیش کنید. اما برای این کار راه بهتری هم وجود داره که علاوه بر ساده تر کردن کار شما، امکانات بیشتری هم به شما میدهد که این راه، استفاده از ویندوز لایو رایتر می‌باشد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;با استفاده از لایو رایتر (که البته به اسم WLW هم شناخته میشود) نیازی به دسترسی به سیستم مدیریت وبلاگ خود ندارید و مستقیما از طریق کامپیوتر شخصی خود، پست جدید را نوشته و ویرایش میکنید و هر وقت که خواستید پست جدید به وبلاگ شما منتقل شود، کافیست به اینترنت متصل شده و آن را پابلیش کنید.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p dir="rtl" align="justify"&gt;تمامی تصاویری که در ادامه می‌بینید، مربوط به ورژن 14.0.8089.726 می‌باشد.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p dir="rtl" align="justify"&gt;برای نصب لایو رایتر که خود مجموعه ای از نرم افزارهای سری لایو مایکروسافت است، به آدرس زیر بروید:    &lt;br /&gt;&lt;a title="http://download.live.com/writer" href="http://download.live.com/writer" rel="nofollow"&gt;http://download.live.com/writer&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;پس از دانلود و نصب، برنامه Windows Live Writer را اجرا کنید. برای بار اول یک ویزارد به شما نشان داده میشود به صورت زیر:&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a href="http://mytoolbox.ir/blog/image.axd?picture=WLW-s1.jpg" rel="nofollow" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Windows Live Writer" border="0" alt="Windows Live Writer" src="http://mytoolbox.ir/blog/image.axd?picture=WLW-s1.jpg" width="300" height="252" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;اگر وبلاگ شما در لایو اسپیس (Live Spaces) یا شیرپوینت (SharePoint) نیست (که معمولا نیست!) گزینه آخر را انتخاب کنید.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p dir="rtl" align="justify"&gt;استفاده از لایو رایتر و یا نرم افزار های مشابه، نیاز به قابلیت هایی از طرف سرویس دهنده وبلاگ شما دارد و این قابلیت ها در سرویس های ایرانی مثل بلاگفا یا پرشین بلاگ وجود ندارد. اگر سرویس ایرانی میشناسید که با لایو رایتر سازگار باشد، لطفا معرفی کنید.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a href="http://mytoolbox.ir/blog/image.axd?picture=WLW-s2_1.jpg" rel="nofollow" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Windows Live Writer" border="0" alt="Windows Live Writer" src="http://mytoolbox.ir/blog/image.axd?picture=WLW-s2_1.jpg" width="300" height="252" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در این مرحله آدرس کامل وبلاگ خود را به همراه نام کاربری و کلمه عبور وارد کنید. برای امنیت بیشتر، پیشنهاد میشه Remember my password را انتخاب نکنید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a href="http://mytoolbox.ir/blog/image.axd?picture=WLW-s3_1.jpg" rel="nofollow" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Windows Live Writer" border="0" alt="Windows Live Writer" src="http://mytoolbox.ir/blog/image.axd?picture=WLW-s3_1.jpg" width="300" height="252" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در این مرحله، نرم افزار به صورت خودکار، شروع به شناسایی وبلاگ شما میکند و تمامی اطلاعاتی که نیاز دارد، از وبلاگ شما میخواند. این قابلیت در جدیدترین نسخه یعنی ورژن 14 موجود میباشد که تقریبا تمامی نرم افزارهایی که برای وبلاگ نویسی موجود هست را میتواند شناسایی کند. در ورژن های قدیمی تر اگر سیستم وبلاگ شما در لیست پیش فرض نبود، باید به صورت دستی یک سری اطلاعات را وارد میکردید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a href="http://mytoolbox.ir/blog/image.axd?picture=WLW-s4_1.jpg" rel="nofollow" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WLW-s4" border="0" alt="WLW-s4" src="http://mytoolbox.ir/blog/image.axd?picture=WLW-s4_1.jpg" width="300" height="252" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;و در نهایت اگر همه چیز به خوبی پیش رفته باشد، فقط باید یک اسم برای اکانت جدیدی که ساختید انتخاب کنید و دکمه Finish را بزنید. این اسمی که انتخاب میکنید فقط مربوط به خود نرم افزار هست که مثلا اگر در آینده شما چندین وبلاگ را به لایو رایتر اضافه کردید، با این اسمی که برای آنها انتخاب میکنید، متمایز شوند.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;اگر نیاز به تگ های RTL و LTR در تولبار نرم افزار هستید باید از طریق منوی Blogs –&amp;gt; Edit blog setting –&amp;gt; Editting مقدار Text Direction را به Right to Left تغییر بدهید. همچنین از طریق لایو رایتر و قسمتی که در پایین آن وجود دارد میتوانید تمامی تنظیماتی که برای پست شما موجود هست را انجام بدهید. مثل انتخاب Category یا برچسب ها و تعیین لینک ثابت و غیره. توجه کنید تنظیماتی که در این قسمت موجود هستند ممکن است به نسبت سیستم های مختلف وبلاگ نویسی متفاوت باشند. مثلا اگر سیستم شما، اجازه انتخاب تاریخ ارسال پست را بدهد، این گزینه در لایو رایتر هم فعال خواهد شد و یا اینکه انتخاب کنید برای این پست شما، سیستم نظر سنجی فعال باشد یا خیر.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;تصویری که در زیر میبینید مربوط به سیستم بلاگ انجین دات نت (BlogEngine.Net) می‌باشد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a href="http://mytoolbox.ir/blog/image.axd?picture=WLW-s5_1.jpg" rel="nofollow" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Windows Live Writer" border="0" alt="Windows Live Writer" src="http://mytoolbox.ir/blog/image.axd?picture=WLW-s5_1.jpg" width="400" height="356" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;لایو رایتر مطلب شما را در فاصله زمانی تعیین شده توسط شما، به صورت خودکار ذخیره میکند (Drafts)، بنابراین نگران از دست رفتن متن خود نباشید. پس میتوانید مطلب خود را شروع به نوشتن کرده و آن را ذخیره کنید و ادامه آن را در زمانی دیگر کامل کنید و هر وقت که خواستید پست شما به وبلاگ اضافه شود کافیست دکمه Publish را بزنید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;همچنین این امکان برای شما وجود دارد که کلماتی را به لایو رایتر معرفی کنید و برای هر کلمه هم یک لینک مشخص کنید تا در صورت استفاده شما ار آن کلمه یا عبارت، لایو رایتر به صورت خودکار، لینک را به کلمه اضافه کند.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در صورت پشتیبانی سیستم وبلاگ شما از آپلود کردن عکس، به سادگی در لایو رایتر میتوانید عکس های مورد نظر را از کامپیوتر خود انتخاب کنید و در متن قرار بدهید و در هنگام Publish این عکسها به صورت خودکار به وبلاگ و سرور شما منتقل خواهند شد. البته یک سری امکانات خوب هم برای کار با عکس ها در اختیار شما قرار داده میشود. ( به سایه عکسهای این پست و عبارت MyToolbox.ir بر روی آنها دقت کنید.) و البته امکان قرار دادن عکس در ابعاد کوچک و لینک شدن آن به عکس اصلی نیز موجود است.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;استفاده از Microsoft Maps و Youtube به صورت مستقیم وجود دارد و به سادگی میتوانید آنها را در متن خود جای دهید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;از طریق لایو رایتر، امکان ویرایش پست هایی که قبلا ارسال کرده‌اید نیز وجود دارد و بعد از ویرایش باید دوباره آن را پابلیش کنید.&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;*این مطالب از خودم میباشد! اگر درآن اشتباهی میبینید، ممنون میشم که اعلام کنید. استفاده از این مطلب آزاد هست و اگر دوست دارید با انصاف باشید، منبع رو هم ذکر کنید. &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/B1e7-iXxCcs" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/B1e7-iXxCcs/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/Windows-Live-Writer-2009.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=910d39af-dacc-4c78-9cb6-64601af0b0cc</guid>
      <pubDate>Mon, 23 Nov 2009 15:51:35 +0300</pubDate>
      <category>Tools</category>
      <category>Web</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=910d39af-dacc-4c78-9cb6-64601af0b0cc</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=910d39af-dacc-4c78-9cb6-64601af0b0cc</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/Windows-Live-Writer-2009.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=910d39af-dacc-4c78-9cb6-64601af0b0cc</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=910d39af-dacc-4c78-9cb6-64601af0b0cc</feedburner:origLink></item>
    <item>
      <title>Use jQuery CDN from Microsoft or Google</title>
      <description>&lt;h3 dir="rtl"&gt;افزایش سرعت لود شدن jQuery با استفاده از CDN&lt;/h3&gt;  &lt;p align="left"&gt;&lt;img style="margin: 5px 25px 10px 0px; display: inline" alt="jQuery" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=2009%2f4%2fjquery.jpg" width="288" height="157" /&gt; &lt;/p&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;برای استفاده از فایل اصلی کتابخونه jQuery ، پیشنهاد میشه که از CDN استفاده کنید، به دلایل زیر:    &lt;br /&gt;    &lt;br /&gt;- امکان اینکه این فایل در دستگاه بازدید کننده (کش = Cache) شما وجود داشته باشه بالا هست. بنابراین دیگه زمانی برای دانلود این فایل صرف نمیشود و سرعت لود شدن سایت بالاتر میرود.     &lt;br /&gt;- اگر هم نیازی به دانلود شدن این فایل باشه، CDN به دلیل داشتن داشتن سرورهای متعدد، نزدیک ترین و سریعترین راه رو برای دانلود فایل به سیستم بازدیدکننده انتخاب میکنه.     &lt;br /&gt;- CDN ها از سیستم متراکم سازی gzip استفاده میکنند و شما نیازی به کد نویسی یا تغییر ساختار وب سرور برای این کار ندارید.     &lt;br /&gt;- به دلیل اینکه این فایل بر روی سرور شما نیست بنابراین هزینه ای بابت پهنای باند این فایل نمی پردازید.      &lt;br /&gt;    &lt;br /&gt;گوگل و مایکروسافت به صورت کاملا رایگان، jQuery رو برای شما میزبانی میکنند و شما فقط کافیه در تگ اسکریپت خودتون، به آدرس کامل این فایل اشاره کنید.     &lt;br /&gt;    &lt;br /&gt;برای استفاده از سی دی ان مایکروسافت:     &lt;br /&gt;http://ajax.microsoft.com/ajax/jquery/jquery-1.3.2.min.js     &lt;br /&gt;    &lt;br /&gt;برای استفاده از سی دی ان گوگل:     &lt;br /&gt;http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js     &lt;br /&gt;    &lt;br /&gt;نکته در مورد گوگل:     &lt;br /&gt;گوگل برای دسترسی به فایلهایی که میزبانی میکنه چندین روش رو معرفی کرده. برای jQuery اگر از آدرس بالا استفاده کنید همواره آخرین ورژن jQuery در نسخه شماره 1 رو به شما میده. این ورژن در زمان نوشتن این پست 1.3.2 هست. بنابراین اگر از این آدرس استفاده میکنید، پس فردا که ورژن جدید تر 1.6 اومد، این آدرس به صورت خودکار اون فایل رو نشون خواهد داد. اما برای ورژن 2 و بالاتر باید آدرس رو عوض کنید به     &lt;br /&gt;libs/jquery/&lt;span style="text-decoration: underline"&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/span&gt;/jquery.min.js     &lt;br /&gt;اگر میخواهید دقیقا ورژن 1.3.2 رو استفاده کنید از این آدرس استفاده کنید:     &lt;br /&gt;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js     &lt;br /&gt;    &lt;br /&gt;تمامی این آدرس ها به صورت جی زیپ به مرورگر شما فرستاده میشوند.     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;جی زیپ gzip &lt;/strong&gt;به زبون خیلی ساده یعنی که وب سرور، فایل رو به صورت فشرده ( فکر کنید یه چیزی مثل همون zip یا rar ) به سمت کلاینت میفرسته و مرورگر در کلاینت اون فایل رو از حالت فشرده در میاره. اگر مرورگر شما این قابلیت رو نداشته باشه، سرور تشخیص میده و اصلا عمل جی زیپ رو انجام نمیده. البته تمام مرورگر های غیرمتنی کنونی، جی زیپ رو پشتیبانی میکنند.     &lt;br /&gt;    &lt;br /&gt;تست کردن فعال بودن امکان&amp;#160; gzip توسط فایرباگ: &lt;/div&gt;  &lt;p style="text-align: justify; direction: rtl" dir="rtl"&gt;&lt;img alt="" src="http://mytoolbox.ir/blog/image.axd?picture=2009%2f10%2fgzip-jquery.jpg" /&gt;&lt;/p&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl"&gt;   &lt;br /&gt;تست آنلاین این قابلیت در سایت&amp;#160; &lt;a href="http://www.gidnetwork.com/tools/gzip-test.php"&gt;http://www.gidnetwork.com/tools/gzip-test.php&lt;/a&gt; :     &lt;br /&gt;&lt;/div&gt;  &lt;p style="text-align: justify; direction: rtl" dir="rtl"&gt;&lt;img alt="" src="http://mytoolbox.ir/blog/image.axd?picture=2009%2f10%2fgzip-jquery-online.jpg" /&gt;&lt;/p&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;   &lt;br /&gt;    &lt;br /&gt;همونطور که میبینید، فایل در سرور فشرده شده و&amp;#160; تنها حدود 20 کیلوبایت حجم دارد،&amp;#160; و وقتی به مرورگر میرسد، از حالت فشرده خارج شده و همون حجم اصلی خودش یعنی حدود 60 کیلوبایت می رسد.     &lt;br /&gt;    &lt;br /&gt;&lt;/div&gt;  &lt;p style="text-align: justify" dir="rtl" align="justify"&gt;*این مطالب از خودم میباشد! اگر در اون مورد اشتباهی میبینید، ممنون میشم که اعلام کنید و استفاده از این مطلب آزاد هست و اگر دوست دارید با انصاف باشید، منبع رو هم ذکر کنید.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/sH6Nc2PpTN4" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/sH6Nc2PpTN4/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/Use-jQuery-CDN-from-Microsoft-or-Google.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=9957b9ee-e24b-40bb-a9be-372207043ba0</guid>
      <pubDate>Sat, 17 Oct 2009 14:19:00 +0300</pubDate>
      <category>jQuery</category>
      <category>Web 2.0</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=9957b9ee-e24b-40bb-a9be-372207043ba0</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=9957b9ee-e24b-40bb-a9be-372207043ba0</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/Use-jQuery-CDN-from-Microsoft-or-Google.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=9957b9ee-e24b-40bb-a9be-372207043ba0</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=9957b9ee-e24b-40bb-a9be-372207043ba0</feedburner:origLink></item>
    <item>
      <title>Speed up your website using Sub-Domains and CDNs</title>
      <description>&lt;h3 dir="rtl" align="justify"&gt;&lt;strong&gt;سرعت سایت خود را با استفاده از subdomain و CDN بالاتر ببرید&lt;/strong&gt;&lt;/h3&gt;  &lt;p style="text-align: right; direction: rtl"&gt;&lt;img style="margin: 5px 10px; float: left" alt="" src="http://mytoolbox.ir/blog/image.axd?picture=2009%2f10%2fSpeed-Up-Your-Web-Site.jpg" /&gt;&lt;/p&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;&lt;strong&gt;سرعت سایت شما به چه چیزی بستگی دارد&lt;/strong&gt;     &lt;br /&gt;سرعت لود شدن (به قول فارسی زیاد: بارگذاری) سایت شما به عوامل مختلفی بستگی داره مثل سرعت و پهنای باند سروری که سایت شما روی اون میزبانی میشه و البته سرعت اینترنت بازدیدکننده سایت شما.     &lt;br /&gt;در این بین، یک نکته نسبتا مهم معمولا فراموش میشه و اون هم نحوه ارتباط مرورگر وب کاربر شما با سروری هست که سایت شما در آنجا قرار داره. به طور کلی:     &lt;br /&gt;&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl"&gt;   &lt;blockquote&gt;اکثر مرورگرهای وب میتوانند در لحظه فقط 2 ارتباط موازی با یک سرور مشترک&amp;#160; و در کل 6 ارتباط موازی با سرورهای مختلف داشته باشند.&lt;/blockquote&gt; &lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;مفهوم این جمله به زبان ساده تر یعنی اگر سایت شما دارای 20 عکس در صفحه اول باشه، مرورگر وب فقط میتونه در لحظه، 2 عکس رو دانلود کنه چون این عکسها رو داره از یک سرور مشترک میخونه مثلا:    &lt;br /&gt;http://mytoolbox.ir/1.jpg     &lt;br /&gt;http://mytoolbox.ir/2.jpg     &lt;br /&gt;حالا فکر کنید که از طریقی بتوانید مرورگر رو مجبور کنید که بیشتر از 2 ارتباط داشته باشه، مثلا کل 6 ارتباط مجاز رو بتونه با یک سرور مشترک داشته باشه؛ اون موقع میشه گفت سرعت لود شدن عکسهای شما تقریبا 3 برابر میشه، بنابراین سایت شما با سرعت بیشتری روی مرورگر کاربر سایت شما، کامل لود خواهد شد و از نظر کاربر &amp;quot;سرعت سایت&amp;quot; بالاتر خواهد رفت و این موفقیت بسیار خوبی میتونه باشه!     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;استفاده از ساب دامین در ساده ترین حالت&lt;/strong&gt;     &lt;br /&gt;برای اینکه بتوانیم این محدودیت&amp;#160; 2 تایی رو از پیش رو برداریم، باید برای قسمتهای استاتیک سایت مثل عکسها و اسکریپتها و فایلهای سی اس اس، آدرس های جداگانه در نظر بگیریم. مثلا i.mytoolbox.ir برای&amp;#160; عکسها و s.mytoolbox.ir برای اسکریپتها و c.mytoolbox.ir برای فایلهای سی اس اس. بنابراین میتونیم ارتباطات موازی بیشتری با سرور داشته باشیم به نسبت حالت قبل که همه از آدرس mytoolbox.ir بود. مثال زیر رو ببنید:     &lt;br /&gt;http://i.mytoolbox.ir/image1.jpg     &lt;br /&gt;http://i.mytoolbox.ir/image2.jpg     &lt;br /&gt;http://s.mytoolbox.ir/site.js     &lt;br /&gt;http://s.mytoolbox.ir/menu.js     &lt;br /&gt;http://c.mytoolbox.ir/style1.css     &lt;br /&gt;http://c.mytoolbox.ir/style2.css     &lt;br /&gt;این آدرس ها در واقع از یک محل از نظر فیزیکی هستند، اما چون آدرس سروری که به اونها اشاره میکنیم با هم متفاوت هستند بنابراین ارتباط موازی با این فایلها به صورت همزمان خواهد بود.     &lt;br /&gt;حالا اگر عکسهای سایت زیاد هست میشه چند ساب دامین ایجاد کرد که همه آنها به مکان نگهداری عکسها یعنی یکجا در سرور ما اشاره میکنند اما از نظر مرورگر، آدرسهای متفاوتی هستند.&amp;#160; مثلا i1.mytoolbox.ir , i2.mytoolbox.ir . با استفاده از این روش، سرعت لود شدن سایتی که از عکس های زیادی استفاده میکنه رو میشه تا دو برابر رسوند.     &lt;br /&gt;&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl"&gt;   &lt;blockquote style="text-align: justify"&gt;ساختن ساب دامین برای سایت شما، بستگی به نرم افزار مدیریت هاست Host CP شما بستگی داره و در کل، کار بسیار ساده ای هست.&lt;/blockquote&gt; &lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl"&gt;   &lt;br /&gt;&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;&lt;strong&gt;Content Delivery Network چیست؟&lt;/strong&gt;     &lt;br /&gt;همونطور که گفته شد، عوامل زیادی در سرعت لود شدن سایت شما در کامپیوتر کاربر دخیل هستند که ترفند اشاره شده در قسمت قبل مربوط میشه به رفتار مرورگر و نحوه ارتباط اون با سرور.&amp;#160; نکته بعدی که باید در مورد اون شناخت داشت، همین ارتباط مرورگر با سرور هست.     &lt;br /&gt;برای لود شدن سایت، مرورگر باید درخواست تک تک فایلهای مربوط به اون صفحه وب رو به سرور ارسال کنه و سرور هم در پاسخ مرورگر، اون فایل رو براش ارسال کنه. بنابراین یک زمانی برای درخواست مرورگر و پاسخ سرور در نظر بگیرید و زمانی رو برای دانلود شدن اون فایل در کامپیوتر بازدیدکننده.     &lt;br /&gt;هدف ما کم کردن این زمان هست. این زمان بستگی داره به پهنای باند سرور و پهنای باند کاربر. اما عامل سومی هم هست که میتونیم بهش زمان انتقال بگیم. یعنی فاصله سرور تا کاربر.&amp;#160; این فاصله زمانی رو میشه تشبیه کرد به فاصله زمانی که شما نیاز دارید از منزل به بانک مورد نظر خودتون برسید. فرض کنید بانکی که شما به اون نیاز دارید فقط یک شعبه در شهر شما داشته باشه، بنابراین شما اگه شانس داشته باشید خونه نزدیک به بانک باشه، میتونین با پای پیاده و در چند دقیقه به اون برسید، اما اگر شما در سمت دیگر شهر باشید، شاید با حساب ترافیک، یک ساعتی در راه باشید!&amp;#160; ( میدونم شما عادت به بانکداری الکترونیکی&amp;#160; دارید اما در این مثال، بیخیال شوید!) حالا فرض کنید بانک شما در چهار گوشه شهر، شعبه های جدید ایجاد کنه. حتما این دفعه که به بانک میروید، زمان کمتری رو صرف میکنید چون این بار میتونین انتخاب کنید و بانکی که به شما نزدیک تره رو به عنوان مسیر انتخاب کنید. در حالت بهتر اینکه این بانک در تمام محله های شهر، شعبه بزنه. حالا شما انتخاب های بیشتری دارید. اگر در محل کار هستید میتونید به شعبه شماره 45 که نزدیک محل کار هست برید و اگر در خانه هستید به شعبه 18.     &lt;br /&gt;همین مثال رو در مورد یک سایت در نظر بگیرید. اگر سایت شما یک سرور داشته باشه و اون هم مثلا در کشور کانادا باشه، تمامی بازدیدکننده های سایت شما باید با سروری در کانادا ارتباط برقرار کنند. چه اونی که تو ژاپن هست و چه اونی که تو خود کانادا هست. واضح هست که سرعت برای اشخاصی که به سرور دورتر هستند، کندتر خواهد بود. مثل همون بانک مثال ما در حالت اول که فقط یکی بود. در حالت دوم، ما سروری رو برای سایت خودمون انتخاب میکنیم که از طریق تکنولوژی های موجود در مهندسی شبکه، میتونه در چندین مکان فیزیکی قرار بگیره. مثلا در کانادا و ژاپن و اسپانیا و ایران(!) حالا اگر کاربر ایرانی درخواست این سایت رو داشته باشه، مجموعه سرور، متوجه یک درخواست از ایران میشه و کاربر رو به سرور ایران میفرسته یا اگر کاربری از فرانسه بخواد سایت رو ببینه، مجموعه ما اون رو به نزدیکترین سرور خودش یعنی اسپانیا میفرسته. بنابراین به این صورت، سرعت لود شدن صفحه، به علت کم کردن زمان انتقال، بیشتر خواهد شد.     &lt;br /&gt;    &lt;br /&gt;به این مجموعه&amp;#160; که در نقاط مختلفی داری سرور هست و بسته به محل درخواست، اون رو به نزدیکترین سرور هدایت میکنه، Content Delivery Network میگوییم. در واقع CDN رو میشه به صورت شبکه ای از کامپیوترهایی با وظیفه ارسال اطلاعات درخواستی به کاربر در کمترین زمان و انتخاب مناسبترین مسافت، تعریف کرد.     &lt;br /&gt;شرکتهای بزرگ مثل یاهو، مایکروسافت، فیسبوک و گوگل، برای خودشون چنین شبکه ای رو به صورت خصوصی دارند. و شرکتهای دیگری هم هستند که این سرویس رو به مشتری هاشون در قبال پرداخت هزینه ای ارایه میدهند. برای نمونه میشه از شرکتهایی مثل &lt;a href="http://www.akamai.com"&gt;http://www.akamai.com&lt;/a&gt; و سرویس cloudfront شرکت آمازون نام برد.     &lt;br /&gt;CDN رو یکی از اهداف&amp;#160; Cloud Computing هم میشه نام برد به این مفهوم که فایلهای شما مهم نیست در چه مکان فیزیکی قرار گرفته اند، مهم اینه که چجوری میشه به اون دسترسی پیدا کرد.     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;CDN های رایگان&lt;/strong&gt;     &lt;br /&gt;استفاده از سرویس CDN ، برای شما هزینه خواهد داشت. اما برخی شرکت ها، قابلیت استفاده از یک سری فایلها رو در شبکه خودشون به صورت رایگان به شما میدهند. این فایلها اکثرا منابعی هستند که به مقدار بسیار زیادی&amp;#160; در سایت های اینترنتی به کار رفته اند مانند فایلهای کتابخونه‌ای پر استفاده ای‌جکس و جاوااسکریپت. پر استفاده ترین حالت در اینترنت استفاده از فایل jQuery در سرور گوگل هست.&amp;#160; یعنی به جای اینکه فایل اصلی jQuery رو در سایت خودتون آپلود کنید و در&amp;#160; اسکریپت به اون فایل اشاره کنید:     &lt;br /&gt;&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl"&gt;&lt;span class="coder"&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;scripts/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl"&gt;   &lt;br /&gt;به صورت مستقیم از این آدرس در src مربوط به اسکریپت استفاده میکنید:     &lt;br /&gt;&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl"&gt;&lt;span class="coder"&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;/span&gt;&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;   &lt;br /&gt;البته مایکروسافت هم اخیرا اعلام کرده که فایلهای مربوط به Microsoft Ajax و jQuery رو به صورت رایگان در CDN خودش قرار داده و ما میتونیم استفاده کنیم. در مورد استفاده از jQuery CDN، یک مطلب خواهم نوشت.     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;مزیت استفاده از یک فایل در یک CDN بزرگ مثل گوگل و مایکروسافت چیست؟&lt;/strong&gt;     &lt;br /&gt;مزیت اول که در تعریف CDN توضیح داده شد یعنی به نسبت محل ما، سروری انتخاب میشه که فایل رو به ما زودتر برسونه.&amp;#160; و اما مزیت دوم چیست؟ تعداد بسیار زیادی از سایتهای اینترنتی هستند از این CDN های اعلام شده رایگان (گوگل و مایکروسافت) استفاده می کنند. چون آدرس این فایلها ثابت هست و همه سایت ها دارن از این آدرس استفاده میکنند بنابراین&amp;#160; شانس اینکه این فایل روی کامپیوتر&amp;#160; کاربر شما قرارگرفته شده باشه بسیار بالاست. زیرا اگر کاربر، به اولین سایتی بره که از این قابلیت استفاده میکنه، این فایل مثل همه فایلهای دیگه برای مرورگر، در هارد کامپیوتر دانلود میشه و ذخیره میشه. به این ترتیب، مرورگر اگر در سایت دیگه ای به همین آدرس فایل برسه، اون رو دیگه دانلود نمیکنه و به همون فایلی که قبلا دانلود کرده رجوع میکنه و استفاده میکنه. بنابراین شما میتونین به اندازه حجم اون فایل، سرعت لود شدن سایت خودتون رو جلو بندازید.&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl"&gt;   &lt;br /&gt;&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl"&gt;   &lt;br /&gt;&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;*این مطالب از خودم میباشد! اگر در اون مورد اشتباهی میبینید، ممنون میشم که اعلام کنید و استفاده از این مطلب آزاد هست و اگر دوست دارید با انصاف باشید، منبع رو هم ذکر کنید.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/2FOHpXnmP8w" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/2FOHpXnmP8w/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/Speed-up-your-website-using-Sub-Domains-and-CDNs.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=4e61bb62-e6b2-4d1d-b4a9-8d2a05e876d2</guid>
      <pubDate>Sat, 03 Oct 2009 16:01:00 +0300</pubDate>
      <category>Web</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=4e61bb62-e6b2-4d1d-b4a9-8d2a05e876d2</pingback:target>
      <slash:comments>10</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=4e61bb62-e6b2-4d1d-b4a9-8d2a05e876d2</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/Speed-up-your-website-using-Sub-Domains-and-CDNs.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=4e61bb62-e6b2-4d1d-b4a9-8d2a05e876d2</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=4e61bb62-e6b2-4d1d-b4a9-8d2a05e876d2</feedburner:origLink></item>
    <item>
      <title>Smashing Book Pre-Order</title>
      <description>&lt;h3 style="text-align: right; direction: rtl" dir="rtl" align="justify"&gt;&lt;strong&gt;پیش فروش کتاب Smashing Book&lt;/strong&gt;&lt;/h3&gt;  &lt;div style="text-align: right; direction: rtl"&gt;&lt;img style="float: left" alt="" src="http://mytoolbox.ir/blog/image.axd?picture=2009%2f9%2fbook-3d-320px.jpg" /&gt;&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;برای خرید کتاب به لینک زیر سر بزنید. مطالب این پست ویرایش شد و مطالب اصلی به لینک جدید، منتقل شد.&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;&lt;strong&gt;&lt;a title="کتاب اسمشینگ و سفارش خرید در ایران" href="http://mytoolbox.ir/blog/page/The-Smashing-Book.aspx" target="_blank"&gt;کتاب اسمشینگ و سفارش خرید در ایران&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;&amp;#160;&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;حدود دو ماه پیش سایت Smashing Magazine اعلام کرد در حال چاپ کتابی هست با عنوان Smashing Book که این کتاب رو حاوی مطالبی برای طراحی وب سایت های مدرن، معرفی کرده که دارای 300 صفحه تمام رنگی هست که با قیمت بسیار مناسبی به نسبت این کیفیت قرار هست ارایه بشه. &lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;این کتاب در حال حاضر در مراحل پایانی آماده شدن هست که طبق اعلام مسوولین، تا اواخر مهرماه، برای ارسال آماده خواهد شد.&amp;#160; &lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;وبلاگ جعبه ابزار طی مذاکراتی که با مجله Smashing داشت موفق به گرفتن نمایندگی فروش این کتاب در ایران شد که برای سفارش اول، تعداد محدودی کتاب خریداری شده که به محض رسیدن به ایران، برای دوستانی که پیش خرید کرده اند، ارسال خواهد شد.    &lt;br /&gt;    &lt;br /&gt;قیمت برای پیش خرید این کتاب ارزشمند و با کیفیت &lt;span style="text-decoration: line-through"&gt;به همراه ارسال برای خریدار&lt;/span&gt; ، 31000 تومان (سی و یک هزار تومان) در نظرگرفته شده که با تلاشهای انجام شده و پایین آوردن هزینه ها، تقریبا برابر با قیمت جهانی این کتاب هست. برای پیش خرید با جعبه ابزار تماس بگیرید.&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;&amp;#160;&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;&lt;img alt="" src="http://mytoolbox.ir/blog/image.axd?picture=2009%2f9%2fpreparesmashing.jpg" /&gt;&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;&amp;#160;&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;&lt;strong&gt;&lt;strong&gt;آپدیت &lt;/strong&gt;27 مهر&lt;/strong&gt;: به علت بالاتر رفتن هزینه حمل به ایران و همچنین سنگین بودن کتاب و بالا بودن هزینه پستی آن در داخل کشور، نمیتونم هزینه ارسال هم تقبل کنم.&lt;/div&gt;  &lt;div style="text-align: right; direction: rtl" dir="rtl" align="justify"&gt;   &lt;br /&gt;تعداد کتابهای سفارش اول محدود هست و اولویت با دوستانی هست که زودتر با ما تماس گرفتند. واضح است که این قیمت استثنایی فقط مربوط به&amp;#160; پیش خرید کتاب میباشد و بعد از چاپ کتاب و سفارش های بعدی ما از شرکت اصلی، چون خود ما هم قیمت بالاتری برای کتاب خواهیم پرداخت، بنابراین قیمت نهایی کتاب بالاتر خواهد رفت. پس این فرصت رو از دست ندهید و از اولین اشخاصی باشید در دنیا، که این کتاب ارزشمند و با کیفیت رو مطالعه میکنند. &lt;/div&gt;  &lt;div style="text-align: right; direction: rtl" dir="rtl" align="justify"&gt;&amp;#160;&lt;/div&gt;  &lt;div style="text-align: right; direction: rtl" dir="rtl" align="justify"&gt;&lt;strong&gt;آپدیت هفتم آذر:&lt;/strong&gt;&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;پس از چندین بار به تعویق افتادن کتاب از سوی اسمشینگ، آخرین تاریخی که اعلام کردند برای ارسال، 5 دسامبر اعلام شده که امیدوارم در این تاریخ ارسال بشه و دوباره عقب نیفته.    &lt;br /&gt;علت عقب افتادن هم یک سری مشکلات به دلیل تجربه اولشون در چاپ کتاب اعلام شده و همچنین بد قولی شرکت حمل و نقلی که با اون قرارداد داشتند.&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;&amp;#160;&lt;/div&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;&lt;strong&gt;آپدیت چهاردهم آذر:&lt;/strong&gt;&lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;امروز کتابها از آلمان به سمت تهران ارسال شدند. در مورد تاریخی که کتابها به دستم برسه، نظری ندارم اما فکر کنم بیشتر از یک هفته نباشه. به محض رسیدن کتابها، حتما با زدن پست جدید در وبلاگ، این موضوع رو اعلام خواهم کرد.    &lt;br /&gt;امیدوارم هزینه اضافی برای کتابها، تحمیل نشه تا بتونم کتابها رو با همون قیمتی که اعلام شده، به دست دوستانی که در لیست هستند برسونم.&lt;/p&gt;  &lt;div style="text-align: justify; direction: rtl" dir="rtl" align="justify"&gt;&lt;strong&gt;آپدیت بیست و سوم آذر:&lt;/strong&gt;&lt;/div&gt;  &lt;p dir="rtl" align="justify"&gt;امروز یک سری از کتابها به دستم رسید و به ترتیب لیست انتظار، با دوستان تماس گرفته خواهد شد. با توجه به لیست انتظار، در صورت عدم دریافت پاسخ از طرف اشخاصی که برای آنها پیغام فرستاده شده است، نوبت به افراد دیگری که در نوبت هستند خواهد رسید.    &lt;br /&gt;افرادی که همچنان علاقه مند به دریافت این کتاب هستند، لطفا با من از طریق email تماس بگیرند تا در صورت بالا بودن درخواست ها، سری های دیگری از کتاب سفارش داده شود.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/fGpudVvStBI" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/fGpudVvStBI/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/Smashing-Book-Pre-Order.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=9eb3aa70-589b-4419-850a-fa1c4b778768</guid>
      <pubDate>Tue, 29 Sep 2009 11:57:00 +0300</pubDate>
      <category>Books</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=9eb3aa70-589b-4419-850a-fa1c4b778768</pingback:target>
      <slash:comments>13</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=9eb3aa70-589b-4419-850a-fa1c4b778768</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/Smashing-Book-Pre-Order.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=9eb3aa70-589b-4419-850a-fa1c4b778768</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=9eb3aa70-589b-4419-850a-fa1c4b778768</feedburner:origLink></item>
    <item>
      <title>T-SQL new line</title>
      <description>&lt;h3&gt;&lt;strong&gt;ایجاد خط جدید در T-SQL&lt;/strong&gt; &lt;/h3&gt;  &lt;div style="text-align: right; direction: rtl"&gt;   &lt;br /&gt;اگر به صورت مستقیم نیاز به وارد کردن یک جمله در دیتابیس باشه، باید خط های جدید یا به قول خودمون اینتر های جمله رو به صورت دستی به T-SQL بفهمونیم.    &lt;br /&gt;&lt;span class="coder"&gt; print 'line 1' + char(13) + char(10) + 'line 2' &lt;/span&gt;    &lt;br /&gt;کاراکتر 13 مربوط به Carriage Return و کاراکتر 10 مربوط به Line Feed هست. بهتره هر دو با هم نوشته بشوند تا سیستم عاملهای مختلف، نتیجه رو یکسان نشان بدهند.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/SamXSIdK8Js" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/SamXSIdK8Js/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/T-SQL-new-line.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=f66e115f-c596-4da9-9fb9-2692927b74b2</guid>
      <pubDate>Wed, 23 Sep 2009 12:59:00 +0300</pubDate>
      <category>SQL</category>
      <dc:publisher>me</dc:publisher>
      <pingback:server>http://mytoolbox.ir/blog/pingback.axd</pingback:server>
      <pingback:target>http://mytoolbox.ir/blog/post.aspx?id=f66e115f-c596-4da9-9fb9-2692927b74b2</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=f66e115f-c596-4da9-9fb9-2692927b74b2</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/T-SQL-new-line.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=f66e115f-c596-4da9-9fb9-2692927b74b2</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=f66e115f-c596-4da9-9fb9-2692927b74b2</feedburner:origLink></item>
  </channel>
</rss>
