<?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>Smashing WordPress</title>
      <description>&lt;h3 dir="rtl"&gt;کتاب وردپرس اسمشینگ و سفارش در ایران&lt;/h3&gt;  &lt;div style="text-align: center; direction: rtl" dir="rtl" class="box"&gt;برای سفارش کتاب، با جعبه ابزار &lt;a title="تماس" href="http://mytoolbox.ir/blog/contact.aspx" target="_blank"&gt;تماس&lt;/a&gt; بگیرید.&lt;a href="http://mytoolbox.ir/blog/image.axd?picture=smashingwordpress.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 10px 10px 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="smashingwordpress" border="0" alt="smashingwordpress" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=smashingwordpress_thumb.png" width="304" height="395" /&gt;&lt;/a&gt;    &lt;br /&gt;&lt;/div&gt;  &lt;p dir="rtl"&gt;وردپرس یکی از نام آشناترین سیستم های وبلاگ و CMS در ایران هست که طراحان بسیاری رو به خودش مشغول کرده. استفاده اصولی و روی برنامه از وردپرس چه در حالت وبلاگ چه در حالت استفاده از یک CMS&amp;#160; ساده، یکی از مهمترین مسایلی هست که باید به اون توجه بشه. &lt;/p&gt;  &lt;p dir="rtl"&gt;&lt;a title="کتاب اسمشینگ ورپرس" href="http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470684151,descCd-tableOfContents.html" rel="nofollow" target="_blank"&gt;کتاب اسمشینگ وردپرس&lt;/a&gt; یکی از بهترین منابع WordPress هست که میتونه به طراحان و توسعه دهندگان کمک بسیاری بکنه. با توجه به هسته قوی وردپرس، کمتر نیاز به دستکاری کدهای هسته این سیستم میشه. بنابراین بیشترین توجه به سمت طراحی و توسعه این سیستم در بخش UI هست. این کتاب تمرکز اصلی رو در طراحی وردپرس گذاشته که در کنار اون شما رو با تمامی مسایل و نکاتی که در برنامه نویسی هم ممکنه به اون برخورد کنید، آشنا میکنه. نیازی نیست یک برنامه نویس حرفه ای PHP باشید. در این کتاب به ساده ترین شکل ممکن، دستورات و سینتکس های ضروری که باید بدونید رو به شما آموزش میده.&lt;/p&gt;  &lt;p dir="rtl"&gt;کتاب اسمشینگ وردپرس دوم کتاب چاپی از &lt;a title="مجله اسمشینگ" href="http://www.smashingmagazine.com/" rel="nofollow" target="_blank"&gt;مجله اسمشینگ&lt;/a&gt; هست که جعبه ابزار هم بعد از فروش موفق &lt;a title="کتاب اسمشینگ" href="http://mytoolbox.ir/blog/page/The-Smashing-Book.aspx" target="_blank"&gt;کتاب اسمشینگ&lt;/a&gt; در همین وبلاگ، این کتاب رو هم برای تعداد بسیار محدود برای فروش آماده کرده است. کتاب به همون صورت چاپ اصلی از انتشارات WILEY هست که کیفیت بسیار بالایی داره و خوندن این کتاب رو لذت بخش تر میکنه. برای سفارش کتاب Smashing WordPress, Beyond the Blog و همینطور کتاب The Smashing Book، با جعبه ابزار &lt;a title="تماس" href="http://mytoolbox.ir/blog/contact.aspx"&gt;تماس&lt;/a&gt; بگیرید.&lt;/p&gt;  &lt;p dir="rtl"&gt;در ادامه سرفصل های کتاب رو میتونید ببینید. مطالب بسیاری رو در این کتاب میتونید بخونید و یاد بگیرید:&lt;/p&gt;  &lt;p dir="rtl"&gt;&lt;strong&gt;بخش اول: مقدمات ضروری در وردپرس&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl"&gt;فصل اول:    &lt;br /&gt;- نصب وردپرس     &lt;br /&gt;- انتقال وردپرس به دایرکتوری های دیگر     &lt;br /&gt;- آماده سازی دیتابیس     &lt;br /&gt;- بک آپ گیری از وردپرس     &lt;br /&gt;- انتقال وردپرس به هاست دیگر     &lt;br /&gt;- بالابردن امنیت در نصب وردپرس&lt;/p&gt;  &lt;p dir="rtl"&gt;فصل دوم:    &lt;br /&gt;- وردپرس و سینتکس پی اچ پی     &lt;br /&gt;- معرفی پوسته و قالب     &lt;br /&gt;- استفاده از Template Tags     &lt;br /&gt;- معرفی تگ include     &lt;br /&gt;- فرستادن پارامتر به Template Tags     &lt;br /&gt;- شرط در تگ ها&lt;/p&gt;  &lt;p dir="rtl"&gt;فصل سوم:    &lt;br /&gt;- معرفی حلقه ها در وردپرس     &lt;br /&gt;- استفاده از Loop های تکی و جندتایی     &lt;br /&gt;- ایجاد فیلدهای دلخواه&lt;/p&gt;  &lt;p dir="rtl"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl"&gt;&lt;strong&gt;بخش دوم: طراحی و توسعه Theme در وردپرس&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl"&gt;فصل چهارم:    &lt;br /&gt;- مقدمات theme     &lt;br /&gt;- فایلهای موردنیاز در Template     &lt;br /&gt;- Widget     &lt;br /&gt;- Comments     &lt;br /&gt;- Core Theme     &lt;br /&gt;- آماده سازی نهایی Theme     &lt;br /&gt;- بررسی دقیق یک Theme ساخته شده به صورت عملی&lt;/p&gt;  &lt;p dir="rtl"&gt;فصل پنجم:    &lt;br /&gt;- Child Themes     &lt;br /&gt;- نکاتی در مورد Semantic theme     &lt;br /&gt;- ارث بری در طراحی     &lt;br /&gt;- مدیریت همزمان چندین وبسایت توسط Child Themes     &lt;br /&gt;- معرفی Theme Framework&lt;/p&gt;  &lt;p dir="rtl"&gt;فصل ششم:    &lt;br /&gt;- طراحی حرفه ای     &lt;br /&gt;- تکنیک های CSS     &lt;br /&gt;- پشتیبانی از زبان های مختلف در Theme     &lt;br /&gt;- نکات SEO     &lt;br /&gt;- طراحی Conditional     &lt;br /&gt;- استفاده از Taxonomies     &lt;br /&gt;- صفحه Theme Option&lt;/p&gt;  &lt;p dir="rtl"&gt;   &lt;br /&gt;&lt;strong&gt;بخش سوم: طراحی و توسعه پلاگین ها در وردپرس&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl"&gt;فصل هفتم:    &lt;br /&gt;- مقدمات Plugin     &lt;br /&gt;- استفاده از پلاگین     &lt;br /&gt;- ساخت Template Tag     &lt;br /&gt;- توابع مورد استفاده     &lt;br /&gt;- پشتیبانی Widget     &lt;br /&gt;- استفاده از دیتابیس در پلاگین     &lt;br /&gt;- نکات مهم در طراحی نهایی پلاگین ها و در دسترس همه قراردادن&lt;/p&gt;  &lt;p dir="rtl"&gt;فصل هشتم:    &lt;br /&gt;- چه موقع باید از پلاگین استفاده کرد     &lt;br /&gt;- سرعت در وردپرس و پلاگین ها     &lt;br /&gt;- استفاده از functions.php     &lt;br /&gt;- برنامه ریزی برای یک سایت وردپرسی&lt;/p&gt;  &lt;p dir="rtl"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl"&gt;&lt;strong&gt;بخش چهارم: وردپرس، فراتر از وبلاگ&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl"&gt;فصل نهم:    &lt;br /&gt;- استفاده از وردپرس به عنوان CMS     &lt;br /&gt;- موارد مهم و قابل توجه     &lt;br /&gt;- Static Pages &amp;amp; News Content     &lt;br /&gt;- استفاده مناسب از Widget ها     &lt;br /&gt;- مدیریت Menu     &lt;br /&gt;- استفاده از مطالب غیر وردپرسی&lt;/p&gt;  &lt;p dir="rtl"&gt;فصل دهم:    &lt;br /&gt;- استفاده های به خصوص از وردپرس     &lt;br /&gt;- سایت کاریابی     &lt;br /&gt;- سایت FAQ     &lt;br /&gt;- استفاده از E-Commerce در وردپرس     &lt;br /&gt;- سایت شخصی     &lt;br /&gt;- سایت Link Directory     &lt;br /&gt;- گالری     &lt;br /&gt;- هر چه که میخواهید، میتوانید با وردپرس بسازید!&lt;/p&gt;  &lt;p dir="rtl"&gt;فصل یازدهم:    &lt;br /&gt;- پلاگین های مهم و ضروری برای وردپرس     &lt;br /&gt;- Content Focused     &lt;br /&gt;- Media     &lt;br /&gt;- Admin     &lt;br /&gt;- Comment Management     &lt;br /&gt;- Social Network     &lt;br /&gt;- Subscription     &lt;br /&gt;- Mobile     &lt;br /&gt;- SEO     &lt;br /&gt;- Code &amp;amp; Output&lt;/p&gt;  &lt;p dir="rtl"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl"&gt;&lt;strong&gt;بخش پنجم: جعبه ابزار وردپرس (مجموعه ای از نکات)&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl"&gt;فصل دوازدهم:    &lt;br /&gt;- نکات ریز در طراحی     &lt;br /&gt;- Tags     &lt;br /&gt;- Menu     &lt;br /&gt;- Ads     &lt;br /&gt;- 404     &lt;br /&gt;- Javascript&lt;/p&gt;  &lt;p dir="rtl"&gt;فصل سیزدهم:    &lt;br /&gt;- قابلیت های بیشتر     &lt;br /&gt;- Tabbed Box     &lt;br /&gt;- RSS     &lt;br /&gt;- Email     &lt;br /&gt;- Login     &lt;br /&gt;- Print&lt;/p&gt;  &lt;p dir="rtl"&gt;فصل چهاردهم:    &lt;br /&gt;- کار با تصاویر در وردپرس     &lt;br /&gt;- گالری     &lt;br /&gt;- استایلها     &lt;br /&gt;- مثال برای یک سرویس image sharing&lt;/p&gt;  &lt;p dir="rtl"&gt;فصل پانزدهم:    &lt;br /&gt;- Social web     &lt;br /&gt;- توییتر     &lt;br /&gt;- life stream     &lt;br /&gt;- ارسال به شبکه های اجتماعی     &lt;br /&gt;- کار با comments&lt;/p&gt;  &lt;p dir="rtl"&gt;با توجه به محدود بودن تعداد این کتاب برای فروش، به درخواست ها به ترتیب دریافت اونها رسیدگی میشه. بنابراین اگر قصد خرید دارید همین الان سفارش دهید و این کتاب را توسط پست در مدت حداکثر 48 ساعت دریافت کنید. &lt;a title="وبلاگ جعبه ابزار" href="http://mytoolbox.ir/blog" target="_blank"&gt;وبلاگ جعبه ابزار&lt;/a&gt; نمایندگی فروش محصولات &lt;a title="مجله اسمشینگ" href="http://www.smashingmagazine.com/" rel="nofollow" target="_blank"&gt;مجله اسمشینگ&lt;/a&gt; را دارد بنابراین با سفارش از ما، منصفانه ترین قیمت خرید را خواهید داشت.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/tj5etmtJmjY" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/tj5etmtJmjY/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/Smashing-WordPress.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=3e438998-acb2-47e8-8716-f6ba755e8678</guid>
      <pubDate>Sat, 04 Sep 2010 11:31:58 +0400</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=3e438998-acb2-47e8-8716-f6ba755e8678</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=3e438998-acb2-47e8-8716-f6ba755e8678</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/Smashing-WordPress.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=3e438998-acb2-47e8-8716-f6ba755e8678</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=3e438998-acb2-47e8-8716-f6ba755e8678</feedburner:origLink></item>
    <item>
      <title>بانکداری الکترونیکی: رقابت یا رفاقت</title>
      <description>&lt;h3 dir="rtl"&gt;سکانس اول&lt;/h3&gt;  &lt;p dir="rtl"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="بانکداری الکترونیکی" border="0" alt="بانکداری الکترونیکی" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=POSMagnetik.jpg" width="250" height="201" /&gt; مکان: یک اداره دولتی     &lt;br /&gt;زمان: ساعت 9 صبح&lt;/p&gt;  &lt;p dir="rtl"&gt;تقریبا 4 ساعت و نیم طول کشید تا بعد از یک عالم کاغذ بازی های بی معنی و بالا پایین رفتن 6 طبقه به صورت مداوم، یک قبضی به من داده شد تا پولی را برای آنها واریز کنم. تازه فهمیدم که چقدر خوش خیال بودم که فکر میکردم اینجا واحد حسابداریی دارد که دستگاه کارت خوان هم داره و میتونم همینجا پول رو واریز کنم. بنابراین پیش به سوی بانک ملی.&lt;/p&gt;  &lt;p dir="rtl"&gt; &lt;/p&gt;  &lt;h3 dir="rtl"&gt;سکانس دوم&lt;/h3&gt;  &lt;p dir="rtl"&gt;مکان: بانک ملی    &lt;br /&gt;زمان: ساعت 1:30 ظهر&lt;/p&gt;  &lt;p dir="rtl"&gt;مثل یک شهروند خوب و شیک، رفتم به سمت دستگاه نوبت دهی بانک و دکمه نوبت رو فشار دادم. اتفاقی نیوفتاد. یه بار دیگه، جوابی نداد. احساس کردم من رو یه طوری دارن نگاه میکنن همه. دقت که کردم دیدم سیستم کار نمیکنه و باید رفت و توی صف هفت هشت نفره منتظر موند. تو این فاصله میشد فیش واریزی رو پر کرد و من هم این کار رو انجام دادم تا وقتی نوبتم میرسه سریع کارم انجام شه و کسانی که تو صف هستند معطلِ من نمونند.&lt;/p&gt;  &lt;p dir="rtl"&gt;تا داشت نوبت من میشد از توی کیفم کارت صادرات رو درآوردم تا آماده شم. چیزی که تو ذهنم بود این بود که با اون دستگاه کارت خوانی که جلوی کارمند بانک بود، و با توجه به متصل بودن بانکها از طریق شبکه شتاب، میتونم با کارت بانک صادراتم پول رو برداشت کنم و به این حساب در بانک ملی واریز کنم. اما آقایی که اون طرف پیشخون بود نظر دیگه ای داشت.&lt;/p&gt;  &lt;p dir="rtl"&gt;آقا این دستگاه فقط برای بانک ملی هست و نمیشه بقیه رو خوند که.. گفتم که مگه همه به هم وصل نیست؟ با هم تکرار کرداین دستگاه فقط برای بانک خودمون هست. گفتم چی کار کنم؟ گفت برو دم در از خودپرداز پول نقد بگیر، بیار اینجا نقد رو، برات واریز کنم. &lt;/p&gt;  &lt;p dir="rtl"&gt;من هم به صورتی کاملا متعجب و البته تا حدی عصبانی به سمت خود پرداز بیرون بانک رفتم تا پول نقد بگیرم. تو همین فاصله کوتاه به این فکر بودم که آیا باید برای اینکه از خدمات بانکداری الکترونیکی برخوردار باشم باید تمام در تمام بانکها حسب و کارت بانکی داشته باشم؟ &lt;/p&gt;  &lt;p dir="rtl"&gt;به خودپرداز که رسیدم حدود 10 نفری رو در صف دیدم. گرم بود و من هم خسته از پله نوردی. نوبت من که رسید کارت صادرات رو به خودپرداز دادم و رمز زدم و برداشت وجه کردم و حدود 1 دقیقه با پیغام منتظر بمانید مواجه شدم و در نهایت چیزی نصیبم نشد جز پیغامی که به من گفت امکان اتصال نیست. با امید به اینکه این خودپرداز هم مثل دستگاه کارت خوان تو بانک، فقط مختص همین بانک نیست، کارت سامان رو هم گفتم یه امتحانی بکنم. نتیجه همون بود.&lt;/p&gt;  &lt;p dir="rtl"&gt;برگشتم به داخل بانک و گفتم که خودپرداز بهم پول نداد و یک راه حل رویای در اختیار من گذاشته شد. &amp;quot;برو بانک های دیگه رو امتحان کن.&amp;quot; پرسیدم صادرات کجاست؟ گفتند یه دونه کنار میدون هست. (میدون تا اینجا که من هستم 15 دقیقه پیاده راه داره!) دوباره پرسیدم بانک سامان چی؟ بعد از مدتی ساکت موندنِایشون انگار که این اسم رو تازه شنیدند، گفتند این طرفا فکر نکنم این بانک رو گیر بیاری.&lt;/p&gt;  &lt;p dir="rtl"&gt;&amp;#160;&lt;/p&gt;  &lt;h3 dir="rtl"&gt;سکانس سوم&lt;/h3&gt;  &lt;p dir="rtl"&gt;مکان: نامعلوم، متغیر، در جستجو    &lt;br /&gt;زمان: ساعت 2:10 ظهر&lt;/p&gt;  &lt;p dir="rtl"&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="نامعلوم، متغیر، در جستجو" border="0" alt="نامعلوم، متغیر، در جستجو" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=search-clipart.jpg" width="200" height="168" /&gt; خیلی عجیب بود برام که دو تا بانک ملی در فاصله 2 کوچه از هم رو دیدم. اما فایده ای نداشت. دومی هم به من پولی نداد. تابلوی صادرات رو از دور میدیدم و سعی میکردم با سریعتر راه رفتن زودتر بهش برسم. منتظر موندم تو صف تا نوبتم بشه. مبلغ رو 400 هزار تومان اتنخاب کردم. چون باید حدود 380 پول واریز میکردم. پیغام داد مبلغ زیاد هست. 350؟ زیاد هست. 300؟ اوه بالاخره دارم صدای شمرده شدن اسکناس رو میشنوم. خوشحالیم زیاد طول نکشید وقتی دیدم همه رو 2000 تومنی به من داد.&lt;/p&gt;  &lt;p dir="rtl"&gt;چاره‌ای نداشتم جز اینکه به سمت بانک دیگه‌ای حرکت کنم تا بقیه پول رو بگیرم. با وجود 150 عدد اسکناس 2000 تومانی، کیفم رو هم به زور بسته بودم و با توجه به اینکه سارقین در کمین هستند، محکم گرفته بودمش. به بانک های مختلفی سر زدم. فایده ای نداشت. اما بالاخره یه صادرات دیگه پیدا کردم. خودپرداز شیکی داشت و من این مدلی ندیده بودم. منو ها دیزانشون فرق کرده بود و یک صدای راهنما هم پخش میشد از دستگاه! &lt;/p&gt;  &lt;p dir="rtl"&gt;یه پیغامی بهم داد تو این مایه ها: &amp;quot;شما سقف روزانه رو برداشت کردید و اجازه برداشت بیشتر ندارید.&amp;quot; هوم.. سقف برداشت از خودپرداز 300 هزار تومن هست؟ نمیدونستم.. &lt;/p&gt;  &lt;p dir="rtl"&gt;دو حالت پیش میاد. یا این قانون هست که خوب فکر نمیکنم این قانون با توجه به شرایط من توجیهی داشته باشه. برای اینکه پول رو در بانک دیگه ای واریز کنم، مجبور به گرفتن وجه نقد از بانک دیگه ای هستم. بانک دوم هم به من بیشتر از یه مقداری در روز نمیده. بنابراین؟&lt;/p&gt;  &lt;p dir="rtl"&gt;حالت دوم این هست که این محدودیت رو بانک برای من تعیین کرده باشه. در این صورت من که یادم نمیاد چنین فرمی رو پر کرده باشم و امضا کرده باشم یا جایی از من خواسته شده باشه که برای خودم سقف برداشت مهین کنم یا حداقل اینکه مسوول بانک موقع تحویل کارت به من این حرف رو به من زده باشه. من که یادم نمیاد!&lt;/p&gt;  &lt;p dir="rtl"&gt;با نا امیدی تمام گفتم که یه شانس دوباره به این کارت سامان بدم و با کمال تعجب، خودپردازِ شیک به من پول داد و 5000 تومانی هم داد. دستش درد نکنه.&lt;/p&gt;  &lt;p dir="rtl"&gt;&amp;#160;&lt;/p&gt;  &lt;h3 dir="rtl"&gt;سکانس چهارم&lt;/h3&gt;  &lt;p dir="rtl"&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="دوان دوان به سمت بانک و اداره " border="0" alt="دوان دوان به سمت بانک و اداره " align="left" src="http://mytoolbox.ir/blog/image.axd?picture=tired_runner-758794.jpg" width="200" height="163" /&gt; مکان: دوان دوان به سمت بانک و اداره     &lt;br /&gt;زمان: ساعت 3:20 ظهر&lt;/p&gt;  &lt;p dir="rtl"&gt;دیدم رو درش زده ساعت کار تا 3:30 و این خیلی خوب بود چون میتونستم فیش رو واریز کنم. بعد از انجام این کار در همون حالت خستگی با حداکثر سرعتی که میتونستم به اداره ای رسیدم که باید این رسید بانکی رو تحویل میدادم. نگهبان اجازه ورود رو به من نداد و گفت تعطیل شده. فردا بیا. من موندم و یک رسید بانکی و فکر اینکه فردا دوباره باید از کار بزنم و این همه راه تا اینجا بیام.&lt;/p&gt;  &lt;p dir="rtl"&gt;&amp;#160;&lt;/p&gt;  &lt;h3 dir="rtl"&gt;نتیجه گیری و چند مطلب&lt;/h3&gt;  &lt;p dir="rtl"&gt;از حق نگذریم، بانکداری الکترونیکی در ایران پیشرفت خوبی داشته و همونطور که با توجه به فرهنگ موجود در جامعه انتظار میرفت، خیلی آروم هم داره پیش میره. اما شاید در این میان، همچنان زیرساخت ها نیاز به تقویت بیشتری داشته باشند. هر چند رقابت میان بانک ها برای خدمات بهتر و در نتیجه جذب مشتری بیشتر، همیشه وجود داشته و خواهد داشت، اما این رقابت باید به نفع منِ مشتری باشد.&lt;/p&gt;  &lt;p dir="rtl"&gt;سیستم یکپارچه بانکی باید در جهت رفاقت بانکها باشه. بسترسازی مناسب و اتصال درست و بی نقص تمامی بانکهای کشور به یک شبکه کاملا قابل اطمینان و قابل اتکاء در نهایت تماما به نفع مردم، ادارات و شرکتها خواهد بود و بالاخره بالا رفتن راندمان کلی در جامعه (البته به نوبه خود)&amp;#160; را نتیجه خواهد داد. این برای من اصلا قابل قبول نیست که از طریق اینترنت بانک صادرات من قابلیت این رو ندارم که به شماره کارتی پول واریز کنم و فعلا تنها امکان واریز پول از طریق اینترنت بانک صادرات، پر کردن فرم ساتنا به صورت آنلاین بوده که بعد از آن تا ساعاتی بعد این فرم رو یک اپراتور به صورت دستی برای شما انتقال دهد. من اسم این رو خدمات الکترونیکی نمیگذارم.&lt;/p&gt;  &lt;p dir="rtl"&gt;&lt;img style="border-right-width: 0px; margin: 10px auto; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="samanbank" border="0" alt="samanbank" src="http://mytoolbox.ir/blog/image.axd?picture=samanbank.png" width="504" height="319" /&gt;&lt;/p&gt;  &lt;p dir="rtl"&gt;در بین بانکهای موجود، هر چند بانک سامان باز هم برای بهتر شدن جا داره (هم از نظر طراحی و هم از نظر یکپارچه تر شدن خدمات اینترنی)، اما میتونم بگم تنها بانکی هست که &lt;strong&gt;از نظر من&lt;/strong&gt;، به معنای واقعی داره خدمات بانکداری اینترنتی رو برای مردم فراهم میکنه.&lt;/p&gt;  &lt;p dir="rtl"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl"&gt;مطلب بعدی در مورد مسایل مالی در سازمان هاست که شاید ترس از ایجاد فساد مالی در اداره ها، یکی از بزرگترین دلایلی باشه که ادارات دولتی کارهای بانکی رو به سمت بانک ها میفرستند و خودشون رو درگیر گرفتن پول از مردم نمیکنند. شاید هم مسایل حقوقی و قانونی در این مساله وجود داره که از سواد من خارج هست. من از دید یک شهروند به این قضیه نگاه میکنم و میتونم بگم اگر به هر صورتی بشه هم مسایل مالی و هم اداری رو در همون سازمان و اداره مربوطه حل کرد، مستقیم یا غیر مستقیم میشه در وضعیت ترافیک، آلودگی، اعصاب مردم و تلف شدن وقت، بهبود و پیشرفت مثبت ایجاد کرد. نمونه موفقی که در این زمینه میشه عنوان کرد، پلیس +10 هست که هرچند همچنان برخی فیش های بانکی رو باید به بانک رفت، اما نسبت به گذشته سیستم خیلی بهتر و سریعتری ایجاد شد. شما برای گرفتن پاسپورت نیازی به رفتن به شهرآرا دیگه ندارید. کافیه یه پلیس +10 در محل خودتون پیدا کنید.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/mytoolbox/~4/WBT0-MAUmtk" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/WBT0-MAUmtk/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/connected-ebanking.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=d9a7a7d4-84e0-43a8-b71f-ab67a10eea13</guid>
      <pubDate>Tue, 31 Aug 2010 14:50:30 +0400</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=d9a7a7d4-84e0-43a8-b71f-ab67a10eea13</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=d9a7a7d4-84e0-43a8-b71f-ab67a10eea13</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/connected-ebanking.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=d9a7a7d4-84e0-43a8-b71f-ab67a10eea13</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=d9a7a7d4-84e0-43a8-b71f-ab67a10eea13</feedburner:origLink></item>
    <item>
      <title>Donut Caching &amp; Substitution Control</title>
      <description>&lt;h3 dir="rtl"&gt;آپدیت بخشی از کل یک صفحۀ کش شده در دات نت&lt;/h3&gt;  &lt;p dir="rtl" align="right"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Donut Caching" border="0" alt="Donut Caching" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=homero-simpson-wallpaper-homer-1024.jpg" width="210" height="219" /&gt; هر زمانی که یک صفحه داینامبک از وب سرور درخواست میشود، بخشهایی از سرور وارد کار شده و این صفحه را برای ارسال به سمت سیستم بازدیدکننده، آماده میکنند. اگر در زمانی کوتاه، درخواست‌های زیادی برای این صفحه به سرور ارسال بشه (مثلا در یک وبسایت پربازدید و با ترافیک بالا) سرور دچار لود زیادی میسه، چون یک صفحه رو چندبن بار در دقیقه و حتی ثانیه باید پردازش کنه و به سمت درخواست کننده‌ها بفرسته و نتیجه کند شدن وب خواهد بود. برای برداشتن این بار از روی سرور و بهبود سرعت پاسخ دهی سرور و همچنین بهتر لود شدن صفحات وب، استفاده از تکنولوژیهای Caching بسیار مهم هست.&lt;/p&gt;  &lt;p dir="rtl"&gt;کش کردن یک صفحه وب به مفهوم ذخیره کردن این صفحه بر روی حافظه سرور هست بنابراین یک بار در زمان مشخص مثلا 1 دقیقه این صفحه توسط سرور پردازش شده و به طور پیش فرض در حافظه سرور (میتوان روی هارد و یا حتی دیتابیس هم ذخیره کرد) باقی می‌ماند و بعد از این تا 1 دقیقه هر درخواستی که برای اون صفحه بشه دیگه سرور درگیر پردازش نمیشه و صفحه آماده از حافظه به کلاینت فرستاده میشه. بعد از یک دقیقه دوباره با اولین درخواست، این صفحه ایجاد شده و دوباره همین روند ادامه پیده میکنه.&lt;/p&gt;  &lt;p dir="rtl"&gt;مشکلی که ممکن هست پیش بیاد اینه که در صفحه‌ای که Cache کردیم، قسمتی وجود داره که نیاز داریم همیشه به روز باشه و در هر درخواستی که از این صفحه به سرور فرستاده میشه، قسمتی از این صفحه بدون کش شدن، به روز رسانی بشه. مثلا در قسمتی از صفحه قرار هست تغییرات قیمت رو در شرایطی داشته باشیم که این قیمت ها مثلا هر یک ثانیه تغییر میکنند بنابراین هر بار که صفحه درخواست میشه تقریبا میشه گفت که قیمتهای جدیدی برای نشون دادن هست.    &lt;br /&gt;حالا اگر تمام صفحه کش شده باشه به مدت 5 دقیقه و در این زمان بازدید کننده ای به سایت بیاد و یا این صفحه را refresh کنه، همون قیمت های ذخیره شده رو میبینه و آپدیت های جدید رو از دست میده تا زمانی که دوره کش (Cache Duration) به پایان برسه و صفحه دوباره کش بشه. در این حالت نیاز داریم که این یک قسمت در سرور کش نشود و هر درخواستی که به این صفحه میرسه، تمام صفحه از کش خونده بشه به جر این بخشی که تعیین شده و قرار هست قیمت ها رو هر دفعه از جایی بخونه و هربار کد مربوط به این قسمت باید دوباره پردازش بشه.     &lt;br /&gt;در واقع دلیل اینکه به این روش کش کردن، دونات گفته میشه همین هست که مانند دونات که در وسط اون قسمتی جدا و خالی هست، در وب هم میخواهیم قسمتی از صفحه رو جدا کرده و اون رو طوری که میخواهیم نشان دهیم جدای از بقیه صفحه که بدون پردازش، از کش سرور خوانده می‌شود.&lt;/p&gt;  &lt;p dir="rtl"&gt;برای این کار در ASP.Net باید از کنترل Substitution استفاده کنید. این کنترل نام یک تابع را از شما میگیرد که شما باید این تابع را در کد خودتون تعریف کرده باشید و 3 نکته زیر حتما رعایت شده باشند:&lt;/p&gt;  &lt;p dir="rtl"&gt;- این تابع باید به صورت Static در سی شارپ یا Shared در وی بی دات نت باشد.    &lt;br /&gt;- این تابع باید یک مقدار String برگشت دهد.     &lt;br /&gt;- این تابع باید httpcontext را به عنوان ورودی داشته باشد.&lt;/p&gt;  &lt;p dir="rtl"&gt;در مثال زیر، زمان کش شدن برای کل صفحه 60 ثانیه تنظیم شده. بنابراین لیبلی که قرار هست در هر page load زمان رو نشون بده، تنها هر 60 ثانیه زمان جدید رو نشون میده و در طول یک دقیقه، ساعتی رو نشون میده که بار اول اون زمان در سرور کش شده بود. در کنار این label یک کنترل sabstitution وجود داره که توسط تابع GetTime زمان رو در هر بار Refresh بدون توجه به کش بودن، در صفحه نشون میده.&lt;/p&gt;  &lt;div class="coder"&gt;   &lt;p&gt;&amp;lt;%@ Page Language=&amp;quot;VB&amp;quot; %&amp;gt;      &lt;br /&gt;&lt;span style="color: #ff0000"&gt;&amp;lt;%@ OutputCache Duration=&amp;quot;60&amp;quot; VaryByParam=&amp;quot;None&amp;quot; %&amp;gt;&lt;/span&gt;       &lt;br /&gt;&amp;lt;script runat=&amp;quot;server&amp;quot;&amp;gt;       &lt;br /&gt;&lt;span style="color: #000000"&gt;&amp;#160;&amp;#160;&amp;#160; Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cachedlbl.Text = Now.ToLongTimeString()         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; End Sub         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;Shared Function GetTime(ByVal context As HttpContext) As String        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Return Now.ToLongTimeString()         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; End Function         &lt;br /&gt;&lt;/span&gt;&amp;lt;/script&amp;gt;       &lt;br /&gt;&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;       &lt;br /&gt;&amp;lt;head runat=&amp;quot;server&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;title&amp;gt;Donut Caching&amp;lt;/title&amp;gt;       &lt;br /&gt;&amp;lt;/head&amp;gt;       &lt;br /&gt;&amp;lt;body&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;form id=&amp;quot;form1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;p&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Cached:&amp;lt;br /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:Label runat=&amp;quot;server&amp;quot; ID=&amp;quot;cachedlbl&amp;quot;&amp;gt;&amp;lt;/asp:Label&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/p&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;p&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Not-Cached:&amp;lt;br /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;asp:Substitution runat=&amp;quot;server&amp;quot; ID=&amp;quot;subcontrol&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ff0000"&gt;MethodName=&amp;quot;GetTime&amp;quot;&lt;/span&gt; /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/p&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/form&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&gt;محدودیتی که sunstitution control داره اینه که شما فقط میتونید خروجی متنی داشته باشید یعنی html و جاوااسکریپت رو جایگزین کنید در صفحه و امکان استفاده از کنترل‌های ASP.Net نیست. مثلا اگر قرار هست قسمتی که LoginView وجود داره رو از کل صفحه کش شده جدا کنید، باید با کد نویسی این کار رو انجام بدید و به نسبت اینکه بازدیدکننده وارد سایت شده یا نه، متن و html مورد نظر رو در تابع پاس داده شده به&amp;#160; substitutoin خروجی بگیرید. شما دیگه امکان استفاده از تگ &amp;lt;asp:loginview runat=server&amp;gt; رو ندارید.&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/utxedzyT_ss" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/utxedzyT_ss/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/Dunot-Caching-Substitution-Control.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=c41f55ed-53ab-43e5-b4e1-d05c6e1eb4f2</guid>
      <pubDate>Mon, 05 Jul 2010 12:54:00 +0400</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=c41f55ed-53ab-43e5-b4e1-d05c6e1eb4f2</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=c41f55ed-53ab-43e5-b4e1-d05c6e1eb4f2</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/Dunot-Caching-Substitution-Control.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=c41f55ed-53ab-43e5-b4e1-d05c6e1eb4f2</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=c41f55ed-53ab-43e5-b4e1-d05c6e1eb4f2</feedburner:origLink></item>
    <item>
      <title>Microsoft .Net Installation Compatibility Mode Error</title>
      <description>&lt;h3&gt;خطای ناسازگاری ورژن ویندوز در نصب دات نت&lt;/h3&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="خطای ناسازگاری ورژن ویندوز در نصب دات نت" border="0" alt="خطای ناسازگاری ورژن ویندوز در نصب دات نت" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=wind.png" width="272" height="144" /&gt; مدتی هست که نسخه نهایی دات نت 4 و ویژوال استودیو 2010 از طرف مایکروسافت ارائه شده. دات نت 4 رو میتونید از &lt;a title="Microsoft .NET Framework 4 (Standalone Installer)" href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7" rel="nofollow" target="_blank"&gt;این آدرس&lt;/a&gt; دانلود کرده و نصب کنید و برای ویژوال استودیو میتونید از نسخه Express که رایگان هست در &lt;a title="Visual Studio 2010 Express Edition" href="http://www.microsoft.com/express/Web/" rel="nofollow" target="_blank"&gt;این آدرس&lt;/a&gt; استفاده کنید. البته برای دانلود راحت تر این نرم افزارها بهتر هست که از &lt;a title="مایکروسافت وب پلتفرم به زبان ساده" href="http://mytoolbox.ir/blog/post/Microsoft-web.aspx" rel="tag" target="_blank"&gt;مایکروسافت وب پلتفرم&lt;/a&gt; استفاده کنید.&lt;/p&gt;  &lt;p&gt;در هنگام نصب دات نت و یا ویژوال استودیو ممکن هست به یک پیغام خطا مثل شکل زیر برسید. این خطا به شما این رو میگه که ستاپ برنامه در حالت سازگاری با ویندوزهای قبلی داره اجرا میشه (Compatibility Mode) و دات نت امکان این گونه اجرا شدن رو نداره. شاید اولین چیزی که به فکرتون برسه، رایت کلیک کردن روی فایل ستاپ و رفتن به proprties قسمت Compatibilities باشه. اما شما زیاد خوش شانس نخواهید بود، چون همه چیز در حالت نرمال قرار داره و گزینه Run this program in compatibility mode هیچ تیکی نخورده. پس اشکال از کجاست؟ بعد از چند هفته پیگیری این مطلب تونستم راه حل اون رو پیدا کنم.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="خطای ناسازگاری ورژن ویندوز در نصب دات نت" border="0" alt="خطای ناسازگاری ورژن ویندوز در نصب دات نت" src="http://mytoolbox.ir/blog/image.axd?picture=error.png" width="504" height="466" /&gt; &lt;/p&gt;  &lt;p align="right"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="right"&gt;برای رفع این اشکال باید به سمت رجیستری در ویندوز برید. روی Start کلیک کرده و بعد از اون گزینه Run رو بزنید. اونجا تایپ کنید &lt;strong&gt;regedit&lt;/strong&gt; و ok را بزنید. برنامه رجیستری ویندوز که باز شد، به ترتیب زیر، جلو بروید:&lt;/p&gt;  &lt;p align="right"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="ltr" align="left"&gt;HKEY_LOCAL_MACHINE –&amp;gt; SOFTWARE –&amp;gt; Microsoft –&amp;gt; Windows NT –&amp;gt; CurrentVersion –&amp;gt;    &lt;br /&gt;Image File Execution Options –&amp;gt; setup.exe –&amp;gt; &lt;strong&gt;HighVersionLie-{6B64DE21-0F4C-4479-9D6C-0FBCA496BCDC}&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;روی گزینه آخر یعنی HighVersionLie - 6B64DE21-0F4C-4479-9D6C-0FBCA496BCDC رایت کلیک کرده و rename رو انتخاب کنید و اول اون مثلا یه حرف A بگذارید. هر کاری میکنید، طوری باشه که بعدا یادتون باشه اسم اول چی بود! پس همین بهتره که یه چیزی اول اسم اضافه کنید. با تغییر نام این مورد، مشکل شما حل میشه و ستاپ دات نت یا ویژوال استودیو با موفقیت انجام میشه.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="خطای ناسازگاری ورژن ویندوز در نصب دات نت" border="0" alt="خطای ناسازگاری ورژن ویندوز در نصب دات نت" src="http://mytoolbox.ir/blog/image.axd?picture=installed.png" width="454" height="429" /&gt; &lt;/p&gt;  &lt;p&gt;بعد از نصب، عبارت تغییر یافته در رجیستری رو به حالت اول برگردونید.&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/XEBAbeWFzw0" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/XEBAbeWFzw0/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/Microsoft-Net-Installation-Compatibility-Mode-Error.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=dac6b374-ec62-43a1-9e92-3d662c10c244</guid>
      <pubDate>Tue, 25 May 2010 13:31:58 +0400</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=dac6b374-ec62-43a1-9e92-3d662c10c244</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=dac6b374-ec62-43a1-9e92-3d662c10c244</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/Microsoft-Net-Installation-Compatibility-Mode-Error.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=dac6b374-ec62-43a1-9e92-3d662c10c244</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=dac6b374-ec62-43a1-9e92-3d662c10c244</feedburner:origLink></item>
    <item>
      <title>Google Bookmarks Plugin with jQuery</title>
      <description>&lt;h3&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="listbookmark" border="0" alt="listbookmark" align="left" src="http://mytoolbox.ir/blog/image.axd?picture=listbookmark.png" width="244" height="156" /&gt; گوگل در سرویس بوکمارک خودش، اخیرا تغییراتی داده که مورد استقبال کاربران اینترنت به خصوص طرفداران سرویس های گوگل، قرار گرفته و برخی حتی از Delicious و سرویس های مشابه دیگر به سرویس بوکمارک گوگل نقل مکان پیدا کردند.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;هرچند از نظر شخصی خودم، از این سرویس به اون سرویس پریدن جالب نیست همیشه ولی به هر حال، تست سرویس‌های جدید برای عقب نموندن از دنیای وب تقریبا لازم هست. البته من سرویس Delicious رو فعلا ترجیح میدم، مگر اینکه گوگل بوکمارک امکاناتی رو ارائه بده که بیشتر به دردم بخوره!&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;در سرویس گوگل بوکمارک شما میتونید لیست هایی رو به صورت مجزا ایجاد کنید و هر کدوم رو با یک سری از افراد دیگه به اشتراک بگذارید و یا به طور کلی به اون لیست دسترسی عمومی یعنی public بدید و لینک اون لیست رو به دوستانتون بدید تا از بوکمارکهای شما استفاده کنند.&lt;/p&gt;  &lt;p dir="rtl" align="center"&gt;&lt;img style="border-right-width: 0px; margin: 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="googlebookmakrs" border="0" alt="googlebookmakrs" src="http://mytoolbox.ir/blog/image.axd?picture=googlebookmakrs.png" width="504" height="293" /&gt; &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;جالب اینجاست که گوگل فعلا هیچ سرویسی رو برای استفاده از یک لیست پابلیک، در خارج از گوگل، ارائه نداده! یه چیزی مثل RSS یا یه API که ابن کارو انجام بده. شاید در آینده این کار رو بکنه ولی تا این تاریخ که این مطلب نوشته میشه، چنین چیزی وجود نداره.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;تو قسمتهای مختلف گوگل بوکمارک که چرخی میزدم، متوجه شدم گوگل خودش داره از یه API برای بوکمارک استفاده میکنه؛ پس منم دست به کار شدم و گفتم اگه گوگل بتونه، چرا ما نتونیم؟ :دی پلاگینی رو با jQuery نوشتم که بتونید لیست پابلیک خودتون رو در وبلاگ خودتون قرار بدید. شاید براتون به دردبخور باشه. در ساخت این پلاگین برای اینکه بتونم فرمت jsonp داشته باشم، از Yahoo Pipes استفاده کردم. (&lt;a title="در مورد jsonp بیشتر بخوانید." href="http://mytoolbox.ir/blog/post/Cross-Domain-Javascript.aspx" target="_blank"&gt;در مورد jsonp بیشتر بخوانید.&lt;/a&gt;)&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;برای شروع کار، لازم به ذکر نیست اما کتابخونه اصلی جی‌کوئری فراموش نشه. بعد از اون نیاز دارید لینک کامل لیست خودتون رو که میخواید در وبلاگ داشته باشید، در کد جاوا اسکریپت در متغیر &lt;strong&gt;publiclisturl &lt;/strong&gt;وارد کنید. دقت کنید این لیست باید public باشد.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;مثال زیر کد کامل رو برای خوندن بوکمارک ها نشون میده. در این مثال از 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 Transitional//EN&amp;quot; &amp;quot;&lt;a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;"&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.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;Google Bookmarks&amp;lt;/title&amp;gt; &lt;/p&gt;    &lt;p&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;/p&gt;    &lt;p&gt;&amp;lt;script src=&amp;quot;jgooglebm.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;/p&gt;    &lt;p&gt;&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;      &lt;br /&gt;#bookmarks {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; direction:rtl;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; width:280px;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; margin:0 auto;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; text-align:right;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; font-family:Tahoma;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; font-size:12px;       &lt;br /&gt;}       &lt;br /&gt;#bookmarks .error {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; color:red;       &lt;br /&gt;}       &lt;br /&gt;#bookmarks .listname {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; font-weight:bold;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; margin-bottom:5px;       &lt;br /&gt;}       &lt;br /&gt;#bookmarks .listdesc{       &lt;br /&gt;}       &lt;br /&gt;#bookmarks ul {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; list-style:none;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; padding-right:10px;       &lt;br /&gt;}       &lt;br /&gt;#bookmarks ul li{       &lt;br /&gt;margin-bottom:5px; &lt;/p&gt;    &lt;p&gt;}      &lt;br /&gt;#bookmarks ul li a{ &lt;/p&gt;    &lt;p&gt;}      &lt;br /&gt;&amp;lt;/style&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;var publiclisturl = &amp;quot;&lt;a href="http://www.google.com/bookmarks/l#!threadID=GdAVWPWBGuOk%2FBDdge3woQ0Y7Lnvok&amp;quot;;"&gt;http://www.google.com/bookmarks/l#!threadID=GdAVWPWBGuOk%2FBDdge3woQ0Y7Lnvok&amp;quot;;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;$(function() {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $(&amp;quot;#bookmarks&amp;quot;).html(&amp;quot;کمی صبر کنید..&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $.Gbookmarks(publiclisturl, function(data) { &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (!data) {      &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;#bookmarks&amp;quot;).empty();       &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;&amp;lt;div/&amp;gt;&amp;quot;).attr(&amp;quot;class&amp;quot;,&amp;quot;error&amp;quot;).append(&amp;quot;خطایی رخ داده است&amp;quot;).appendTo(&amp;quot;#bookmarks&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; return false;       &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; var ownername = data.owner.name;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var listname = data.title;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var listdescription = data.description;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&amp;quot;#bookmarks&amp;quot;).empty();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&amp;quot;&amp;lt;div/&amp;gt;&amp;quot;).attr(&amp;quot;class&amp;quot;,&amp;quot;listname&amp;quot;).append(listname).appendTo(&amp;quot;#bookmarks&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&amp;quot;&amp;lt;div/&amp;gt;&amp;quot;).attr(&amp;quot;class&amp;quot;,&amp;quot;listdesc&amp;quot;).append(listdescription).appendTo(&amp;quot;#bookmarks&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&amp;quot;&amp;lt;ul/&amp;gt;&amp;quot;).appendTo(&amp;quot;#bookmarks&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $.each(data.threadResults, function(i,item){       &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;&amp;lt;li/&amp;gt;&amp;quot;).append(       &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;&amp;lt;a/&amp;gt;&amp;quot;).attr(&amp;quot;href&amp;quot;,item.url).append(item.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; ).appendTo(&amp;quot;#bookmarks ul&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;&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;bookmarks&amp;quot;&amp;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 dir="rtl" align="justify"&gt;فایل jgooglebm.js پلاگینی هست که توسط خودم نوشته شده و در جی‌کوئری توسط نام Gbookmarks فراخونی میشه و بوکمارکهای گوگل رو خونده و نتایج را در متغیر data به تابعی که در این پلاگین میسازید با فرمت json میفرسته. در کد نوشته شده، مقادیری که نیاز دارید کاملا مشخص شده. شما حتی میتونید بدون هیچ گونه دستکاری در این کد، اون رو کاملا copy paste کرده و فقط استایل های مربوط به اون رو تغییر بدید. برای این مثال، من از یک استایل بسیار ساده استفاده کردم که هدف فقط نشون دادن چگونگی این کار بوده. نتیجه کار به صورت زیر هست:&lt;/p&gt;  &lt;p dir="rtl" align="center"&gt;&amp;#160;&lt;img style="border-right-width: 0px; margin: 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="listbookmarkexample" border="0" alt="listbookmarkexample" src="http://mytoolbox.ir/blog/image.axd?picture=listbookmarkexample.png" width="347" height="309" /&gt; &lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;شما با copy paste کردن دقیقا همین کد و اجرای اون درسیستم خودتون، میتونید نتیجه رو ببینید. لیست بوکمارک‌هایی که لود میشه به صورت آرمایشی برای همین مثال ساخته شده. تنها کاری که باید انجام بدید دانلود پلاگین جی‌کوئری هست که از آدرس زیر دانلود کنید. روی لینک رایت کلیک کرده و گرینه save target as رو انتخاب کنید. سپس فایل دانلود شده را از حالت زیپ خارج کرده تا به فایل jgooglebm.js برسید. سپس این فایل رو در کنار فایل html که با کد بالا ساختید قرار بدید.&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;&lt;a title="پلاگینِ وب گوگل بوکمارک برای جی‌کوئری" href="http://mytoolbox.ir/blog/files/jgooglebm.zip" target="_blank"&gt;پلاگینِ وب گوگل بوکمارک برای جی‌کوئری&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl" align="justify"&gt;تنها تنظیماتی که باید روی این کد اعمال کنید تا از آن در وبلاگ خودتون استفاده کنید، قرار دادن لینک لیست بوکمارک‌های موردنظر در متغیر &lt;strong&gt;publiclisturl&lt;/strong&gt; هست و بعد از اون تغییر استایل‌ها متناسب با طراحی وبلاگ شما. به همین سادگی.&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/2nlsAZegSa0" height="1" width="1"/&gt;</description>
      <link>http://feeds.mytoolbox.ir/~r/mytoolbox/~3/2nlsAZegSa0/post.aspx</link>
      <author>me</author>
      <comments>http://mytoolbox.ir/blog/post/Google-Bookmarks-Plugin-with-jQuery.aspx#comment</comments>
      <guid isPermaLink="false">http://mytoolbox.ir/blog/post.aspx?id=a5b8668a-209f-4c45-a02a-711f39bf19b8</guid>
      <pubDate>Sun, 28 Mar 2010 15:28:34 +0400</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=a5b8668a-209f-4c45-a02a-711f39bf19b8</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://mytoolbox.ir/blog/trackback.axd?id=a5b8668a-209f-4c45-a02a-711f39bf19b8</trackback:ping>
      <wfw:comment>http://mytoolbox.ir/blog/post/Google-Bookmarks-Plugin-with-jQuery.aspx#comment</wfw:comment>
      <wfw:commentRss>http://mytoolbox.ir/blog/syndication.axd?post=a5b8668a-209f-4c45-a02a-711f39bf19b8</wfw:commentRss>
    <feedburner:origLink>http://mytoolbox.ir/blog/post.aspx?id=a5b8668a-209f-4c45-a02a-711f39bf19b8</feedburner:origLink></item>
    <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 +0400</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>2</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 +0400</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>3</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 +0400</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>6</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 +0400</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>5</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 +0400</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 +0400</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 +0400</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>15</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 +0400</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 +0400</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>2</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 +0400</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 +0400</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 +0400</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>3</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 +0400</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 +0400</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>24</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" src="http://mytoolbox.ir/blog/image.axd?picture=windowslive_thumb.jpg" border="0" alt="windowslive" width="204" height="154" align="left" /&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&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" rel="nofollow" href="http://www.4shared.com/file/160248348/10fc619f/LiveWriter2009.html" target="_blank"&gt;Live Writer 2009 Full Setup&lt;/a&gt;&lt;/p&gt;
&lt;p dir="rtl" align="justify"&gt;برای uninstall کردن هم میتونید از این دستور در Run استفاده کنید:&lt;/p&gt;
&lt;p class="coder"&gt;msiexec /x {178832DE-9DE0-4C87-9F82-9315A9B03985}&lt;/p&gt;
&lt;p dir="rtl" align="justify"&gt;آپدیت: برای دانلود کل پکیج محصولات لایو، میتونید از &lt;a title="Windows Live Full Setup" rel="nofollow" href="http://wl.dlservice.microsoft.com/download/E/3/E/E3EEC6D6-1141-40C4-840F-770F99B67986/en/wlsetup-all.exe" target="_blank"&gt;این لینک&lt;/a&gt; استفاده کنید. حجم آن حدود 135 مگابایت و لینک مستقیم از خود سرور مایکروسافت هست.     &lt;br /&gt;ممنون از &lt;a title="فرشاد" rel="nofollow" href="http://mytoolbox.ir/blog/post/Live-Writer-2009-Full-Setup.aspx#id_c544ed3e-3dcb-483a-aa19-be45ba2e93d2"&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:00 +0400</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>
  </channel>
</rss>
