<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>وبلاگ شخصی علی فرهادی &#187; JavaScript</title>
	<atom:link href="http://farhadi.ir/blog/category/webdev/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://farhadi.ir/blog</link>
	<description>The daily thoughts and work experiences of a web developer</description>
	<lastBuildDate>Fri, 04 Mar 2011 11:42:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>fa</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>چرا node.js اینقدر طرفدار داره</title>
		<link>http://farhadi.ir/blog/1389/09/23/why-nodejs-is-so-popular/</link>
		<comments>http://farhadi.ir/blog/1389/09/23/why-nodejs-is-so-popular/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 10:53:52 +0000</pubDate>
		<dc:creator>علی</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[توسعه‌ی وب]]></category>
		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">http://farhadi.ir/blog/?p=288</guid>
		<description><![CDATA[
به جرأت میتونم بگم node.js انقلابی‌ترین حرکت در زمینه توسعه وب توی یکی دو سال گذشته بوده. node در github سومین پروژه از لحاظ محبوبیته و همین الان که من دارم این مطلب رو می‌نویسم این پروژه بیش از 4000 تماشاچی داره و بیش از 400 بار fork خورده و 100 ها ماژول براش نوشته [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-291  alignright" title="nodejs" src="http://farhadi.ir/blog/wp-content/uploads/2010/12/nodejs.png" alt="nodejs" width="200" height="53" /></p>
<p>به جرأت میتونم بگم <a href="http://nodejs.org/" target="_blank">node.js</a> انقلابی‌ترین حرکت در زمینه توسعه وب توی یکی دو سال گذشته بوده. <a href="https://github.com/ry/node" target="_blank">node در github</a> سومین پروژه از لحاظ محبوبیته و همین الان که من دارم این مطلب رو می‌نویسم این پروژه بیش از 4000 تماشاچی داره و بیش از 400 بار fork خورده و 100 ها ماژول براش نوشته شده و همه این اتفاقات در کمتر از یک سال و اندی که از شروع این پروژه می‌گذره افتاده.</p>
<p>اگر اخبار و تحولات توسعه وب رو دنبال کرده باشید حتما تا به حال مطالبی در موردش شنیدید اما ممکنه به اهمیت موضوع پی نبرده باشید. به عبارت دیگه اکثر افراد در وهله اول متوجه نمیشن که node چه چیز جدیدی برای ارائه داره و چی باعث محبوبیت اون شده.</p>
<p>اگر می‌خواهید در مورد node بیشتر بدونید در ادامه این مطلب با من همراه باشید.</p>
<p><span id="more-288"></span></p>
<p><strong>حالا این node.js چی هست؟ یک فریم ورک جدید مثل jquery؟</strong></p>
<p>نه اشتباه نکنید. node.js هیچ ربطی به مرورگر نداره و کدی که برای node نوشته میشه قرار نیست روی مرورگر اجرا بشه.</p>
<p><strong>پس لابد یک زبان برنامه نویسی جدیده!</strong></p>
<p>زبان جدید هم نیست. برنامه‌های node به زبان جاوا اسکریپت نوشته میشن. جاوا اسکریپتی که سمت سرور اجرا میشه. البته از node میشه برای نوشتن برنامه‌های غیر سروری هم استفاده کرد ولی بیشتر کاربردش برای نوشتن برنامه‌های سروری مخصوصا وبسرورهاست.</p>
<p><strong>پس node رو میشه مثل php و python روی وبسرور نصب کرد.</strong></p>
<p>نه. node مستقله. در واقع node خودش وبسرور داره و از وبسرور فعلی شما (مثلا آپاچی) استفاده نمیکنه.</p>
<p><strong>میشه دقیقتر توضیح بدی یک برنامه تحت وب با node چه جوری اجرا میشه؟</strong></p>
<p>node از طریق خط دستور (command line) اجرا میشه و برنامه شما رو اجرا میکنه. حالا برنامه شما میتونه از ماژول وبسرور node استفاده کنه و یک وبسرور راه بندازه.</p>
<p><strong>ولی من هر کاری که بخوام با php و python و ruby و &#8230;  میتونم انجام بدم.</strong></p>
<p>خوب آره. node هم قرار نیست کار جدیدی که قبلا غیر ممکن بوده رو انجام بده.  قرار هم نیست جای php و python و &#8230; رو بگیره. حداقل هنوز نه.</p>
<p><strong>خوب پس چی باعث شده اینقدر طرفدار پیدا کنه؟</strong></p>
<p>دلایل مختلفی داره. اگر ایده و هدف اصلی node و نحوه کارش رو بدونید خیلی از دلایلش مشخص میشه.</p>
<p>هدف node ایجاد راهکاری آسان برای نوشتن برنامه‌های مرتبط با شبکه با سرعت، کیفیت و مقیاس پذیری بالاست. پس دلیل اول محبوبیت node رو میشه این جوری نوشت که با node حتی برنامه‌نویس‌های غیرحرفه‌ای هم می‌تونن برنامه‌های حرفه‌ای برای شبکه بنویسند.</p>
<p><strong>مگه node چه جوری کار میکنه؟</strong></p>
<p>سوال خیلی خوبیه. برای اینکه به این سوال جواب بدیم اول باید ببینیم که بقیه وبسرورها چه جوری کار می‌کنند.</p>
<p>معمولا وبسرورها اینجوری کار می‌کنند که به ازای هر کانکشن یک thread جدید می سازند و این thread تا زمانی که کانکشن مربوطه باز باشه باقی می‌مونه. این کار بار پردازشی و مصرف مموری اضافی برای هر کانکشن ایجاد میکنه و به عبارتی باعث میشه تعداد کلاینت هایی که یک وبسرور همزمان میتونه پاسخگو باشه محدود باشه، عددی که به 10 هزار نمیرسه. برای همین این مشکل با نام «<a href="http://www.kegel.com/c10k.html" target="_blank">مسئله 10 هزار کانکشن همزمان</a>» یا C10K معروفه. البته این مسئله‌ی جدیدی نیست. بحث سر این مسئله و راهکارهای موجود از حدود 11 سال پیش وجود داشته. وبسرورهای جدید نظیر <a href="http://nginx.org/" target="_blank">nginx</a> و <a href="http://www.lighttpd.net/" target="_blank">lighttpd</a> و <a href="http://www.cherokee-project.com/" target="_blank">cherokee</a> این مشکل رو حل کردند. و البته node.js هم با توجه به هدف اولیه ای که داشته جزو اون دسته از وبسروهایی محسوب میشه که این مشکل رو ندارند.</p>
<p><strong>و این مشکل چطور حل شده؟</strong></p>
<p>قبل از اینکه به راه حل مشکل بپردازیم باید ببینیم مشکل از کجا ناشی میشه.</p>
<p>مشکل از اونجایی ناشی میشه که دریافت، پردازش و پاسخ دادن به یک درخواست از یک کلاینت اونقدر طول میکشه که نمیشه برای دریافت کانکشن بعدی منتظر اتمام کار کانکشن قبلی موند. بنابراین وبسرورها برای پاسخ به کلاینت جدید یک thread جدید ایجاد می‌کردند.</p>
<p><strong>خوب پس مشکل اصلی در واقع کند بودن روند دریافت، پردازش و پاسخ  هست.</strong></p>
<p>دقیقا. اما مسئله اینجاست که پردازنده ها به اندازه کافی سریع هستند و اون چیزی که باعث کند شدن این روند میشه I/O هست. یعنی عملیات ورودی و خروجی، چه از شبکه و چه از سیستم فایل.</p>
<p><strong>اونوقت مشکل IO رو چطور حل کردند؟</strong></p>
<p>برای رفع این مشکل به جای اینکه عملیات ورودی/خروجی مستقیما انجام بشه از معماری رویداد گرا برای پیاده سازی IO استفاده میشه. به عبارتی به جای اینکه منتظر نتیجه IO بمونیم یک رویداد برای دریافت نتیجه تعریف می‌کنیم و اجرای برنامه ادامه پیدا میکنه. به این ترتیب عملیات های ورودی/خروجی باعث بلاک شدن اجرای برنامه نمیشه. و node هم با همین معماری نوشته شده برای همین اولین جمله ای که در توصیف node در سایتش نوشته شده اینه: «Evented I/O for V8 JavaScript»</p>
<p><strong>اگر وبسرورهایی مثل nginx قبلا این مشکل رو حل کردند پس node چه حرفی واسه گفتن داره؟</strong></p>
<p>درسته که این مشکل قبلا حل شده ولی این مشکل فقط در سطح وب سرور حل شده. منظورم اینه که مثلا وقتی میخوای یک برنامه php رو روی این وبسرور اجرا کنی با اینکه وبسرور برای هر درخواست thread ایجاد نمیکنه ولی php این کار رو میکنه.</p>
<p><strong>پس با این حساب node راهکاری برای برنامه نویسی رویداد گرای IO سمت سرور فراهم کرده.</strong></p>
<p>درسته. البته node اولین نیست. قبل از node این سبک برنامه نویسی با <a href="http://twistedmatrix.com/trac/" target="_blank">Twisted</a> در python و <a href="http://rubyeventmachine.com/" target="_blank">EventMachine</a> در ruby هم امکان پذیر بوده. خود برنامه نویس node هم گفته که توی طراحی node از این دو پروژه ایده گرفته.</p>
<p><strong>پس چرا اونها به اندازه node معروف نشدند؟</strong></p>
<p>دلایل مختلفی داره.</p>
<p>یکی اینکه برنامه های node به زبان جاوا اسکریپت نوشته میشن. و اکثر کسانی که تو کار توسعه وب هستند کم و بیش با این زبان آشنایی دارند. علاوه بر این زبان جاوا اسکریپت زبان فوق العاده ای برای معماری رویداد گراست و اکثر کسانی که قبلا با جاوا اسکریپت برای مرورگر کد نوشتند برنامه نویسی رویداد گرا با جاوا اسکریپت رو تجربه کردند.<br />
یک مزیت دیگه جاوا اسکریپتی بودن اینه که برای برنامه نویسی سرور و کلاینت از یک syntax استفاده میشه که قطعا راحت تره و حتی بخش‌هایی از کد رو برای هر دو طرف میشه استفاده کرد (مثل اعتبار سنجی فرمها).<br />
دیگه اینکه node برای موتور جاوا اسکریپت از <a href="http://code.google.com/p/v8/" target="_blank">V8</a> استفاده میکنه که جزو  سریعترین مفسرهای اسکریپتی محسوب میشه و حتی از پایتون هم سریعتره.<br />
دلیل دیگه اینه که node از اول با این ایده یعنی رویداد گرا طراحی شده نه به صورت یک library جداگانه، بنابراین کار باهاش خیلی راحت تره.</p>
<p><strong>ولی به درد من نمی‌خوره. من هیچ وقت 10 هزار تا بازدیدکننده همزمان ندارم. مشکلی هم با سرعت برنامه هام ندارم.<br />
</strong></p>
<p>مسئله فقط سرعت و مقیاس پذیری نیست.</p>
<p>برای مقایسه یک برنامه php رو در نظر بگیرید. هر بار که یک درخواست به سرور ارسال میشه برنامه php اجرا میشه و یک نتیجه ای رو بر میگردونه و تموم میشه. ولی برنامه ای که با node نوشته شده یکبار اجرا میشه و تو حافظه می‌مونه. اینجا به جای اینکه وب‌سرور برنامه رو اجرا کنه این برنامه هست که وب‌سرور رو اجرا می‌کنه. بنابراین برنامه به همه کانکشن‌های سرور دسترسی داره و مثلا میتونه اطلاعاتی رو از یک کلاینت بگیره و به یک کلاینت دیگه بفرسته بدون اینکه از دیتابیس یا shared memory استفاده کنه. برای مثال با این ویژگی میشه بدون استفاده از دیتابیس و یا هیچ ابزار جانبی دیگه ای یک چت روم نوشت.<br />
یک مثال دیگه از قابلیت‌های node حالتیه که برای همه درخواست ها احتیاج به یکسری اطلاعات مشترک داریم که باید از دیتابیس خونده بشه. با php یا باید همه اطلاعات هر بار از دیتابیس خونده بشه و یا اینکه یکبار کش بشه و دفعات بعد از کش خونده بشه. ولی با node میشه این اطلاعات رو یکبار خوند و برای همه کانکشن ها ازش استفاده کرد.</p>
<p>در ضمن امروزه با فراگیر شدن وب 2 استفاده از <a href="http://en.wikipedia.org/wiki/Comet_%28programming%29" target="_blank">comet</a> هم رایج تر شده. برای پیاده سازی comet در واقع یک کانکشن به سرور برقرار میشه و باز نگه داشته میشه. که با وبسروری مثل آپاچی با زیاد شدن تعداد کانکشن‌ها عملا این کار غیر ممکن میشه. ولی node برای این کار فوق العادست.</p>
<p>نکته دیگه ای که در مورد node وجود داره تعدد ماژول هاشه. تقریبا توی هر زمینه ای که بخواهید برای node ماژول پیدا میشه.</p>
<p>برای نمونه <a href="http://socket.io/" target="_blank">socket.io</a> ماژولی برای پیاده سازی ارتباط دو طرفه بین سرور و مرورگر هست. این ماژول برای پیاده سازی comet تقریبا از همه روش‌های موجود نظیر Ajax long pulling و Flash Socket و WebSocket پشتیبانی می‌کنه و بسته به اینکه مرورگر شما با کدامیک از این روش‌ها سازگار باشه خودش بهترین روش ممکن رو انتخاب می‌کنه. و تقریبا همه مرورگرهای رایج رو پشتیبانی می‌کنه.<br />
با این ماژول به راحتی میشه ارتباطات دوطرفه و بلادرنگ بین سرور و کلاینت برقرار کرد.</p>
<p>خلاصه اینکه ابزارها و ماژول های فوق العاده ای برای node نوشته شده نظیر <a href="http://expressjs.com/" target="_blank">express</a> و <a href="http://projects.nuttnet.net/hummingbird/" target="_blank">hummingbird</a> و <a href="http://vowsjs.org/" target="_blank">vows</a> و ماژولهای مختلفی برای کار با دیتابیس‌های مختلف. حتی به خاطر تعدد ماژولها برای node ابزار مدیریت بسته ها (<a href="http://npmjs.org/" target="_blank">node package manager</a>) هم نوشته شده تا نصب و بروزرسانی ماژول‌ها راحت تر باشه.</p>
<p>خوب دیگه فکر کنم همینقدر برای شروع کافی باشه.</p>
<p>برای حسن ختام چند تا لینک مرتبط هم معرفی میکنم:</p>
<ul>
<li><a href="http://debuggable.com/posts/understanding-node-js:4bd98440-45e4-4a9a-8ef7-0f7ecbdd56cb" target="_blank">Understanding node.js</a> مقاله‌ای برای معرفی node.js</li>
<li><a href="http://howtonode.org/" target="_blank">howtonode.org</a> یک وبلاگ جمعی درباره node.js</li>
<li><a href="https://github.com/ry/node/wiki/modules" target="_blank">Node Modules</a> لیستی از ماژولهای node</li>
<li><a href="https://github.com/ry/node/wiki/Hosting" target="_blank">Node Hostings</a> لیستی از میزبان‌هایی که از node پشتیبانی می‌کنند.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://farhadi.ir/blog/1389/09/23/why-nodejs-is-so-popular/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>فشرده ساز اسکریپت گوگل</title>
		<link>http://farhadi.ir/blog/1388/09/29/google-closure-compiler/</link>
		<comments>http://farhadi.ir/blog/1388/09/29/google-closure-compiler/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 21:22:00 +0000</pubDate>
		<dc:creator>علی</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Compressor]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Minifier]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://farhadi.ir/blog/?p=203</guid>
		<description><![CDATA[از زمانی که استفاده از جاوا اسکریپت در اینترنت رونق پیدا کرد، توسعه دهنده ها به این فکر افتادند که ابزارهایی برای فشرده سازی یا بهتر بگیم چلاندن اسکریپت ها بنویسند. منظور از چلاندن(Minification)، خلاصه  و کوتاه کردن اسکریپت بدون تغییر در عملکرد آن است. که این کار با حذف فضاهای خالی، کامنت ها و [...]]]></description>
			<content:encoded><![CDATA[<p>از زمانی که استفاده از جاوا اسکریپت در اینترنت رونق پیدا کرد، توسعه دهنده ها به این فکر افتادند که ابزارهایی برای فشرده سازی یا بهتر بگیم چلاندن اسکریپت ها بنویسند. منظور از چلاندن(Minification)، خلاصه  و کوتاه کردن اسکریپت بدون تغییر در عملکرد آن است. که این کار با حذف فضاهای خالی، کامنت ها و یکسری تکنیک‌های دیگر انجام می‌شود.</p>
<p>اولین ابزارهایی که در این زمینه تولید شدند الگوریتم های ساده ای داشتند که با استفاده از Reqular Expression ها کار می‌کردند و به همین دلیل مشکلاتی هم داشتند. برای مثال <a href="http://www.crockford.com/javascript/jsmin.html" target="_blank">JSMin</a> و <a href="http://dean.edwards.name/packer/" target="_blank">Dean Packer</a> از چلاننده(Minifier) های معروفی هستند که به همین روش کار می‌کنند. مثلا JSMin نمی‌تواند همه‌ی کاراکترهای خط جدید (line feed) را حذف کند چون ممکن است باعث بوجود آمدن باگ در برنامه شود. Dean Packer هم برای اینکه درست کار کند باید تمام دستورات اسکریپت به «;» ختم شده باشند.</p>
<p>این شد که توسعه دهنده ها به فکر تولید چلاننده‌هایی افتادند که بتواند مثل یک موتور اسکریپت (JavaScript Engine) اسکریپت را تفسیر نموده و به بهینه ترین نحو بچلاند. اولین چلاننده از این نسل <a href="http://www.dojotoolkit.org/docs/shrinksafe" target="_blank">Dojo ShrinkSafe</a> بود که بر پایه موتور اسکریپت Rhino نوشته شده است. کمی بعد یاهو هم چلاننده ای تولید کرد با نام <a href="http://yuilibrary.com/projects/yuicompressor" target="_blank">YUI Compressor</a> که نسبت به سایر چلاننده‌‌های موجود از کارایی بهتری برخوردار بود و این برتری را تا مدتها حفظ کرد و هم اکنون که بیش از دو سال از انتشار نسخه‌ی اول آن می‌گذرد اکثر پروژه ها و فریم ورک های جاوااسکرپیت از این چلاننده برای چلاندن اسکریپت‌هایشان استفاده می‌کنند.</p>
<p>حدود یکی دو ماه پیش گوگل هم پا به عرصه رقابت گذاشت و چلاننده‌ی خودش را با نام <a href="http://code.google.com/closure/compiler/" target="_blank">Closure Compiler</a> عرضه کرد. این چلاننده از تکنیک های جدیدی استفاده میکند که باعث شده نرخ فشرده سازی آن حدود 10 تا 20 درصد از YUI بیشتر باشد. از نکات قابل توجه در این چلاننده این است که قابلیت شناسایی و حذف کدهای بلااستفاده(dead code) را از درون اسکریپت دارد.</p>
<p>چلاننده‌ی گوگل مشابه YUI یک برنامه Java است که از خط دستور اجرا میشود ولی علاوه بر این گوگل این برنامه را به صورت <a href="http://closure-compiler.appspot.com/home" target="_blank">اپلیکشن تحت وب</a> و <a href="http://code.google.com/closure/compiler/docs/gettingstarted_api.html" target="_blank">API</a> هم ارائه کرده است.</p>
<p>برای مقایسه‌ی تکنیک های بکار رفته در YUI Compressor و Closure Compiler دیدن این slideshow رو توصیه می‌کنم.</p>
<div id="__ss_2462617" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Closure Compiler vs YUICompressor" href="http://www.slideshare.net/lifesinger/closure-compiler-vs-yuicompressor">Closure Compiler vs YUICompressor</a><object style="margin:0px" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=closure-compiler-vs-yui-compressor-091109210742-phpapp02&amp;rel=0&amp;stripped_title=closure-compiler-vs-yuicompressor" /><param name="allowfullscreen" value="true" /><embed style="margin:0px" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=closure-compiler-vs-yui-compressor-091109210742-phpapp02&amp;rel=0&amp;stripped_title=closure-compiler-vs-yuicompressor" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/lifesinger">lifesinger</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://farhadi.ir/blog/1388/09/29/google-closure-compiler/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>تقویم جلالی (هجری شمسی) جاوا اسکریپتی</title>
		<link>http://farhadi.ir/blog/1387/03/18/jalali-javascript-calendar/</link>
		<comments>http://farhadi.ir/blog/1387/03/18/jalali-javascript-calendar/#comments</comments>
		<pubDate>Sat, 07 Jun 2008 16:33:59 +0000</pubDate>
		<dc:creator>علی</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[dynarch]]></category>
		<category><![CDATA[تقویم]]></category>
		<category><![CDATA[جلالی]]></category>
		<category><![CDATA[شمسی]]></category>

		<guid isPermaLink="false">http://farhadi.ir/blog/1387/03/18/jalali-javascript-calendar/</guid>
		<description><![CDATA[چند روز پیش خیلی اتفاقی توی اینترنت به تقویم جاوا اسکریپتی dynarch برخوردم که خیلی کامله و در عین حال رایگان و سورس باز هم هست.
از اونجایی که تا به حال تقویم هجری شمسی به درد بخور جاوااسکریپتی ندیده بودم تصمیم گرفتم یک تقویم هجری شمسی بر اساس این تقویم بنویسم. که نتیجه کار رو [...]]]></description>
			<content:encoded><![CDATA[<p>چند روز پیش خیلی اتفاقی توی اینترنت به تقویم جاوا اسکریپتی <a href="http://dynarch.com/projects/calendar" target="_blank">dynarch</a> برخوردم که خیلی کامله و در عین حال رایگان و سورس باز هم هست.</p>
<p>از اونجایی که تا به حال تقویم هجری شمسی به درد بخور جاوااسکریپتی ندیده بودم تصمیم گرفتم یک تقویم هجری شمسی بر اساس این تقویم بنویسم. که نتیجه کار رو میتونید توی <a href="http://farhadi.ir/works/jalalijscalendar" target="_blank">صفحه ی مربوطه</a> ببینید.</p>
<p>در راستای اشاعه فرهنگ open source من این پروژه رو با لایسنس GPL منتشر کردم. به عبارتی شما در استفاده ، توزیع و تغییر این پروژه آزاد هستید ولی به این شرط که لایسنس این پروژه ، پروژه هایی که از این پروژه منشعب شده اند و پروژه هایی که از این پروژه در آنها استفاده شده است GPL باشند.</p>
<p>ضمنا اگر هنوز تو برنامه ی رکورد شکنی فایرفاکس ثبت نام نکردید <a href="http://www.spreadfirefox.com/en-US/worldrecord" target="_blank">اینجا رو کلیک</a> کنید.</p>
]]></content:encoded>
			<wfw:commentRss>http://farhadi.ir/blog/1387/03/18/jalali-javascript-calendar/feed/</wfw:commentRss>
		<slash:comments>59</slash:comments>
		</item>
		<item>
		<title>IDE تحت وب</title>
		<link>http://farhadi.ir/blog/1386/08/05/web-based-ide/</link>
		<comments>http://farhadi.ir/blog/1386/08/05/web-based-ide/#comments</comments>
		<pubDate>Sat, 27 Oct 2007 13:31:00 +0000</pubDate>
		<dc:creator>علی</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[توسعه‌ی وب]]></category>
		<category><![CDATA[IDE]]></category>

		<guid isPermaLink="false">http://farhadi.ir/blog/1386/08/05/web-based-ide/</guid>
		<description><![CDATA[توی این دوره و زمونه که انواع و اقسام application های تحت وب پیدا میشه فقط IDE تحت وب ندیده بودیم که اون هم دیدیم.
rainbow9.org یک IDE تحت وب برای html ، جاوا اسکریپت ، CSS و xml و &#8230; هست که امکاناتی نظیر autocomplete  و اجرا داره.
این روز ها به خاطر آماده شدن [...]]]></description>
			<content:encoded><![CDATA[<p>توی این دوره و زمونه که انواع و اقسام application های تحت وب پیدا میشه فقط IDE تحت وب ندیده بودیم که اون هم دیدیم.</p>
<p><a href="http://www.rainbow9.org/" target="_blank">rainbow9.org</a> یک IDE تحت وب برای html ، جاوا اسکریپت ، CSS و xml و &#8230; هست که امکاناتی نظیر autocomplete  و اجرا داره.</p>
<p>این روز ها به خاطر آماده شدن برای نمایشگاه فرصت آپدیت کردن نداشتم. به امید دیدار در نمایشگاه سالن 8 غرفه 8 (شرکت فناوری اطلاعات توسعه سامان).</p>
]]></content:encoded>
			<wfw:commentRss>http://farhadi.ir/blog/1386/08/05/web-based-ide/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>بررسی میزان سازگاری مرورگر ها با استانداردهای وب</title>
		<link>http://farhadi.ir/blog/1386/06/18/web-browser-standards-support/</link>
		<comments>http://farhadi.ir/blog/1386/06/18/web-browser-standards-support/#comments</comments>
		<pubDate>Sun, 09 Sep 2007 18:25:32 +0000</pubDate>
		<dc:creator>علی</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[مرورگر ها]]></category>

		<guid isPermaLink="false">http://farhadi.ir/blog/1386/06/18/%d8%a8%d8%b1%d8%b1%d8%b3%db%8c-%d9%85%db%8c%d8%b2%d8%a7%d9%86-%d8%b3%d8%a7%d8%b2%da%af%d8%a7%d8%b1%db%8c-%d9%85%d8%b1%d9%88%d8%b1%da%af%d8%b1-%d9%87%d8%a7-%d8%a8%d8%a7-%d8%a7%d8%b3%d8%aa%d8%a7%d9%86/</guid>
		<description><![CDATA[طراحی سایتی سازگار با تمام مرورگرها مستلزم داشتن دانش کافی در رابطه با سازگاری مرورگرها با استانداردهای وب است.  و در این راستا استفاده از سایت WebDevout.net به عنوان مرجع می تونه کمک بسزایی در جهت کسب اطلاعات مورد نیاز در این زمینه باشه.
این سایت سازگاری ورژن های مختلف مرورگرها رو با استاندارد های [...]]]></description>
			<content:encoded><![CDATA[<p>طراحی سایتی سازگار با تمام مرورگرها مستلزم داشتن دانش کافی در رابطه با سازگاری مرورگرها با استانداردهای وب است.  و در این راستا استفاده از سایت <a href="http://www.webdevout.net/browser-support" target="_blank">WebDevout.net</a> به عنوان مرجع می تونه کمک بسزایی در جهت کسب اطلاعات مورد نیاز در این زمینه باشه.</p>
<p>این سایت سازگاری ورژن های مختلف مرورگرها رو با استاندارد های HTML و CSS و DOM و ECMAScript به تفصیل مورد بررسی قرار داده.</p>
<p>به عنوان مثال شما می تونید سازگاری یک attribute خاص از یک element رو با ورژن های مختلف مرورگرها از طریق اطلاعات موجود در این سایت بررسی نمایید.<br />
اطلاعات این سایت بقدری دقیقه که به عنوان مثال در مورد یک attribute به ذکر فقط سازگار بودن یا نبودن اکتفا نکرده وعدم سازگاری در شرایط خاص را هم لحاظ کرده است.</p>
<p>جدول زیر آمار کلی سازگاری مرورگرهای پرطرفدار با استاندارد های وب رو نشون میده.</p>
<table style="text-align: center; border-collapse: collapse;" summary="Web standards support chart for popular web browsers" id="support-summary" align="center" border="1" cellpadding="4" cellspacing="0">
<thead>
<th scope="col">Technology</th>
<th scope="col">IE 6</th>
<th scope="col">IE 7</th>
<th scope="col">Firefox 1</th>
<th scope="col">Firefox 2</th>
<th scope="col">Opera 8.5</th>
<th scope="col">Opera 9</th>
<tr>
<th scope="row"><a href="http://www.webdevout.net/browser-support-html?uas=IE6-IE7-FX1-FX2-OP8-OP9#standards" target="_blank">HTML / XHTML</a></th>
<td>73%</td>
<td>73%</td>
<td>90%</td>
<td>90%</td>
<td>84%</td>
<td>85%</td>
</tr>
<tr>
<th scope="row"><a href="http://www.webdevout.net/browser-support-css?uas=IE6-IE7-FX1-FX2-OP8-OP9#css2standards" target="_blank">CSS 2.1</a></th>
<td>51%</td>
<td>56%</td>
<td>88%</td>
<td>92%</td>
<td>92%</td>
<td>94%</td>
</tr>
<tr>
<th scope="row"><a href="http://www.webdevout.net/browser-support-css?uas=IE6-IE7-FX1-FX2-OP8-OP9#css3standards" target="_blank">CSS 3 changes</a></th>
<td>10%</td>
<td>13%</td>
<td>14%</td>
<td>24%</td>
<td>8%</td>
<td>19%</td>
</tr>
<tr>
<th scope="row"><a href="http://www.webdevout.net/browser-support-dom?uas=IE6-IE7-FX1-FX2-OP8-OP9#standards" target="_blank">DOM</a></th>
<td>50%</td>
<td>51%</td>
<td>79%</td>
<td>79%</td>
<td>78%</td>
<td>84%</td>
</tr>
<tr>
<th scope="row"><a href="http://www.webdevout.net/browser-support-ecmascript?uas=IE6-IE7-FX1-FX2-OP8-OP9#standards" target="_blank">ECMAScript</a></th>
<td>99%</td>
<td>99%</td>
<td>100%</td>
<td>100%</td>
<td>100%</td>
<td>100%</td>
</tr>
</thead>
</table>
<p>همونطور که در جدول فوق می بینید IE7 نسبت به IE6 هیچ پیشرفت چشمگیری نداشته و با سایر مرورگرها فاصله زیادی داره.<br />
اما رقابت بین FireFox و Opera شدیده و باید منتظر بود و دید Opera 9.5 و FireFox3 در این رقابت چه میکنند.</p>
]]></content:encoded>
			<wfw:commentRss>http://farhadi.ir/blog/1386/06/18/web-browser-standards-support/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Firebug</title>
		<link>http://farhadi.ir/blog/1386/06/14/firebug/</link>
		<comments>http://farhadi.ir/blog/1386/06/14/firebug/#comments</comments>
		<pubDate>Wed, 05 Sep 2007 06:15:07 +0000</pubDate>
		<dc:creator>علی</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[توسعه‌ی وب]]></category>
		<category><![CDATA[مرورگر ها]]></category>

		<guid isPermaLink="false">http://farhadi.ir/blog/1386/06/14/firebug/</guid>
		<description><![CDATA[فایرباگ کاملترین ابزار دیباگ و تست کردن CSS و HTML و  JavaScript  است که به صورت  extension بر روی فایرفاکس نصب میگردد.
این ابزار سرعت کار رو برای توسعه گران وب به ویژه برای کارهای Web2 تا چندین برابر افزایش میده.
از قابلیت های این ابزار میتوان به موارد زیر اشاره کرد:

 یک دیباگر [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://farhadi.ir/blog/wp-content/uploads/2007/09/firebug.jpg" ilo-full-src="http://farhadi.ir/blog/wp-content/uploads/2007/09/firebug.jpg" title="Firebug Logo" alt="Firebug Logo" align="left" hspace="5" />فایرباگ کاملترین ابزار دیباگ و تست کردن CSS و HTML و  JavaScript  است که به صورت  extension بر روی فایرفاکس نصب میگردد.<br />
این ابزار سرعت کار رو برای توسعه گران وب به ویژه برای کارهای Web2 تا چندین برابر افزایش میده.</p>
<p>از قابلیت های این ابزار میتوان به موارد زیر اشاره کرد:</p>
<ul style="clear: both">
<li> یک دیباگر کامل برای جاوااسکریپت با امکان تعریف breakpoint عادی و شرطی و تعریف watch و با قابلیت trace کردن کد ها و بالاخره قابلیت profiler برای profile گرفتن در یک بازه زمانی خاص.</li>
<li>error console برای نمایش خطاهای جاوا اسکریپت وCSS و XML  , همچنین برای اجرای کد های مورد نظر روی document جاری.</li>
<li>امکان inspector برای HTML و امکان مشاهده style های اعمال شده بر روی هر element و همچنین امکان مشاهده property ها و متد های هر element</li>
<li>امکان ویرایش کردن کدهای HTML و CSS</li>
<li>امکان مشاهده و browse کردن ساختار شی گرای document و browse کردن object های تعریف شده و ویرایش property های آنها.</li>
<li>و در نهایت امکانmonitor کردن ترافیک شبکه مرتبط با document جاری به عبارت دیگر امکان مشاهده تمام request های انجام شده در صفحه با تمام جزئیات آنها و مشاهده request های ای جکسی و همچنین امکان مشاهده زمان لود شدن و حجم تک تک request ها.</li>
</ul>
<p>این extension  رایگان و opensource بوده و میتونید اون رو از آدرس <a href="http://getfirebug.com">http://getfirebug.com</a> دانلود کنید.</p>
]]></content:encoded>
			<wfw:commentRss>http://farhadi.ir/blog/1386/06/14/firebug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spket IDE &#8211; یک IDE خوب برای جاوا اسکریپت</title>
		<link>http://farhadi.ir/blog/1386/06/13/spket-ide/</link>
		<comments>http://farhadi.ir/blog/1386/06/13/spket-ide/#comments</comments>
		<pubDate>Tue, 04 Sep 2007 07:28:43 +0000</pubDate>
		<dc:creator>علی</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[توسعه‌ی وب]]></category>

		<guid isPermaLink="false">http://farhadi.ir/blog/1386/06/13/spket-ide/</guid>
		<description><![CDATA[همونطور که میدونید ادیتور خوب برای javascript کمیابه.  اکثر ادیتور هایی که برای html وphp وجود دارند از javascript هم پشتیبانی میکنند ولی هیچ کدوم auto complete و outline درست و حسابی ندارند. و ادیتور درست و درمونی هم که ویژه جاوا اسکریپت طراحی شده باشه و به پای Spket برسه وجود نداره.
Spket ادیتوری [...]]]></description>
			<content:encoded><![CDATA[<p>همونطور که میدونید ادیتور خوب برای javascript کمیابه.  اکثر ادیتور هایی که برای html وphp وجود دارند از javascript هم پشتیبانی میکنند ولی هیچ کدوم auto complete و outline درست و حسابی ندارند. و ادیتور درست و درمونی هم که ویژه جاوا اسکریپت طراحی شده باشه و به پای Spket برسه وجود نداره.</p>
<p><img src="http://farhadi.ir/blog/wp-content/uploads/2007/09/ide_s.png" title="Spket IDE ScreenShot" ilo-full-src="http://farhadi.ir/blog/wp-content/uploads/2007/09/ide_s.png" alt="Spket IDE ScreenShot" align="left" hspace="5" />Spket ادیتوری ویژه javascript می باشد که هم به صورت پلاگینی  برای eclipse و هم به صورت مستقل قابل استفاده است.<br />
این ادیتور auto complete خیلی خوبی برای  javascript داره که من تا به حال نظیرش رو ندیدم و خیلی برای برنامه نویسی شی گرامناسبه (به عنوان مثال برای کار با فریم ورک prototype).<br />
یکی از ویژگی های جالب این ادیتور قابلیت طراحی extension  برای firefox و پشتیبانی از فایل های XUL وXBL هستش.<br />
ضمنا auto complete برای استفاده از <a href="http://extjs.com/" target="_blank">ExtJS</a> و <a href="http://jquery.com/" target="_blank">jQuery</a> و <a href="http://developer.yahoo.com/yui/" target="_blank">YUI</a> هم در این ادیتور تعبیه شده که کار با اونها رو خیلی راحت میکنه.</p>
<p><img src="http://farhadi.ir/blog/wp-content/uploads/2007/09/code_1.png" title="Spket IDE - Auto Complete" ilo-full-src="http://farhadi.ir/blog/wp-content/uploads/2007/09/code_1.png" alt="Spket IDE - Auto Complete" align="left" border="1" hspace="5" />خلاصه این ادیتور از همه لحاظ کامله و چیزی کم نداره. مخصوصا اگر به صورت plugin برای php eclipse نصب بشه یک IDE کامل برای توسعه وب خواهید داشت.</p>
<p>Spket برای استفاده غیر تجاری رایگانه و میتونید اون رو از آدرس <a href="http://www.spket.com" title="http://www.spket.com" target="_blank">http://www.spket.com</a> دانلود کنید.<br />
ضمنا این برنامه با java نوشته شده و برای نصب احتیاج به J2SE داره که میتونید اون رو از سایت java.com دانلود کنید.</p>
]]></content:encoded>
			<wfw:commentRss>http://farhadi.ir/blog/1386/06/13/spket-ide/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

