<?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>Adam.Kahtava.com / AdamDotCom &#187; AJAX</title>
	<atom:link href="http://adam.kahtava.com/journal/category/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://adam.kahtava.com/journal</link>
	<description>A software development blog</description>
	<lastBuildDate>Thu, 02 Feb 2012 21:35:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>The Same Origin Policy: JSONP vs The document.domain Property</title>
		<link>http://adam.kahtava.com/journal/2010/03/18/the-same-origin-policy-jsonp-vs-the-documentdomain-property/</link>
		<comments>http://adam.kahtava.com/journal/2010/03/18/the-same-origin-policy-jsonp-vs-the-documentdomain-property/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 17:00:26 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[ADC Services]]></category>
		<category><![CDATA[ADC Website]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/?p=2441</guid>
		<description><![CDATA[The Same Origin Policy ensures that the client-side code (JavaScript) running on a website originated from that website. This prevents website http://kahtava.com from accessing resources (via client-side code) on website http://malicious-password-sniffers.com or website http://adam.kahtava.com from executing resources from http://kahtava.com - note that the sub-domains differ, one being kahtava.com, the other being adam.kahtava.com In most cases [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Same_origin_policy">The Same Origin Policy</a> ensures that the client-side code (JavaScript) running on a website originated from <em>that</em> website. This prevents website <em>http://kahtava.com</em> from accessing resources (via client-side code) on website <em>http://malicious-password-sniffers.com</em> or website <em>http://adam.kahtava.com</em> from executing resources from <em>http://kahtava.com</em> - note that the sub-domains differ, one being kahtava.com, the other being <em>adam</em>.kahtava.com </p>
<p>In most cases The Same Origin Policy is desirable. It helps to prevent malicious code that could potentially reveal sensitive information from being run on arbitrary website. However, the same origin policy also makes it difficult to share resources within a common root domain, or run external widgets on your site (like displaying <a href="http://adam.kahtava.com/journal/2010/02/24/the-project-badge-show-the-world-your-github-and-google-code-projects-on-your-blog/">The Project Badge</a> within your site). There are a couple ways to circumvent The Same Origin Policy, but I focus on JSONP and the <code>document.domain</code> property in this post.</p>
<h3>Ways to circumvent the Same Origin Policy</h3>
<ol>
<li><a href="http://en.wikipedia.org/wiki/JSON#JSONP">JSONP</a></li>
<li>Modifying the <code><a href="https://developer.mozilla.org/en/DOM/document.domain">document.domain</a></code> property</li>
<li>Creating a <a href="http://developer.yahoo.com/javascript/howto-proxy.html">server side web proxy</a></li>
</ol>
<h4>JSONP (JSON with padding)</h4>
<p><strong>How it works:</strong> JSONP dynamically creates a script element in the head of your HTML document which then requests data from outside your domain. <em>JSONP exploits a loophole in the Same Origin Policy that allows JavaScript from an external sites to be run within your site (much like how web analytic tracking works).</em> The JSON response, when returned, is executed within your browser at which time the JavaScript can manipulate your HTML page / DOM.</p>
<p><strong>An Example Using JSONP with jQuery:</strong></p>
<div class="igBar"><span id="ljavascript-3"><a href="#" onclick="javascript:showPlainTxt('javascript-3'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-3">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; $.<span style="color: #006600;">getJSON</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'http://adam.kahtava.com/services/open-source/projects.json?project-host:username=github:adamdotcom&amp;callback=?'</span>, <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>data<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span>data<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
<em>Note the <code>callback=?</code> at the end of the URI, in jQuery this indicates a JSONP call.</em></p>
<p><strong>Pros</strong></p>
<ul>
<li>Lets us make external calls to any endpoint that supports JSONP</li>
<li>Lets us make external calls from HTTP to HTTPS</li>
<li>Supported by all major browsers</li>
</ul>
<p><strong>Cons</strong></p>
<ul>
<li>A bit more complex upfront, but most server side technologies support JSONP, browsers are natively supporting JSON, and JavaScript libraries like jQuery continue to abstract away most of the complexity.</li>
</ul>
<h4>The <code>document.domain</code> property</h4>
<p><strong>How it works:</strong> the <code>document.domain</code> property contains the domain of the server from which the page was loaded. For example, the domain for <em>http://adam.kahtava.com/</em> would be <em>adam.kahtava.com</em> whereas the domain for <em>http://kahtava.com</em> would be <em>kahtava.com</em>. The Same Origin Policy restricts resource access from <em>kahtava.com</em> to <em>adam.kahtava.com</em> unless we set the <code>document.domain</code> property to the root domain (in this case I'd want it set to <em>kahtava.com</em> to share resources with <em>http://adam.kahtava.com</em>).</p>
<p><strong>An Example using the <code>document.domain</code> property:</strong></p>
<div class="igBar"><span id="ljavascript-4"><a href="#" onclick="javascript:showPlainTxt('javascript-4'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-4">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; document.<span style="color: #006600;">domain</span> = <span style="color: #3366CC;">'kahtava.com'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; $.<span style="color: #006600;">get</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'http://adam.kahtava.com/contact-me/'</span>, <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>data<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span>data<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p><strong>Pros</strong></p>
<ul>
<li>An easy way to access resources within our root domains</li>
<li>Supported by all major browsers</li>
</ul>
<p><strong>Cons</strong></p>
<ul>
<li>Prevents us from making external calls outside a root domain</li>
<li>Prevents us from switching between HTTP and HTTPS</li>
<li>Kind of a hack - technically, the document.domain property is supposed to be a read only property, but most browsers also provide set access</li>
</ul>
<p>JSONP vs <code>document.domain</code> isn't a cut and dry comparison. JSONP lets anyone consume and share data, whereas overriding the <code>document.domain</code> lets you share resources within a common root domain. In simple cases where your only concern is sharing data within a single domain (exclusively on HTTP or exclusively on HTTPS), then overriding the domain works well, but in cases where you want to share or consume external data that may be passed over HTTP or HTTPS you'd probably want to stick with JSONP.</p>
<p><a href="http://adam.kahtava.com/journal/2010/02/24/the-project-badge-show-the-world-your-github-and-google-code-projects-on-your-blog/">The Project Badge</a> makes use of JSONP so it can work on your website. Most of <a href="http://adam.kahtava.com/publicly-available-web-services/">my publicly available web services</a> also make use of JSONP through a WCF <a href="http://code.google.com/p/adamdotcom-services/source/browse/trunk/AdamDotCom.Common.Service/Source/Common/Infrastructure/JSONP/JSONPBehavior.cs">JSONPBehavior</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2010/03/18/the-same-origin-policy-jsonp-vs-the-documentdomain-property/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Project Badge: Show The World Your GitHub and Google Code Projects On Your Blog</title>
		<link>http://adam.kahtava.com/journal/2010/02/24/the-project-badge-show-the-world-your-github-and-google-code-projects-on-your-blog/</link>
		<comments>http://adam.kahtava.com/journal/2010/02/24/the-project-badge-show-the-world-your-github-and-google-code-projects-on-your-blog/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 17:00:10 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[ADC Services]]></category>
		<category><![CDATA[ADC Website]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Services]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/?p=2298</guid>
		<description><![CDATA[The Project Badge displays your GitHub and Google Code projects in a badge that can be displayed on your site. This widget was built on the data being returned from my Open Source Service. View this post outside your RSS reader to see it in action or view it here. The source for the Project [...]]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://adam.kahtava.com/etcetera/open-source-project-badge/" style="border-width: 0px; width: 320px; height: 370px; margin-left: 15px; float: left;"> </iframe></p>
<p>The Project Badge displays your GitHub and Google Code projects in a badge that can be displayed on your site. This widget was built on the data being returned from my <a href="http://adam.kahtava.com/journal/2010/02/11/introducing-my-open-source-projects-service-grab-your-project-details-from-github-or-google-code/">Open Source Service</a>. </p>
<p><em>View this post outside your RSS reader to see it in action or view it <a href="http://adam.kahtava.com/etcetera/open-source-project-badge/">here</a>.</em></p>
<p>The source for the Project Badge can be found <a href="http://github.com/AdamDotCom/project-badge/">here</a> and the source for the accompanying service can be found <a href="http://code.google.com/p/adamdotcom-services/source/browse/trunk#trunk/AdamDotCom.OpenSource.Service/Source/Service">here</a>. A list of all my publicly available web services can be found <a href="http://adam.kahtava.com/publicly-available-web-services/">here</a>.</p>
<div style="clear:both;"></div>
<h3>Using The Project Badge On Your Website or Blog</h3>
<p><strong>1. Add The Asset References</strong></p>
<p>Add the following asset references, and a reference to jQuery (if you don't have one already).</p>
<div class="igBar"><span id="lhtml-8"><a href="#" onclick="javascript:showPlainTxt('html-8'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">HTML:</span>
<div id="html-8">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/link.html"><span style="color: #000000; font-weight: bold;">&lt;link</span></a> <span style="color: #000066;">rel</span>=<span style="color: #ff0000;">"stylesheet"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/css"</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"http://github.com/AdamDotCom/project-badge/raw/master/project-badge.css"</span> /<span style="color: #000000; font-weight: bold;">&gt;</span></a></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"http://github.com/AdamDotCom/project-badge/raw/master/projectBadge.js"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/script&gt;</span></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p><strong>2. Configure Your Accounts</strong></p>
<p>Set your project accounts (it's OK if you only use one host) then optionally set the appropriate filters - in my case <a href="http://code.google.com/u/adam.kahtava.com/">my Google Code projects</a> were prefixed with <em>adamdotcom</em> and I had duplicate projects on both GitHub and Google Code. By specifying <em>remove:adamdotcom,remove:duplicate-items</em> in my filters I filter out the duplicates and removed <em>adamdotcom</em> from the project name.</p>
<div class="igBar"><span id="ljavascript-9"><a href="#" onclick="javascript:showPlainTxt('javascript-9'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-9">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&lt;script type=<span style="color: #3366CC;">"text/javascript"</span>&gt;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; projectBadge.<span style="color: #006600;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; gitHub: <span style="color: #3366CC;">'AdamDotCom'</span>, </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; googleCode: <span style="color: #3366CC;">'adam.kahtava.com'</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>,<span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; filters: <span style="color: #3366CC;">'remove:adamdotcom,duplicate-items,-,empty-items'</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&lt;/script&gt; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p><strong>3. Add The Widget Hook</strong><br />
Add an element to your site or blog with the id of <code>project-badge</code>.</p>
<div class="igBar"><span id="lhtml-10"><a href="#" onclick="javascript:showPlainTxt('html-10'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">HTML:</span>
<div id="html-10">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"project-badge"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; Loading...</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div&gt;</span></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p><strong>That's it!</strong><br />
If you have any issues, use the <a href="http://adam.kahtava.com/etcetera/open-source-project-badge/">the working example</a> as a reference, or send me a message.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2010/02/24/the-project-badge-show-the-world-your-github-and-google-code-projects-on-your-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Google Exercise Revisited: Semantic Markup with jQuery</title>
		<link>http://adam.kahtava.com/journal/2009/07/09/the-google-exercise-revisited-semantic-markup-with-jquery/</link>
		<comments>http://adam.kahtava.com/journal/2009/07/09/the-google-exercise-revisited-semantic-markup-with-jquery/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 16:00:23 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Google Exercise]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/?p=1641</guid>
		<description><![CDATA[A couple years ago I tried getting a Web Developer position at Google. After a few interviews they had me complete their Web Developer exercise. I did it, and my initial submission would have made any respectable web developer ill - you can read more here: Getting a Job at Google: A Web Developer Fizzbuzz. [...]]]></description>
			<content:encoded><![CDATA[<p>A couple years ago I tried getting a Web Developer position at Google. After a few interviews they had me complete their Web Developer exercise. I did it, and my initial submission would have made any respectable web developer ill - you can read more here: <a href="http://adam.kahtava.com/journal/2008/05/24/getting-a-job-at-google-a-web-developer-fizzbuzz/">Getting a Job at Google: A Web Developer Fizzbuzz</a>. I <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/">redid the exercise</a> over a year ago, but today even that code stink.</p>
<p><strong>I did the exercise yet again (the third time) because my last attempt needed some improvements:</strong></p>
<ul>
<li>it suffered from <a href="http://adam.kahtava.com/journal/2009/07/15/cronic-divitis-and-classitis-what-is-it/">chronic classitis and divitis</a> (too many classes, ids, and divs were making me itchy)</li>
<li>it wasn't really using <a href="http://brainstormsandraves.com/articles/semantics/structure/">semantic / structural</a> markup (all the extra divs etc... cluttered my markup, and some of my class names like <code>container-borders</code> are non-semantic altogether)</li>
<li>it performed poorly and wasn't accessible (everything was being rendered in the DOM, there was no immediate rendered markup which kind of violated the idea of <a href="http://en.wikipedia.org/wiki/Unobtrusive_JavaScript">unobtrusive JavaScript</a>, nor was it screen reader friendly)</li>
<li>it wasn't making use of any JavaScript libraries to abstract browser inconsistencies out of the code</li>
<li>it suffered from my <a href="http://adam.kahtava.com/journal/2008/02/17/software-ethnocentrism-staving-off-tunnel-vision/">software ethnocentrism</a> (my variable and object naming like <code>GoogleExercise</code> was mirroring statically typed languages and not the native language they were being written in)
</ul>
<p><strong>Here's my latest Google Exercise (addressing all the above concerns):</strong><br />
<iframe src="http://adam.kahtava.com/etcetera/google-web-developer-exercises/semantic-with-jquery/" style="border-width: 0px; width: 320px; height: 300px; margin-left: 15px; float: left;"> </iframe><em>View this post outside your RSS reader to see it in action or view it <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/semantic-with-jquery/">here</a>.</em></p>
<p>This attempt makes use of <a href="http://jquery.com/">jQuery</a> and uses 57 lines of JavaScript (almost 200 lines less from my last one). </p>
<p>You can view the code for this attempt here: <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/semantic-with-jquery/google.contact.widget.js">google.contact.widget.js</a>, <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/semantic-with-jquery/index.html">index.html</a>, <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/semantic-with-jquery/google-contact-widget.css">google-contact-widget.css</a>. </p>
<p>You can view the old code here: <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/GoogleExercise.js">GoogleExercise.js</a>, <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/index.html">index.html</a>, <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/GoogleExercise.css">GoogleExercise.css</a>.</p>
<p>If you think I can improve on my code then let me know. Oh yeah, and if you're a recruiter from Google then hire me! :)</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2009/07/09/the-google-exercise-revisited-semantic-markup-with-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Write Frameworks For Dummies</title>
		<link>http://adam.kahtava.com/journal/2009/02/05/dont-write-frameworks-for-dummies/</link>
		<comments>http://adam.kahtava.com/journal/2009/02/05/dont-write-frameworks-for-dummies/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 23:03:09 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET AJAX]]></category>
		<category><![CDATA[Musings]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,b1e1660b-3d7e-46e7-a287-6c136b938178.aspx</guid>
		<description><![CDATA[Eric Evans offers this piece of advice: Don't write frameworks for dummies. [Frameworks designed by organizations] that assume some developers are not smart enough ... are likely to fail because they underestimate the difficulty of ... development. ... This attitude also poisons the relationship between [the developers and framework designer]. - Eric Evans, Domain-Driven Design: [...]]]></description>
			<content:encoded><![CDATA[<p>Eric Evans offers this piece of advice:</p>
<blockquote><p>Don't write frameworks for dummies. [Frameworks designed by organizations] that assume some developers are not smart enough ... are likely to fail because they underestimate the difficulty of ... development. ... This attitude also poisons the relationship between [the developers and framework designer]. - Eric Evans, <a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/">Domain-Driven Design: Tackling Complexity in the Heart of Software</a></p></blockquote>
<p>Evans goes on to make the point that there's a fine line between designing for dummies, and providing useful encapsulation / abstraction. I found this advice interesting because I had been wrestling with whether the <a href="http://adam.kahtava.com/journal/2008/04/21/the-aspnet-ajax-framework-is-for-dummies/">ASP.NET AJAX Framework is for Dummies</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2009/02/05/dont-write-frameworks-for-dummies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some Design Up Front is Good</title>
		<link>http://adam.kahtava.com/journal/2008/12/18/big-design-up-front-is-good/</link>
		<comments>http://adam.kahtava.com/journal/2008/12/18/big-design-up-front-is-good/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 02:40:27 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Musings]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,fb496d2c-e784-4cb1-8f55-bc32c87e2b73.aspx</guid>
		<description><![CDATA[Like a horse with blinders on, avoiding some degree of Big Design Up Front (BDUF) can force your team and project into tunnel vision, because... If you don't look at what you're building in its entirety, it is harder to see the big picture, to have to that ah-hah moment that leads to a break [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; padding-left: 5px;"><a href="http://www.flickr.com/photos/preciouskhyatt/2653496191/sizes/l/"><img style="border: medium none ;" src="http://farm4.static.flickr.com/3266/2653496191_ed2e39e2fb_m.jpg" alt="" /></a></div>
<p>Like a horse with blinders on, avoiding some degree of <a href="http://en.wikipedia.org/wiki/Big_Design_Up_Front">Big Design Up Front (BDUF)</a> can force your team and project into tunnel vision, because... If you don't look at what you're building in its entirety, it is harder to see the big picture, to have to that <em>ah-hah</em> moment that leads to a break through, to maintain conceptual integrity, or have a successful project.</p>
<p>I worked on a project where we attempted evolutionary design (avoiding Big Design Up Front) while taking an Agile approach. We used Continuous Integration, and Test Driven Development. Looking back, our attempt at trying to avoid Big Design Up Front was fatal for our project's success and probably our biggest mistake. The funny thing is, the only reason we avoided BDUF was because it seemed non-Agile (note the capital '<em>A</em>' in <em>'Agile'</em> read Yegge's post <a href="http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile_27.html">Good Agile, Bad Agile</a> for the reference). As a development team we were inexperienced Agile (eXtreme Programming) teenagers and somewhere along the way we exchanged our brains for dogma.</p>
<blockquote><p>eXtreme Programming [is at odds with] "Big Design, Up Front" (BDUF) _ Because "Ya Ain't Gonna Need It" (YAGNI) ... [but this is often] taken as permission to not do any planning - <a href="http://xunitpatterns.com/gerardmeszaros.html">Gerard Meszaros'</a> Alberta TechFest slide deck '07</p></blockquote>
<p>In the past Big Design Up Front (BDUF) was associated with large inflexible architectural solutions that are designed upfront (before development begins) - like <a href="http://en.wikipedia.org/wiki/Waterfall_model">the waterfall methodology</a>. However; BDUF (like most techniques / methodologies / tools) are quite useful when used with a sprinkle of common sense and moderation. BDUF can be a productive lightweight tool for fleshing out the high level overview of a system. It is important to note that I'm not advocating Big <span style="text-decoration: underline;">Architectural</span> Design Up Front which is often composed of reams of documents, UML, ERDs, diagrams, and other unneeded artifacts. Instead I'm advocating for paper based story boards, wire frames, paper prototypes, user stories - anything that is easy to create, destroy, and recreate. These techniques provide the foundation of the final product, they start to verbalize the common product goal and can start to draw out the language, metaphors, and model that will eventually compose the project.</p>
<p>Avoiding some Design Up Front was a mistake for our project. As a team we were trying to cope with the complexities of our domain under very tight deadlines. Our code became increasingly brittle, we had overlooked obvious shared functionality that a high level overview would have fleshed out. At the same time we had segregated our application into sprint sized silos with no clear relationships - each sprint was essentially a two week tunnel, and disconnected.</p>
<p>Without some form of BDUF it was difficult to:</p>
<ul>
<li> maintain conceptual integrity, a common goal, a consistent user interface</li>
<li> estimate the whole product cost</li>
<li> have a successful project</li>
</ul>
<p>We should have headed Steve McConnell's words:<em><br />
</em></p>
<blockquote><p>people were claiming,  "I don't have to do requirements or design because I'm using object-oriented programming." That was just an excuse. Most of those people weren't really doing object-oriented programming-they were hacking, and the results were predictable, and poor. Right now, <strong>people are saying "I don't have to do requirements or design because I'm doing agile development." Again, the results are easy to predict, and poor</strong> - <a href="http://www.amazon.com/dp/0735619670">Steve McConnell</a><a href="http://tempuri.org/tempuri.html">, Code Complete</a></p></blockquote>
<p>Or perhaps Martin Fowler's suggestion:</p>
<blockquote><p>the planned design approach has been around since the 70s, and lots of people have used it. It is better in many ways than code and fix evolutionary design. But it has some faults. - <a href="http://martinfowler.com/articles/designDead.html">Martin Fowler, Is Design Dead?</a></p></blockquote>
<p><strong>Not doing some Design Up Front is probably another excuse for being sloppy, but what do you think?<br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/12/18/big-design-up-front-is-good/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Microsoft and jQuery Finally: Thank-You!</title>
		<link>http://adam.kahtava.com/journal/2008/09/28/microsoft-and-jquery-finally-thank-you/</link>
		<comments>http://adam.kahtava.com/journal/2008/09/28/microsoft-and-jquery-finally-thank-you/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 19:29:57 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,30d337b1-12ca-40dd-9dc0-4e1bfacf2483.aspx</guid>
		<description><![CDATA[Microsoft is looking to make jQuery part of their official development platform ... jQuery will be distributed with Visual Studio - jQuery, Microsoft, and Nokia Other links of interest: Scott Hanselman: jQuery to ship with ASP.NET MVC and Visual Studio Scott Guthrie: jQuery and Microsoft I was completely blindsided by this decision.]]></description>
			<content:encoded><![CDATA[<div style="float: right;"><img style="padding: 10px; background-color: black;" src="http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif" alt="" /></div>
<blockquote><p>Microsoft is looking to make jQuery part of their official development platform ... jQuery will be distributed with Visual Studio<br />
- <a href="http://jquery.com/blog/2008/09/28/jquery-microsoft-nokia/">jQuery, Microsoft, and Nokia</a></p></blockquote>
<p>Other links of interest:</p>
<ul>
<li>Scott Hanselman: <a href="http://www.hanselman.com/blog/jQueryToShipWithASPNETMVCAndVisualStudio.aspx">jQuery to ship with ASP.NET MVC and Visual Studio</a></li>
<li>Scott Guthrie: <a href="http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx">jQuery and Microsoft</a></li>
</ul>
<p>I was completely blindsided by this decision.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/09/28/microsoft-and-jquery-finally-thank-you/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Transparency: Considerations For Choosing a JavaScript / AJAX Framework</title>
		<link>http://adam.kahtava.com/journal/2008/09/20/transparency-considerations-for-choosing-a-javascript-ajax-framework/</link>
		<comments>http://adam.kahtava.com/journal/2008/09/20/transparency-considerations-for-choosing-a-javascript-ajax-framework/#comments</comments>
		<pubDate>Sat, 20 Sep 2008 17:32:20 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,ecf3e641-c21d-4bb4-bfd4-0956c1cd3dce.aspx</guid>
		<description><![CDATA[A growing number of development teams are given the opportunity to choose their JavaScript / AJAX Frameworks. This choice is often thrown to the development team because the Architects are more concerned with the bigger picture, and the technical details are over the manager's head. Letting the development team decide on the JavaScript / AJAX [...]]]></description>
			<content:encoded><![CDATA[<p>A growing number of development teams are given the opportunity to choose their JavaScript / AJAX Frameworks. This choice is often thrown to the development team because the Architects are more concerned with the bigger picture, and the technical details are over the manager's head. <strong>Letting the development team decide on the JavaScript / AJAX framework produces some great benefits: it gels the team, fosters project buy-in, and creates project excitement. </strong></p>
<p>Now, developers can be pretty skeptical, and getting them to agree has been likened to <em><a href="http://www.amazon.com/Herding-Cats-Primer-Programmers-Lead/dp/1590590171">herding cats</a></em>, but a couple core considerations / values seem to surface when the decision is being made.</p>
<p><strong>Considerations for choosing a JavaScript / AJAX Framework:</strong></p>
<ul>
<li> <strong>Transparency </strong>- Who are the framework's development team and why should we trust them? Do these developers blog? Attend conferences? Are they featured on podcasts / videos? Is there a high or low turnover within the team? What are their passions? Is this <em>just </em>a job, do they like what they're doing, are they a cog on a wheel? Are they experts in their field?</li>
</ul>
<ul>
<li> <strong>Competency </strong>- Based on the information gathered in the consideration above (transparency), how competent do we feel the development team is?<strong></strong></li>
</ul>
<ul>
<li> <strong>Community Support</strong> - How well is the framework supported on forums and blogs? If something were to go wrong can we gain access to the framework's development team? Are there widespread experts using this framework readily available?</li>
</ul>
<ul>
<li> <strong>Reputation</strong> - How popular is the framework in the industry? Who uses it? Are there any white papers, success stories, case studies available?</li>
</ul>
<p>One of the easiest ways for a developer to choose a framework is by looking at the developers that built it (and talking with those that are using it). As developers our day job will be stepping into someone else's code for the duration of the project, working with a framework created by competent developers makes our jobs easy. Frameworks without transparency don't allow us to gauge the competency of the developers or the framework.</p>
<p>Transparency is essential for JavaScript / AJAX Framework teams, JavaScript itself is open and transparent (not compiled yet), it follows that JavaScript / AJAX Framework along with their teams should also be transparent. <strong>When the decision for choosing a JavaScript / AJAX Framework is placed in the hands of developers the frameworks that don't meet the above criteria sink to the bottom of the list.<br />
</strong></p>
<blockquote><p>The only way to succeed now is to be completely transparent, everything is exposed, everything you do - <a href="http://garyvaynerchuk.com/2008/09/23/my-web-20-keynote-in-nyc/">Gary Vaynerchuk</a> </p></blockquote>
<p><strong></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/09/20/transparency-considerations-for-choosing-a-javascript-ajax-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Book Reviewed: JavaScript: The Good Parts by Douglas Crockford</title>
		<link>http://adam.kahtava.com/journal/2008/06/07/book-reviewed-javascript-the-good-parts-by-douglas-crockford/</link>
		<comments>http://adam.kahtava.com/journal/2008/06/07/book-reviewed-javascript-the-good-parts-by-douglas-crockford/#comments</comments>
		<pubDate>Sat, 07 Jun 2008 23:32:33 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Book]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[Review]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,6b653e5a-27a0-4fc6-bd15-85cd9c414372.aspx</guid>
		<description><![CDATA[Weighing in at 140+ pages of content, JavaScript: The Good Parts [Douglas Crockford] cuts through the obscurities, pleasantries, and filler found in most technical books. Instead, this book dives straight into the heart of the JavaScript language. It presents the clearest comprehensive explanation of what makes JavaScript a great programming language that I've encountered to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/gp/product/0596517742/?ie=UTF8&amp;tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596517742"><img style="border-width: 0px; float: right;" src="http://ecx.images-amazon.com/images/I/51Mb1xCr7CL._SL500_AA240_.jpg" alt="" /></a>Weighing in at 140+ pages of content, <a href="http://www.amazon.com/gp/product/0596517742/?ie=UTF8&amp;tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596517742">JavaScript: The Good Parts [Douglas Crockford]</a> cuts through the obscurities, pleasantries, and filler found in most technical books. Instead, this book dives straight into the heart of the JavaScript language. It presents the clearest comprehensive explanation of what makes JavaScript a great programming language that I've encountered to date. It nails the important concepts, like JavaScript's: object oriented nature, its classless (pseudoclassical) nature, and functional nature. While covering the fundamentals like JavaScript's: functions, lexical scoping, lambdas, prototypal inheritance, and functional inheritance.</p>
<p>This book's size makes it approachable for all audiences, its style is terse and concise. This book has the potential to do for JavaScript, what Richie's inspirational classic the <a href="http://www.amazon.com/gp/product/0131103628/?ie=UTF8&amp;tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0131103628">C Programming Language</a> did for the C language.</p>
<p>JavaScript is the programming language of the web (AJAX), and this book will guide you through the good parts of this often misunderstood language - while this book is an excellent reference, it is not intended to replace <a href="http://adam.kahtava.com/journal/2008/03/26/book-reviewed-javascript-the-definitive-guide-by-david-flanagan/">JavaScript: The Definitive Guide</a>, you'll do best to have both these books on hand.</p>
<p>If you enjoyed (or are considering) this book then you may want to learn more of what Douglas Crockford has to say, check out his great JavaScript video series on the <a href="http://developer.yahoo.com/yui/theater/">YUI Theater</a>.</p>
<p>I highly recommend this book. View my review on <a href="http://www.amazon.com/gp/cdp/member-reviews/A2JM0EQJELFL69/ref=cm_pdp_reviews_see_all?ie=UTF8&amp;sort_by=MostRecentReview">Amazon</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/06/07/book-reviewed-javascript-the-good-parts-by-douglas-crockford/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing a Control for the AJAX Control Toolkit: How ASP.NET AJAX Failed</title>
		<link>http://adam.kahtava.com/journal/2008/06/07/writing-a-control-for-the-ajax-control-toolkit-how-aspnet-ajax-failed/</link>
		<comments>http://adam.kahtava.com/journal/2008/06/07/writing-a-control-for-the-ajax-control-toolkit-how-aspnet-ajax-failed/#comments</comments>
		<pubDate>Sat, 07 Jun 2008 19:19:42 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,323c98c8-c4dd-4dd7-8cc3-b65178f32db2.aspx</guid>
		<description><![CDATA[One of my resolutions this year was to contribute to the AJAX Control Toolkit for the ASP.NET AJAX Framework. I began my AJAX Control Toolkit development quest by digging into the online resources, reading ASP.NET AJAX in Action, and decomposing the AJAX Control Toolkit. I noted the huge learning curve required to developing a control, [...]]]></description>
			<content:encoded><![CDATA[<p>One of my resolutions this year was to contribute to the <a href="http://www.asp.net/ajax/ajaxcontroltoolkit/samples/">AJAX Control Toolkit</a> for the <a href="http://asp.net/ajax/">ASP.NET AJAX Framework</a>. I began my AJAX Control Toolkit development quest by digging into the online resources, reading <a href="http://adam.kahtava.com/journal/2008/04/20/book-reviewed-aspnet-ajax-in-action-by-alessandro-gallo-david-barkol-rama-vavilala/">ASP.NET AJAX in Action</a>, and decomposing the AJAX Control Toolkit. I noted the huge <a href="http://adam.kahtava.com/journal/2008/04/09/the-aspnet-ajax-learning-curve/">learning curve</a> required to developing a control, and continued to dig deeper. Once mired in ASP.NET AJAX a bad smell kept wafting by. Since then I've been <a href="http://adam.kahtava.com/journal/2008/06/03/more-on-the-perils-of-the-aspnet-ajax-framework/">trying</a> to distinguish this smell.</p>
<p><strong>What's really wrong with ASP.NET AJAX?</strong></p>
<ul>
<li> It doesn't plan for performance from day one</li>
<li> It treats AJAX as a classic computer science problem</li>
<li> It tries to turn JavaScript into a classical language which works against JavaScript's dynamic, prototypical nature</li>
<li> It feels like a framework that was written for dummies (<a href="http://adam.kahtava.com/journal/2009/02/05/dont-write-frameworks-for-dummies/">Don't Write Frameworks For Dummies</a>)</li>
</ul>
<p><strong>A Case Study: Why Plaxo.com Almost Failed</strong></p>
<p>In the video: <a href="http://video.yahoo.com/watch/1041101">High-performance JavaScript: Why Everything You've Been Taught is Wrong</a> (<a href="http://developer.yahoo.com/yui/theater/">YUI Theater</a>) <a href="http://josephsmarr.com/">Joseph Smarr</a> discusses the challenges and lessons learned while developing <a href="http://www.plaxo.com/">Plaxo.com</a>. While developing this AJAX centric application, the Plaxo team decided to include everything they could think of into their application. <strong>They created a framework to treat JavaScript as a classical language, they gave priority to features over performance, and... the project ALMOST FAILED.</strong> They were able to salvage their application by diverting their development efforts, making performance one of their top priorities, by unlearning everything they'd been taught about classical applications (instead embracing JavaScript), jettisoning unneeded framework bloat, and more.</p>
<p>Some of the points made in this video were:</p>
<ul>
<li> Plan for performance from day one</li>
<li> AJAX is not a classic problem</li>
<li> JavaScript is not a classical programming language</li>
<li> User experience and a responsive application can make or break an application</li>
<li> Unneeded bloat in a framework, and an obtuse approach to using AJAX (treating AJAX and JavaScript as a classical language or classic computer science problem) has the potential to cripple your application</li>
</ul>
<p>This Channel 9 video also mirrors these sentiments: <a href="http://channel9.msdn.com/posts/Charles/Douglas-Crockford-Alex-Russell-and-Joseph-Smarr-On-the-Past-Present-and-Future-of-JavaScript/">Douglas Crockford, Alex Russell and Joseph Smarr: On the Past, Present and Future of JavaScript</a></p>
<p><strong>How ASP.NET AJAX Failed: What can we learn from Plaxo?</strong></p>
<p>The way the Plaxo team approached their application development is similar to how the ASP.NET AJAX Framework has been designed. Like Plaxo's initial attempt ASP.NET AJAX attempts to mold JavaScript into a classical language, and attempts to treat JavaScript and AJAX as a classic computer science problem by heaping on more abstractions. Like Plaxo's initial attempt ASP.NET AJAX also gives a low priority to performance. Plaxo was able to change their direction and salvaged their application, but the ASP.NET AJAX Framework is not in a position to make any sweeping changes - ASP.NET AJAX is going down the wrong path and it's too late.</p>
<p>The ASP.NET AJAX Framework is probably another exercise in Framework Architecture (<a href="http://en.wikipedia.org/wiki/Demoware">demoware</a>) and a failure in practice. Its lack of use in the wild attests to these shortcomings - contrast the <a href="http://www.asp.net/ajax/showcase/">sites using ASP.NET AJAX</a> with the <a href="http://docs.jquery.com/Sites_Using_jQuery">sites using jQuery</a> (<a href="http://adam.kahtava.com/journal/2008/05/15/actions-speak-louder-than-words-goodbye-aspnet-ajax/">Actions Speak Louder Than Words</a>). Furthermore the places that ASP.NET AJAX does thrive (the small internal ASP.NET business apps that need some bling-bling) will also be the areas that <a href="http://en.wikipedia.org/wiki/Silverlight">Silverlight</a> shines - Silverlight offers a better Microsoft centric programming model (less leaky Win Form / Web Form abstractions) that most Microsoft developers will embrace. Silverlight will probably divert the developers that currently embrace ASP.NET AJAX.</p>
<p>I don't recommend the ASP.NET AJAX Framework and won't be contributing to the AJAX Control Toolkit. My time is better spent elsewhere.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/06/07/writing-a-control-for-the-ajax-control-toolkit-how-aspnet-ajax-failed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More on the perils of The ASP.NET AJAX Framework</title>
		<link>http://adam.kahtava.com/journal/2008/06/03/more-on-the-perils-of-the-aspnet-ajax-framework/</link>
		<comments>http://adam.kahtava.com/journal/2008/06/03/more-on-the-perils-of-the-aspnet-ajax-framework/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 15:06:27 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET AJAX]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,128d00d5-c819-417b-996f-268676243143.aspx</guid>
		<description><![CDATA[There's no need to whip a dead horse (I've probably been griping about the ASP.NET AJAX Framework for too long), but... Jon Galloway and a group of other notable gurus (K. Scott Allen, Scott Koon, and Kevin Dente) have started a podcast, their latest segment sparked my interest since it covered ASP.NET AJAX and AJAX [...]]]></description>
			<content:encoded><![CDATA[<p>There's no need to whip a dead horse (I've probably been griping about the ASP.NET AJAX Framework for too long), but... <a href="http://weblogs.asp.net/jgalloway/default.aspx">Jon Galloway</a> and a group of other notable gurus (<a href="http://www.odetocode.com/">K. Scott Allen</a>, <a href="http://www.lazycoder.com/">Scott Koon</a>, and <a href="http://weblogs.asp.net/kdente/">Kevin Dente</a>) have started a podcast, their latest segment sparked my interest since it covered ASP.NET AJAX and AJAX Libraries / Frameworks in general.</p>
<p>I share their sentiments so I thought I'd post a brief but choppy transcript:</p>
<blockquote><p>[ASP.NET AJAX] ... does offer some some nice features, they did try to take some of the common pieces of the CLR that [.NET Developers are] used to working with and move that down into a JavaScript library. So you get classes like a <a href="http://www.asp.net/AJAX/Documentation/Live/ClientReference/Sys.Net/WebRequestClass/default.aspx">WebRequest</a> class that wraps the <a href="http://en.wikipedia.org/wiki/XMLHttpRequest">XMLHttpRequest</a> ... and they have a <a href="http://www.asp.net/AJAX/Documentation/Live/ClientReference/Sys/StringBuilderClass/default.aspx">StringBuilder</a>, and they added methods that we're more accustom with ...</p>
<p>that's wonderful, but I don't find myself needing those extensions all that often.<strong> If you want to do strictly client-side programming then something like jQuery offers you a lot more capabilities to do things that you really want to do client-side like sorting and CSS selectors.</strong> ... That stuff is easy to do with an Update Panel and ASP.NET, but Update Panels aren't always the best solution to use. ...</p>
<p>the goals with ASP.NET AJAX was to integrate into the ASP.NET server-side model ... that's great for ASP.NET, but it needs more client-side features. ... It works if your thinking from the ASP.NET control perspective, but <strong>if you look at it outside the ASP.NET model there are a lot easier ways to do it. </strong>...</p>
<p>ASP.NET AJAX [development] seems to have come to a standstill I'm not seeing a lot of development in that area and the rest of these [AJAX] Frameworks are doing monthly releases. <strong>Every month that goes by [the ASP.NET AJAX Framework] falls further and further behind ... it needs to evolve.</strong></p></blockquote>
<p>Listen to this podcast here: <a href="http://weblogs.asp.net/jgalloway/archive/2008/05/29/technology-round-table-podcast-2-ajax-frameworks.aspx">Technology Round Table Podcast #2 - AJAX Frameworks</a></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/06/03/more-on-the-perils-of-the-aspnet-ajax-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting a Job at Google: A Web Developer Fizzbuzz</title>
		<link>http://adam.kahtava.com/journal/2008/05/24/getting-a-job-at-google-a-web-developer-fizzbuzz/</link>
		<comments>http://adam.kahtava.com/journal/2008/05/24/getting-a-job-at-google-a-web-developer-fizzbuzz/#comments</comments>
		<pubDate>Sat, 24 May 2008 21:03:23 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Google Exercise]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Interview]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programming Languages]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,8cfd415e-f895-4115-8713-5a879e1abb15.aspx</guid>
		<description><![CDATA[Back when the web turned 2.0, AJAX was all the rage, and gas was cheap, a Google recruiter contacted me. We worked through a couple screening interviews - I explained how I was a .NET / ASP.NET / C# developer with some experience with Java and PHP, I described how C# was somewhat similar to [...]]]></description>
			<content:encoded><![CDATA[<p>Back when the web turned 2.0, AJAX was all the rage, and gas was cheap, a Google recruiter contacted me. We worked through a couple screening interviews - I explained how I was a .NET / ASP.NET / C# developer with some experience with Java and PHP, I described how C# was somewhat similar to Java. Things went great, I moved on to the next step of the process - writing code (a JavaScript widget for Gmail) with a 2 day (weekend) hard deadline. At the time I was wearing JavaScript diapers, but tried the exercise anyways - I&#39;m still convinced the recruiter confused my Java / C# experience with JavaScript. Anyhow... </p>
<p> <b>The Google Web Developer Exercise:<br /> </b><br />
<blockquote style="border: 1px solid rgb(207, 207, 207); padding-left: 7px;">
<h3>Web Developer Exercise </h3>
<p> Attached are three states of a new contacts widget. This widget will be used across Google and may be anywhere on the page. Designers will also use this in mocks for usability tests. Create the HTML, CSS, and JavaScript for the widget as described in the image. Your solution must work in Firefox v1.5+ and IE v6+. Bonus points for a solution that degrades nicely on older browsers.</p>
<p> <img src="http://adam.kahtava.com/journal/images/blog/GoogleExercise02.png"> <br /> <img src="http://adam.kahtava.com/journal/images/blog/GoogleExercise03.png"> <br /> <img src="http://adam.kahtava.com/journal/images/blog/GoogleExercise01.png">  </p></blockquote>
<p><b>After my first attempt, I concluded that: </b> <br /> 
<ol>
<li> My JavaScript knowledge was embarrassing  </li>
<li> <a href="http://en.wikipedia.org/wiki/Dynamic_language">Dynamic programming languages</a> like JavaScript using <a href="http://en.wikipedia.org/wiki/Prototype-based_programming">prototypical inheritance</a> were awesome - as a monocultured .NET developer I had sorely been missing out</li>
<li> Framework Web Developers (ASP.NET, Ruby on Rails, and so on) aren&#39;t really Web Developers - we depend on a framework (an API) as a crutch, where the law of <a href="http://en.wikipedia.org/wiki/Leaky_abstraction">Leaky Abstractions</a> is very real, and often when it rears it&#39;s head we use our <a href="http://en.wikipedia.org/wiki/Golden_hammer">golden hammer</a> (our multipurpose language of choice), but there are better tools at hand </li>
<li> Web Developers claiming <i>n</i> years of experience need to at least know JavaScript, CSS, HTML / XHTML, a server-side language, and some XML / XSL - NOT just a single multipurpose language or framework </li>
<li> Innovation can only happen when you become <i>one</i> with the technologies surrounding your realm - for example: <a href="http://adaptivepath.com/ideas/essays/archives/000385.php">Jesse James Garrett</a> probably would not have publicized AJAX had he been an exclusive ASP.NET developer. Diversity is essential for innovation </li>
</ol>
<p> In retrospect this exercise is brilliant, it&#39;s a more complex derivation of a <a href="http://www.codinghorror.com/blog/archives/000781.html">Fizzbuzz exercise</a>, which effectively weeds out the knowledgeable candidates from the n00bs. JavaScript is notorious for being one of <a href="http://www.crockford.com/javascript/javascript.html">the world&#39;s most misunderstood language</a>, many developer (and the ASP.NET Framework) still use JavaScript techniques from the old days of Netscape. For example: <i>&lt;a onclick="return false;" ...</i>, or &lt;a <i>href="Javascript: do something;" ...</i> are common <a href="http://en.wikipedia.org/wiki/DOM_Events#DOM_Level_0">DOM Level 0</a> inline techniques that should be avoided. These techniques have been replaced, but finding developer that use these JavaScript techniques can be hard.</p>
<p> <b>By having a developer complete this exercise you effectively determine that the they understands these concepts:</b> <br /> 
<ul>
<li> Cross browser compatibilities and work arounds for both JavaScript and CSS - with a preference given to <a href="http://www.quirksmode.org/js/support.html">feature detection (object detection)</a> vs browser detection, an understanding of the different event handling models between browsers </li>
<li> An understanding of the separation of concerns - JavaScript, markup, and CSS should be separate files, or at least separated within the document </li>
<li> Event registration and listening - <a href="http://en.wikipedia.org/wiki/DOM_Events">DOM events</a>, the different browser event models, no inline level 0 event declarations, no pseudo JavaScript protocol inline declarations within markup </li>
<li> An understanding of <a href="http://en.wikipedia.org/wiki/Functional_languages">functional languages</a> - <a href="http://en.wikipedia.org/wiki/Closure_%28computer_science%29">closures</a>, <a href="http://adam.kahtava.com/journal/2008/03/17/NamespacingYourJavaScript.aspx">namespaces</a>, <a href="http://en.wikipedia.org/wiki/Lambda_calculus">lambdas</a>, recursion where necessary </li>
<li> Node manipulation - creating, swapping, removing elements</li>
<li> Knowledge of <a href="http://icant.co.uk/articles/seven-rules-of-unobtrusive-javascript/">non-obtrusive JavaScript techniques</a> </li>
<li> Importance of modular / compartmentalization of CSS and JavaScript - defensive programming techniques that minimize the risk of interfering with other scripts and elements within the page, part of the non-obtrusive techniques, how to avoid global variables</li>
<li> An understanding on how to debug JavaScript from both IE (<a href="http://www.jonathanboutelle.com/mt/archives/2006/01/howto_debug_jav.html">link</a>) and Firefox (<a href="http://www.getfirebug.com/js.html">link</a>)</li>
<li> <a href="http://javascript.crockford.com/code.html">JavaScript code conventions</a> - naming conventions, statement conventions</li>
<li> CSS naming conventions</li>
<li> General DHTML / AJAX techniques - showing and hiding elements </li>
<li> A gauge on their attention to details and UI design intuition - what their gut tells them to do when things aren&#39;t spelled out</li>
</ul>
<p> <b>My latest crack at the Google Web Developer Exercise:</b>  <br /> <iframe src="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/" style="border-width: 0px; width: 320px; height: 300px; margin-left: 15px; float: left;"> </iframe> <br /> <i>You&#39;ll have to visit my site (view this blog post outside a RSS reader) to view the code in action.</p>
<p> </i>The code: <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/GoogleExercise.js">GoogleExercise.js</a>, <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/index.html">index.html</a>, <a href="http://adam.kahtava.com/etcetera/google-web-developer-exercises/non-semantic-pure-javascript/GoogleExercise.css">GoogleExercise.css</a> </p>
<p> <i>Today I&#39;m wearing JavaScript training wheels - </i><i>feel free to comment on the code, I&#39;m always looking for improvements and suggestions. I did take a couple shortcuts on the CSS / UI side of things as I was focusing more on the functionality.</i>  </p>
<p> <i>Using one of the <a href="http://en.wikipedia.org/wiki/Ajax_Libraries">AJAX Libraries</a> (like <a href="http://jquery.com/">jQuery</a>) we could certainly do this exercise in significantly fewer lines of code.</p>
<p> </i>
<div style="clear: both;">Today I still think about <a href="http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html">Getting that job at Google</a>, Yahoo!, Amazon, or Microsoft. <a href="http://adam.kahtava.com/journal/2008/01/13/HowWellDoYouKnowJavaScript.aspx">How well do you know JavaScript?</a> </p></div>
<div style="border: 1px solid #ccccee; padding: 5px; background-color: #ffffdd;"><strong>Update:</strong> I redid the Google Exercise using jQuery and more semantics, you can find my latest version here: <a href="http://adam.kahtava.com/journal/2009/07/09/the-google-exercise-revisited-semantic-markup-with-jquery/">The Google Exercise Revisited: Semantic Markup with jQuery</a>.</div>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/05/24/getting-a-job-at-google-a-web-developer-fizzbuzz/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Actions Speak Louder Than Words: Goodbye ASP.NET AJAX</title>
		<link>http://adam.kahtava.com/journal/2008/05/15/actions-speak-louder-than-words-goodbye-aspnet-ajax/</link>
		<comments>http://adam.kahtava.com/journal/2008/05/15/actions-speak-louder-than-words-goodbye-aspnet-ajax/#comments</comments>
		<pubDate>Thu, 15 May 2008 22:35:19 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,200ba4e0-3818-4709-9277-91f85a3ee625.aspx</guid>
		<description><![CDATA[An anticlimactic conclusion about the ASP.NET AJAX Framework - this framework's niche seems to be the internal (intranet) business application realm that depend on ASP.NET Web-Forms. These applications have a handful of users, a couple developers, no performance or bandwidth requirements, little ambition for future growth, and the developers typically embrace dragging &#38; dropping controls [...]]]></description>
			<content:encoded><![CDATA[<p>An anticlimactic conclusion about the ASP.NET AJAX Framework - this framework's niche seems to be the internal (intranet) business application realm that depend on ASP.NET Web-Forms. These applications have a handful of users, a couple developers, no performance or bandwidth requirements, little ambition for future growth, and the developers typically embrace dragging &amp; dropping controls in Visual Studio. In this case the ASP.NET AJAX Framework provides some eye candy, and patches the broken Web-Form metaphor by cramming AJAX into the ASP.NET model, but then comes along the ASP.NET MVC Framework, Silverlight, WPF and ... ??? Goodbye ASP.NET AJAX!</p>
<p><strong>Interesting observations:</strong></p>
<p>How many applications explicitly state that they use the <strong>ASP.NET AJAX</strong> Framework?</p>
<ul>
<li> <strong>25</strong>, this includes sites like <a href="http://www.dotnetnuke.com/">DotNetNuke</a> (with a reputation of being slow), view the list <a href="http://www.asp.net/ajax/showcase/">here</a>.</li>
</ul>
<p>How many of these applications are relatively high-traffic?</p>
<ul>
<li> <strong>None. ZERO!</strong></li>
</ul>
<p>How many applications explicitly state that they use the <strong>YUI</strong> library?</p>
<ul>
<li> <strong>89,</strong> view the list <a href="http://209.73.186.27/yui/poweredby/">here</a> and <a href="http://tech.groups.yahoo.com/group/ydn-javascript/links/YUI_Implementations_001149002597/">here</a>.<strong><br />
</strong></li>
</ul>
<p>How many of these applications are relatively high-traffic?</p>
<ul>
<li> <strong>Quite a few. </strong>A couple notable sites: Flickr, Slashdot, Linkedin, Paypal, O'Reilly, My Opera.</li>
</ul>
<p>How many applications explicitly state that they use the <strong>jQuery</strong> AJAX Library?</p>
<ul>
<li> <strong>516</strong> and growing, view the list <a href="http://docs.jquery.com/Sites_Using_jQuery">here</a>.<strong><br />
</strong></li>
</ul>
<p>How many of these applications are relatively high-traffic?</p>
<ul>
<li> <strong>Many.</strong> A couple notable sites: Twitter, Digg, Dell, Slashdot, BBC, Netflix, Technorati, New York Post.</li>
</ul>
<p>If no high-traffic application uses the ASP.NET AJAX Framework then why would you? Actions (or lack of action) often speak louder than words, and it appears that the ASP.NET AJAX Framework is not suitable for the real world.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/05/15/actions-speak-louder-than-words-goodbye-aspnet-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The ASP.NET AJAX Framework is for Dummies</title>
		<link>http://adam.kahtava.com/journal/2008/04/21/the-aspnet-ajax-framework-is-for-dummies/</link>
		<comments>http://adam.kahtava.com/journal/2008/04/21/the-aspnet-ajax-framework-is-for-dummies/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 21:09:35 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[Review]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,f3b618d7-4a7d-4892-88d4-3b85bcb01555.aspx</guid>
		<description><![CDATA[The ASP.NET AJAX Framework is an embarrassing server-side centric approach to DHTML / AJAX web development. While most programming languages and frameworks come with both good and bad parts, the ASP.NET AJAX Framework is an example of a bad part - on the contrast the ASP.NET MVC Framework looks to be a good part. What's wrong with [...]]]></description>
			<content:encoded><![CDATA[<div style="padding: 0px 0px 5px 5px; float: right;"><a href="http://www.flickr.com/photos/chuckbiscuito/161971512/"><img style="border: 0px none ;" src="http://farm1.static.flickr.com/78/161971512_bc7776cc98_m.jpg" alt="" /></a></div>
<p>The <a href="http://www.asp.net/ajax/">ASP.NET AJAX Framework</a> is an embarrassing server-side centric approach to DHTML / AJAX web development. While most programming languages and frameworks come with both <em>good</em> and <em>bad</em> parts, the ASP.NET AJAX Framework is an example of a <em>bad part</em> - on the contrast the <a href="http://en.wikipedia.org/wiki/ASP.NET_MVC_Framework">ASP.NET MVC Framework</a> looks to be a <em>good part</em>.</p>
<p><strong>What's wrong with the ASP.NET AJAX Framework?</strong></p>
<p><strong>1 .NET Developers are DUMMIES!<br />
</strong>The ASP.NET AJAX Framework appears to have been designed under the assumption that <strong>.NET developers are dummies and can't learn or don't want to learn JavaScript</strong>. That .NET Developers would rather hobble along with their familiar languages, then to learn something new. I understand that <a href="http://weblogs.asp.net/jeff/archive/2008/03/26/the-asp-net-community-s-only-real-problem-is-education.aspx">the ASP.NET community's only real problem is education</a>, so let's ask: <a href="http://danhounshell.com/blogs/dan/archive/2008/03/24/what-is-wrong-with-the-asp-net-community.aspx">What is wrong with the ASP.NET Community?</a> Then educate ourselves rather than becoming the .NET Developer statuesque. It's patronizing to use a framework that assumes learning a new language is beyond our capabilities. Many of these other programming languages are more expressive than statically typed languages like most of the .NET languages. </p>
<p><strong>2. The <em>"don't write a line of JavaScript"</em> abstraction leaks like a sieve</strong><br />
The Framework is intended to shelter .NET Developers from the JavaScript language. Which, like driving a car across North America without knowing how to pump gas, stops you dead. Either you depend on someone to pump your gas - depend on a 3rd party (vendors or the ASP.NET AJAX Control Toolkit) and their many authors to write your JavaScript - or you stop moving. As Web Developers, sooner or later learning how to pump your own JavaScript becomes a mandatory skill.</p>
<p><strong>3. Client-side programming from the Server-side is a absurd</strong><br />
The AJAX Framework does back flips to translate server-side code into JavaScript, and then requires that you write JavaScript anyway. Save yourself the pain, learn JavaScript. One day <a href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html">The Law of Leaky Abstractions</a> comes into play, the gas station attendant fills your gas tank with diesel - the AJAX Control Toolkit blows requires debugging and you have to learn JavaScript anyways.</p>
<p><strong>4. Bloated, poor performance, bad user and developer experience</strong><br />
The AJAX Framework extends many of the native JavaScript objects as it attempts to turn JavaScript into a <a href="http://en.wikipedia.org/wiki/Static_type#Static_typing">staticly typed</a> programming language, and tries to hook into the ASP.NET life cycle, but all these features are unneeded as they are <span style="text-decoration: underline;">ALL</span> already achievable through the native JavaScript language - <em>if it walks like a duck and quacks like a duck, then... err... could someone remind me why we need typed languages in a web browser?</em> Anyhow; all these object extensions, enhancements, and upgrades, contribute to more scripts that need to be downloaded and increases the number of scripts running in your browser. Then there's partial-page rendering and Update Panels which do full page post backs under the guise of AJAX. BAD! Client-side scripting is supposed to enhance the user experience not make it worse. Other AJAX Frameworks are built with performance as their number one goal, but in the ASP.NET AJAX Framework adding more widgets to JavaScript seemed to be the first priority, and performance an after thought.</p>
<p><strong>5. Working against the grain is a waste of time</strong><br />
The AJAX Framework works against the grain, it would be nice if it embraced the JavaScript language. Very few of the concepts and metaphors used in the ASP.NET AJAX Framework transcend AJAX techniques or frameworks - your time is probably better spent learning how JavaScript works or how the other <a href="http://en.wikipedia.org/wiki/Ajax_framework">AJAX frameworks</a> work.</p>
<p><strong>6. Disconnected from the ASP.NET MVC Framework</strong><br />
The ASP.NET MVC Framework throws the ASP.NET life cycle away leaving more dead weight ASP.NET AJAX Framework script and rendering many of the AJAX Framework techniques moot.</p>
<p><strong>7. The </strong><strong>ASP.NET AJAX Framework</strong><strong> almost over looks the 'J' in AJAX - 'J' stands for JavaScript (that's <span style="text-decoration: underline;">GOOD</span></strong>)<br />
JavaScript is the glue of the web, even the ASP.NET Framework depends heavily on JavaScript, it is not something to shy away from.</p>
<p><strong>8. Aside from local intranet sites, no one really uses the ASP.NET AJAX Framework.</strong><br />
The AJAX Framework isn't widely used. The ASP.NET AJAX site showcases <a href="http://www.asp.net/ajax/showcase/">25 sites</a> using ASP.NET AJAX. None of these applications appear to be high-traffic or moderately high-traffic applications. On the other hand, the YUI site showcases <a href="http://209.73.186.27/yui/poweredby/">89 sites</a>, out of these sites, 6 sites (flickr, Slashdot, Linkedin, Paypal, O'Reilly, My Opera) could be considered high-traffic. Other AJAX libraries like jQuery, and Dojo compare similarly. Your time might be better spent learning one of the other <a href="http://en.wikipedia.org/wiki/Ajax_framework">AJAX frameworks</a>.</p>
<p>If we (as .NET Developers) are going to claim we know AJAX, then let's focus on the core of AJAX (JavaScript) and stop obscuring it in poor frameworks. Frankly the ASP.NET AJAX Framework is embarrassing, <strong>the web development community is laughing at the ASP.NET AJAX Framework and the Developers touting it.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/04/21/the-aspnet-ajax-framework-is-for-dummies/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Book Reviewed: ASP.NET AJAX in Action by Alessandro Gallo, David Barkol, Rama Vavilala</title>
		<link>http://adam.kahtava.com/journal/2008/04/20/book-reviewed-aspnet-ajax-in-action-by-alessandro-gallo-david-barkol-rama-vavilala/</link>
		<comments>http://adam.kahtava.com/journal/2008/04/20/book-reviewed-aspnet-ajax-in-action-by-alessandro-gallo-david-barkol-rama-vavilala/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 22:44:34 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET AJAX]]></category>
		<category><![CDATA[Book]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Review]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,49f1ae76-9a81-4559-9c19-768f088f304d.aspx</guid>
		<description><![CDATA[The authors of ASP.NET AJAX in Action did an OK (Average) job at presenting the ASP.NET AJAX Framework. However; this book lacked objectivity and suffered from hype. The authors didn&#39;t seem to have proficient experience with the JavaScript language, or enough experience with other AJAX Frameworks / Libraries, or sufficient experience using the ASP.NET AJAX [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/gp/product/1933988142?ie=UTF8&amp;tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1933988142"><img src="http://ecx.images-amazon.com/images/I/51V41qLtOWL._SL500_BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_.jpg" style="border: 0px none ; float: right;"></a>The authors of <a href="http://www.amazon.com/gp/product/1933988142?ie=UTF8&amp;tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1933988142">ASP.NET AJAX in Action</a> did an <i>OK</i> (Average) job at presenting the ASP.NET AJAX Framework. However; this book lacked objectivity and suffered from hype. The authors didn&#39;t seem to have proficient experience with the JavaScript language, or enough experience with <u>other</u> AJAX Frameworks / Libraries, or sufficient experience using the ASP.NET AJAX Framework in real world projects. This book sadly felt like most technical books - average.</p>
<p> Comments like <i>"we recommend that..."</i>, <i>"because it makes no sense..."</i>, <i>"you must rely on a special method..."</i>, <i>"you must understand X,Y,Z to run complex client-side code without writing a single line of JavaScript"</i> were discouraging. Many of the <i>"whys"</i> were left answered and the technical inner workings of the framework often trivialized. Don&#39;t get me wrong, writing a book is incredibly time consuming, but if you&#39;re an author, presenter or the like, and you don&#39;t fully understand something then admit it. Do some research, provide some links, or move on. Consistently making comments like these bring the integrity of the whole text into question.</p>
<p> The ASP.NET AJAX Framework itself is technically flawed, bloated, and almost entirely impractical. I was disappointed with the server-centric approach that both the book and ASP.NET AJAX Framework takes. I was disappointed that the book continually pushed JavaScript under the carpet as magic and <b>at the end of the book I was pleased to see the promise of making <i>"the JavaScript code disappear"</i> </b><b>never </b><b>was&nbsp; fulfilled. </b>JavaScript is the very most important part of AJAX, without the <i>&#39;J&#39;</i> in AJAX, we&#39;re left with nothing - just <i>&#39;Asynchronous&#39;</i>, <i>&#39;And&#39;</i>, heaps of more ugly <i>&#39;XML&#39;</i>.</p>
<p> When reading this book, take the contents and the ASP.NET AJAX Framework with a grain of salt, if you&#39;re really serious about learning AJAX then read <a href="http://www.amazon.com/gp/product/0596101996?ie=UTF8&amp;tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596101996">JavaScript: The Definitive Guide by David Flanagan</a>.  </p>
<p> <i>I typically only contribute positive reviews, but I don&#39;t agree with the majority of reviews found on Amazon and hope this review provides some objectivity. I commend the authors on their hard work, I&#39;m probably being too harsh with this review - I know it&#39;s tough to write a book, and imagine they made many sacrifices as they worked towards tight deadlines.</i> </p>
<p> View my review on <a href="http://www.amazon.com/gp/cdp/member-reviews/A2JM0EQJELFL69/ref=cm_pdp_reviews_see_all?ie=UTF8&amp;sort_by=MostRecentReview">Amazon</a>.<br /> </p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/04/20/book-reviewed-aspnet-ajax-in-action-by-alessandro-gallo-david-barkol-rama-vavilala/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The ASP.NET AJAX Learning Curve</title>
		<link>http://adam.kahtava.com/journal/2008/04/09/the-aspnet-ajax-learning-curve/</link>
		<comments>http://adam.kahtava.com/journal/2008/04/09/the-aspnet-ajax-learning-curve/#comments</comments>
		<pubDate>Wed, 09 Apr 2008 14:36:06 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET AJAX]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,a8f6b8fe-dbc5-4963-a735-e92ad3b18d8b.aspx</guid>
		<description><![CDATA[The ASP.NET AJAX framework comes with a lot of baggage err... I mean... a huge learning curve when compared to other AJAX Frameworks like JQuery, YUI, Dojo, Prototype / Scriptaculous. Here&#39;s a running list of the technologies, and concepts you&#39;ll encounter when digging into ASP.NET AJAX: ASP.NET The Page Life Cycle The Control Life Cycle [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://en.wikipedia.org/wiki/ASP.NET_AJAX">ASP.NET AJAX</a> framework comes with a lot of baggage err... I mean... a huge learning curve when compared to other <a href="http://en.wikipedia.org/wiki/Ajax_framework">AJAX Frameworks</a> like <a href="http://jquery.com/">JQuery</a>, <a href="http://developer.yahoo.com/yui/">YUI</a>, <a href="http://dojotoolkit.org/">Dojo</a>, <a href="http://www.prototypejs.org/">Prototype</a> / <a href="http://script.aculo.us/">Scriptaculous</a>.</p>
<p> Here&#39;s a running list of the technologies, and concepts you&#39;ll encounter when digging into ASP.NET AJAX:<br /> 
<ul>
<li> ASP.NET<img src="http://adam.kahtava.com/journal/images/blog/ajax_logo.png" style="float: right;"> </li>
<ul>
<li> The Page Life Cycle</li>
<li> The Control Life Cycle</li>
<li> Web Controls</li>
<li> User Controls</li>
<li> View State</li>
<li> Session State</li>
<li> Events </li>
</ul>
<li> .NET / Classical Language </li>
<ul>
<li> Interfaces</li>
<li> Inheritance</li>
<li> Delegates</li>
<li> Multicast Delegates</li>
<li> Assemblies</li>
<li> Properties (Get / Set)</li>
<li> Constructors</li>
</ul>
</ul>
<p> In addition to these, you also have the technologies universal to all JavaScript libraries:<br /> 
<ul>
<li> JavaScript:</li>
<ul>
<li> Closures</li>
<li> Object Literals</li>
<li> JSON</li>
<li> Events</li>
<li> DOM Manipulation</li>
<li> Prototypical Inheritance</li>
<li> Constructors</li>
<li> XMLHttpRequest </li>
</ul>
<li> Cascading Style Sheets (CSS):</li>
<li> Web Services</li>
</ul>
<p> The <a href="http://en.wikipedia.org/wiki/ASP.NET_AJAX">ASP.NET AJAX</a> Framework is more complex than other <a href="http://en.wikipedia.org/wiki/Ajax_framework">AJAX frameworks</a>, I&#39;m continually lost in it&#39;s ambiguity as it attempts to skirt around the JavaScript language - I think this learning curve (and all it&#39;s confusion) is precisely why <a href="http://en.wikipedia.org/wiki/Silverlight">Silverlight</a> has so much potential.  </p>
<p> I&#39;m still diving into the low-level details, but my first impressions of the ASP.NET AJAX Framework are:  <br /> 
<ul>
<li> Obscure, ambiguous, no clear vision - it offers multiple (resource intensive) ways to avoid writing JavaScript, but then requires that you write JavaScript anyways </li>
<li> Too server centric</li>
<li> Too heavy weight (I&#39;m not appreciating how they&#39;re trying to turning JavaScript into a Java, C#, .NET clone, the overhead within the browser for these conversions seems like a huge performance bottleneck)</li>
<li> Has the potential for poor performance  </li>
</ul>
<p> Most of the <u>other</u> AJAX libraries have been written with performance, browser responsiveness, and User Experience as their number one priorities - I&#39;m still not sure about ASP.NET AJAX.  </p>
<p> How many ways can we try to avoid writing JavaScript? If an AJAX library doesn&#39;t enhance the User Experience then why use it? Regardless, I&#39;m still digging deeper.<br /> </p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/04/09/the-aspnet-ajax-learning-curve/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Book Reviewed: JavaScript: The Definitive Guide by David Flanagan</title>
		<link>http://adam.kahtava.com/journal/2008/03/26/book-reviewed-javascript-the-definitive-guide-by-david-flanagan/</link>
		<comments>http://adam.kahtava.com/journal/2008/03/26/book-reviewed-javascript-the-definitive-guide-by-david-flanagan/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 14:49:27 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Book]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[Review]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,d293d1fa-0815-4cf5-9e66-494cdddc8e00.aspx</guid>
		<description><![CDATA[JavaScript: The Definitive Guide by David Flanagan is a great book! When I began reading this book I was convinced that (like many technical books) the first couple chapters would contain the important stuff and the content would slowly digress into page filler, fluff, and the book would become just another monitor stand. But not [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/gp/product/0596101996?ie=UTF8&amp;tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596101996"><img style="float: right;" src="http://ecx.images-amazon.com/images/I/51OY5KP5ydL._AA240_.jpg" alt="" /></a> <a href="http://www.amazon.com/gp/product/0596101996?ie=UTF8&amp;tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596101996"> JavaScript: The Definitive Guide by David Flanagan</a> is a great book! When I began reading this book I was convinced that (like many technical books) the first couple chapters would contain the important stuff and the content would slowly digress into page filler, fluff, and the book would become just another <a href="http://adam.kahtava.com/journal/2008/03/08/something-about-the-cobblers-children-having-no-shoes/">monitor stand</a>. But not this book! After finishing the formal chapters I started reading the references - YES, this book is so good I'm reading the references! Flanagan has raised the bar for all JavaScript books - this book is in its 5th edition, and has been reviewed by a couple web Gurus (<a href="http://www.crockford.com/">Douglas Crockford</a>, <a href="http://www.quirksmode.org/">Peter-Paul Koch</a>).</p>
<p>JavaScript is the <a href="http://en.wikipedia.org/wiki/Assembly_language">assembly language</a> of the internet - most of the current-generation web frameworks make heavy use of JavaScript, CSS, and AJAX. If you really want to understand how ASP.NET or Ruby on Rails really works, how AJAX works, how JavaScript libraries work. If itching to push the web browser envelope, to really innovate, then this book is a required read. In addition if you're coming from a staticly type background like Java or .NET, then JavaScript (a functional programming language) will open your eyes to a different programming model. <em><strong>Once you grock the fundamentals of JavaScript you'll never be able to look at classical languages (Java, C++, .NET, ...) with a straight face again.</strong></em> I highly recommend this book to any web developer from any web framework camp.</p>
<p>View <a href="http://www.amazon.com/gp/cdp/member-reviews/A2JM0EQJELFL69/">my review</a> on Amazon.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/03/26/book-reviewed-javascript-the-definitive-guide-by-david-flanagan/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Namespacing Your JavaScript</title>
		<link>http://adam.kahtava.com/journal/2008/03/17/namespacing-your-javascript/</link>
		<comments>http://adam.kahtava.com/journal/2008/03/17/namespacing-your-javascript/#comments</comments>
		<pubDate>Mon, 17 Mar 2008 15:23:37 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,d9202683-be0a-49d2-8954-05f85a29c0cf.aspx</guid>
		<description><![CDATA[Namespacing your JavaScript is critical for sites that make heavy use of JavaScript, or sites that use any the JavaScript AJAX libraries (Scriptaculous, ASP.NET AJAX Client Side, YUI, JQuery, ...). It's also a great defensive programming technique - this is another post on JavaScript techniques that I've found useful. Why Namespaces? Well... :) When a [...]]]></description>
			<content:encoded><![CDATA[<p>Namespacing your JavaScript is critical for sites that make heavy use of JavaScript, or sites that use any the JavaScript AJAX libraries (<a href="http://script.aculo.us/">Scriptaculous</a>, <a href="http://asp.net/ajax/documentation/live/ClientReference/">ASP.NET AJAX Client Side</a>, <a href="http://developer.yahoo.com/yui/">YUI</a>, <a href="http://jquery.com/">JQuery</a>, ...). It's also a great defensive programming technique - this is another post on JavaScript techniques that I've found useful.</p>
<p><strong>Why Namespaces?</strong> Well... :) When a browser loads a document, it loads ALL the JavaScript into the browser. Objects that are not enclosed within a Namespace are Global, and <a href="http://www.nczonline.net/blog/2006/6/5/global_variables_are_evil">Global Variables are Evil</a> because they run the risk of interfering / overriding / clobbering previously defined objects (variables, functions, etc...). The JavaScript language, in its current form does not have native support for Namespacing . So, as pragmatic developers we realize the need to <em>"Program Into [Our] Language, Not In It" </em><em>- <a href="http://www.amazon.com/gp/product/0735619670?tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0735619670">Steve McConnell, Code Complete 2nd Ed, Chapter 34.4</a></em>. In the JavaScript language we use Objects to achieve Namespacing - we'll cover this closer to the end of this post.</p>
<blockquote><p>Don't limit your programming thinking only to the concepts that are supported automatically by your language. The best programmers think of what they want to do, and then they assess how to accomplish their objectives ... - Steve McConnell: <a href="http://www.amazon.com/gp/product/0735619670?tag=adamkahtavaap-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0735619670">Code Complete 2nd Ed, Chapter 34.4</a> </p></blockquote>
<p><strong>An example of when Namespaces could be used: </strong>Let's say, we're working on a team of 3 developers, each developer is working on a different widget / component for the same page. So inside our HTML / XHTML document we define and load three different JavaScript files and inside these files we have something like:<br />
In someObscureWidgetJavaScriptFile1.js have:</p>
<pre style="white-space: normal;"><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  helloWorld <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">function</span>(){ alert('hello world'); };</span></pre>
<p>In someOtherObscureJavaScriptFile2.js we have:</p>
<pre style="white-space: normal;"><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  helloWorld <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> 'hello world';</span></pre>
<p>In someOtherObscureJavaScriptFile3.js we have:</p>
<pre style="white-space: normal;"><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">  helloWorld <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> { hello: 'hello', world: 'world' };</span></pre>
<p>All these JavaScript files get loaded into the browsers global calling object (window), and each assignment of <span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">helloWorld </span>interferes with the previous. When we attempt to reference <span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">helloWorld</span> we'll be depending on the order in which the JavaScript files were loaded - if the first file was loaded we'll be able to display the alert, if the later file was loaded first we'll be able to reference a string, and so on.</p>
<p><strong>Back to the topic at hand, How do I create a Namespace in JavaScript.</strong><br />
<em>Note: this approach to Namespacing was recommended and referenced in <a href="http://www.amazon.com/dp/0596101996?tag=adamkahtavaap-20&amp;camp=15041&amp;creative=373501&amp;link_code=as3">JavaScript: The Definitive Guide by David Flanagan</a>, other methods of Namespacing can be found on the web (<a href="http://www.dustindiaz.com/namespace-your-javascript/">Namespacing your JavaScript</a> by Dustin Diaze outlines an alternate approach). For me, the following seems more intuitive, and is recommended in <a href="http://www.amazon.com/dp/0596101996?tag=adamkahtavaap-20&amp;camp=15041&amp;creative=373501&amp;link_code=as3">Flanagan's</a> book - probably, the best JavaScript book written to date.</em></p>
<p><strong>Ceating a Namespace in JavaScript:</strong></p>
<pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">// Create the namespace object. Error checking omitted here for brevity.</span> <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">
 var</span> myNameSpace;
 <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">if</span> (!myNameSpace) myNameSpace <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> {};
 myNameSpace.myPseudoClass <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> {}; <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
 //JavaScript doesn't support classes,
 // so let's avoid confusing people and call this a Pseudo Class</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"> 

 // Don't stick anything into the namespace directly.</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
 // Instead we define and invoke an anonymous function to create a closure</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
 // that serves as our private namespace. This function will export its</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
 // public symbols from the closure into the myNameSpace object</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
 // Note that we use an unnamed function so we don't create any other</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
 // global symbols.</span>
 (<span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">function</span>() { <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">// Begin anonymous function definition</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;"> 

   // Nested functions create symbols within the closure</span> <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">
 </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">function</span> displayMyMessage() { alert(myMessage); }

 </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">// Local variable are symbols within the closure.</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
 </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">// This one will remain private within the closure</span> <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">
 </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">var</span> myMessage <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> 'Hello World';

 </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">// This function can refer to the variable with a simple name</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
 </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">// instead of having to qualify it with a namespace</span> <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">
 </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">function</span> getMyMessage() { <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">return</span> myMessage; }

 </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">// Now that we've defined the properties we want in our private</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
 </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">// closure, we can export the public ones to the public namespace</span> <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">
 </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">// and leave the private ones hidden here.</span> <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">
 </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">var</span> ns <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> myNameSpace.myPseudoClass;
 </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> ns.displayMyMessage <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> displayMyMessage;
 </span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"><span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">  </span></span><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> ns.getMyMessage <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> getMyMessage;

 })(); <span style="color: Green; background-color: transparent; font-family: Courier New; font-size: 11px;">// End anonymous function definition and invoke it</span></span></pre>
<p>Then outside our namespace we can invoke our methods like this: <span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">myNameSpace.myPseudoClass.displayMyMessage();</span></p>
<p>Read Chapter 10, Modules and Namespaces in <a href="http://www.amazon.com/dp/0596101996?tag=adamkahtavaap-20&amp;camp=15041&amp;creative=373501&amp;link_code=as3">JavaScript: The Definitive Guide</a> for a deeper dive into Namespaces and Modules in JavaScript!</p>
<p>If you're still not convinced you need Namespaces and are interested in reading more about the issues surounding Global Data, then you may be interested in reading Chapter 13.3 (Global Data) in Code Complete.</p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/03/17/namespacing-your-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How Well Do You Know JavaScript?</title>
		<link>http://adam.kahtava.com/journal/2008/01/13/how-well-do-you-know-javascript/</link>
		<comments>http://adam.kahtava.com/journal/2008/01/13/how-well-do-you-know-javascript/#comments</comments>
		<pubDate>Sun, 13 Jan 2008 19:09:19 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,b8b02f0d-1ed8-445a-a698-28458ef98622.aspx</guid>
		<description><![CDATA[JavaScript is probably the world's most popular and misunderstood programming languages and for good reason. When a developer claims to know JavaScript this generally equates to one or all of the following: "I know what JavaScript is, I can learn JavaScript in 30 minutes" "JavaScript is for kids, it's a toy language, it's easy" "I [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; padding-left: 5px;"><a href="http://www.flickr.com/photos/matthiasorfield/368716706/"><img src="http://farm1.static.flickr.com/98/368716706_d8c474a12c_m.jpg" alt="" /></a></div>
<p>JavaScript is probably the world's most popular and misunderstood programming languages and for good reason.<br />
When a developer claims to <em>know</em> JavaScript this generally equates to one or all of the following:</p>
<ul>
<li> <em>"I know what JavaScript is, </em><em>I can learn JavaScript in 30 minutes</em><em>"</em></li>
<li> <em>"JavaScript is for kids, it's a toy language, it's easy"</em></li>
<li> <em>"I just copy and paste my JavaScript snippets / scripts from the internet"</em></li>
<li> <em>"JavaScript is just another programming language like C++, C#, VB.NET, or Java"</em></li>
</ul>
<p>If thoughts similar to these have crossed your mind when sizing up your JavaScript knowledge, then you probably don't know JavaScript.</p>
<p>I would argue that if you've never programmed in a <a href="http://en.wikipedia.org/wiki/Functional_programming">functional programming language</a> (like: <a href="http://en.wikipedia.org/wiki/LISP">Lisp</a>, <a href="http://en.wikipedia.org/wiki/Scheme">Scheme</a>, <a href="http://en.wikipedia.org/wiki/F_Sharp_programming_language">F#</a>), never read a <a href="http://adam.kahtava.com/journal/2008/04/16/how-to-choose-a-good-technical-book/"><strong><span style="text-decoration: underline;"><em>GOOD</em></span></strong></a> book on JavaScript, or never watched a video on JavaScript, then you probably don't understand JavaScript at all. JavaScript is starkly different than any other mainstream programming language.</p>
<p>When it comes to JavaScript, if you don't understand the fundamentals then you're only punishing yourself.</p>
<p><strong>Here are some things every JavaScript developer should probably understand:</strong></p>
<ul>
<li> <a href="http://en.wikipedia.org/wiki/JavaScript">JavaScript</a>, <a href="http://en.wikipedia.org/wiki/JavaScript#History_and_naming">Mocha</a>, <a href="http://en.wikipedia.org/wiki/Livescript">LiveScript</a>, <a href="http://en.wikipedia.org/wiki/JScript">JScript</a>, and <a href="http://en.wikipedia.org/wiki/ECMAScript">ECMAScript</a> are all essentially the same.</li>
<li> JavaScript is a prototypically inherited (<a href="http://en.wikipedia.org/wiki/Prototype-based_programming">prototype-based programming</a>) language which is very different than the classically inherited (<a href="http://en.wikipedia.org/wiki/Class-based_programming">class-based programming</a>) languages like C++, Java, and most of the .NET languages - you know the difference between a prototype-based programming and class-based programming language.</li>
<li> JavaScript is a loosely typed language - you know the difference between <a href="http://en.wikipedia.org/wiki/Strongly-typed_programming_language">strongly-typed programming</a> languages and <a href="http://en.wikipedia.org/wiki/Weak_typing">weak-typed</a> or loosely typed languages.</li>
<li> JavaScript is a functional <a href="http://en.wikipedia.org/wiki/Lambda_calculus">lambda</a> language - you understand lambdas and that functions in JavaScript can be lambdas.</li>
<li> JavaScript functions can be defined inside functions, inside functions, inside functions, and so on - you can demonstrate this.</li>
<li> JavaScript uses function scope, has no curly brace <em>'{}'</em> block scope - you understand that this is common attribute of most functional programming languages.</li>
<li> JavaScript has no private, public, protected assessors, no classes, no enums, no structs - you understand that all these language features can be achieved through objects and function closures.</li>
<li> JavaScript is classless, but instead it uses objects as general containers.</li>
<li> JavaScript makes use of garbage collection.</li>
<li> JavaScript uses truthy and falsy values - you understand which values are truth and falsy.</li>
<li> JavaScript makes use of the <em>'nan'</em> (not a number) and <em>'undefined'</em> values - you understand the difference between these values.</li>
<li> JavaScript has pretty good debuggers - you understand how to debug JavaScript from both IE (<a href="http://www.jonathanboutelle.com/mt/archives/2006/01/howto_debug_jav.html">link</a>) and Firefox (<a href="http://www.getfirebug.com/js.html">link</a>).</li>
<li> You appreciate recursion, and understand that recursion is a useful technique in JavaScript.</li>
<li> You understand that JavaScript Namespaces should be used - you understand the importance of namespaces, and know how to create one (<a href="http://adam.kahtava.com/journal/2008/03/17/namespacing-your-javascript/">Namespacing Your JavaScript</a>).</li>
<li> You know how to avoid the <a href="http://www.dynamicsitesolutions.com/javascript/mistakes/">JavaScript pseudo-protocol</a> (<em>&lt;a href="Javascript:alert('hello');"</em>), and appreciate avoiding it.</li>
<li> You know how to avoid embedding DOM Level 0 JavaScript events (<em>&lt;a onclick=''alert('hello');"</em>) in your mark-up / document structure, and appreciate this technique.</li>
<li> You know that JavaScript can make use of two different event models (<a href="http://www.quirksmode.org/js/events_order.html">event capturing and bubbling</a>), but we should only ever make use of bubbling.</li>
<li> You understand what <a href="http://en.wikipedia.org/wiki/JSON">JSON</a> is and how it's used.</li>
<li> You know how to keep you JavaScript, CSS, document structure separate, and appreciate non obtrusive JavaScript.</li>
</ul>
<p>If any of these points seem foreign, then it may be time to learn JavaScript. With all the hype and buzz around Web 2.0 and AJAX it could be a great way to augment your career while broadening your programming language vocabulary.</p>
<p><strong>Great resources for learning more about JavaScript:</strong></p>
<p>Videos:</p>
<ul>
<li> <em>The JavaScript Programming Language</em>: <a href="http://video.yahoo.com/video/play?vid=111593">Part 1</a>, <a href="http://video.yahoo.com/video/play?vid=111594">Part 2</a>, <a href="http://video.yahoo.com/video/play?vid=111595">Part 3</a>, <a href="http://video.yahoo.com/video/play?vid=111596">Part 4</a></li>
<li> <em>An Inconvenient API: The Theory of the DOM</em>: <a href="http://video.yahoo.com/video/play?vid=111582">Part 1</a>, <a href="http://video.yahoo.com/video/play?vid=111583">Part 2</a>, <a href="http://video.yahoo.com/video/play?vid=111584">Part 3</a></li>
<li> <em>Advanced JavaScript:</em> <a href="http://video.yahoo.com/video/play?vid=111585">Part 1</a>, <a href="http://video.yahoo.com/video/play?vid=111586">Part 2</a>, <a href="http://video.yahoo.com/video/play?vid=111587">Part 3</a></li>
<li> <em>JavaScript: The Good Stuff</em>: <a href="http://video.yahoo.com/video/play?vid=630959">Link</a></li>
<li> All these videos are available on the <a href="http://developer.yahoo.com/yui/theater/">YUI Theater</a> - all the videos are great, watch them all!</li>
</ul>
<p>Books:</p>
<ul>
<li> <a href="http://www.amazon.com/JavaScript-Definitive-Guide-David-Flanagan/dp/1565923928/?tag=adamkahtavaap-20&amp;creativeASIN=1565923928">JavaScript: The Definitive Guide by David Flanagan</a></li>
<li> <a href="http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742?tag=adamkahtavaap-20&amp;creativeASIN=0596517742">JavaScript: The Good Parts by Douglas Crockford</a></li>
</ul>
<p>Links:</p>
<ul>
<li> <a href="http://developer.mozilla.org/en/docs/A_re-introduction_to_JavaScript">MDC: A re-introduction to JavaScript</a></li>
<li> <a href="http://javascript.crockford.com/code.html">Code Conventions for the JavaScript Programming Language</a></li>
<li> <a href="http://javascript.crockford.com/javascript.html">JavaScript: The World's Most Misunderstood Programming Language</a></li>
<li> <a href="http://www.odetocode.com/Articles/473.aspx">What ASP.NET Developers Should Know About JavaScript</a></li>
<li> <a href="http://thinkingandmaking.com/entries/63">Best Practices: Implementing JavaScript for rich internet applications</a></li>
<li> <a href="http://icant.co.uk/articles/seven-rules-of-unobtrusive-javascript/">The seven rules of Unobtrusive JavaScript</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2008/01/13/how-well-do-you-know-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Resolving Parser Errors: Unknown server tag &#8216;atlas:ScriptManager&#8217; in ATLAS (AJAX)</title>
		<link>http://adam.kahtava.com/journal/2006/09/17/resolving-parser-errors-unknown-server-tag-atlasscriptmanager-in-atlas-ajax/</link>
		<comments>http://adam.kahtava.com/journal/2006/09/17/resolving-parser-errors-unknown-server-tag-atlasscriptmanager-in-atlas-ajax/#comments</comments>
		<pubDate>Sun, 17 Sep 2006 14:13:44 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET AJAX]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,b74145d5-8787-424a-b3ed-873e8fedadfc.aspx</guid>
		<description><![CDATA[I encountered a number of Parse Error Messages while implementing the Accordion control from ATLAS. The error messages read: Parser Error Message: Unknown server tag 'atlas:ScriptManager'.  Source Error:  &#60;atlas:ScriptManager id="ScriptManager" runat="server" /&#62; This message occured for a number of different reasons, this brief checklist should resolve your parse errors. 1) Ensure that the following assemblies [...]]]></description>
			<content:encoded><![CDATA[<p>I encountered a number of Parse Error Messages while implementing the <a href="http://atlas.asp.net/atlastoolkit/Accordion/Accordion.aspx">Accordion control</a> from <a href="http://atlas.asp.net/">ATLAS</a>.</p>
<p>The error messages read:<br />
<strong>Parser Error Message: Unknown server tag 'atlas:ScriptManager'. </p>
<p></strong><strong> Source Error:  &lt;atlas:ScriptManager id="ScriptManager" runat="server" /&gt;</strong></p>
<p>This message occured for a number of different reasons, this brief checklist should resolve your parse errors.</p>
<p><strong>1)</strong> Ensure that the following assemblies are in your bin directory:<br />
<span style="font-family: 'Courier New'; font-size: x-small;">AtlasControlToolkit.dll<br />
Microsoft.AtlasControlExtender.dll<br />
Microsoft.Web.Atlas.dll</span></p>
<p><strong>2)</strong> Ensure that the following has been added to your web.config file</p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: maroon;">pages</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&gt;<br />
<span>  </span>&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: maroon;">controls</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&gt;<br />
<span>    </span>&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: maroon;">add</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;"> </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: red;">namespace</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">"<span style="color: blue;">Microsoft.Web.UI</span>"<span style="color: blue;"><br />
</span><span style="color: red;">         assembly</span><span style="color: blue;">=</span>"<span style="color: blue;">Microsoft.Web.Atlas</span>"<span style="color: blue;"> </span><span style="color: red;">tagPrefix</span><span style="color: blue;">=</span>"<span style="color: blue;">atlas</span>"<span>/&gt;<br />
    </span>&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: maroon;">add</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;"> </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: red;">namespace</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">"<span style="color: blue;">Microsoft.Web.UI.Controls</span>"<span style="color: blue;"><br />
</span><span style="color: red;">         assembly</span><span style="color: blue;">=</span>"<span style="color: blue;">Microsoft.Web.Atlas</span>"<span style="color: blue;"> </span><span style="color: red;">tagPrefix</span><span style="color: blue;">=</span>"<span style="color: blue;">atlas</span>"<span>/&gt;<br />
    </span>&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: maroon;">add</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;"> </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: red;">namespace</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">"<span style="color: blue;">AtlasControlToolkit</span>"<span style="color: blue;"><br />
</span><span style="color: red;">         assembly</span><span style="color: blue;">=</span>"<span style="color: blue;">AtlasControlToolkit</span>"<span style="color: blue;"> </span><span style="color: red;">tagPrefix</span><span style="color: blue;">=</span>"<span style="color: blue;">atlasToolkit</span>"<span>/&gt;<br />
  </span>&lt;/</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: maroon;">controls</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&gt;<br />
&lt;/</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: maroon;">pages</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&gt;</span></p>
<p>Related links:<br />
<a href="http://forums.asp.net/1/1347547/ShowThread.aspx">Data Binding in an AccordionPane in a Repeater</a><br />
<a href="http://forums.asp.net/thread/1324645.aspx">Atlas Control Toolkit: Unknown Server Tag</a></p>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2006/09/17/resolving-parser-errors-unknown-server-tag-atlasscriptmanager-in-atlas-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A great source for AJAX Frameworks and Tutorials: www.ajaxprojects.com</title>
		<link>http://adam.kahtava.com/journal/2006/07/18/a-great-source-for-ajax-frameworks-and-tutorials-wwwajaxprojectscom/</link>
		<comments>http://adam.kahtava.com/journal/2006/07/18/a-great-source-for-ajax-frameworks-and-tutorials-wwwajaxprojectscom/#comments</comments>
		<pubDate>Tue, 18 Jul 2006 23:40:06 +0000</pubDate>
		<dc:creator>Adam Kahtava</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[AJAX]]></category>

		<guid isPermaLink="false">http://adam.kahtava.com/journal/PermaLink,guid,fe8fbe93-2958-4054-b691-7bcfb49e3822.aspx</guid>
		<description><![CDATA[I came across a great AJAX portal site this morning. This site covers a variety (PHP, JAVA, .NET, Ruby, etc...) of AJAX Frameworks and Tutorials. Visit Ajax Projects: http://www.ajaxprojects.com/ Ajax, shorthand for Asynchronous JavaScript and XML, is a web development technique for creating interactive web applications. The intent is to make web pages feel more responsive [...]]]></description>
			<content:encoded><![CDATA[<p>I came across a great <a href="http://en.wikipedia.org/wiki/AJAX">AJAX</a> portal site this morning. This site covers a variety (PHP, JAVA, .NET, Ruby, etc...) of AJAX Frameworks and Tutorials. Visit Ajax Projects: <a href="http://www.ajaxprojects.com/">http://www.ajaxprojects.com/</a></p>
<blockquote><p><em>Ajax, shorthand for Asynchronous JavaScript and XML, is a web development technique for creating interactive web applications. The intent is to make web pages feel more responsive by exchanging small amounts of data with the server behind the scenes, so that the entire web page does not have to be reloaded each time the user makes a change. This is meant to increase the web page's interactivity, speed, and usability.</em> - <a href="http://en.wikipedia.org/wiki/AJAX">Wikipedia: AJAX</a></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://adam.kahtava.com/journal/2006/07/18/a-great-source-for-ajax-frameworks-and-tutorials-wwwajaxprojectscom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

