<?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>BorkWeb &#187; Conrad Damon</title>
	<atom:link href="http://borkweb.com/story/tag/conrad-damon/feed" rel="self" type="application/rss+xml" />
	<link>http://borkweb.com</link>
	<description>Some People Are Squirrel Handed.</description>
	<lastBuildDate>Tue, 17 Jan 2012 22:00:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>The Ajax Experience: Leveraging Ajax for Enterprise Application Development</title>
		<link>http://borkweb.com/story/the-ajax-experience-leveraging-ajax-for-enterprise-application-development</link>
		<comments>http://borkweb.com/story/the-ajax-experience-leveraging-ajax-for-enterprise-application-development#comments</comments>
		<pubDate>Mon, 30 Oct 2006 15:11:24 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[ajaxexperience]]></category>
		<category><![CDATA[Conrad Damon]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[zimbra]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/the-ajax-experience-leveraging-ajax-for-enterprise-application-development</guid>
		<description><![CDATA[[[innerindex]] Despite the fact that AJAX is making significant inroads within the Web 2.0 community, many enterprise applications still remain either traditional web or desktop applications. However, by effectively using AJAX, enterprises can develop compelling, innovative, and useful web based applications that increase employee productivity while retaining the manageability enjoyed by traditional web applications. This [...]]]></description>
			<content:encoded><![CDATA[<p>[[innerindex]]<br />
<blockquote>
Despite the fact that AJAX is making significant inroads within the Web 2.0 community, many enterprise applications still remain either traditional web or desktop applications. However, by effectively using AJAX, enterprises can develop compelling, innovative, and useful web based applications that increase employee productivity while retaining the manageability enjoyed by traditional web applications. This session will focus on the challenges of developing enterprise AJAX applications with an emphasis on overcoming the common hurdles and problems encountered along the way.</p>
<p>Presenter: Conrad Damon &#8211; <a href="http://zimbra.com">Zimbra</a>
</p></blockquote>
<p>Conrad&#8217;s discussion began with an re-iteration of what Web 2.0 is and how things have changed since Web 1.0.  Old news, but the re-iteration was brief. </p>
<h1 id="_choosing-an-ria-solu_1" >Choosing an RIA solution</h1>
<p>Next Conrad explained his team&#8217;s decision process on choosing Ajax as the solution for creating their <a href="http://en.wikipedia.org/wiki/Rich_Internet_application">Rich Internet Application</a>, Zimbra.</p>
<p><strong>Flash?</strong><br />
The Zimbra team turned this down early on as they didn&#8217;t want to be tied to a proprietary solution&#8230; A decision I can respect :)  I&#8217;m not too keen on the use of Flash as a front end for full-blown RIAs in most cases.</p>
<p><strong>Ajax Worries</strong><br />
There were some hesitations regarding the use of Ajax as a solution:</p>
<ul>
<li>Complexity &#8211; Lets face it, adding Ajax into the mix causes the applications complexity to increase.</li>
<li>Performance &#8211; there&#8217;s a lot going on with an Ajax app client-side that <em>can</em> cause client performance to degrade.  (mixed with the chattiness server-side)</li>
<li>Some cross-browser issues.</li>
</ul>
<p><strong>Ajax: The Chosen One</strong><br />
Overall, Zimbra&#8217;s team decided on Ajax as the pros outweighed the cons:</p>
<ul>
<li>Enhanced User Experience</li>
<li>Desktop application-like feel.</li>
<li>Deployment is trivial. &#8211; No installation&#8230;the application is accessible via the web.</li>
<li>The power of mashups is where its at.  Its all about SOA (<a href="http://en.wikipedia.org/wiki/Service-oriented_architecture">Service Oriented Architecture</a>).</li>
</ul>
<h1 id="_ajax-points_1" >Ajax Points</h1>
<p>Conrad noted a few <strong>key points regarding Ajax</strong>, however:</p>
<ul>
<li>Ajax is cheaper on the server/network</li>
<li>Ajax applications <em>are</em> more memory expensive client-side</li>
<li>Ajax applications are not a business model</li>
<li>Ajax applications are the means not an end</li>
</ul>
<h1 id="_ajax-tips_1" >Ajax Tips</h1>
<p>Based on the Zimbra team&#8217;s experience, Conrad gave some tips:</p>
<ul>
<li><strong>Use an Ajax Toolkit</strong> &#8211; They simplify things.  What you choose is up to you, but the time saved by toolkit use is well worth it.</li>
<li><strong>CSS is your friend</strong> &#8211; bend it to your will</li>
<li><strong>Use <a href="http://borkweb.com/story/the-case-for-json-what-is-it-and-why-use-it">JSON</a>, not XML</strong> &#8211; Zimbra has almost fully converted all passing of XML to JSON
<ul>
<li>JSON is easy</li>
<li>JSON is fast.  Eval&#8217;ing JSON is <em>faster</em> than parsing XML by a magnitude of 10!</li>
</ul>
</li>
<li><strong>Use Asynchronous XHR</strong> (XMLHttpRequest) calls</li>
<li><strong>Combine, Compress, and Cache</strong></li>
<li><strong>Automate Testing</strong> &#8211; Zimbra uses <a href="http://www.mercury.com/us/products/quality-center/functional-testing/quicktest-professional/">QuickTest Pro</a> from mercury to test the Zimbra client.</li>
<li><strong><a href="http://en.wikipedia.org/wiki/Object-oriented_programming">OO</a>, <a href="http://en.wikipedia.org/wiki/Model-view-controller">MVC</a></strong></li>
<li><strong>TLS</strong> (Transport Layer Security&#8230;SSL) &#8211; Make sure you use it!</li>
<li><strong>KISS</strong> (Keep it simple, stupid) &#8211; this applies to both code and the UI!</li>
<li><strong>No browser lock-in</strong> &#8211; don&#8217;t program for a specific browser&#8230;keep it open to at least the A-Grade browsers</li>
<li><strong>Test, test, test</strong></li>
</ul>
<h1 id="_browser-gotchas-tips_1" >Browser Gotchas &#038; Tips</h1>
<p>Next came some helpful browser-specific tips and gotchas:</p>
<ul>
<li>Firefox
<ul>
<li>  Missing Cursor &#8211; workarounds exist (surrounding the input with a div&#8230;yadda yadda)</li>
<li>  Event capture &#8211; effects DnD effects</li>
<li>  design mode &#8211; lets you turn the Browser into an editor&#8230;buggy</li>
<li>  xmlHttpRequest &#8211; bug that pained the CPU when making synchronous calls</li>
<li>  opacity (linux) &#8211; hangs browser (relationship between X11 and opacity)!!!!!!!!!!!!!!</li>
<li>  scrollbar bleed (mac) &#8211; scrollbar does not respect z-index</li>
</ul>
</li>
<li>  IE 6
<ul>
<li>  string concat with +&#8230; &#8211; SLOW, use Array joins instead</li>
<li>  image caching is poor &#8211; hard to convince to cache image in browser&#8230;workaround: have a hidden div and load the images there first</li>
<li>  JS engine can be slow</li>
<li>  Memory leaks &#8211; circular reference issue.  workaround: give things numeric ids and a lookup table</li>
<li>  XHR ActiveX object &#8211; some memory leaking issues</li>
<li>  DOM attribute access is slow</li>
</ul>
</li>
<li>  IE 7
<ul>
<li>  ActiveX opt-in</li>
<li>  CSS fixes</li>
<li>  Native XHR</li>
<li>  memory leaks appear to be fixed</li>
</ul>
</li>
<li>  Safari
<ul>
<li>  No design mode</li>
<li>  DOM API not fully implemented</li>
<li>  Debugging difficult (<a href="http://nosheep.net/story/secret-to-debugging-javascript-in-safari/">not entirely true</a>)</li>
</ul>
</li>
</ul>
<h1 id="_the-3-cs_1" >The 3 C&#8217;s</h1>
<p>By far the most useful section of Conrad&#8217;s presentation was on Zimbra&#8217;s 3 C&#8217;s; Combine, Compress, and Cache.</p>
<p><strong>Combine</strong><br />
Zimbra uses this technique to minimize the sheer amount of files downloaded by the client which speeds up load time!  Conrad suggests:</p>
<ul>
<li><strong>Concatenate your JS files and CSS files</strong> &#8211; Order matters (remember)!  Zimbra uses the &#8220;Jammer&#8221; ANT task to do this dirty work.</li>
<li><strong>Merge Images</strong> &#8211; Images are expensive!  If your application uses a large number of icons, try merging them into a single image and use background-positioning on elements for the display of icons.  For disabled icons, use opacity at 20-50% rather than creating a whole new icon.</li>
</ul>
<p><strong>Compress</strong><br />
Compression makes things smaller in size&#8230;smaller &#8220;things&#8221; are quicker to download!</p>
<ul>
<li>Strip comments and whitespace &#8211; use <a href="http://www.crockford.com/javascript/jsmin.html">JSMin</a> or <a href="http://alex.dojotoolkit.org/shrinksafe/">ShrinkSafe</a></li>
<li>GZIP your Javascript!  &#8211; All of the A-Grade browsers support gzipping which reduces file size!</li>
</ul>
<p><strong>Caching</strong><br />
Set proper headers for appropriate browser caching.  Avoid redundant downloads.  Period.</p>
<h1 id="_conclusion_1" >Conclusion</h1>
<p>I respect the Zimbra team and their decisions; their application is solid, functional, and quite sexy. All in all, this was a pretty solid presentation with a nice amount of data.  As I mentioned earlier, the 3C&#8217;s were the most valuable tid-bits of information for me&#8230;although there were a few browser gotchas that I wasn&#8217;t aware of.  </p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/the-ajax-experience-leveraging-ajax-for-enterprise-application-development/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Ajax Experience: Plan of Attack</title>
		<link>http://borkweb.com/story/the-ajax-experience-plan-of-attack</link>
		<comments>http://borkweb.com/story/the-ajax-experience-plan-of-attack#comments</comments>
		<pubDate>Fri, 20 Oct 2006 12:21:46 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Aaron Gustafson]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[ajaxian]]></category>
		<category><![CDATA[Alex Russell]]></category>
		<category><![CDATA[apache XAP]]></category>
		<category><![CDATA[bill scott]]></category>
		<category><![CDATA[Bob Buffone]]></category>
		<category><![CDATA[Chris Wilson]]></category>
		<category><![CDATA[Conrad Damon]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[dustin machi]]></category>
		<category><![CDATA[Dustin Whittle]]></category>
		<category><![CDATA[enterprise application]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[markup]]></category>
		<category><![CDATA[Matt Quinn]]></category>
		<category><![CDATA[Michael Mahemoff]]></category>
		<category><![CDATA[Molly Holzschlag]]></category>
		<category><![CDATA[Nate Koechley]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[RAD]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[the ajax experience]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[Vic Patterson]]></category>
		<category><![CDATA[William Morris]]></category>
		<category><![CDATA[XAP]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/the-ajax-experience-plan-of-attack</guid>
		<description><![CDATA[The Ajax Experience is next Monday (although I arrive Sunday afternoon) through Wednesday and I&#8217;ve prepared my plan of attack: Monday 10:00am-11:30am: Leveraging Ajax for Enterprise Application Development &#8211; Conrad Damon 12:30pm-1:15pm: Keynote: Towards a Service-Oriented Applications Stack &#8211; Matt Quinn 1:30pm-3:00pm: Simplify Ajax development with Apache XAP &#8211; Bob Buffone 3:30pm-5:00pm: Ruining the User [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://borkweb.com/story/the-ajax-experience">The Ajax Experience</a> is next Monday (although I arrive Sunday afternoon) through Wednesday and I&#8217;ve prepared my plan of attack:</p>
<h2 id="_monday_1" >Monday</h2>
<p><strong>10:00am-11:30am</strong>: Leveraging Ajax for Enterprise Application Development &#8211; Conrad Damon<br />
<strong>12:30pm-1:15pm</strong>: Keynote: Towards a Service-Oriented Applications Stack &#8211; Matt Quinn<br />
<strong>1:30pm-3:00pm</strong>: Simplify Ajax development with Apache XAP &#8211; Bob Buffone<br />
<strong>3:30pm-5:00pm</strong>: Ruining the User Experience &#8211; Aaron Gustafson<br />
<strong>5:15pm-6:45pm</strong>: Scriptaculous &#8211; Justin Gehtland<br />
<strong>8:00pm-9:30pm</strong>: Expert Panel Discussion</p>
<h2 id="_tuesday_1" >Tuesday</h2>
<p><strong>8:30am-10:00am</strong>: Intro to Dojo &#8211; Alex Russell<br />
<strong>10:30am-12:00pm</strong>: Yahoo! Experiences with Accessibility, DHTML, and Ajax in Rich (Dunno what Rich is&#8230;probably the start of &#8220;Rich Internet Applications&#8221; [RIA], probably) &#8211; Nate Koechley<br />
<strong>1:00pm-1:45pm</strong>: Keynote: Ajax from AOL&#8217;s Perspective &#8211; William Morris<br />
<strong>2:00pm-3:30pm</strong>: RAD 2.0: Working with symfony (PHP) &#8211; Dustin Whittle<br />
<strong>4:00pm-5:30pm</strong>: Markup &#038; CSS for Developers: Empowering the Application Developer with Front End Magic &#8211; Molly Holzschlag<br />
<strong>7:00pm-7:45pm</strong>: Keynote: The Once &#038; Future Web &#8211; Chris Wilson<br />
<strong>9:00pm-10:30pm</strong>: Expert Panel Discussion</p>
<h2 id="_wednesday_1" >Wednesday</h2>
<p><strong>9:30am-10:30am</strong>: Designing for Ajax &#8211; Bill Scott<br />
<strong>11:00am-12:30pm</strong>: Dojo Cookbook &#8211; Dustin Machi</p>
<p>My schedule is subject to change based on buzz or sudden interest in other presentations.  I look forward to seeing what they have to offer and will be blogging along the way!</p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/the-ajax-experience-plan-of-attack/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

