<?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>Emad Ibrahim &#187; Featured</title>
	<atom:link href="http://www.emadibrahim.com/category/featured/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.emadibrahim.com</link>
	<description>web development, tech reviews, tips, tricks, blogging</description>
	<lastBuildDate>Mon, 03 May 2010 12:27:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>&#8220;I Quit&#8221; 1 Year Anniversary</title>
		<link>http://www.emadibrahim.com/2009/03/09/i-quit-1-year-anniversary/</link>
		<comments>http://www.emadibrahim.com/2009/03/09/i-quit-1-year-anniversary/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 11:13:44 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Startup]]></category>
		<category><![CDATA[Yonkly]]></category>
		<category><![CDATA[aspnetmvc]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/?p=603</guid>
		<description><![CDATA[It has been a year since I quit my job and decided to go independent.  I didn&#8217;t know what I was going to do, the economic outlook wasn&#8217;t good, I had two rental properties and a condo that I didn&#8217;t know how I was going to pay for.  I was armed with only hope, ambition, [...]]]></description>
			<content:encoded><![CDATA[<div>It has been a year since <a href="http://www.emadibrahim.com/2008/03/20/i-quit/">I quit</a> my job and decided to go independent.  I didn&#8217;t know what I was going to do, the economic outlook wasn&#8217;t good, I had two rental properties and a condo that I didn&#8217;t know how I was going to pay for.  I was armed with only hope, ambition, credit cards and my fiancé&#8217;s love &amp; support.</div>
<div></div>
<div>The first three months, I toyed around with different and random ideas, I read lots of technical books and online material.  I learned a ton of stuff and in the process I launched an open source project called <a href="http://yonkly.com">Yonkly</a> that was written using Microsoft&#8217;s newest web framework &#8211; <a href="http://www.asp.net/mvc/">asp.net mvc</a>.</div>
<div></div>
<div>Yonkly was initially a Twitter clone, it was free and it was open source.  Feedback was positive for the most part and I kept getting requests for customization and installation.  One of my first clients was <a href="http://isweat.com">isweat.com</a> which was a custom version of Yonkly.  This was a good deal because I was getting paid to add more features to Yonkly as well as have a good reference client.  I was also lucky to have a great client <a href="http://www.ryanlee.com/">Ryan Lee</a> &#8211; who is just an all around great guy and pays on time &#8211; actually ahead of time.</div>
<div></div>
<div>
<div>I kept getting more praises on Yonkly and more requests for customization.  That&#8217;s when I thought to myself that there seem to be a market for this things.  It looks like people want to create their own Twitter-like website for whatever reason.  Some wanted to cultivate a community around a niche topic, some wanted to generate money with ads, some wanted to communicate/collaborate within a group/team/company.  Regardless of the reason, there seemed to be enough demand to take this to the next level.</div>
<div></div>
<div>I was confused (and still am) on which direction to go.  There was the WordPress direction &#8211; offer a free, open source, extensible platform à la wordpress.org with an accompanying free hosted version à la wordpress.com.  There was the Ning direction &#8211; offer a hosted, subscription-based product à la <a href="http://ning.com">Ning</a> that lets anyone create their own microblog with zero-friction.  I kept going back and forth and finally settled on a hybrid model that leans more to the ning model.  I still kept the open source version out there (albeit it is outdated).  I chose a subscription-based model because I was tired of all these eyeball-centered business models with ads as their only revenue.  I wanted to create a sustainable business that will generate predictable recurring revenue.  The result was the birth of the hosted version of Yonkly &#8211; currently at <a href="http://yonkly.com">yonkly.com</a>.</div>
<div></div>
<div>Similar to ning, Yonkly allows you to easily create a microblog by simply selecting a name and a url.  You can create soccermoms.yonkly.com and voila, you got yourself a Twitter-like website focused around soccer moms.  If this is a small community then you can set it up for free.  My first release had 3 plans priced at 25, 50 and 100, I quickly realized that these were ridiculously high prices.  I also realized that people like, no LOVE free stuff.  I quickly adapted by introducing a free plan and changing the prices to 5, 15 and 25 with even reduced prices for annual subscriptions.</div>
<div></div>
<div>The cool thing about Yonkly is its approach to white-labeling.  If you are a premium subscriber, you can create a site with your own domain, your own look and feel and with no mention of Yonkly anywhere.  Good examples of that is <a href="http://isweat.com">isweat.com</a> and <a href="http://blogpei.com">blogpei.com</a>.  Yonkly has come a long way and now has thousands of users and over 1600 networks hosted on it.  It is also profitable.  I know that is hard to believe in this day and age.  I am not rich off Yonkly (yet) and it won&#8217;t pay my mortgage BUT it pays for itself and then some.  I have some really big plans for Yonkly which I will discuss in a future post.</div>
<div></div>
<div>
<div>So that was the story of Yonkly thus far; about 3  or 4 months after I quit my job, I accidently :) signed a book deal with Wiley Wrox on ASP.NET MVC and Test Driven Development (TDD).  It has always been a dream of mine to write a book, so I was really excited.  I won&#8217;t get rich of the book but I think it is an excellent learning experience and a great résumé filler.  It forced me to get better about the book&#8217;s subject and to get better at writing in general.  It also made me appreciate the amount of work that goes into each book.</div>
<div></div>
<div>I thought it was going to be an easy task, I mean, all I have to do is write.  Right?  Wrong, that was so far from the truth.  I was cranking out an average of 3 pages a day &#8211; a mind numbingly slow rate.  It wasn&#8217;t consistent either.  Sometimes, I will write 15 pages in 3 hours and then spend 2 weeks writing the next 15.  Sometimes I also feel that I can talk about a specific topic for 20 pages and then 2 paragraphs in, I realize that I got nothing else to say.  It has been an interesting experience.  The good news is that I am pretty much done with the book now and it should be published by May.</div>
<div></div>
<div>In conclusion, a year after I quit my job here are the end results:</div>
<div></div>
<div><strong>Bad</strong>:</div>
<div>
<ul>
<li>Huge credit card debt</li>
<li>Possibility of foreclosure on rental properties</li>
<li>Zero financial security</li>
<li>No stable income</li>
<li>Unpredictable outcome</li>
</ul>
</div>
<div><strong>Good</strong>:</div>
<div>
<ul>
<li><a href="http://www.emadibrahim.com/category/yonkly/">Yonkly launched</a> &#8211; officially my first web 2.0 service built from scratch</li>
<li><a href="http://www.emadibrahim.com/category/mvc-book/">Wrote a book</a> &#8211; to be published soon by Wiley Wrox</li>
<li>Proposed to my girlfriend (Laura) &#8211; she said yes</li>
<li>Adopted a puppy.  His name is Mac, we also considered naming him Dot com, Google, C# and Web.</li>
</ul>
</div>
<p style="text-align: center"><a href="http://www.emadibrahim.com/wp-content/uploads/2009/03/001e089e-eac8-441a-a30c-c7c817aa016b.jpg"><img class="size-medium wp-image-604 aligncenter" title="001e089e-eac8-441a-a30c-c7c817aa016b" src="http://www.emadibrahim.com/wp-content/uploads/2009/03/001e089e-eac8-441a-a30c-c7c817aa016b-300x225.jpg" alt="001e089e-eac8-441a-a30c-c7c817aa016b" width="300" height="225" /></a></p>
<div>Overall, I am glad I quit my job.  Other than the fact that I am broke, I learned and accomplished a lot and ready to take Yonkly to the next level.</div>
<div></div>
<div>You can follow me on twitter at <a href="http://twitter.com/eibrahim">twitter.com/eibrahim</a> for more updates and to track the progress of Yonkly, check out the blog at <a href="http://blog.yonkly.com">blog.yonkly.com</a> or follow it at <a href="http://twitter.com/yonkly">twitter.com/yonkly</a>.</div>
</div>
</div>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/05/09/startup-how-to-build-a-web-20-business-the-risks/" rel="bookmark" title="Permanent Link: Startup &#8211; How To Build A Web 2.0 Business: The Risks" >Startup &#8211; How To Build A Web 2.0 Business: The Risks</a></span><div class="aizattos_related_posts_excerpt">If you have been reading along, I probably sound like a broken record, talking about how I quit my j...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/06/27/free-it-consultation-in-the-dc-metro-area/" rel="bookmark" title="Permanent Link: Free IT Consultation in the DC Metro Area" >Free IT Consultation in the DC Metro Area</a></span><div class="aizattos_related_posts_excerpt">I have been busy working on several things since I quit my job.&nbsp; Things like the open source tw...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/01/29/services-worth-paying-for-as-a-startup/" rel="bookmark" title="Permanent Link: Services Worth Paying For as a Startup" >Services Worth Paying For as a Startup</a></span><div class="aizattos_related_posts_excerpt">[Update: added crowdsound] If you have been reading my blog or following me on Twitter then you alre...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/03/20/i-quit/" rel="bookmark" title="Permanent Link: I quit" >I quit</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/09/20/the-ultimate-rejection-letter/" rel="bookmark" title="Permanent Link: The Ultimate Rejection Letter" >The Ultimate Rejection Letter</a></span></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2009/03/09/i-quit-1-year-anniversary/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Property Injection in ASP.NET MVC with Ninject</title>
		<link>http://www.emadibrahim.com/2008/08/29/property-injection-in-aspnet-mvc-with-ninject/</link>
		<comments>http://www.emadibrahim.com/2008/08/29/property-injection-in-aspnet-mvc-with-ninject/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 12:01:41 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[di]]></category>
		<category><![CDATA[ioc]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[MVC Book]]></category>
		<category><![CDATA[mvcbook]]></category>
		<category><![CDATA[ninject]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2008/09/02/property-injection-in-aspnet-mvc-with-ninject/</guid>
		<description><![CDATA[I got a design challenge with asp.net mvc.  I want to keep track of the currently logged in user in the session because I don&#8217;t want to hit the database every time I need to get the username or id for a query.  And I have all my controllers inherit from a base controller named [...]]]></description>
			<content:encoded><![CDATA[<p>I got a design challenge with asp.net mvc.  I want to keep track of the currently logged in user in the session because I don&#8217;t want to hit the database every time I need to get the username or id for a query.  And I have all my controllers inherit from a base controller named BaseController.  So, I added a CurrentUser property to the BaseController and I want it to automagically work without the derived controllers having to do anything.  Here is a class diagram to help clarify:</p>
<p><a href="http://www.emadibrahim.com/wp-content/uploads/2008/08/image2.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" src="http://www.emadibrahim.com/wp-content/uploads/2008/08/image-thumb2.png" border="0" alt="image" width="487" height="314" /></a></p>
<p>The CurrentUser Property needs to look something like this:</p>
<div>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #0000ff;">public</span> User CurrentUser
{
    get
    {
        var key = <span style="color: #006080;">"currentuser"</span>;
        <span style="color: #0000ff;">if</span> (Session[key] == <span style="color: #0000ff;">null</span>)
        {
            Session[key] = <span style="color: #008000;">/*get user from database some how*/</span>;
        }
        <span style="color: #0000ff;">return</span> (User) Session[key] ;
    }
}</pre>
</div>
<p>This looks simple enough but it is not.  The reason it is not simple is because to get the current user I have to call Membership.Provider.GetUser from the BaseController.  The problem with that is that it creates a dependency on the MembershipProvider class which I don&#8217;t want to have, because it will make testing very hard.</p>
<p>One obvious solution was to add the MembershipProvider (which is an abstract class) to the BaseController&#8217;s construct and then pass a mocked instance during testing&#8230;  The problem with this design is that now my BaseController will be forced to have a parameterized constructor which means that I have to change the code in all the derived controllers to handle that and pass the appropriate instance of MembershipProvider.  Sounds like a code smell.</p>
<p>My solution was to create the MembershipProvider class using my IoC container &#8211; in this case, my Ninject Kernel.  This allows me to inject a SqlMembershipProvider in development and runtime and inject a mocked provider in testing.  So the final CurrentUser property looks like this:</p>
<div>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;"><span style="color: #0000ff;">public</span> User CurrentUser
{
    get
    {
        var key = <span style="color: #006080;">"currentuser"</span>;
        <span style="color: #0000ff;">if</span> (Session[key] == <span style="color: #0000ff;">null</span>)
        {
            var Provider
                = (MembershipProvider)
                    Kernel.Get(<span style="color: #0000ff;">typeof</span>(MembershipProvider));

            Session[key] = AppHelper.CreateUserFromMembershipUser
                            (Provider.GetUser(User.Identity.Name, <span style="color: #0000ff;">true</span>));
        }
        <span style="color: #0000ff;">return</span> (User) Session[key] ;
    }
}</pre>
</div>
<p>If you have been paying attention, you are probably wondering  what is this &#8220;Kernel&#8221; thing.  Well Kernel is an instance of the Ninject Kernel which itself was injected into the BaseController class like this:</p>
<div>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">[Inject]
<span style="color: #0000ff;">public</span> IKernel Kernel { get; set; }</pre>
</div>
<p>I could have done this differently.  For example, I could have injected the provider itself using property injection like this:</p>
<div>
<pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: #f4f4f4;">[Inject]
<span style="color: #0000ff;">public</span> MembershipProvider Provider { get; set; }</pre>
</div>
<p>The only problem is that the provider isn&#8217;t needed by all the derived classed and I didn&#8217;t want to have a public property in the base class that would hardly be used anywhere else.   On the other hand Kernel could be globally used to instantiate an object.</p>
<p>What do you think?  Is this the way to do it?  Is there a better way?</p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/08/29/is-this-better-than-constructor-injection/" rel="bookmark" title="Permanent Link: Is this Better than Constructor Injection?" >Is this Better than Constructor Injection?</a></span><div class="aizattos_related_posts_excerpt">So after I finished my post on property injection I thought of something, maybe I shouldn't use cons...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/05/30/upgrading-yonkly-to-aspnet-mvc-preview-3/" rel="bookmark" title="Permanent Link: Upgrading Yonkly to ASP.NET MVC Preview 3" >Upgrading Yonkly to ASP.NET MVC Preview 3</a></span><div class="aizattos_related_posts_excerpt">I just spent this morning upgrading the Yonkly code to work with the newly released ASP.NET MVC Fram...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/08/18/the-best-ioc-container/" rel="bookmark" title="Permanent Link: The Best IoC Container?" >The Best IoC Container?</a></span><div class="aizattos_related_posts_excerpt">As I previously mentioned in my post "The Best JavaScript Library", I am in the process of developin...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/03/31/ajax-with-aspnet-mvc-framework-preview-2/" rel="bookmark" title="Permanent Link: Ajax with ASP.NET MVC Framework Preview 2" >Ajax with ASP.NET MVC Framework Preview 2</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/08/21/ninject-killer-ioc/" rel="bookmark" title="Permanent Link: Ninject: Killer IoC" >Ninject: Killer IoC</a></span></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2008/08/29/property-injection-in-aspnet-mvc-with-ninject/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>The Best JavaScript Library</title>
		<link>http://www.emadibrahim.com/2008/08/10/the-best-javascript-library/</link>
		<comments>http://www.emadibrahim.com/2008/08/10/the-best-javascript-library/#comments</comments>
		<pubDate>Sun, 10 Aug 2008 19:02:40 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[MVC Book]]></category>
		<category><![CDATA[mvcbook]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[script.aculo.us]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[yui]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2008/08/10/choosing-a-javascript-library/</guid>
		<description><![CDATA[I am in the process of creating a new web application using asp.net mvc and I am trying to choose the best JavaScript library to use.  I am pretty much sure that I am going to go with jQuery but nonetheless I wanted to review the libraries out there.  One reason is that I am [...]]]></description>
			<content:encoded><![CDATA[<p>I am in the process of creating a new web application using asp.net mvc and I am trying to choose the best JavaScript library to use.  I am pretty much sure that I am going to go with jQuery but nonetheless I wanted to review the libraries out there.  One reason is that I am writing a book and I want to be able to justify to the readers why I am going with jQuery and not the others.</p>
<h2>What do I want from my JavaScript Library?</h2>
<p>I want it to be easy (I am not a JavaScript expert)<br />
I want it to be small<br />
I want it to be fast<br />
I want it to be extensible<br />
I want good documentation and/or community support<br />
I want good/easy AJAX support<br />
I want it to be asp.net-friendly<br />
I also want it to be testable (I am using TDD for this project/book)<br />
Open Source would be nice but not required</p>
<h2>What are my options?</h2>
<p>jQuery &#8211; <a title="http://jquery.com/" href="http://jquery.com/">http://jquery.com/</a><br />
Microsoft AJAX &#8211; <a title="http://www.asp.net/ajax/" href="http://www.asp.net/ajax/">http://www.asp.net/ajax/</a><br />
Dojo &#8211; <a title="http://dojotoolkit.org/" href="http://dojotoolkit.org/">http://dojotoolkit.org/</a><br />
Prototype &#8211; <a title="http://www.prototypejs.org/" href="http://www.prototypejs.org/">http://www.prototypejs.org/</a><br />
YUI &#8211; <a title="http://developer.yahoo.com/yui/" href="http://developer.yahoo.com/yui/">http://developer.yahoo.com/yui/</a></p>
<p>This is a shortlist but if you want a more exhaustive, <a href="http://ntt.cc/2008/02/13/the-most-complete-ajax-framework-and-javascript-libraries-list.html" target="_blank">read this</a>.  I only picked these, for the simple reasons that I have heard of them and are somewhat known by the community.</p>
<h2>3 days later</h2>
<p>It&#8217;s been 3 days since I started this post and I have spent all that time playing around with these libraries&#8230;  I have gone back and forth in my opinion on which library to use.  I love jQuery&#8217;s selectors, ease of use and community support.  Porototype is also very popular and somewhat similar to jQuery; but I would take jQuery over Prototype for the simple reason that I like jQuery.  YUI (Yahoo! UI) library is beautiful looking and very comprehensive.</p>
<h3>jQuery</h3>
<p>Pros</p>
<ol>
<li>Ease to learn and use</li>
<li>Beautiful syntax (the least typing)</li>
<li>Great community support and lots of fans</li>
<li>Decent Documentation</li>
<li>I already own <a href="http://www.amazon.com/exec/obidos/ASIN/1933988355/emadibrahim-20" target="_blank">the book</a></li>
<li>QUnit test framework (<a title="http://docs.jquery.com/QUnit" href="http://docs.jquery.com/QUnit">http://docs.jquery.com/QUnit</a>)</li>
</ol>
<p>Cons</p>
<ol>
<li>UI isn&#8217;t that great</li>
<li>Library is not as full-featured without plugins</li>
<li>Plugins are somewhat inconsistent in quality depending on the author</li>
</ol>
<h3>Prototype</h3>
<p>Pros</p>
<ol>
<li>Good documentation</li>
<li>Good community support</li>
<li>Lots of books
<ol>
<li><a href="http://www.amazon.com/exec/obidos/ASIN/1590599195/emadibrahim-20" target="_blank">Practical Prototype and script-aculo.us</a></li>
<li><a href="http://www.amazon.com/exec/obidos/ASIN/1934356018/emadibrahim-20" target="_blank">Prototype and script.aculo.us: You Never Knew JavaScript Could Do This!</a></li>
<li>and many more&#8230;</li>
</ol>
</li>
<li>Great UI with the add-on script.aculo.us (<a title="http://script.aculo.us/" href="http://script.aculo.us/">http://script.aculo.us/</a>)</li>
</ol>
<p>Cons</p>
<ol>
<li>Couldn&#8217;t find a testing framework (but I didn&#8217;t look too hard)</li>
<li>For some purely emotional reason, I prefer jQuery</li>
</ol>
<h3>YUI</h3>
<p>Pros</p>
<ol>
<li>Great UI components and styles</li>
<li>The best documented library out there, hands down.</li>
<li>Distributed hosting of JS files &#8211; the script files will be downloaded from Yahoo server, so when my site becomes a mega-hit, it will scale better.</li>
<li>Great test framework and test runner &#8211; check these <a href="http://developer.yahoo.com/yui/examples/yuitest/index.html" target="_blank">demos</a><br />
<a href="http://www.emadibrahim.com/wp-content/uploads/2008/08/image1.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.emadibrahim.com/wp-content/uploads/2008/08/image-thumb1.png" border="0" alt="image" width="388" height="359" /></a></li>
<li>The most complete library</li>
<li>PDF cheat sheets for every component</li>
</ol>
<p>Cons</p>
<ol>
<li>Very verbose &#8211; not as elegant as jQuery, but that&#8217;s not too hard to fix e.g. I can assign YAHOO.util.Event to a variable $E and use $E as the shorthand.</li>
</ol>
<h3>The rest</h3>
<p>I got tired of all the research and decided to wrap it up, so I glanced over Microsoft AJAX and Dojo and realized that there isn&#8217;t enough there to justify more research.</p>
<h2>The winner&#8230;</h2>
<p>When I started this post, I was pretty certain my final choice will be jQuery.  Then I started playing with Prototype and it looked really good, which kind of opened my eyes to the need to be open minded and objective.  This lead to a more objective look at YUI and the conclusion to use YUI.  I was very impressed with YUI&#8217;s look &amp; feel, extensive documentation, testing framework and the icing on the cake was the free hosting of the JavaScript libraries.  This was a really tough decision because I still love jQuery the best.</p>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/02/10/validating-the-page-using-javascript/" rel="bookmark" title="Permanent Link: Validating the page using JavaScript" >Validating the page using JavaScript</a></span><div class="aizattos_related_posts_excerpt">I was using an AJAX tab control and wanted to validate the tab page before the switching away to ano...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/09/09/online-book-library/" rel="bookmark" title="Permanent Link: Online Book Library" >Online Book Library</a></span><div class="aizattos_related_posts_excerpt">Here is an easy and quick way to create a virtual online book library.  Go to http://books.google.co...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/07/25/sitemeter-and-wordpress/" rel="bookmark" title="Permanent Link: Sitemeter and wordpress" >Sitemeter and wordpress</a></span><div class="aizattos_related_posts_excerpt">I just added sitemeter to BlogsToGo (WordPres Mu).  I have a plugins file in my mu-plugins directory...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/08/18/the-best-ioc-container/" rel="bookmark" title="Permanent Link: The Best IoC Container?" >The Best IoC Container?</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/07/14/sync-music-and-other-files-between-mac-and-pc/" rel="bookmark" title="Permanent Link: Sync music and other files between Mac and PC" >Sync music and other files between Mac and PC</a></span></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2008/08/10/the-best-javascript-library/feed/</wfw:commentRss>
		<slash:comments>45</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->