<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.atalasoft.com/cs/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Jake Opines</title><subtitle type="html" /><id>http://www.atalasoft.com/cs/blogs/jake/atom.aspx</id><link rel="alternate" type="text/html" href="http://www.atalasoft.com/cs/blogs/jake/default.aspx" /><link rel="self" type="application/atom+xml" href="http://www.atalasoft.com/cs/blogs/jake/atom.aspx" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2009-01-12T07:40:00Z</updated><entry><title>SharePoint 2010 a Better Investment for Developers than LAMP</title><link rel="alternate" type="text/html" href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/11/03/sharepoint-2010-a-better-investment-for-developers-than-lamp.aspx" /><id>http://www.atalasoft.com/cs/blogs/jake/archive/2009/11/03/sharepoint-2010-a-better-investment-for-developers-than-lamp.aspx</id><published>2009-11-03T16:22:11Z</published><updated>2009-11-03T16:22:11Z</updated><content type="html">&lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePoint2010aBetterInvestmentforDevelo_8B3E/linux-penguin_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin:0px 0px 5px 10px;border-right-width:0px;" height="244" alt="linux-penguin" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePoint2010aBetterInvestmentforDevelo_8B3E/linux-penguin_thumb.jpg" width="201" align="right" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Time is Money&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Currently, one of the most popular web development platforms is LAMP. LAMP stands for Linux, Apache, MySQL, and PHP. The reason why it is used by so many is that the whole stack is free. Well, sort of... There's a lot of time that gets wasted in the development process for this platform; the tools just simply aren't there.&lt;/p&gt;  &lt;p&gt;Fortunately, if you agree that your time is not worthless, you might invest in something like ASP.NET and many of your development pains go away. Unfortunately like LAMP, without a good framework, a good understanding of database design, and great security principles, you're going to be reinventing a wheel which has been picking up steam for a few years now.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Wheel&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;SharePoint offers a framework that abstracts away databases and security design, it gives you a complete content management system, a plug-in architecture, and for the price, unmatched scalability. This doesn't even begin to take into account the growing ecosystem of third party features available both for free and fee. The one piece that is missing is developer tools.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Tools&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;SharePoint wasn't even given the time of day when Visual Studio 2008 was being put together. Much of the development process made Visual Studio look like an over-glorified version of Notepad. The same cannot be said for Visual Studio 2010. Project templates, build processes, enhanced IntelliSense, wizards, and probably a unicorn or two make developing for SharePoint a reasonable task. What was once a six-step process to deploy and test a solution, is now one button: F5. Deployment speed didn't improve, but at least I can get a can of Coke while my computer does it for me. No batch scripts necessary. More information about &lt;a href="http://dotnet.sys-con.com/node/1150120" target="_blank"&gt;the tooling added to Visual Studio for SharePoint 2010&lt;/a&gt; can be found in this post on the .NET Developer's Journal.&lt;/p&gt;  &lt;p&gt;In the end, SharePoint 2010 offers a great application stack for developing some very compelling web products, and the tools that the Visual Studio team put together for the upcoming platform makes it very accessible for developers.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/jake/archive/2009/11/03/sharepoint-2010-a-better-investment-for-developers-than-lamp.aspx&amp;amp;;subject=SharePoint+2010+a+Better+Investment+for+Developers+than+LAMP" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/11/03/sharepoint-2010-a-better-investment-for-developers-than-lamp.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/11/03/sharepoint-2010-a-better-investment-for-developers-than-lamp.aspx&amp;amp;;title=SharePoint+2010+a+Better+Investment+for+Developers+than+LAMP" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/11/03/sharepoint-2010-a-better-investment-for-developers-than-lamp.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/11/03/sharepoint-2010-a-better-investment-for-developers-than-lamp.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/11/03/sharepoint-2010-a-better-investment-for-developers-than-lamp.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/11/03/sharepoint-2010-a-better-investment-for-developers-than-lamp.aspx&amp;amp;title=SharePoint+2010+a+Better+Investment+for+Developers+than+LAMP" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/11/03/sharepoint-2010-a-better-investment-for-developers-than-lamp.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/11/03/sharepoint-2010-a-better-investment-for-developers-than-lamp.aspx&amp;amp;;title=SharePoint+2010+a+Better+Investment+for+Developers+than+LAMP" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/11/03/sharepoint-2010-a-better-investment-for-developers-than-lamp.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/11/03/sharepoint-2010-a-better-investment-for-developers-than-lamp.aspx&amp;amp;;title=SharePoint+2010+a+Better+Investment+for+Developers+than+LAMP&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/11/03/sharepoint-2010-a-better-investment-for-developers-than-lamp.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=19645" width="1" height="1"&gt;</content><author><name>jacobl</name><uri>http://www.atalasoft.com/cs/members/jacobl.aspx</uri></author><category term="SharePoint" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/SharePoint/default.aspx" /></entry><entry><title>SharePoint Conference 2009 Take-Aways</title><link rel="alternate" type="text/html" href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/10/26/sharepoint-conference-2009-take-aways.aspx" /><id>http://www.atalasoft.com/cs/blogs/jake/archive/2009/10/26/sharepoint-conference-2009-take-aways.aspx</id><published>2009-10-26T14:09:40Z</published><updated>2009-10-26T14:09:40Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePointConference2009TakeAways_8F11/tmp12E_2.png"&gt;&lt;img style="border-right:0px;border-top:0px;margin:0px 0px 10px 10px;border-left:0px;border-bottom:0px;" height="99" alt="tmp12E" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePointConference2009TakeAways_8F11/tmp12E_thumb.png" width="206" align="right" border="0" /&gt;&lt;/a&gt;Hive, Hive, Hive, &amp;lt;slap&amp;gt;, ... ok fine. 14 Root&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;For quite a while now, SharePoint developers have been referring to the 12 directory located on WebFronts as the &amp;quot;12 hive&amp;quot;. Well, Microsoft no likey. It's now, at least by some, referred to as the &amp;quot;14 root&amp;quot;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;RIP WSS, MOSS&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In a great move, &amp;quot;Windows&amp;quot; and &amp;quot;Office&amp;quot; have both been removed from the nomenclature of SharePoint. To me, it made little sense to have this product straddling the line between these two brands, and with SharePoint 2010, there is enough backing behind it to have it stand on its own. Now referred to as SharePoint Foundation, the replacement for Windows SharePoint Services can still be installed as a free product. As your use of SharePoint expands, it can be upgraded to keep up and eventually become SharePoint Server (the successor to Microsoft Office SharePoint Server).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Client Object Model and REST&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is, by far, one of the things I am most excited about. Supporting WinForms/WPF, Silverlight, and JavaScript, this is going to be huge.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A Customizable Ribbon&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The ribbon is beautiful and hugely customizable. Everyone that writes applications on SharePoint should use it, extend it, and embrace it. Unfortunately, one of SharePoint's best hand-holding features will make relying on it nearly impossible. SP2010, by default, installs in SP2007 UI mode... no ribbon. This is the right thing to do, but it certainly makes using the ribbon that much harder.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Solution Upgrade Path?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Yes, finally. It's finally there. Finally.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;LARGE LIST THROTTLING&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If you have a SharePoint solution that accesses list items in SharePoint 2007, I GUARANTEE it will NOT work in SP2010 unless you address this key change. In most development situations, it will not be immediately apparent either. Large lists are now supported in VS2010, but they are heavily throttled. Non-administrative users have limits defaulted at 5,000 items per request while admins can view up to 20,000. While CAML queries allow you to request specific limits, it is still likely that those requests will fail under these circumstances because SharePoint doesn't know for certain that it will be able to avoid looking at all items in the list anyway.&lt;/p&gt;  &lt;p&gt;Expect more to come with a few in depth posts on the Client Object Model, REST, the Solution upgrade path, and Large List Throttling.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/jake/archive/2009/10/26/sharepoint-conference-2009-take-aways.aspx&amp;amp;;subject=SharePoint+Conference+2009+Take-Aways" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/10/26/sharepoint-conference-2009-take-aways.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/10/26/sharepoint-conference-2009-take-aways.aspx&amp;amp;;title=SharePoint+Conference+2009+Take-Aways" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/10/26/sharepoint-conference-2009-take-aways.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/10/26/sharepoint-conference-2009-take-aways.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/10/26/sharepoint-conference-2009-take-aways.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/10/26/sharepoint-conference-2009-take-aways.aspx&amp;amp;title=SharePoint+Conference+2009+Take-Aways" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/10/26/sharepoint-conference-2009-take-aways.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/10/26/sharepoint-conference-2009-take-aways.aspx&amp;amp;;title=SharePoint+Conference+2009+Take-Aways" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/10/26/sharepoint-conference-2009-take-aways.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/10/26/sharepoint-conference-2009-take-aways.aspx&amp;amp;;title=SharePoint+Conference+2009+Take-Aways&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/10/26/sharepoint-conference-2009-take-aways.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=19513" width="1" height="1"&gt;</content><author><name>jacobl</name><uri>http://www.atalasoft.com/cs/members/jacobl.aspx</uri></author><category term="Conferences" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Conferences/default.aspx" /><category term="SharePoint" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/SharePoint/default.aspx" /></entry><entry><title>Stick-Figure Commentary on Why My Blog Has Been Quiet Lately</title><link rel="alternate" type="text/html" href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/09/28/stick-figure-commentary-on-why-my-blog-has-been-quiet-lately.aspx" /><id>http://www.atalasoft.com/cs/blogs/jake/archive/2009/09/28/stick-figure-commentary-on-why-my-blog-has-been-quiet-lately.aspx</id><published>2009-09-28T20:25:41Z</published><updated>2009-09-28T20:25:41Z</updated><content type="html">&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/StickFigureCommentaryonWhyMyBlogHasBeenQ_E703/photo_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="330" alt="!SharePoint.Loves(me)" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/StickFigureCommentaryonWhyMyBlogHasBeenQ_E703/photo_thumb.jpg" width="438" border="0" /&gt;&lt;/a&gt;   &lt;p&gt;!SharePoint.Loves(me)&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/jake/archive/2009/09/28/stick-figure-commentary-on-why-my-blog-has-been-quiet-lately.aspx&amp;amp;;subject=Stick-Figure+Commentary+on+Why+My+Blog+Has+Been+Quiet+Lately" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/09/28/stick-figure-commentary-on-why-my-blog-has-been-quiet-lately.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/09/28/stick-figure-commentary-on-why-my-blog-has-been-quiet-lately.aspx&amp;amp;;title=Stick-Figure+Commentary+on+Why+My+Blog+Has+Been+Quiet+Lately" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/09/28/stick-figure-commentary-on-why-my-blog-has-been-quiet-lately.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/09/28/stick-figure-commentary-on-why-my-blog-has-been-quiet-lately.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/09/28/stick-figure-commentary-on-why-my-blog-has-been-quiet-lately.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/09/28/stick-figure-commentary-on-why-my-blog-has-been-quiet-lately.aspx&amp;amp;title=Stick-Figure+Commentary+on+Why+My+Blog+Has+Been+Quiet+Lately" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/09/28/stick-figure-commentary-on-why-my-blog-has-been-quiet-lately.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/09/28/stick-figure-commentary-on-why-my-blog-has-been-quiet-lately.aspx&amp;amp;;title=Stick-Figure+Commentary+on+Why+My+Blog+Has+Been+Quiet+Lately" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/09/28/stick-figure-commentary-on-why-my-blog-has-been-quiet-lately.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/09/28/stick-figure-commentary-on-why-my-blog-has-been-quiet-lately.aspx&amp;amp;;title=Stick-Figure+Commentary+on+Why+My+Blog+Has+Been+Quiet+Lately&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/09/28/stick-figure-commentary-on-why-my-blog-has-been-quiet-lately.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=19370" width="1" height="1"&gt;</content><author><name>jacobl</name><uri>http://www.atalasoft.com/cs/members/jacobl.aspx</uri></author></entry><entry><title>Events to Expect when Dynamically Loading iFrames in JavaScript - Take 2 (thanks Firefox 3.5)</title><link rel="alternate" type="text/html" href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/08/18/events-to-expect-when-dynamically-loading-iframes-in-javascript-take-2-thanks-firefox-3-5.aspx" /><id>http://www.atalasoft.com/cs/blogs/jake/archive/2009/08/18/events-to-expect-when-dynamically-loading-iframes-in-javascript-take-2-thanks-firefox-3-5.aspx</id><published>2009-08-18T17:55:52Z</published><updated>2009-08-18T17:55:52Z</updated><content type="html">&lt;p&gt;Just two months ago, I wrote a post on the &lt;a href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when-dynamically-loading-iframes-in-javascript.aspx" target="_blank"&gt;JavaScript events you could expect when loading iFrames dynamically&lt;/a&gt;. Since the behavior highly depends on the browser you are using and the whims of the developer who decided what to fire and when, I put together a nice table of Browser v. Content-Disposition listing the events and any return codes that come along with them.&lt;/p&gt;  &lt;p&gt;This is where it all falls apart. With Firefox 3.5, it appears as though my table must change. Firefox no longer fires &lt;strong&gt;onload&lt;/strong&gt; when the Content-Disposition is set to Attachment. This is the same behavior that can be expected in Safari and Chrome. Even though it appears as though there's a growing consensus outside of the IE camp, I do &lt;strong&gt;not&lt;/strong&gt; think it's moving in the right direction. (IE's behavior is clearly the best here: more, specific, expected)&lt;/p&gt;  &lt;p&gt;Disappointedly, I'm posting this updated table depicting the events you &lt;em&gt;should&lt;/em&gt; expect when dynamically loading iFrames:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/EventstoExpectwhenDynamicallyLoadingiF.5_C3EF/tmp4673_2.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="143" alt="tmp4673" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/EventstoExpectwhenDynamicallyLoadingiF.5_C3EF/tmp4673_thumb.png" width="434" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Thanks for nothing.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/jake/archive/2009/08/18/events-to-expect-when-dynamically-loading-iframes-in-javascript-take-2-thanks-firefox-3-5.aspx&amp;amp;;subject=Events+to+Expect+when+Dynamically+Loading+iFrames+in+JavaScript+-+Take+2+(thanks+Firefox+3.5)" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/08/18/events-to-expect-when-dynamically-loading-iframes-in-javascript-take-2-thanks-firefox-3-5.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/08/18/events-to-expect-when-dynamically-loading-iframes-in-javascript-take-2-thanks-firefox-3-5.aspx&amp;amp;;title=Events+to+Expect+when+Dynamically+Loading+iFrames+in+JavaScript+-+Take+2+(thanks+Firefox+3.5)" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/08/18/events-to-expect-when-dynamically-loading-iframes-in-javascript-take-2-thanks-firefox-3-5.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/08/18/events-to-expect-when-dynamically-loading-iframes-in-javascript-take-2-thanks-firefox-3-5.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/08/18/events-to-expect-when-dynamically-loading-iframes-in-javascript-take-2-thanks-firefox-3-5.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/08/18/events-to-expect-when-dynamically-loading-iframes-in-javascript-take-2-thanks-firefox-3-5.aspx&amp;amp;title=Events+to+Expect+when+Dynamically+Loading+iFrames+in+JavaScript+-+Take+2+(thanks+Firefox+3.5)" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/08/18/events-to-expect-when-dynamically-loading-iframes-in-javascript-take-2-thanks-firefox-3-5.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/08/18/events-to-expect-when-dynamically-loading-iframes-in-javascript-take-2-thanks-firefox-3-5.aspx&amp;amp;;title=Events+to+Expect+when+Dynamically+Loading+iFrames+in+JavaScript+-+Take+2+(thanks+Firefox+3.5)" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/08/18/events-to-expect-when-dynamically-loading-iframes-in-javascript-take-2-thanks-firefox-3-5.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/08/18/events-to-expect-when-dynamically-loading-iframes-in-javascript-take-2-thanks-firefox-3-5.aspx&amp;amp;;title=Events+to+Expect+when+Dynamically+Loading+iFrames+in+JavaScript+-+Take+2+(thanks+Firefox+3.5)&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/08/18/events-to-expect-when-dynamically-loading-iframes-in-javascript-take-2-thanks-firefox-3-5.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=19140" width="1" height="1"&gt;</content><author><name>jacobl</name><uri>http://www.atalasoft.com/cs/members/jacobl.aspx</uri></author><category term="JavaScript" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/JavaScript/default.aspx" /><category term="Browsers" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Browsers/default.aspx" /></entry><entry><title>Caching JavaScript on Your Terms</title><link rel="alternate" type="text/html" href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/19/caching-javascript-on-your-terms.aspx" /><id>http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/19/caching-javascript-on-your-terms.aspx</id><published>2009-07-19T13:34:00Z</published><updated>2009-07-19T13:34:00Z</updated><content type="html">&lt;p&gt;Browsers tend to do what they like with your &lt;i&gt;static &lt;/i&gt;content: deciding what to cache and when to refresh. On the server-side, you can specify that certain file types have a designated TTL (time to live) and that works in many cases. There are other cases when you either don't have access to the server's configuration or you need to make sure everyone has the latest bits of JavaScript. &lt;/p&gt;  &lt;p&gt;With every release of VizitSP, our &lt;a href="http://www.vizitsp.com/" target="_blank"&gt;SharePoint Document Viewer&lt;/a&gt;, we need to make sure that users get all of the changes we've made. To achieve this, there's a very easy trick that can keep our files cached exactly as long as they need to be and it involves &lt;i&gt;le query string&lt;/i&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;What the HTTP Caching Specification Says&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;ThinkVitamin posted an article about &lt;a href="http://carsonified.com/blog/features/webapps/serving-javascript-fast/" target="_blank"&gt;the correct way to pull off browser caching while playing by the rules&lt;/a&gt;. This is a great way of doing things; and, if you control the server your site is running on, please do that; however, if you're a component or an installable product like our Vizit, you might not be offered that liberty.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;According [to] the letter of the HTTP caching specification, user agents should &lt;i&gt;&lt;b&gt;never&lt;/b&gt;&lt;/i&gt; cache URLs with query strings. While Internet Explorer and Firefox ignore this, Opera and Safari don’t - to make sure all user agents can cache your resources, we need to keep query strings out of their URLs.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Supporting only IE and Firefox didn't sound that attractive to me, so I decided to do a bit of research. Digging &lt;a href="http://www.webmasterworld.com/html/3622291.htm" target="_blank"&gt;around the net&lt;/a&gt;, I found out that Safari stores its cache in &lt;/p&gt;  &lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;   &lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;     &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;"&gt;&lt;span&gt;   1:&lt;/span&gt; C:\Documents and Settings\[username]\Local Settings\Application Data\Apple Computer\Safari\cache.db&lt;/pre&gt;  &lt;/div&gt;&lt;/div&gt;&lt;p&gt;It's a SQLite database, so a quick download of the &lt;a href="http://www.singular.gr/sqlite/" target="_blank"&gt;free Sqlite3Explorer tool&lt;/a&gt; made querying this very easy. &lt;/p&gt;&lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;  &lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;"&gt;&lt;span&gt;   1:&lt;/span&gt; sqlite&amp;gt; select request_key from cfurl_cache_response LIMIT 735,5;&lt;/pre&gt;    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;&lt;span&gt;   2:&lt;/span&gt; http:&lt;span&gt;//graphics8.nytimes.com/js/app/lib/NYTD/0.0.1/tooltip.js&lt;/span&gt;&lt;/pre&gt;    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;"&gt;&lt;span&gt;   3:&lt;/span&gt; http:&lt;span&gt;//graphics8.nytimes.com/images/global/icons/feed_icon_16x16.gif&lt;/span&gt;&lt;/pre&gt;    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;&lt;span&gt;   4:&lt;/span&gt; http:&lt;span&gt;//&lt;b&gt;&lt;font color="#ff0000"&gt;graphics8.nytimes.com/js/app/analytics/gw.js&lt;/font&gt;&lt;font color="#0000ff"&gt;?csid=H07707&lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/pre&gt;    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;"&gt;&lt;span&gt;   5:&lt;/span&gt; http:&lt;span&gt;//graphics8.nytimes.com/js/app/analytics/revenuescience.js&lt;/span&gt;&lt;/pre&gt;    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;&lt;span&gt;   6:&lt;/span&gt; &lt;a href="http://graphics8.nytimes.com/js/app/analytics/controller_v1.1.js"&gt;http:&lt;span&gt;//graphics8.nytimes.com/js/app/analytics/controller_v1.1.js&lt;/span&gt;&lt;/a&gt;&lt;/pre&gt;  &lt;/div&gt;&lt;/div&gt;&lt;p&gt;What do we have here? A static file (js extension) &lt;b&gt;with&lt;/b&gt; a query string in Safari's cache.&lt;/p&gt;&lt;p&gt;This got me thinking about Opera and Chrome... luckily, they make it trivial to browse their cache using the &lt;i&gt;about:cache&lt;/i&gt; URL. This is what I found:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/CachingJavaScriptonYourTerms_A0FF/tmpCD24_2.png"&gt;&lt;img src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/CachingJavaScriptonYourTerms_A0FF/tmpCD24_thumb.png" style="border-width:0px;" alt="Chrome" border="0" height="155" width="440"&gt;&lt;/a&gt;   &lt;br&gt;&lt;i&gt;chrome&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/CachingJavaScriptonYourTerms_A0FF/tmpCD26_2.png"&gt;&lt;img src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/CachingJavaScriptonYourTerms_A0FF/tmpCD26_thumb.png" style="border-width:0px;" alt="tmpCD26" border="0" height="146" width="440"&gt;&lt;/a&gt;   &lt;br&gt;&lt;i&gt;opera&lt;/i&gt;&lt;/p&gt;&lt;p&gt;Cool huh? It appears as though IE, Firefox, Safari, Opera, and Chrome ignore this bit of the spec and I'm OK with that.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Versioning Your Static Content&lt;/b&gt;&lt;/p&gt;&lt;p&gt;It's important that you update your version query string parameter with every release or this technique wont work. With Vizit, we do it as part of our build process. Everywhere in the code that includes a JavaScript file we append &lt;i&gt;'?ver=VIZIT_VERSION'&lt;/i&gt;. At build time, we sift through all the files and replace that with the version number of our assemblies. Very nice indeed.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Results&lt;/b&gt;&lt;/p&gt;&lt;p&gt;On its first load with an empty cache, an upcoming release of VizitSP weighs in at about 420 KB. That small size is achieved through &lt;a href="http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/22/spritify-writing-a-css-image-sprite-generator-with-dotimage.aspx" target="_blank"&gt;CSS image spriting&lt;/a&gt;, &lt;a href="http://developer.yahoo.com/yui/compressor/" target="_blank"&gt;JavaScript compression&lt;/a&gt;, concatenation, and the SharePoint Web Front Ends gzipping it all; however, a second load will see that size drop to a measly 75 KB. Compare that to the New Your Times homepage which weighed in at 763 KB on first load, only dropping to 370 KB after cached. While the New York Times is a &lt;b&gt;news &lt;/b&gt;site which means much more of it needs to be refreshed all the time, taking advantage of the fact that Vizit can update at will makes for a very nimble and fast-loading web application.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/19/caching-javascript-on-your-terms.aspx&amp;amp;;subject=Caching+JavaScript+on+Your+Terms" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/19/caching-javascript-on-your-terms.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/19/caching-javascript-on-your-terms.aspx&amp;amp;;title=Caching+JavaScript+on+Your+Terms" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/19/caching-javascript-on-your-terms.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/19/caching-javascript-on-your-terms.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/19/caching-javascript-on-your-terms.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/19/caching-javascript-on-your-terms.aspx&amp;amp;title=Caching+JavaScript+on+Your+Terms" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/19/caching-javascript-on-your-terms.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/19/caching-javascript-on-your-terms.aspx&amp;amp;;title=Caching+JavaScript+on+Your+Terms" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/19/caching-javascript-on-your-terms.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/19/caching-javascript-on-your-terms.aspx&amp;amp;;title=Caching+JavaScript+on+Your+Terms&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/19/caching-javascript-on-your-terms.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=18809" width="1" height="1"&gt;</content><author><name>jacobl</name><uri>http://www.atalasoft.com/cs/members/jacobl.aspx</uri></author><category term="Deployment" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Deployment/default.aspx" /><category term="JavaScript" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/JavaScript/default.aspx" /><category term="Browsers" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Browsers/default.aspx" /></entry><entry><title>Visual Studio 2008 Intellisense for Ext JS</title><link rel="alternate" type="text/html" href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/12/visual-studio-2008-intellisense-for-ext-js.aspx" /><id>http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/12/visual-studio-2008-intellisense-for-ext-js.aspx</id><published>2009-07-12T14:59:43Z</published><updated>2009-07-12T14:59:43Z</updated><content type="html">&lt;p&gt;Ever thought it would be totally boss to have JavaScript Intellisense for Ext JS in Visual Studio 2005? Too bad. If you were talking about VS 2008, though, I've got your back.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Intelli-Referencing External JavaScript&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;VizitSP is a fairly large project and much of that heft is on the client side. With that, we have a lot of JavaScript to manage. One of the techniques we use to help ease the burden is to maintain separate files for each JS class and then merge and minify them all together during the build process. Unfortunately, splitting the files up sacrifices all the Intellisense we would get for free if we hadn't. Not exactly.&lt;/p&gt;  &lt;p&gt;Scott Guthrie posted this article about &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/06/21/vs-2008-javascript-intellisense.aspx" target="_blank"&gt;JavaScript Intellisense in Visual Studio&lt;/a&gt; back in 2007. While going over some of the basics, he also talks about how to reference external JS files using an XML comment at the top of your script.&lt;/p&gt;  &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;height:38px;background-color:#f4f4f4;"&gt;   &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;/// &amp;lt;reference path=&amp;quot;path/to/script.js&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;They even load references of references. That means that when I reference the script I have located at &amp;quot;path/to/script.js&amp;quot; that has an XML reference comment pointing at &amp;quot;path/to/otherScript.js&amp;quot;, my script gets Intellisense for script.js &lt;strong&gt;and&lt;/strong&gt; otherScript.js! I'm easily amused.&lt;/p&gt;

&lt;p&gt;Back in November, Visual Studio Web Tools Program Manager, Jeff King, posted this &lt;a href="http://blogs.msdn.com/webdevtools/archive/2008/11/18/jscript-intellisense-faq.aspx" target="_blank"&gt;FAQ on JScript Intellisense in Visual Studio 2008&lt;/a&gt; that you should take a look at as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Give me Ext JS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is all well and good, but what I really want is all of Ext JS at my fingertips. I want to be able to get some Intellisense love for the entire API. My first thought was to just add a reference comment pointing to ext-all-debug.js and maybe ext-base.js.&lt;/p&gt;

&lt;p&gt;Long story short, that blew up in my face and was way too big of an undertaking to deal with. I began stripping out any incompatible bits of code and got nowhere fast. A little searching on the net led me to find people out there who clearly have way more &lt;strike&gt;time on their hands&lt;/strike&gt; need for this than I do. While there are a few forum posts on the topic with supposed links to working script, &lt;a href="http://spket.com/ext-intellisense-visual-studio.html" target="_blank"&gt;this is the only one&lt;/a&gt; that didn't return a 404.&lt;/p&gt;

&lt;p&gt;While it's not entirely there, it's pretty close. Some classes exist in multiple places in Ext's namespace as a convenience and while the object itself appears in the Intellisense, a constructed version of it does not have any members or methods. I tend to use Ext.form.BasicForm over Ext.BasicForm... so, I'm out of luck. However, it would not take much to add it.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/12/visual-studio-2008-intellisense-for-ext-js.aspx&amp;amp;;subject=Visual+Studio+2008+Intellisense+for+Ext+JS" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/12/visual-studio-2008-intellisense-for-ext-js.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/12/visual-studio-2008-intellisense-for-ext-js.aspx&amp;amp;;title=Visual+Studio+2008+Intellisense+for+Ext+JS" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/12/visual-studio-2008-intellisense-for-ext-js.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/12/visual-studio-2008-intellisense-for-ext-js.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/12/visual-studio-2008-intellisense-for-ext-js.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/12/visual-studio-2008-intellisense-for-ext-js.aspx&amp;amp;title=Visual+Studio+2008+Intellisense+for+Ext+JS" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/12/visual-studio-2008-intellisense-for-ext-js.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/12/visual-studio-2008-intellisense-for-ext-js.aspx&amp;amp;;title=Visual+Studio+2008+Intellisense+for+Ext+JS" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/12/visual-studio-2008-intellisense-for-ext-js.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/12/visual-studio-2008-intellisense-for-ext-js.aspx&amp;amp;;title=Visual+Studio+2008+Intellisense+for+Ext+JS&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/12/visual-studio-2008-intellisense-for-ext-js.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=18808" width="1" height="1"&gt;</content><author><name>jacobl</name><uri>http://www.atalasoft.com/cs/members/jacobl.aspx</uri></author><category term="JavaScript" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/JavaScript/default.aspx" /><category term="Visual Studio" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Visual+Studio/default.aspx" /></entry><entry><title>Flash, Silverlight just Stop-Gaps</title><link rel="alternate" type="text/html" href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/06/flash-silverlight-just-stop-gaps.aspx" /><id>http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/06/flash-silverlight-just-stop-gaps.aspx</id><published>2009-07-06T13:31:01Z</published><updated>2009-07-06T13:31:01Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;The F.U.D.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There has been a lot of talk in the past few weeks about HTML 5 and its supposed takeover on the web (or lack thereof). It's only a matter of time before Flash and Silverlight become less relevant. The CEO of Adobe, Shantanu Narayen, defended their position in the future of the web during the company's &lt;a href="http://blogs.adobe.com/jd/2009/06/adobe_on_html5.html" target="_blank"&gt;last quarterly financial call&lt;/a&gt;, saying:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;So [, we're] clearly supportive in terms of making sure as HTML 5 is evolving that we will support it in our web authoring tools but from the perspective of continuing to drive Flash and innovation around Flash and rich Internet applications, we still think that actually the fragmentation of browsers makes Flash even more important rather than less important.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The part of the question that he is dodging here is how a more powerful and more broadly supported standard will affect Flash in the long term.&lt;/p&gt;  &lt;p&gt;Recently, &lt;a href="http://www.infoworld.com/d/developer-world/html-5-could-it-kill-flash-and-silverlight-291" target="_blank"&gt;InfoWorld posted an article&lt;/a&gt; about this very topic. It's a good read and the author gets a lot of things right. He talks about how IE will be a critical milestone for HTML 5 to overcome:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;The exception is Microsoft, which therefore is in a difficult situation, says Almaer. The company has heavy investments in trying to propel Silverlight to dominance. &amp;quot;That's a big elephant in the room for them because you can imagine the Silverlight team [whose] whole existence is to add [this] functionality in. [But] if Internet Explorer puts it already in there, why do we have Silverlight?&amp;quot; he asks.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Good question. What incentive does Microsoft have, from a Silverlight perspective, to further the advancement of HTML 5? When IE adds support for all of the capabilities that Silverlight has to offer directly into the browser, does Silverlight still need to exist? No, it doesn't. It's arguably in Microsoft's best interest to keep its feet stuck in the mud and continue to not be a 'standards-based' browser.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Push&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This roadblock is ever more apparent with the announcement of Firefox 3.5 RC. It, along with Safari and Chrome, already support much of what HTML 5 has coming up in the pipeline. Internet Explorer is the only major player that is mum on the subject.&lt;/p&gt;  &lt;p&gt;Fortunately, the push for more advanced capabilities in the HTML standard is so great that some of IE's shortcomings can be sidestepped. There is a project put together by Google on SourceForge called ExplorerCanvas. It allows for 2D command-based drawing. Browsers like Safari, Firefox, Chrome and Opera all support the HTML5 canvas... but Internet Explorer does not. The ExplorerCanvas project overcomes this by taking Microsoft's Vector Markup Language and wrapping it in JavaScript to create the desired effect. The &lt;a href="http://www.atalasoft.com/products/dotimage/thinclient/" target="_blank"&gt;DotImage Web Annotation Viewer&lt;/a&gt; that we use in our &lt;a href="http://www.vizitsp.com/Products/VizitSP" target="_blank"&gt;SharePoint Document Viewer&lt;/a&gt;, VizitSP, employs the ExplorerCanvas to let users author annotations in a very natural way.&lt;/p&gt;  &lt;p&gt;Another example of this push is Kroc Camen's recent publication of &lt;a href="http://camendesign.com/code/video_for_everybody" target="_blank"&gt;Video for Everyone&lt;/a&gt;. By using the upcoming &amp;lt;video&amp;gt; tag along with Flash and Quicktime object tags, he is able to provide a series of fallbacks that can offer HTML5 love to people who deserve it while providing an acceptable experience for those who don't.&lt;/p&gt;  &lt;p&gt;One area where I think InfoWorld gets it wrong is in its comment about Google's possible apprehension toward pushing the new standard:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;..its YouTube subsidiary uses Flash for its video, but the inclusion of HTML 5 capabilities in browsers might cause YouTube to rethink that decision, notes Fette. &amp;quot;It's a cost/benefit analysis that they'd need to make.&amp;quot;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;For a couple months now, YouTube has had &lt;a href="http://www.youtube.com/html5" target="_blank"&gt;an HTML 5 demo&lt;/a&gt; available on its site. The example shows that, with a capable browser, you can view video without any codecs or plugins. It just works. YouTube has clearly already begun to invest the time into moving away from Flash as soon as it's feasible. Without much effort, YouTube could begin serving up HTML5 video to those browsers that support it. To push the envelope even further, YouTube could add features to the HTML5 version that are either &lt;a title="Requires Firefox 3.5" href="http://people.mozilla.com/~prouget/demos/round/index.xhtml" target="_blank"&gt;not&lt;/a&gt; &lt;a title="Requires Firefox 3.5" href="http://people.mozilla.com/~prouget/demos/mashup/video.xhtml" target="_blank"&gt;possible&lt;/a&gt; to do in Flash or just as an incentive to get people to use &lt;a href="http://www.google.com/chrome" target="_blank"&gt;better browsers&lt;/a&gt;... or to give IE a hint.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Point&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The point here is that we can't allow such a fundamental piece to the future of the Internet rely on &lt;em&gt;plugins&lt;/em&gt;. Something that is so core to the direction that the web is vectored toward deserves to be treated as such: core. While it might take us a while to get there, we will --even if it means dragging the old browsers kicking and screaming behind us. Until then, Flash and Silverlight can rule the roost.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/06/flash-silverlight-just-stop-gaps.aspx&amp;amp;;subject=Flash%2c+Silverlight+just+Stop-Gaps" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/06/flash-silverlight-just-stop-gaps.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/06/flash-silverlight-just-stop-gaps.aspx&amp;amp;;title=Flash%2c+Silverlight+just+Stop-Gaps" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/06/flash-silverlight-just-stop-gaps.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/06/flash-silverlight-just-stop-gaps.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/06/flash-silverlight-just-stop-gaps.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/06/flash-silverlight-just-stop-gaps.aspx&amp;amp;title=Flash%2c+Silverlight+just+Stop-Gaps" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/06/flash-silverlight-just-stop-gaps.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/06/flash-silverlight-just-stop-gaps.aspx&amp;amp;;title=Flash%2c+Silverlight+just+Stop-Gaps" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/06/flash-silverlight-just-stop-gaps.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/06/flash-silverlight-just-stop-gaps.aspx&amp;amp;;title=Flash%2c+Silverlight+just+Stop-Gaps&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/07/06/flash-silverlight-just-stop-gaps.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=18778" width="1" height="1"&gt;</content><author><name>jacobl</name><uri>http://www.atalasoft.com/cs/members/jacobl.aspx</uri></author><category term="JavaScript" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/JavaScript/default.aspx" /><category term="Browsers" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Browsers/default.aspx" /><category term="HTML5" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/HTML5/default.aspx" /></entry><entry><title>Events to Expect when Dynamically Loading iFrames in JavaScript</title><link rel="alternate" type="text/html" href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when-dynamically-loading-iframes-in-javascript.aspx" /><id>http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when-dynamically-loading-iframes-in-javascript.aspx</id><published>2009-06-18T11:49:52Z</published><updated>2009-06-18T11:49:52Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;NOTE: An update to this article has been posted and can be found here - &lt;a href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/08/18/events-to-expect-when-dynamically-loading-iframes-in-javascript-take-2-thanks-firefox-3-5.aspx"&gt;Take 2 (thanks Firefox 3.5)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/EventstoExpectwhenDynamicallyLoadingiFra_77E7/chrome-ie-firefox1_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="200" alt="chrome-ie-firefox1" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/EventstoExpectwhenDynamicallyLoadingiFra_77E7/chrome-ie-firefox1_thumb.jpg" width="260" align="right" border="0" /&gt;&lt;/a&gt; Almost every JavaScript project starts off with a conversation about browser compatibility. As much as we'd like to think that JavaScript is JavaScript, each browser has its own implementation; and depending on what you're trying to do, those implementations could be drastically different from one another.&lt;/p&gt;  &lt;p&gt;This case of inconsistent JavaScript behavior can be found in the events you can expect to receive during and after the dynamic loading of iFrames.&lt;/p&gt;  &lt;p&gt;After quite a bit of testing and head scratching, we were able to come up with the following table of events to expect when dynamically loading content into an iFrame:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/EventstoExpectwhenDynamicallyLoadingiFra_77E7/2table_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="164" alt="2table" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/EventstoExpectwhenDynamicallyLoadingiFra_77E7/2table_thumb.png" width="454" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What is Content-Disposition?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Sometimes when you provide your users with a file download link from a web page, you might not be linking them directly to the file, but to an ASPX page or PHP script instead, which streams the content of the file back to the client. In order for your browser to know what to do with this content, you provide header information with the response including Content-Type and Content-Disposition. &lt;/p&gt;  &lt;p&gt;Content-Type is exactly what it sounds like: &amp;quot;application/pdf&amp;quot; if the content is PDF, &amp;quot;image/jpeg&amp;quot; if the content is JPEG, and so on. Content-Disposition refers to how you want the browser to handle the file after it is downloaded. It comes in a few flavors, but these are the ones that matter for this article: &amp;quot;inline&amp;quot; where the browser will attempt to load it (or an application that can load it) in the browser window or frame specified, and &amp;quot;attachment&amp;quot; where the browser will prompt the user to download.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Table Breakdown&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The table above is for quick reference. I'm sure I'm going to need to Google for this answer in the future, so, &amp;quot;You're welcome, future-self.&amp;quot; Here's a breakdown of each browser and what events should be expected and when they fire.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Safari / Chrome&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/EventstoExpectwhenDynamicallyLoadingiFra_77E7/safari_logo_3023_6.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="132" alt="safari_logo_3023" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/EventstoExpectwhenDynamicallyLoadingiFra_77E7/safari_logo_3023_thumb_2.jpg" width="119" align="right" border="0" /&gt;&lt;/a&gt; Inline&lt;/em&gt;: The &lt;strong&gt;onload&lt;/strong&gt; event fires when the content is fully downloaded (but its associated application might not be done loading the file).&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Attachment&lt;/em&gt;: ... thanks for nothing. Neither of these browsers provide any events for iFrames loaded with content that have an &amp;quot;Attachment&amp;quot; disposition type.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Firefox&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Inline&lt;/em&gt;: This behaves identically to &lt;u&gt;Safari / Chrome&lt;/u&gt; in the &lt;em&gt;Inline &lt;/em&gt;case.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;em&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/EventstoExpectwhenDynamicallyLoadingiFra_77E7/20070520-firefox_logo_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="114" alt="20070520-firefox_logo" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/EventstoExpectwhenDynamicallyLoadingiFra_77E7/20070520-firefox_logo_thumb.jpg" width="119" align="right" border="0" /&gt;&lt;/a&gt;&lt;/em&gt;Attachment&lt;/em&gt;: This also behaves identically to &lt;u&gt;Safari / Chrome&lt;/u&gt; in the &lt;em&gt;&lt;strong&gt;Inline&lt;/strong&gt; &lt;/em&gt;case.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;IE&lt;/u&gt; (surprisingly gets my vote of approval here) There is an &lt;strong&gt;onreadystatechange&lt;/strong&gt; event that fires whenever the iFrame's &lt;strong&gt;readyState&lt;/strong&gt; property changes. That &lt;strong&gt;readyState&lt;/strong&gt; reflects where the download is in the process.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Inline&lt;/em&gt;: When you initially set the &lt;strong&gt;src&lt;/strong&gt; value of the iFrame element, the &lt;strong&gt;readyState &lt;/strong&gt;changes to &lt;strong&gt;loading&lt;/strong&gt;. When the file has completely downloaded, the &lt;strong&gt;readyState&lt;/strong&gt; changes to &lt;strong&gt;interactive&lt;/strong&gt;. The big difference between IE and the other browsers is that &lt;u&gt;IE&lt;/u&gt; then changes the &lt;strong&gt;readyState&lt;/strong&gt; property to &lt;strong&gt;complete&lt;/strong&gt; when the page (or application) is fully loaded and ready for the user.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;em&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/EventstoExpectwhenDynamicallyLoadingiFra_77E7/2840957763_b3672846e5_2.jpg"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="111" alt="2840957763_b3672846e5" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/EventstoExpectwhenDynamicallyLoadingiFra_77E7/2840957763_b3672846e5_thumb.jpg" width="118" align="right" border="0" /&gt;&lt;/a&gt;&lt;/em&gt;Attachment&lt;/em&gt;: This behaves identically to the &lt;em&gt;Inline&lt;/em&gt; case of &lt;u&gt;IE&lt;/u&gt;, but the &lt;strong&gt;readyState&lt;/strong&gt; property never changes to &lt;strong&gt;complete&lt;/strong&gt;. That wouldn't make much sense, since the user has to manually open the file by double-clicking on it or opening&amp;#160; it from some application.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;As you can see, this can be quite a pain; but with a little bit of research and knowing exactly what you want your customers to experience, you can have a fairly consistent process for all browsers.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when-dynamically-loading-iframes-in-javascript.aspx&amp;amp;;subject=Events+to+Expect+when+Dynamically+Loading+iFrames+in+JavaScript" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when-dynamically-loading-iframes-in-javascript.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when-dynamically-loading-iframes-in-javascript.aspx&amp;amp;;title=Events+to+Expect+when+Dynamically+Loading+iFrames+in+JavaScript" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when-dynamically-loading-iframes-in-javascript.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when-dynamically-loading-iframes-in-javascript.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when-dynamically-loading-iframes-in-javascript.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when-dynamically-loading-iframes-in-javascript.aspx&amp;amp;title=Events+to+Expect+when+Dynamically+Loading+iFrames+in+JavaScript" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when-dynamically-loading-iframes-in-javascript.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when-dynamically-loading-iframes-in-javascript.aspx&amp;amp;;title=Events+to+Expect+when+Dynamically+Loading+iFrames+in+JavaScript" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when-dynamically-loading-iframes-in-javascript.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when-dynamically-loading-iframes-in-javascript.aspx&amp;amp;;title=Events+to+Expect+when+Dynamically+Loading+iFrames+in+JavaScript&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when-dynamically-loading-iframes-in-javascript.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=18680" width="1" height="1"&gt;</content><author><name>jacobl</name><uri>http://www.atalasoft.com/cs/members/jacobl.aspx</uri></author></entry><entry><title>Using YUI Compressor with eval</title><link rel="alternate" type="text/html" href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/16/using-yui-compressor-with-eval.aspx" /><id>http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/16/using-yui-compressor-with-eval.aspx</id><published>2009-06-16T12:16:53Z</published><updated>2009-06-16T12:16:53Z</updated><content type="html">&lt;p&gt;YUI Compressor is an excellent JavaScript minifier and obfuscator. But every good thing comes with its compromises. While this tool prides itself on getting some of the best minification numbers I've seen, it's also very reliable. Your code gets smaller but will almost definitely work the same. While a few tools out there find trouble with &lt;strong&gt;eval &lt;/strong&gt;and &lt;strong&gt;with&lt;/strong&gt;, YUI Compressor gets around it by skipping it completely. It refuses to touch any code that is within the scope of an &lt;strong&gt;eval&lt;/strong&gt; or &lt;strong&gt;with&lt;/strong&gt; call. That might produce highly reliable, minified code, but in some cases, the code will just be reliable... unminified code. Good but not great.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Basic Case&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Below is the example we'll be working with. We'll use it to demonstrate how &lt;strong&gt;eval&lt;/strong&gt; can get trapped inside a scope causing YUI Compressor to ignore it completely.&lt;/p&gt;  &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;height:253px;background-color:#f4f4f4;"&gt;   &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; Test = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;() {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; _self = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; performOperation(scr) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#006080;"&gt;&amp;quot;Result: &amp;quot;&lt;/span&gt; + eval(scr);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     _self.Operate = &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(x, y, operation) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; performOperation(x + operation + y);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Above, the &lt;strong&gt;eval&lt;/strong&gt; can reference anything inside the test class. It's hard to see how YUI could screw this up, but if we added an internal variable and modified the performOperation method to make use of it, you could see that things might get sticky.&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.27%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;height:260px;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; Test = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;() {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; _self = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; _internalVariable = 3;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; performOperation(scr) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#006080;"&gt;&amp;quot;Result: &amp;quot;&lt;/span&gt; + eval(&lt;span style="color:#006080;"&gt;&amp;quot;(&amp;quot;&lt;/span&gt; + scr + &lt;span style="color:#006080;"&gt;&amp;quot;) * _internalVariable&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     _self.Operate = &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(x, y, operation) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; performOperation(x + operation + y);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;This makes it a little more obvious. If YUI Compressor had it's way with this and wasn't as cautious as it is, _&lt;strong&gt;internalVariable&lt;/strong&gt; would be renamed to some arbitrary string of letters and the &lt;strong&gt;eval&lt;/strong&gt; call would fail.&lt;/p&gt;

&lt;p&gt;You can see this by running the compressor on our script. The following code is the result:&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; Test=&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(){&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; _self=&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; _internalVariable=3;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; performOperation(src){&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#006080;"&gt;&amp;quot;Result: &amp;quot;&lt;/span&gt;+eval(&lt;span style="color:#006080;"&gt;&amp;quot;(&amp;quot;&lt;/span&gt;+src+&lt;span style="color:#006080;"&gt;&amp;quot;) * _internalVariable&amp;quot;&lt;/span&gt;)}&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; _self.Operate=&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(x,y,operation){&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; performOperation(x+operation+y)}};&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Nothing changed (return lines added for &lt;em&gt;readability&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;By adding the requirement that &lt;strong&gt;eval&lt;/strong&gt; can only be called on public facing methods, we are then able to pull it out of the Test object entirely.&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;height:230px;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; Test = {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     Eval: &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(src) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; eval(src);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt; Test.Operator = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;() {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; _self = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; performOperation(src) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#006080;"&gt;&amp;quot;Result: &amp;quot;&lt;/span&gt; + Test.Eval(src);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     _self.Operate = &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(x, y, operation) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; performOperation(x + operation + y);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;While this allows for much more minified JavaScript, it does limit us a bit much. We can remedy this by adding a &lt;strong&gt;scope&lt;/strong&gt; variable to the Test.Eval signature, allowing us to pass in the appropriate scope. &lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; Test = {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     Eval: &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(src, scope) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; eval(src);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt; Test.Operator = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;() {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; _self = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     _self.Variable = 3;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; performOperation(src) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#006080;"&gt;&amp;quot;Result: &amp;quot;&lt;/span&gt; + Test.Eval(&lt;span style="color:#006080;"&gt;&amp;quot;(&amp;quot;&lt;/span&gt; + src + &lt;span style="color:#006080;"&gt;&amp;quot;) * scope.Variable&amp;quot;&lt;/span&gt;, _self);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;     _self.Operate = &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(x, y, operation) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; performOperation(x + operation + y);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;It might look a little confusing, but read it over; it's right. &lt;/p&gt;

&lt;p&gt;Since YUI Compressor will not touch any code that has &lt;strong&gt;eval &lt;/strong&gt;in its scope, we don't have to worry that the &lt;strong&gt;scope&lt;/strong&gt; property will change.&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; Test={Eval:&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(src,scope){&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; eval(src)}};&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; Test.Operator=&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(){&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; a=&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;;a.Variable=3;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; b(c){&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#006080;"&gt;&amp;quot;Result: &amp;quot;&lt;/span&gt;+Test.Eval(&lt;span style="color:#006080;"&gt;&amp;quot;(&amp;quot;&lt;/span&gt;+c+&lt;span style="color:#006080;"&gt;&amp;quot;) * scope.Variable&amp;quot;&lt;/span&gt;,a)}&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; a.Operate=&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(c,e,d){&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; b(c+d+e)}};&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The only bit of code that is not minified is the Test.Eval method due to its use of &lt;strong&gt;eval&lt;/strong&gt;. (return lines added for &lt;em&gt;readability&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;While this might not show much benefit as code-length savings goes, keep in mind that the example above is very small. Any reasonably long class will show huge improvements when minified properly; not to mention the benefits that are had from making your intellectual property less readable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real World Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I will detail the following code in a future post, but for now, I wanted to show how the above technique of extracting &lt;strong&gt;eval&lt;/strong&gt; calls out of a class can benefit JavaScript length after compression.&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; IAT = {};&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; IAT.Eval = &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(scr, scope) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; eval(scr);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; IAT.Importer = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;() {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; _self = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; _waitingClasses = [];&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; processWaitingClasses() {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; i = 0; i &amp;lt; _waitingClasses.length; i++) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; refs = _waitingClasses[i].refs;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;             &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; removeRefs = [];&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; k = 0; k &amp;lt; refs.length; k++) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(isDefined(refs[k]))&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;                     removeRefs.push(k);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;             }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;             &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; k = removeRefs.length - 1; k &amp;gt;= 0; k--) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt;                 refs.splice(removeRefs[k], 1);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt;             }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt;                 &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(_waitingClasses[i].refs.length &amp;lt; 1) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  24:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; cls = _waitingClasses[i];&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  25:&lt;/span&gt;                 _waitingClasses.splice(i, 1);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  26:&lt;/span&gt;                 setClass(cls);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  27:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  28:&lt;/span&gt;             }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  29:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  30:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  31:&lt;/span&gt;     &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  32:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; setClass(def) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  33:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;// 'scope' will be evaluated as def in IAT.Eval&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  34:&lt;/span&gt;         IAT.Eval(def.clsName + &lt;span style="color:#006080;"&gt;'=scope.cls();'&lt;/span&gt;, def);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  35:&lt;/span&gt;         processWaitingClasses();&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  36:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  37:&lt;/span&gt;     &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  38:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; isDefined(str, scope) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  39:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(!scope) scope = &lt;span style="color:#006080;"&gt;'window'&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  40:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; path = str.split(&lt;span style="color:#006080;"&gt;'.'&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  41:&lt;/span&gt;         &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  42:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; scr = scope + &lt;span style="color:#006080;"&gt;'.'&lt;/span&gt; + path[0];&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  43:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(!IAT.Eval(scr)) &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  44:&lt;/span&gt;         &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  45:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(path.length == 1) &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  46:&lt;/span&gt;         &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  47:&lt;/span&gt;         path.splice(0,1);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  48:&lt;/span&gt;         &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  49:&lt;/span&gt;         str = path.join(&lt;span style="color:#006080;"&gt;'.'&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  50:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(path.length &amp;gt; 1) str = str.substring(0, str.length);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  51:&lt;/span&gt;         &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  52:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; isDefined(str, scr);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  53:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  54:&lt;/span&gt;     &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  55:&lt;/span&gt;     _self.Ns = &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(str, scope) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  56:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(!scope) scope = &lt;span style="color:#006080;"&gt;'window'&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  57:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; path = str.split(&lt;span style="color:#006080;"&gt;'.'&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  58:&lt;/span&gt;         &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  59:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; scr = scope + &lt;span style="color:#006080;"&gt;'.'&lt;/span&gt; + path[0];&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  60:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(!IAT.Eval(scr)) IAT.Eval(scr + &lt;span style="color:#006080;"&gt;'={};'&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  61:&lt;/span&gt;         &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  62:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(path.length == 1) &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  63:&lt;/span&gt;         &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  64:&lt;/span&gt;         path.splice(0,1);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  65:&lt;/span&gt;         &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  66:&lt;/span&gt;         str = path.join(&lt;span style="color:#006080;"&gt;'.'&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  67:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(path.length &amp;gt; 1) str = str.substring(0, str.length);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  68:&lt;/span&gt;         &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  69:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Ns(str, scr);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  70:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  71:&lt;/span&gt;     &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  72:&lt;/span&gt;     _self.DefineClass = &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(config) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  73:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; parent = config.clsName.substring(0, config.clsName.lastIndexOf(&lt;span style="color:#006080;"&gt;'.'&lt;/span&gt;));&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  74:&lt;/span&gt;         _self.Ns(parent);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  75:&lt;/span&gt;         _waitingClasses.push(config);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  76:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; i = 0; i &amp;lt; config.refs.length; i++) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  77:&lt;/span&gt;             _self.Import(config.refs[i]);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  78:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  79:&lt;/span&gt;         processWaitingClasses();&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  80:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  81:&lt;/span&gt;     &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  82:&lt;/span&gt;     _self.Import = &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(clsName) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  83:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(isDefined(clsName)) &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  84:&lt;/span&gt;     &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  85:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; path = clsName.split(&lt;span style="color:#006080;"&gt;'.'&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  86:&lt;/span&gt;         path.splice(0,1);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  87:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; clsPath = path.join(&lt;span style="color:#006080;"&gt;'/'&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  88:&lt;/span&gt;         clsPath = clsPath.substring(0, clsPath.length);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  89:&lt;/span&gt;         &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  90:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; head = document.getElementsByTagName(&lt;span style="color:#006080;"&gt;'head'&lt;/span&gt;)[0];&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  91:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; script = document.createElement(&lt;span style="color:#006080;"&gt;'script'&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  92:&lt;/span&gt;         script.setAttribute(&lt;span style="color:#006080;"&gt;'type'&lt;/span&gt;,&lt;span style="color:#006080;"&gt;'text/javascript'&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  93:&lt;/span&gt;         script.setAttribute(&lt;span style="color:#006080;"&gt;'language'&lt;/span&gt;,&lt;span style="color:#006080;"&gt;'javascript'&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  94:&lt;/span&gt;         script.setAttribute(&lt;span style="color:#006080;"&gt;'src'&lt;/span&gt;,&lt;span style="color:#006080;"&gt;'Library/js/'&lt;/span&gt; + clsPath + &lt;span style="color:#006080;"&gt;'.js'&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  95:&lt;/span&gt;         head.appendChild(script);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  96:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  97:&lt;/span&gt; }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  98:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;(Before YUI Compressor)&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; IAT={};IAT.Eval=&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(scr,scope){&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; eval(scr)};&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; IAT.Importer=&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(){&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; a=&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; d=[];&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; c(){&lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; j=0;j&amp;lt;d.length;j++){&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; h=d[j].refs;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; l=[];&lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; g=0;g&amp;lt;h.length;g++){&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(b(h[g])){l.push(g)}}&lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; g=l.length-1;g&amp;gt;=0;g--){&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt; h.splice(l[g],1)}&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(d[j].refs.length&amp;lt;1){&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; f=d[j];d.splice(j,1);e(f);&lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;}}}&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; e(f){IAT.Eval(f.clsName+&lt;span style="color:#006080;"&gt;&amp;quot;=scope.cls();&amp;quot;&lt;/span&gt;,f);c()}&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; b(i,f){&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(!f){f=&lt;span style="color:#006080;"&gt;&amp;quot;window&amp;quot;&lt;/span&gt;}&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; h=i.split(&lt;span style="color:#006080;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; g=f+&lt;span style="color:#006080;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;+h[0];&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(!IAT.Eval(g)){&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;}&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(h.length==1){&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;}h.splice(0,1);i=h.join(&lt;span style="color:#006080;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(h.length&amp;gt;1){i=i.substring(0,i.length)}&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; b(i,g)}&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt; a.Ns=&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(i,f){&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(!f){f=&lt;span style="color:#006080;"&gt;&amp;quot;window&amp;quot;&lt;/span&gt;}&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; h=i.split(&lt;span style="color:#006080;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; g=f+&lt;span style="color:#006080;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;+h[0];&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(!IAT.Eval(g)){IAT.Eval(g+&lt;span style="color:#006080;"&gt;&amp;quot;={};&amp;quot;&lt;/span&gt;)}&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(h.length==1){&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;}h.splice(0,1);i=h.join(&lt;span style="color:#006080;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(h.length&amp;gt;1){i=i.substring(0,i.length)}&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Ns(i,g)};&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt; a.DefineClass=&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(f){&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; h=f.clsName.substring(0,f.clsName.lastIndexOf(&lt;span style="color:#006080;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;));&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt; a.Ns(h);d.push(f);&lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; g=0;g&amp;lt;f.refs.length;g++){&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt; a.Import(f.refs[g])}c()};a.Import=&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;(i){&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(b(i)){&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;}&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; j=i.split(&lt;span style="color:#006080;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt; j.splice(0,1);&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; f=j.join(&lt;span style="color:#006080;"&gt;&amp;quot;/&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt; f=f.substring(0,f.length);&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; h=document.getElementsByTagName(&lt;span style="color:#006080;"&gt;&amp;quot;head&amp;quot;&lt;/span&gt;)[0];&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  24:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; g=document.createElement(&lt;span style="color:#006080;"&gt;&amp;quot;script&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  25:&lt;/span&gt; g.setAttribute(&lt;span style="color:#006080;"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;,&lt;span style="color:#006080;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  26:&lt;/span&gt; g.setAttribute(&lt;span style="color:#006080;"&gt;&amp;quot;language&amp;quot;&lt;/span&gt;,&lt;span style="color:#006080;"&gt;&amp;quot;javascript&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  27:&lt;/span&gt; g.setAttribute(&lt;span style="color:#006080;"&gt;&amp;quot;src&amp;quot;&lt;/span&gt;,&lt;span style="color:#006080;"&gt;&amp;quot;Library/js/&amp;quot;&lt;/span&gt;+f+&lt;span style="color:#006080;"&gt;&amp;quot;.js&amp;quot;&lt;/span&gt;);h.appendChild(g)}};&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  28:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;(After YUI Compressor - Return lines added for &lt;em&gt;readability - &lt;/em&gt;&lt;strong&gt;Over a 25% savings!&lt;/strong&gt;)&lt;/p&gt;

&lt;p&gt;The character length drops from 1788 before compression to 1317 after. Any additional code that is added to this class not containing &lt;strong&gt;eval&lt;/strong&gt; will only increase the savings percentage; making your users' downloading experience that much snappier!&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/16/using-yui-compressor-with-eval.aspx&amp;amp;;subject=Using+YUI+Compressor+with+eval" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/16/using-yui-compressor-with-eval.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/16/using-yui-compressor-with-eval.aspx&amp;amp;;title=Using+YUI+Compressor+with+eval" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/16/using-yui-compressor-with-eval.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/16/using-yui-compressor-with-eval.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/16/using-yui-compressor-with-eval.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/16/using-yui-compressor-with-eval.aspx&amp;amp;title=Using+YUI+Compressor+with+eval" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/16/using-yui-compressor-with-eval.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/16/using-yui-compressor-with-eval.aspx&amp;amp;;title=Using+YUI+Compressor+with+eval" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/16/using-yui-compressor-with-eval.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/16/using-yui-compressor-with-eval.aspx&amp;amp;;title=Using+YUI+Compressor+with+eval&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/16/using-yui-compressor-with-eval.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=18673" width="1" height="1"&gt;</content><author><name>jacobl</name><uri>http://www.atalasoft.com/cs/members/jacobl.aspx</uri></author><category term="Deployment" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Deployment/default.aspx" /><category term="YUI" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/YUI/default.aspx" /><category term="JavaScript" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/JavaScript/default.aspx" /></entry><entry><title>Changing Maximum Upload Size in WSS 3.0 and MOSS 2007</title><link rel="alternate" type="text/html" href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/19/changing-maximum-upload-size-in-wss-3-0-and-moss-2007.aspx" /><id>http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/19/changing-maximum-upload-size-in-wss-3-0-and-moss-2007.aspx</id><published>2009-02-19T13:28:34Z</published><updated>2009-02-19T13:28:34Z</updated><content type="html">&lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/ChangingMaximumUploadSizein.0andMOSS2007_72AC/tmp22F_2.png"&gt;&lt;img style="border-right:0px;border-top:0px;margin:10px 0px;border-left:0px;border-bottom:0px;" height="163" alt="tmp22F" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/ChangingMaximumUploadSizein.0andMOSS2007_72AC/tmp22F_thumb.png" width="306" align="right" border="0" /&gt;&lt;/a&gt;Looking around the web, I found many articles describing how to do change the Maximum Upload Size in SharePoint, but for whatever reason, the options in the instructions were not available on my SharePoint installation. Blog posts by &lt;a href="http://blogs.msdn.com/joelo/archive/2007/06/27/file-name-length-size-and-invalid-character-restrictions-and-recommendations.aspx" target="_blank"&gt;Joel Oleson on File Name, Length, Size and Invalid Character Restrictions and Recommendations&lt;/a&gt; and &lt;a href="http://spsstuff.blogspot.com/2006/03/how-to-change-maximum-file-upload-size.html" target="_blank"&gt;this one by Ronnie Guha&lt;/a&gt; mention the &amp;quot;Configure Virtual Server Settings&amp;quot; area on the &amp;quot;Virtual Server List&amp;quot; page in Central Admin. Neither of these existed. After some poking around, here is the correct navigation for WSS 3.0 and MOSS 2007. I'm not sure when in the builds of WSS that this change occurred, so follow the set of directions apply to the options you have available.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Open &lt;strong&gt;Central Administration&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;Open the &lt;strong&gt;Application Management&lt;/strong&gt; tab. &lt;/li&gt;    &lt;li&gt;Choose &lt;strong&gt;Web Application General Settings &lt;/strong&gt;(take note that the url is /_admin/&lt;u&gt;vs&lt;/u&gt;generalsettings.aspx - that appears to prove its legacy in &lt;em&gt;Virtual Server&lt;/em&gt;). &lt;/li&gt;    &lt;li&gt;Scroll down until you find the section labeled &lt;strong&gt;Maximum Upload Size&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;Change away. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;There is an element in the web.config called &lt;strong&gt;httpRuntime&lt;/strong&gt;. The &lt;strong&gt;maxRequestLength&lt;/strong&gt; attribute (defaulted to 51200) is traditionally used to change the maximum file upload size in ASP.NET web applications, but does not appear to have any effect on SharePoint.&lt;/p&gt;  &lt;p&gt;I highly recommend you take a look at &lt;a href="http://blogs.msdn.com/joelo/archive/2007/06/27/file-name-length-size-and-invalid-character-restrictions-and-recommendations.aspx" target="_blank"&gt;Joel's post on this topic&lt;/a&gt; to get an idea of how you should set that value based on your needs, but these instructions should take you the rest of the way.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/19/changing-maximum-upload-size-in-wss-3-0-and-moss-2007.aspx&amp;amp;;subject=Changing+Maximum+Upload+Size+in+WSS+3.0+and+MOSS+2007" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/19/changing-maximum-upload-size-in-wss-3-0-and-moss-2007.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/19/changing-maximum-upload-size-in-wss-3-0-and-moss-2007.aspx&amp;amp;;title=Changing+Maximum+Upload+Size+in+WSS+3.0+and+MOSS+2007" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/19/changing-maximum-upload-size-in-wss-3-0-and-moss-2007.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/19/changing-maximum-upload-size-in-wss-3-0-and-moss-2007.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/19/changing-maximum-upload-size-in-wss-3-0-and-moss-2007.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/19/changing-maximum-upload-size-in-wss-3-0-and-moss-2007.aspx&amp;amp;title=Changing+Maximum+Upload+Size+in+WSS+3.0+and+MOSS+2007" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/19/changing-maximum-upload-size-in-wss-3-0-and-moss-2007.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/19/changing-maximum-upload-size-in-wss-3-0-and-moss-2007.aspx&amp;amp;;title=Changing+Maximum+Upload+Size+in+WSS+3.0+and+MOSS+2007" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/19/changing-maximum-upload-size-in-wss-3-0-and-moss-2007.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/19/changing-maximum-upload-size-in-wss-3-0-and-moss-2007.aspx&amp;amp;;title=Changing+Maximum+Upload+Size+in+WSS+3.0+and+MOSS+2007&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/19/changing-maximum-upload-size-in-wss-3-0-and-moss-2007.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17510" width="1" height="1"&gt;</content><author><name>jacobl</name><uri>http://www.atalasoft.com/cs/members/jacobl.aspx</uri></author><category term="IIS" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/IIS/default.aspx" /><category term="SharePoint" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/SharePoint/default.aspx" /><category term="WebConfig" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/WebConfig/default.aspx" /></entry><entry><title>SharePoint Best Practices - San Diego</title><link rel="alternate" type="text/html" href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/10/sharepoint-best-practices-san-diego.aspx" /><id>http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/10/sharepoint-best-practices-san-diego.aspx</id><published>2009-02-10T19:18:48Z</published><updated>2009-02-10T19:18:48Z</updated><content type="html">&lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePointBestPracticesSanDiego_90D4/bpbook_jpg_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;margin:0px 20px 5px 0px;border-left:0px;border-bottom:0px;" height="244" alt="bpbook_jpg" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePointBestPracticesSanDiego_90D4/bpbook_jpg_thumb.jpg" width="201" align="left" border="0" /&gt;&lt;/a&gt; I have to start off by saying that this was the best conference I've been to. Maybe that doesn't say much since I've only been to a handful, but it has topped them all. Last year, I attended conferences such as AJAX World and Microsoft's ReMix in Boston and they were OK at best. The SharePoint Best Practices show brought many of the industry leaders together in an effort to spread knowledge to a broad range of people in a broad range of sectors. From developers and system integrators to project managers and CIOs, SharePoint Best Practices didn't just sell SharePoint to people (I think its user base is beyond that); it taught them how to use it, why they'd want to, and what to do to get the most out of it without going insane. SharePoint is a great platform and I look forward to my continued work on it.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;My Agenda (Notable sessions)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;My goal at this show was to learn as much as possible about deployment, permissions, testing, and WebParts (namely &amp;quot;What can I do with a WebPart that doesn't seem normal?&amp;quot;). Every session I went to was fantastic, so I'll only highlight the ones that stood out.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Best Practices for Developing Web Parts : &lt;a href="http://sharepoint.mindsharpblogs.com/Todd/default.aspx" target="_blank"&gt;Todd Bleeker&lt;/a&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;While I was at this presentation, I decided to open an IM window and beam all of my notes about the talk to my colleague, &lt;a href="http://www.atalasoft.com/blogs/dterrell/" target="_blank"&gt;Dave Terrell&lt;/a&gt;. By the end of our conversation, we ended up buying a few copies of &lt;a href="http://www.amazon.com/Developers-SharePoint-Services-Platform-Programming/dp/1584505001" target="_blank"&gt;Todd's book, Developer's Guide to the Windows SharePoint Services v3 Platform&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Todd covered everything from packaging the WebPart into a solution as part of a feature to some of the cool things you can do with invisible web parts (I'll be exploring this more in a future post).&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Automating your test environments for SharePoint development using Hyper-V : &lt;a href="http://sharepointblogs.com/benrobb/default.aspx" target="_blank"&gt;Ben Robb&lt;/a&gt;&lt;/u&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Side note: On the last night, we ended up going to &lt;a href="http://www.andrewconnell.com/blog/archive/2008/02/18/SharePoint-by-Day-SharePint-by-Night-vSPC2008.aspx" target="_blank"&gt;SharePoint by Day SharePint by Night&lt;/a&gt; and I played pool with Ben. I must confess that I am absolutely terrible at pool. It didn't help that Ben is quite good at the game. Maybe I was imagining it, but I think heard him say he played &lt;a href="http://en.wikipedia.org/wiki/Snooker" target="_blank"&gt;snooker&lt;/a&gt; semi-professionally. It was a good time.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;During his talk, Ben discussed automating the provisioning of new SharePoint virtual machines for integration testing and development. One thing that we'll be adopting from this talk is the idea of a-new-machine-a-week. In this setup, every developer gets a fresh machine every Monday. This way, we know the machine is clean and there's no cruft that could cause issues in development.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Best Practices for Disposing SharePoint Objects : &lt;a href="http://sharepoint.mindsharpblogs.com/Todd/default.aspx" target="_blank"&gt;Todd Bleeker&lt;/a&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Besides going over the basics of properly disposing your SPWeb and SPSite objects that you create, Todd highlighted a new tool from Microsoft called &lt;a href="http://code.msdn.microsoft.com/SPDisposeCheck" target="_blank"&gt;SPDisposeCheck&lt;/a&gt;. It has been less than 2 business days since I left San Diego and it is already part of our build process here. Hopefully Microsoft will continue to improve the tool (namely fix the -xml output parameter). It's a great find.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Best Practices for Unit testing on SharePoint : &lt;a href="http://blogs.msdn.com/francischeung/" target="_blank"&gt;Francis Cheung&lt;/a&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;In an earlier talk in the conference, Francis discussed abstracting all SharePoint object model calls into Repository classes that made code easier to read and allowed your business logic to be tested outside of SharePoint. During this presentation, Francis explained how to test those repositories using &lt;a href="http://www.typemock.com/sharepointpage.php" target="_blank"&gt;TypeMock for SharePoint&lt;/a&gt;. It's a pay-for product, but is really the only way to get the job done (outside of mocking all of WSS yourself).&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Secure Coding Practices for the Administrator : &lt;a href="http://www.bluedoglimited.com/SharePointThoughts/default.aspx" target="_blank"&gt;Maurice Prather&lt;/a&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;This talk should have been called, &amp;quot;How to determine whether or not your third party solution provider has good SharePoint programming practices&amp;quot;. Maurice discussed how developers should be using CAS policies to specify what level of security their assemblies require, when to ask your vendor for more information about their GAC-deployed assemblies, and much more.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Using Elevated Privileges and Impersonation : &lt;a href="http://sharepoint.mindsharpblogs.com/Paul/default.aspx" target="_blank"&gt;Paul Schaeflein&lt;/a&gt; &amp;amp; &lt;a href="http://www.bluedoglimited.com/SharePointThoughts/default.aspx" target="_blank"&gt;Maurice Prather&lt;/a&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Paul started off by discussing what it means to &amp;quot;run with elevated privileges&amp;quot; and its differences with &amp;quot;impersonating as system account (or other users)&amp;quot;. I will post more on this topic in the coming days. These two concepts are very different and depend on what you are looking to do.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;More to Come&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This was an excellent conference and I got a lot out of it. This will surely shape future development. I will be posting more on each of these topics with how-tos and the like. If you want more information about any of these talks, post a comment to move them up my stack.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/10/sharepoint-best-practices-san-diego.aspx&amp;amp;;subject=SharePoint+Best+Practices+-+San+Diego" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/10/sharepoint-best-practices-san-diego.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/10/sharepoint-best-practices-san-diego.aspx&amp;amp;;title=SharePoint+Best+Practices+-+San+Diego" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/10/sharepoint-best-practices-san-diego.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/10/sharepoint-best-practices-san-diego.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/10/sharepoint-best-practices-san-diego.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/10/sharepoint-best-practices-san-diego.aspx&amp;amp;title=SharePoint+Best+Practices+-+San+Diego" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/10/sharepoint-best-practices-san-diego.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/10/sharepoint-best-practices-san-diego.aspx&amp;amp;;title=SharePoint+Best+Practices+-+San+Diego" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/10/sharepoint-best-practices-san-diego.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/10/sharepoint-best-practices-san-diego.aspx&amp;amp;;title=SharePoint+Best+Practices+-+San+Diego&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/10/sharepoint-best-practices-san-diego.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17447" width="1" height="1"&gt;</content><author><name>jacobl</name><uri>http://www.atalasoft.com/cs/members/jacobl.aspx</uri></author><category term="Conferences" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Conferences/default.aspx" /><category term="Deployment" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Deployment/default.aspx" /><category term="SharePoint" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/SharePoint/default.aspx" /><category term="Presentations" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Presentations/default.aspx" /><category term="Feature" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Feature/default.aspx" /></entry><entry><title>Installing SharePoint on Windows Vista</title><link rel="alternate" type="text/html" href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/16/installing-sharepoint-on-windows-vista.aspx" /><id>http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/16/installing-sharepoint-on-windows-vista.aspx</id><published>2009-01-16T12:52:00Z</published><updated>2009-01-16T12:52:00Z</updated><content type="html">&lt;p&gt;Check out this article &lt;a target="_blank" href="http://community.bamboosolutions.com/blogs/bambooteamblog/archive/2008/05/21/how-to-install-windows-sharepoint-services-3-0-sp1-on-vista-x64-x86.aspx"&gt;on Bamboo Solutions to install Windows SharePoint Services 3.0 SP1 on Vista x64/x86&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/InstallingSharePointonWindowsVista_9907/images.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;margin:0px 0px 10px 10px;border-left:0px;border-bottom:0px;" height="114" alt="images" width="148" align="right" border="0" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/InstallingSharePointonWindowsVista_9907/images_thumb.jpg"&gt;&lt;/a&gt; We use that here in our office for demo laptops. It allows us to get the best performance when demoing our SharePoint products at shows by letting us run SharePoint directly on the hardware instead of in a VM. This is definitely a case where two OSs are not better than one.&lt;/p&gt;  &lt;p&gt;I don't recommend that you use this for your development setup. It is a good idea to develop against WSS since it locks you into a feature set that makes your code deployable to both WSS and MOSS. But by installing SharePoint in a VM, you can roll back with snapshots. In this sort of Vista+SharePoint environment, if SharePoint bombs, you have little luck getting back without a system restore.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/16/installing-sharepoint-on-windows-vista.aspx&amp;amp;;subject=Installing+SharePoint+on+Windows+Vista" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/16/installing-sharepoint-on-windows-vista.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/16/installing-sharepoint-on-windows-vista.aspx&amp;amp;;title=Installing+SharePoint+on+Windows+Vista" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/16/installing-sharepoint-on-windows-vista.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/16/installing-sharepoint-on-windows-vista.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/16/installing-sharepoint-on-windows-vista.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/16/installing-sharepoint-on-windows-vista.aspx&amp;amp;title=Installing+SharePoint+on+Windows+Vista" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/16/installing-sharepoint-on-windows-vista.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/16/installing-sharepoint-on-windows-vista.aspx&amp;amp;;title=Installing+SharePoint+on+Windows+Vista" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/16/installing-sharepoint-on-windows-vista.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/16/installing-sharepoint-on-windows-vista.aspx&amp;amp;;title=Installing+SharePoint+on+Windows+Vista&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/16/installing-sharepoint-on-windows-vista.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17167" width="1" height="1"&gt;</content><author><name>jacobl</name><uri>http://www.atalasoft.com/cs/members/jacobl.aspx</uri></author><category term="SharePoint" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/SharePoint/default.aspx" /><category term="Vista" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Vista/default.aspx" /></entry><entry><title>Hristo Pavlov's Blog on AllowUnsafeUpdates in SharePoint</title><link rel="alternate" type="text/html" href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/14/hristo-pavlov-s-blog-on-allowunsafeupdates-in-sharepoint.aspx" /><id>http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/14/hristo-pavlov-s-blog-on-allowunsafeupdates-in-sharepoint.aspx</id><published>2009-01-14T19:05:00Z</published><updated>2009-01-14T19:05:00Z</updated><content type="html">&lt;p&gt;This is a great post. A lot of good research was done to get to the bottom of this complicated topic.&lt;/p&gt;  &lt;p&gt;Check it out here: &lt;a href="http://hristopavlov.wordpress.com/2008/05/16/what-you-need-to-know-about-allowunsafeupdates/" target="_blank"&gt;What You Need to Know About AllowUnsafeUpdates&lt;/a&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/14/hristo-pavlov-s-blog-on-allowunsafeupdates-in-sharepoint.aspx&amp;amp;;subject=Hristo+Pavlov%27s+Blog+on+AllowUnsafeUpdates+in+SharePoint" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/14/hristo-pavlov-s-blog-on-allowunsafeupdates-in-sharepoint.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/14/hristo-pavlov-s-blog-on-allowunsafeupdates-in-sharepoint.aspx&amp;amp;;title=Hristo+Pavlov%27s+Blog+on+AllowUnsafeUpdates+in+SharePoint" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/14/hristo-pavlov-s-blog-on-allowunsafeupdates-in-sharepoint.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/14/hristo-pavlov-s-blog-on-allowunsafeupdates-in-sharepoint.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/14/hristo-pavlov-s-blog-on-allowunsafeupdates-in-sharepoint.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/14/hristo-pavlov-s-blog-on-allowunsafeupdates-in-sharepoint.aspx&amp;amp;title=Hristo+Pavlov%27s+Blog+on+AllowUnsafeUpdates+in+SharePoint" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/14/hristo-pavlov-s-blog-on-allowunsafeupdates-in-sharepoint.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/14/hristo-pavlov-s-blog-on-allowunsafeupdates-in-sharepoint.aspx&amp;amp;;title=Hristo+Pavlov%27s+Blog+on+AllowUnsafeUpdates+in+SharePoint" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/14/hristo-pavlov-s-blog-on-allowunsafeupdates-in-sharepoint.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/14/hristo-pavlov-s-blog-on-allowunsafeupdates-in-sharepoint.aspx&amp;amp;;title=Hristo+Pavlov%27s+Blog+on+AllowUnsafeUpdates+in+SharePoint&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/14/hristo-pavlov-s-blog-on-allowunsafeupdates-in-sharepoint.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17100" width="1" height="1"&gt;</content><author><name>jacobl</name><uri>http://www.atalasoft.com/cs/members/jacobl.aspx</uri></author><category term="SharePoint" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/SharePoint/default.aspx" /></entry><entry><title>SharePoint Saturday: Developing and Packaging a Third Party SharePoint Solution</title><link rel="alternate" type="text/html" href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/sharepoint-saturday-developing-and-packaging-a-third-party-sharepoint-solution.aspx" /><id>http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/sharepoint-saturday-developing-and-packaging-a-third-party-sharepoint-solution.aspx</id><published>2009-01-12T15:34:44Z</published><updated>2009-01-12T15:34:44Z</updated><content type="html">&lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePointSaturdayDevelopingandPackaging_6ED0/SharePointSat2VA-emaillarge_2.png"&gt;&lt;img style="border-right:0px;border-top:0px;margin:0px 0px 10px 10px;border-left:0px;border-bottom:0px;" height="109" alt="SharePointSat2VA-emaillarge" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePointSaturdayDevelopingandPackaging_6ED0/SharePointSat2VA-emaillarge_thumb.png" width="260" align="right" border="0" /&gt;&lt;/a&gt; Here are some notes from my presentation at &lt;a href="http://www.sharepointsaturday.org/Pages/Default.aspx" target="_blank"&gt;SharePoint Saturday&lt;/a&gt; this past weekend in Virginia Beach, VA. Included are my slides, code that I demo'd, and hopefully answers to all of the questions that people asked.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Slides&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Download &lt;a href="http://www.atalasoft.com/cs/files/folders/17150/download.aspx" target="_blank"&gt;my slides in PDF form&lt;/a&gt; for quick reference.&lt;/p&gt;  &lt;p&gt;Download &lt;a href="http://www.atalasoft.com/cs/files/folders/17147/download.aspx" target="_blank"&gt;my slides as a QuickTime movie&lt;/a&gt; to view the presentation with all animations. Unfortunately, to keep the file size low, I had to sacrifice a lot of quality. I suggest you download both the PDF and movie to get the full effect.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Code&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The Feature that we worked on uses a toolkit called DotImage. If you're interested in using the feature for testing, feel free to &lt;a href="http://www.atalasoft.com/download/downloadDotImage.aspx" target="_blank"&gt;get an evaluation license&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Download &lt;a href="http://www.atalasoft.com/cs/files/folders/17152/download.aspx" target="_blank"&gt;the source code&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Download &lt;a href="http://www.atalasoft.com/cs/files/folders/17153/download.aspx" target="_blank"&gt;the WSP file&lt;/a&gt; (you will need to get an evaluation license for DotImage)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SPWebConfigModification&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Here are links to Dave Terrell's 6 part series on using the SPWebConfigModification object to edit the web config of a given Web Application in SharePoint.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/dterrell/archive/2008/10/08/using-spwebconfigmodification-part-1.aspx" target="_blank"&gt;The Problem&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/dterrell/archive/2008/10/08/using-spwebconfigmodification-part-2.aspx" target="_blank"&gt;Take this for example...&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/dterrell/archive/2008/10/08/using-spwebconfigmodification-part-3.aspx" target="_blank"&gt;Time for some code&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/dterrell/archive/2008/10/08/using-spwebconfigmodification-part-4.aspx" target="_blank"&gt;Why doesn't this work?&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/dterrell/archive/2008/10/08/using-spwebconfigmodification-part-5.aspx" target="_blank"&gt;The Remedy&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/dterrell/archive/2008/10/08/using-spwebconfigmodification-part-6.aspx" target="_blank"&gt;Putting it to work&lt;/a&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;WSPBuilder&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Check out &lt;a href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/wspbuilder-generate-sharepoint-solution-files.aspx" target="_blank"&gt;my short blog post on WSPBuilder&lt;/a&gt; with instructions on how to use it in a NAnt build script.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SharePoint Solution Installer&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I will post a more extensive article with instructions on how to use this product and some ideas on how it might be improved, but for now, you can find the &lt;a href="http://www.codeplex.com/sharepointinstaller" target="_blank"&gt;SharePoint Solution installer on CodePlex&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;AllowUnsafeUpdates&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Check out &lt;a href="http://hristopavlov.wordpress.com/2008/05/16/what-you-need-to-know-about-allowunsafeupdates/" target="_blank"&gt;Hristo Pavlov's blog on AllowUnsafeUpdates here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;My Presentation Setup&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePointSaturdayDevelopingandPackaging_6ED0/Picture%201_2.png"&gt;&lt;img style="border-right:0px;border-top:0px;margin:0px 10px 10px 0px;border-left:0px;border-bottom:0px;" height="170" alt="Picture 1" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePointSaturdayDevelopingandPackaging_6ED0/Picture%201_thumb.png" width="260" align="left" border="0" /&gt;&lt;/a&gt;&lt;/u&gt;Here's a little more detail on the setup I used in my presentation: the computers I was using, which ones were VMs, how I switched between them and my slides, what presentation software I used, and how I tied it all together.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;SharePoint Box&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Since SharePoint is a bit of a beast, I decided to run it on an external machine. It was running on a Sony Viao with Vista. WSS 3.0 was installed directly on Vista. I will post on that in a week or so explaining how that's possible with steps on getting it done yourself.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Visual Studio Machine&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;I prefer to run Visual Studio on a different machine that I run SharePoint. The primary reason for this is so that I can quickly revert the VM that's running SharePoint in my development cycle without worrying about losing work.&lt;/p&gt;  &lt;p&gt;For my presentation, I ran Visual Studio on a virtual machine in &lt;a href="http://www.vmware.com/products/fusion/" target="_blank"&gt;VMWare Fusion for Mac&lt;/a&gt; running Windows XP Pro.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Tying them Together&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Since there was no guarantee of wireless offered at the &lt;a href="http://www.vbatc.com/" target="_blank"&gt;Advanced Technology Center&lt;/a&gt;, I made sure I was all set by hosting a wireless network from my Mac and connecting to it from the Vista laptop. From there, I was able to remote in and get to SharePoint.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Presentation Software&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;I enjoy using Apple's &lt;a href="http://www.apple.com/iwork/keynote/" target="_blank"&gt;Keynote&lt;/a&gt; software. It lets me make very attractive slides and is very easy to use. Plus, it exports to many formats that anyone can read without losing anything like transitions or animations.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Switching between Everything&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;To switch between my slides and my 2 demo machines, I used a built-in Mac feature called &lt;a href="http://www.apple.com/macosx/features/spaces.html" target="_blank"&gt;Spaces&lt;/a&gt;. It's a beautiful implementation of multiple-desktops.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePointSaturdayDevelopingandPackaging_6ED0/Picture%202_2.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="286" alt="Picture 2" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePointSaturdayDevelopingandPackaging_6ED0/Picture%202_thumb.png" width="446" border="0" /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/sharepoint-saturday-developing-and-packaging-a-third-party-sharepoint-solution.aspx&amp;amp;;subject=SharePoint+Saturday%3a+Developing+and+Packaging+a+Third+Party+SharePoint+Solution" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/sharepoint-saturday-developing-and-packaging-a-third-party-sharepoint-solution.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/sharepoint-saturday-developing-and-packaging-a-third-party-sharepoint-solution.aspx&amp;amp;;title=SharePoint+Saturday%3a+Developing+and+Packaging+a+Third+Party+SharePoint+Solution" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/sharepoint-saturday-developing-and-packaging-a-third-party-sharepoint-solution.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/sharepoint-saturday-developing-and-packaging-a-third-party-sharepoint-solution.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/sharepoint-saturday-developing-and-packaging-a-third-party-sharepoint-solution.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/sharepoint-saturday-developing-and-packaging-a-third-party-sharepoint-solution.aspx&amp;amp;title=SharePoint+Saturday%3a+Developing+and+Packaging+a+Third+Party+SharePoint+Solution" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/sharepoint-saturday-developing-and-packaging-a-third-party-sharepoint-solution.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/sharepoint-saturday-developing-and-packaging-a-third-party-sharepoint-solution.aspx&amp;amp;;title=SharePoint+Saturday%3a+Developing+and+Packaging+a+Third+Party+SharePoint+Solution" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/sharepoint-saturday-developing-and-packaging-a-third-party-sharepoint-solution.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/sharepoint-saturday-developing-and-packaging-a-third-party-sharepoint-solution.aspx&amp;amp;;title=SharePoint+Saturday%3a+Developing+and+Packaging+a+Third+Party+SharePoint+Solution&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/sharepoint-saturday-developing-and-packaging-a-third-party-sharepoint-solution.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17156" width="1" height="1"&gt;</content><author><name>jacobl</name><uri>http://www.atalasoft.com/cs/members/jacobl.aspx</uri></author><category term="Conferences" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Conferences/default.aspx" /><category term="ASP.NET" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/ASP.NET/default.aspx" /><category term="Deployment" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Deployment/default.aspx" /><category term="SharePoint" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/SharePoint/default.aspx" /><category term="Presentations" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Presentations/default.aspx" /><category term="Feature" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Feature/default.aspx" /></entry><entry><title>WSPBuilder: Generate SharePoint Solution Files</title><link rel="alternate" type="text/html" href="http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/wspbuilder-generate-sharepoint-solution-files.aspx" /><id>http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/wspbuilder-generate-sharepoint-solution-files.aspx</id><published>2009-01-12T12:40:00Z</published><updated>2009-01-12T12:40:00Z</updated><content type="html">&lt;p&gt;There's a project on CodePlex called &lt;a href="http://www.codeplex.com/wspbuilder" target="_blank"&gt;WSPBuilder&lt;/a&gt;. It's a console application that gets you from a given folder structure to a SharePoint Solution file. It would be nice if it was a NAnt / MSBuild task, but since it's an exe, calling it from your build script is trivial already.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Folder Structure&lt;/b&gt;&lt;/p&gt;  &lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;   &lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;     &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;"&gt;12&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;    TEMPLATE&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;"&gt;        CONTROLTEMPLATES&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;        FEATURES&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;"&gt;        LAYOUTS&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;        XML&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;"&gt;    (anything you want to go &lt;span&gt;in&lt;/span&gt; the 12 hive. just add any other folders)&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;GAC&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;"&gt;    (any assemblies you would like deployed to the GAC)&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;80&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;"&gt;    BIN&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;    (anything you want to go &lt;span&gt;in&lt;/span&gt; the web application's &lt;span&gt;virtual&lt;/span&gt; directory)&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;"&gt;solutionid.txt&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;b&gt;Sample Console Call from NAnt&lt;/b&gt;&lt;/p&gt;

&lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;
  &lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;
    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;"&gt;&amp;lt;exec program=&lt;span&gt;"C:\Path\to\WSPBuilder.exe"&lt;/span&gt; commandline=&lt;span&gt;"-DLLReferencePath GAC -WSPName OutputSolutionFileName.wsp -TraceLevel Verbose"&lt;/span&gt; workingdir=&lt;span&gt;"C:\Path\to\Solution\Folder\Structure"&lt;/span&gt; /&amp;gt;&lt;/pre&gt;

    &lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;"&gt;&amp;nbsp;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/wspbuilder-generate-sharepoint-solution-files.aspx&amp;amp;;subject=WSPBuilder%3a+Generate+SharePoint+Solution+Files" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/wspbuilder-generate-sharepoint-solution-files.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/wspbuilder-generate-sharepoint-solution-files.aspx&amp;amp;;title=WSPBuilder%3a+Generate+SharePoint+Solution+Files" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/wspbuilder-generate-sharepoint-solution-files.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/wspbuilder-generate-sharepoint-solution-files.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/wspbuilder-generate-sharepoint-solution-files.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/wspbuilder-generate-sharepoint-solution-files.aspx&amp;amp;title=WSPBuilder%3a+Generate+SharePoint+Solution+Files" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/wspbuilder-generate-sharepoint-solution-files.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/wspbuilder-generate-sharepoint-solution-files.aspx&amp;amp;;title=WSPBuilder%3a+Generate+SharePoint+Solution+Files" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/wspbuilder-generate-sharepoint-solution-files.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/wspbuilder-generate-sharepoint-solution-files.aspx&amp;amp;;title=WSPBuilder%3a+Generate+SharePoint+Solution+Files&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/wspbuilder-generate-sharepoint-solution-files.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17077" width="1" height="1"&gt;</content><author><name>jacobl</name><uri>http://www.atalasoft.com/cs/members/jacobl.aspx</uri></author><category term="NAnt" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/NAnt/default.aspx" /><category term="Build Systems" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Build+Systems/default.aspx" /><category term="SharePoint" scheme="http://www.atalasoft.com/cs/blogs/jake/archive/tags/SharePoint/default.aspx" /></entry></feed>