<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.atalasoft.com/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Jake Opines</title><link>http://www.atalasoft.com/cs/blogs/jake/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Events to Expect when Dynamically Loading iFrames in JavaScript</title><link>http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/18/events-to-expect-when-dynamically-loading-iframes-in-javascript.aspx</link><pubDate>Thu, 18 Jun 2009 11:49:52 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:18680</guid><dc:creator>jacobl</dc:creator><slash:comments>0</slash:comments><comments>http://www.atalasoft.com/cs/blogs/jake/comments/18680.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/jake/commentrss.aspx?PostID=18680</wfw:commentRss><description>&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-right:0px;border-top:0px;border-left:0px;border-bottom: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;</description><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Browsers/default.aspx">Browsers</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/UI/default.aspx">UI</category></item><item><title>Using YUI Compressor with eval</title><link>http://www.atalasoft.com/cs/blogs/jake/archive/2009/06/16/using-yui-compressor-with-eval.aspx</link><pubDate>Tue, 16 Jun 2009 12:16:53 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:18673</guid><dc:creator>jacobl</dc:creator><slash:comments>0</slash:comments><comments>http://www.atalasoft.com/cs/blogs/jake/comments/18673.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/jake/commentrss.aspx?PostID=18673</wfw:commentRss><description>&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;</description><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Deployment/default.aspx">Deployment</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/YUI/default.aspx">YUI</category></item><item><title>Changing Maximum Upload Size in WSS 3.0 and MOSS 2007</title><link>http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/19/changing-maximum-upload-size-in-wss-3-0-and-moss-2007.aspx</link><pubDate>Thu, 19 Feb 2009 13:28:34 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17510</guid><dc:creator>jacobl</dc:creator><slash:comments>0</slash:comments><comments>http://www.atalasoft.com/cs/blogs/jake/comments/17510.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/jake/commentrss.aspx?PostID=17510</wfw:commentRss><description>&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;</description><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/IIS/default.aspx">IIS</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/WebConfig/default.aspx">WebConfig</category></item><item><title>SharePoint Best Practices - San Diego</title><link>http://www.atalasoft.com/cs/blogs/jake/archive/2009/02/10/sharepoint-best-practices-san-diego.aspx</link><pubDate>Tue, 10 Feb 2009 19:18:48 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17447</guid><dc:creator>jacobl</dc:creator><slash:comments>0</slash:comments><comments>http://www.atalasoft.com/cs/blogs/jake/comments/17447.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/jake/commentrss.aspx?PostID=17447</wfw:commentRss><description>&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;</description><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Conferences/default.aspx">Conferences</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Deployment/default.aspx">Deployment</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Feature/default.aspx">Feature</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Presentations/default.aspx">Presentations</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Installing SharePoint on Windows Vista</title><link>http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/16/installing-sharepoint-on-windows-vista.aspx</link><pubDate>Fri, 16 Jan 2009 12:52:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17167</guid><dc:creator>jacobl</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/jake/comments/17167.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/jake/commentrss.aspx?PostID=17167</wfw:commentRss><description>&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;</description><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Vista/default.aspx">Vista</category></item><item><title>Hristo Pavlov's Blog on AllowUnsafeUpdates in SharePoint</title><link>http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/14/hristo-pavlov-s-blog-on-allowunsafeupdates-in-sharepoint.aspx</link><pubDate>Wed, 14 Jan 2009 19:05:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17100</guid><dc:creator>jacobl</dc:creator><slash:comments>0</slash:comments><comments>http://www.atalasoft.com/cs/blogs/jake/comments/17100.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/jake/commentrss.aspx?PostID=17100</wfw:commentRss><description>&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;</description><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>SharePoint Saturday: Developing and Packaging a Third Party SharePoint Solution</title><link>http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/sharepoint-saturday-developing-and-packaging-a-third-party-sharepoint-solution.aspx</link><pubDate>Mon, 12 Jan 2009 15:34:44 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17156</guid><dc:creator>jacobl</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/jake/comments/17156.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/jake/commentrss.aspx?PostID=17156</wfw:commentRss><description>&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;</description><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Conferences/default.aspx">Conferences</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Deployment/default.aspx">Deployment</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Feature/default.aspx">Feature</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Presentations/default.aspx">Presentations</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>WSPBuilder: Generate SharePoint Solution Files</title><link>http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/12/wspbuilder-generate-sharepoint-solution-files.aspx</link><pubDate>Mon, 12 Jan 2009 12:40:00 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17077</guid><dc:creator>jacobl</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/jake/comments/17077.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/jake/commentrss.aspx?PostID=17077</wfw:commentRss><description>&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;</description><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Build+Systems/default.aspx">Build Systems</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/NAnt/default.aspx">NAnt</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>KeepAlive for the DotImage WebThumbnailViewer</title><link>http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/09/keepalive-for-the-dotimage-webthumbnailviewer.aspx</link><pubDate>Fri, 09 Jan 2009 13:20:27 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17073</guid><dc:creator>jacobl</dc:creator><slash:comments>0</slash:comments><comments>http://www.atalasoft.com/cs/blogs/jake/comments/17073.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/jake/commentrss.aspx?PostID=17073</wfw:commentRss><description>&lt;p&gt;This is my third post on the topic of using a simple Java&lt;b&gt;&lt;/b&gt;Script call to keep a server session alive. My first post was on &lt;a href="http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/19/creating-a-simple-ajax-keepalive.aspx" target="_blank"&gt;keeping a generic IIS session alive by reloading a hidden GIF&lt;/a&gt;, my second was related directly to &lt;a href="http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/31/keepalive-for-the-dotimage-webimageviewer.aspx" target="_blank"&gt;keeping session state alive for the WebImageViewer&lt;/a&gt;, and this post will address the WebThumbnailViewer.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Using the WebThumbnailViewer with the WebImageViewer&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If you're interested in keeping a session alive for a page that contains both a WebImageViewer and a WebThumbnailViewer working in tandem, you only need to keep the session for the WebImageViewer alive since they share the same stamp file in the AtalaCache. However, if you are using just the WebThumbnailViewer, this blog is for you.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Server Side&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Luckily, you need not make any change to your code-behind. There is something very simple that we can call in DotImage on the client-side that will do the job for us.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Client Side&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is super simple. WebThumbnailViewer has an UpdateThumb call that does a round trip to the server, requests a thumb, and serves it. This causes the state keepalive that we are looking for.&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; keepAliveIframe = &lt;span style="color:#0000ff;"&gt;null&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;function&lt;/span&gt; KeepAlive(){&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;     WebThumbnailViewer1.UpdateThumb(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;   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; setInterval(&lt;span style="color:#006080;"&gt;'KeepAlive();'&lt;/span&gt;, &lt;span style="color:#006080;"&gt;'900000'&lt;/span&gt;);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;That's it. Just add that function to your page and you'll be all set. Don't forget to update the setInterval duration to something that makes sense for your deployments. 900,000 milliseconds is 15 minutes so that should work in most cases.&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/09/keepalive-for-the-dotimage-webthumbnailviewer.aspx&amp;amp;;subject=KeepAlive+for+the+DotImage+WebThumbnailViewer" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/09/keepalive-for-the-dotimage-webthumbnailviewer.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/09/keepalive-for-the-dotimage-webthumbnailviewer.aspx&amp;amp;;title=KeepAlive+for+the+DotImage+WebThumbnailViewer" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/09/keepalive-for-the-dotimage-webthumbnailviewer.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/09/keepalive-for-the-dotimage-webthumbnailviewer.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/09/keepalive-for-the-dotimage-webthumbnailviewer.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/09/keepalive-for-the-dotimage-webthumbnailviewer.aspx&amp;amp;title=KeepAlive+for+the+DotImage+WebThumbnailViewer" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/09/keepalive-for-the-dotimage-webthumbnailviewer.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/09/keepalive-for-the-dotimage-webthumbnailviewer.aspx&amp;amp;;title=KeepAlive+for+the+DotImage+WebThumbnailViewer" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/09/keepalive-for-the-dotimage-webthumbnailviewer.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/09/keepalive-for-the-dotimage-webthumbnailviewer.aspx&amp;amp;;title=KeepAlive+for+the+DotImage+WebThumbnailViewer&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/09/keepalive-for-the-dotimage-webthumbnailviewer.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17073" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Keep+Alive/default.aspx">Keep Alive</category></item><item><title>SharePoint Check Out Policy Honoring</title><link>http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/07/sharepoint-check-out-policy-honoring.aspx</link><pubDate>Wed, 07 Jan 2009 12:17:22 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17035</guid><dc:creator>jacobl</dc:creator><slash:comments>0</slash:comments><comments>http://www.atalasoft.com/cs/blogs/jake/comments/17035.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/jake/commentrss.aspx?PostID=17035</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePointCheckOutPolicyHonoring_9FA3/image_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin:0px 0px 10px 10px;border-right-width:0px;" height="89" alt="image" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePointCheckOutPolicyHonoring_9FA3/image_thumb_1.png" width="270" align="right" border="0" /&gt;&lt;/a&gt;When writing a piece of Document Imaging software for SharePoint (such as &lt;a href="http://www.vizitsp.com/" target="_blank"&gt;VizitSP&lt;/a&gt;), it's likely that you'll need to worry about saving changes to files. This post will explore the different options there are and what compromises need to be made when deciding how to honor a SharePoint list's check out policy.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What Would Microsoft Do?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In almost every case, we tend to ask ourselves, &amp;quot;What would Microsoft do?&amp;quot;. The debate as to whether a decision they made is the right one can be made elsewhere. The point is, Microsoft decided to do something a certain way, and now all of your customers are used to that behavior - right or not.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePointCheckOutPolicyHonoring_9FA3/image_14.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin:0px 10px 5px 0px;border-right-width:0px;" height="136" alt="image" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePointCheckOutPolicyHonoring_9FA3/image_thumb_6.png" width="166" align="left" border="0" /&gt;&lt;/a&gt; As far as document editing tools go, Microsoft Office is the only piece of software that is integrated into SharePoint out-of-the-box. When viewing a Document Library that has Microsoft Word documents in it, you can easily choose to Edit the doc directly in Word. When you're done editing, you can save it directly back into SharePoint from Office and continue browsing without downloading anything. Vizit is very similar, but from the raster-image side of the fence. We need to make sure that we behave as much like Office as possible; checking files out when you'd expect them to be checked out, checking them in when it makes sense, and offering the same menus and options as you would see when editing Word documents.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A List by Another Name&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Many would argue that Document Libraries are simply an extension of the Generic List. In almost every respect they would be correct. They behave the same, they both contain list items and can have &amp;quot;folders&amp;quot;, and they both live in Sites. They place where they differ is in two critical areas regarding documents. Association and Versioning.&lt;/p&gt;  &lt;p&gt;Items in a Document Library have a one-to-one correspondence with an SPFile. SPListItem.File is a direct pointer to the document in question. Items in a Generic List have a one-to-many correspondence with its attachments. SPListItem.Attachments is an SPAttachmentCollection (a glorified string array) that contains the names of the files attached to it. Recently, I posted a blog in how to &lt;a href="http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/29/download-attachments-from-sharepoint-listitems.aspx" target="_blank"&gt;get at list item attachments&lt;/a&gt;. Looks like Microsoft glossed over this one.&lt;/p&gt;  &lt;p&gt;Document Libraries offer a versioning feature. Files can be checked out, checked in, published, etc. List Item attachments in Lists are missing the UI to do this. You can't check out, check in, publish. If that was the intended behavior, it would be nice if the object model reflected that decision. Unfortunately, the same object is used to represent a List Item attachment as is used to represent a file in a Document Library. Through the object model, you can check attachments out, check them in, etc. This is inconsistent at best. If you aren't aware that this is how things work, you are likely to put SharePoint into a state that's not trivial to get out of.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Why Can't I Delete this Attachment?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;From the little bit of testing that I did, I discovered that attachment exhibit a strange behavior when they are checked out. From the SharePoint web page, you have no way of knowing that a given attachment is checked out. If you attempt to delete an attachment, it will seemingly go away. But, by simply refreshing the Edit Item page, the attachments reappear. Nothing was deleted!&lt;/p&gt;  &lt;p&gt;The only way I was able to successfully delete an attachment that was checked out through the object model was to delete the entire item it was attached to. I didn't look to see if the attachment was actually deleted via the object model, but my guess is that it is still in there... but with nothing pointing to it. Not cool.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What to Do?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Seemingly, the best question we can ask ourselves is &amp;quot;What Would Microsoft Do?&amp;quot;. Fortunately, they punted on this problem as well, not offering Office integration with List Item attachments. If you want to edit an attachment, you must download it, edit it, and reattach it, hoping that no one else is doing the same thing. Otherwise, it's a race to see who gets there last and steps on the other's changes.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;One-Uping Microsoft&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePointCheckOutPolicyHonoring_9FA3/image_12.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin:0px 10px 10px 0px;border-right-width:0px;" height="36" alt="image" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/SharePointCheckOutPolicyHonoring_9FA3/image_thumb_5.png" width="136" align="right" border="0" /&gt;&lt;/a&gt;Doing Microsoft one better isn't too complicated in this case. We can offer users the ability to one-click edit raster images through VizitSP while maintaining the checkoutless model they provide for attachments. There's little we can do in this case until Microsoft offers the UI to check attachments back in after an aborted edit.&lt;/p&gt;  &lt;p&gt;For those of you out there that would rather deal with the occasional support call asking how to get them back to normal, it is fairly easy to add some UI to your own app that lets them check the file back in. Just hope and pray they don't uninstall your app before they phone in.&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/07/sharepoint-check-out-policy-honoring.aspx&amp;amp;;subject=SharePoint+Check+Out+Policy+Honoring" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/07/sharepoint-check-out-policy-honoring.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/07/sharepoint-check-out-policy-honoring.aspx&amp;amp;;title=SharePoint+Check+Out+Policy+Honoring" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/07/sharepoint-check-out-policy-honoring.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/07/sharepoint-check-out-policy-honoring.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/07/sharepoint-check-out-policy-honoring.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/07/sharepoint-check-out-policy-honoring.aspx&amp;amp;title=SharePoint+Check+Out+Policy+Honoring" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/07/sharepoint-check-out-policy-honoring.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/07/sharepoint-check-out-policy-honoring.aspx&amp;amp;;title=SharePoint+Check+Out+Policy+Honoring" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/07/sharepoint-check-out-policy-honoring.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/07/sharepoint-check-out-policy-honoring.aspx&amp;amp;;title=SharePoint+Check+Out+Policy+Honoring&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/07/sharepoint-check-out-policy-honoring.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17035" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Getting SharePoint to Tell You More about that &quot;Unexpected Error&quot;</title><link>http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/05/getting-sharepoint-to-tell-you-more-about-that-unexpected-error.aspx</link><pubDate>Mon, 05 Jan 2009 12:05:39 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17034</guid><dc:creator>jacobl</dc:creator><slash:comments>0</slash:comments><comments>http://www.atalasoft.com/cs/blogs/jake/comments/17034.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/jake/commentrss.aspx?PostID=17034</wfw:commentRss><description>&lt;p&gt;If you're developing for SharePoint, you've undoubtedly encountered the oh-so-vague Unexpected Error. This blog will show you what changes need to be made to the web.config to make SharePoint tell you more.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Which Web.Config?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;To find out which web config you should modify depends on your setup. Chances are, you can simply modify the one located in the root of the virtual directory associated with the web application that's causing the problems. To get there, follow these steps:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Open Windows Explorer. &lt;/li&gt;    &lt;li&gt;Navigate to C:\inetpub\wwwroot\wss\Virtual Directories\ &lt;/li&gt;    &lt;li&gt;Here are all the web applications you have in IIS. Choose the one that's name corresponds to the port number of the web app you're looking for. &lt;/li&gt;    &lt;li&gt;Open said web.config. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;The Changes&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There are four in total, and here they are:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Search for the word &amp;quot;&lt;em&gt;callstack&lt;/em&gt;&amp;quot;. The line will look like this:       &lt;br /&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:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;SafeMode&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;MaxControls&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;200&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;CallStack&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;DirectFileDependencies&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;10&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;TotalFileDependencies&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;50&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;AllowPageLevelTrace&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;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;&amp;#160;&lt;/pre&gt;
      &lt;/div&gt;
    &lt;/div&gt;
Set the value of the &lt;strong&gt;CallStack&lt;/strong&gt; attribute to &lt;strong&gt;true&lt;/strong&gt;. 

    &lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Search for the word &amp;quot;&lt;em&gt;customerrors&lt;/em&gt;&amp;quot;. That line looks like this: 

    &lt;br /&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:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;customErrors&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;mode&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;On&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
      &lt;/div&gt;
    &lt;/div&gt;
Set the value of the &lt;strong&gt;mode&lt;/strong&gt; attribute to &lt;strong&gt;Off &lt;/strong&gt;or &lt;strong&gt;RemoteOnly&lt;/strong&gt;. Hopefully, you are doing all of this debugging on a test server so turning custom errors off entirely shouldn't be a big deal.&amp;#160; &lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Search for the word &amp;quot;&lt;em&gt;batch&lt;/em&gt;&amp;quot;. This last line looks like this: 

    &lt;br /&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:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;compilation&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;batch&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;debug&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
      &lt;/div&gt;
    &lt;/div&gt;
Set the value of the &lt;strong&gt;batch&lt;/strong&gt; attribute and &lt;strong&gt;debug&lt;/strong&gt; attribute to &lt;strong&gt;true&lt;/strong&gt;. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Next&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, go back to your page and hit refresh. You will see a much better error message and hopefully a stack trace pointing to your problem. If the Unexpected Error message didn't change, make sure you're web.config changes took hold by either resetting IIS entirely or recycling your application pool.&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/05/getting-sharepoint-to-tell-you-more-about-that-unexpected-error.aspx&amp;amp;;subject=Getting+SharePoint+to+Tell+You+More+about+that+%26quot%3bUnexpected+Error%26quot%3b" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/05/getting-sharepoint-to-tell-you-more-about-that-unexpected-error.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/05/getting-sharepoint-to-tell-you-more-about-that-unexpected-error.aspx&amp;amp;;title=Getting+SharePoint+to+Tell+You+More+about+that+%26quot%3bUnexpected+Error%26quot%3b" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/05/getting-sharepoint-to-tell-you-more-about-that-unexpected-error.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/05/getting-sharepoint-to-tell-you-more-about-that-unexpected-error.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/05/getting-sharepoint-to-tell-you-more-about-that-unexpected-error.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/05/getting-sharepoint-to-tell-you-more-about-that-unexpected-error.aspx&amp;amp;title=Getting+SharePoint+to+Tell+You+More+about+that+%26quot%3bUnexpected+Error%26quot%3b" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/05/getting-sharepoint-to-tell-you-more-about-that-unexpected-error.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/05/getting-sharepoint-to-tell-you-more-about-that-unexpected-error.aspx&amp;amp;;title=Getting+SharePoint+to+Tell+You+More+about+that+%26quot%3bUnexpected+Error%26quot%3b" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/05/getting-sharepoint-to-tell-you-more-about-that-unexpected-error.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/05/getting-sharepoint-to-tell-you-more-about-that-unexpected-error.aspx&amp;amp;;title=Getting+SharePoint+to+Tell+You+More+about+that+%26quot%3bUnexpected+Error%26quot%3b&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/05/getting-sharepoint-to-tell-you-more-about-that-unexpected-error.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17034" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Debugging/default.aspx">Debugging</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/WebConfig/default.aspx">WebConfig</category></item><item><title>Cross Domain Remote Debugging</title><link>http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/01/cross-domain-remote-debugging.aspx</link><pubDate>Thu, 01 Jan 2009 15:00:59 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:16662</guid><dc:creator>jacobl</dc:creator><slash:comments>2</slash:comments><comments>http://www.atalasoft.com/cs/blogs/jake/comments/16662.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/jake/commentrss.aspx?PostID=16662</wfw:commentRss><description>&lt;p&gt;Remote debugging can be a task on it's own, but after the first time you've done it, it becomes second nature. This blog will take remote debugging a step further and explain step by step how to easily debug across domains.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Set Up Your VPN&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/CrossDomainRemoteDebugging_7391/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin:0px 0px 10px 10px;border-right-width:0px;" height="203" alt="image" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/CrossDomainRemoteDebugging_7391/image_thumb.png" width="238" align="right" border="0" /&gt;&lt;/a&gt;In Network Connections, use the &amp;quot;Create a new connection&amp;quot; wizard to set up the VPN. &lt;/p&gt;  &lt;p&gt;You want to VPN into the same domain that your remote server is on. So for me, I found the IP address of the domain controller and connected to that.&lt;/p&gt;  &lt;p&gt;When prompted for a username and password, use an account that is both a member of the domain and is part of the local Administrators group of the machine you are remotely debugging.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Placing the PDBs&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;General rule of thumb is that you want to put your PDBs directly next to their assemblies. While it's possible to follow that rule for assemblies that are in the GAC, it's much easier to put it in the &amp;quot;C:\Windows\Symbols\dll&amp;quot; folder. As usual, your PDBs must be built with the DLLs that you're using. If they aren't, nothing will work. Also, in the case of IIS, simply replacing the assemblies in the GAC will not force your web application to pick up the new assemblies. You will need to either recycle your app pool or simply do an iisreset.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Setting up Remote Debugging&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There are a few ways to prepare your machines for remote debugging. If you plan on doing it more often than just this one time, I suggest you download and install Visual Studio to your remote machine. You'll then be able to install the Visual Studio 2008 Remote Debugger service which can be set to start on login. Then, you'll never have to think about it again.&lt;/p&gt;  &lt;p&gt;If this is just a quick test, copy the appropriate Remote Debugger from your local Visual Studio box to the remote machine. See this MSDN article to find out where those files are located: &lt;a href="http://msdn.microsoft.com/en-us/library/bt727f1t.aspx" target="_blank"&gt;How to: Set Up Remote Debugging&lt;/a&gt;. You need to copy all of the files in that directory so in the case of x86 remote debugging, copy the entire x86 directory over to your remote machine. Mine were located here:&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; C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Remote Debugger\x86&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Starting the app will look something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/CrossDomainRemoteDebugging_7391/image_24.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="326" alt="image" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/CrossDomainRemoteDebugging_7391/image_thumb_11.png" width="439" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;

&lt;p&gt;Make a note of the quoted server name. You will need that next.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On your Local Machine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/CrossDomainRemoteDebugging_7391/image_26.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin:0px 0px 10px 10px;border-right-width:0px;" height="135" alt="image" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/CrossDomainRemoteDebugging_7391/image_thumb_12.png" width="244" align="right" border="0" /&gt;&lt;/a&gt;On your local machine, open up Visual Studio and choose &amp;quot;Debug &amp;gt; Attach to Process&amp;quot;. Before you type in the server name into the Qualifier box, click &amp;quot;Select...&amp;quot; next to the &amp;quot;Attach to:&amp;quot; field. Check the code types you would like to debug and click OK.&lt;/p&gt;

&lt;p&gt;Next, enter the Qualifier (this is the server name from before). It should look something like this: username@server. Hit Enter and wait.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/CrossDomainRemoteDebugging_7391/image_28.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="304" alt="image" src="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/CrossDomainRemoteDebugging_7391/image_thumb_13.png" width="433" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If everything else went well, you will see a list of available processes for you to attach to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which process one do I pick?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can select multiple processes if you're not sure which one is hosting your code. In the case of web applications, there can be multiple w3wp.exe processes available and it's nearly impossible to know which one applies. My only warning is this: do NOT select too many or you will have to wait for the polar ice caps to melt before your machine breaks free from Visual Studio's hold.... well, maybe that's a bad example.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enjoy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This process can be a bit painful, but like &amp;quot;regular&amp;quot; remote debugging, it's not that bad the second time around. Fortunately, the result is well worth the work. Even though I've found it to be a little flaky, most of the regular Debugging features work as expected: Immediate Window, Intellisense, Break Points, Call Stack, etc.&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/01/cross-domain-remote-debugging.aspx&amp;amp;;subject=Cross+Domain+Remote+Debugging" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/01/cross-domain-remote-debugging.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/01/cross-domain-remote-debugging.aspx&amp;amp;;title=Cross+Domain+Remote+Debugging" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/01/cross-domain-remote-debugging.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/01/cross-domain-remote-debugging.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/01/cross-domain-remote-debugging.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/01/cross-domain-remote-debugging.aspx&amp;amp;title=Cross+Domain+Remote+Debugging" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/01/cross-domain-remote-debugging.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/01/cross-domain-remote-debugging.aspx&amp;amp;;title=Cross+Domain+Remote+Debugging" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/01/cross-domain-remote-debugging.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/01/cross-domain-remote-debugging.aspx&amp;amp;;title=Cross+Domain+Remote+Debugging&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2009/01/01/cross-domain-remote-debugging.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=16662" width="1" height="1"&gt;</description></item><item><title>KeepAlive for the DotImage WebImageViewer</title><link>http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/31/keepalive-for-the-dotimage-webimageviewer.aspx</link><pubDate>Wed, 31 Dec 2008 13:22:17 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17037</guid><dc:creator>jacobl</dc:creator><slash:comments>1</slash:comments><comments>http://www.atalasoft.com/cs/blogs/jake/comments/17037.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/jake/commentrss.aspx?PostID=17037</wfw:commentRss><description>&lt;p&gt;Recently, I posted an article describing &lt;a href="http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/19/creating-a-simple-ajax-keepalive.aspx" target="_blank"&gt;a simple way to keep a session alive&lt;/a&gt; during long periods of inactivity. That works great if your web application doesn't rely on some other information on the server to maintain state. If you use &lt;a href="http://www.atalasoft.com/products/dotimage/" target="_blank"&gt;DotImage&lt;/a&gt; in your web app, it maintains certain state information in the AtalaCache that needs to be updated every so often. If not, you run the risk of another user hitting the page and causing the AtalaCache to be cleaned up (assuming the cache has expired). This post explains how to avoid this by forcing the &lt;a href="http://www.atalasoft.com/products/dotimage/thinclient/default.aspx" target="_blank"&gt;WebImageViewer&lt;/a&gt; to update its timestamps on your state.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Server Side&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In your page's code behind, add the following RemoteInvokable function:&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; [RemoteInvokable]&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;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Remote_KeepSessionAlive()&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;/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:#008000;"&gt;// Don't need to do anything here.&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;span style="color:#008000;"&gt;// A simple page request will force the&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:#008000;"&gt;// WebImageViewer to update any timestamps &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:#008000;"&gt;// it needs for this session.&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;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Client Side&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In your aspx page, add the following Java&lt;b&gt;&lt;/b&gt;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;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; function KeepAlive(){&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;     WebImageViewer1.RemoteInvoke(&lt;span style="color:#006080;"&gt;'Remote_KeepSessionAlive'&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;/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; setInterval(&lt;span style="color:#006080;"&gt;'KeepAlive();'&lt;/span&gt;, &lt;span style="color:#006080;"&gt;'900000'&lt;/span&gt;);&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;We don't need to pass anything into the RemoteInvoke and we don't need to set an event handler for the return since it doesn't matter to us. Very simple.&lt;/p&gt;

&lt;p&gt;This RemoteInvoke-based keepalive for the DotImage WebImageViewer will fire every 15 minutes (or 900,000 milliseconds == half of my session lifetime). Make sure you adjust that duration according to your server's session. Be sure to set it to something less than your session timeout or you might miss 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/2008/12/31/keepalive-for-the-dotimage-webimageviewer.aspx&amp;amp;;subject=KeepAlive+for+the+DotImage+WebImageViewer" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/31/keepalive-for-the-dotimage-webimageviewer.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/31/keepalive-for-the-dotimage-webimageviewer.aspx&amp;amp;;title=KeepAlive+for+the+DotImage+WebImageViewer" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/31/keepalive-for-the-dotimage-webimageviewer.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/31/keepalive-for-the-dotimage-webimageviewer.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/31/keepalive-for-the-dotimage-webimageviewer.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/31/keepalive-for-the-dotimage-webimageviewer.aspx&amp;amp;title=KeepAlive+for+the+DotImage+WebImageViewer" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/31/keepalive-for-the-dotimage-webimageviewer.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/31/keepalive-for-the-dotimage-webimageviewer.aspx&amp;amp;;title=KeepAlive+for+the+DotImage+WebImageViewer" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/31/keepalive-for-the-dotimage-webimageviewer.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/2008/12/31/keepalive-for-the-dotimage-webimageviewer.aspx&amp;amp;;title=KeepAlive+for+the+DotImage+WebImageViewer&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/31/keepalive-for-the-dotimage-webimageviewer.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17037" width="1" height="1"&gt;</description><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/Session/default.aspx">Session</category><category domain="http://www.atalasoft.com/cs/blogs/jake/archive/tags/WebImageViewer/default.aspx">WebImageViewer</category></item><item><title>Download Attachments from SharePoint ListItems</title><link>http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/29/download-attachments-from-sharepoint-listitems.aspx</link><pubDate>Mon, 29 Dec 2008 13:23:50 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:17007</guid><dc:creator>jacobl</dc:creator><slash:comments>2</slash:comments><comments>http://www.atalasoft.com/cs/blogs/jake/comments/17007.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/jake/commentrss.aspx?PostID=17007</wfw:commentRss><description>&lt;p&gt;There are times when you might want to download an attachment from a SharePoint list item. In the case of Document Libraries, this is trivial because there is a File property associated with the SPItem that you can use to get access to the file. Unfortunately, the only information available to you about list item attachments is the SPAttachmentsCollection which is simply a list of strings (the names of the files). This is less than useful since it provides you with no information as to where those files might be.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;My First Attempt&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;After a bit of poking around the object model, I finally gave up and came up with this:&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; SPFolder folder = web.Folders[&amp;quot;Lists&amp;quot;].SubFolders[list.RootFolder.Name].SubFolders[&amp;quot;Attachments&amp;quot;].SubFolders[item.ID.ToString()];&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Pretty insane, huh? I thought it was so terrible that I decided it was wrong and did some more research.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Research&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First, I came across this blog which only disappointed me since &lt;a href="http://www.binarywave.com/blogs/eshupps/Lists/Posts/Post.aspx?ID=26" target="_blank"&gt;Eric Shupps&lt;/a&gt; came up with the same thing. Even worse, the next result in my Google search was MSDN. Low and behold: &lt;a href="http://support.microsoft.com/kb/929259" target="_blank"&gt;How to Programmatically Download Attachments from List Items in Windows SharePoint Services&lt;/a&gt;. The hack is the official way to do things apparently.&lt;/p&gt;

&lt;p&gt;Granted, it works fine. It's just not as elegant as it probably should be.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Another Problem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is a problem that this still poses. You cannot enumerate through folders that you do not have Contributor access to. Users that only have View access will not be able to download files that they clearly have rights to download. Here's my fix for that situation:&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; private SPFolder GetAttachmentsFolder(SPWeb web, SPListItem item)&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;/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;     SPFolder folder = null;&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;     SPSecurity.RunWithElevatedPrivileges(delegate()&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;         using (SPSite elevatedSite = new SPSite(web.Site.ID))&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;         using (SPWeb elevatedWeb = elevatedSite.OpenWeb(web.ID))&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;             folder = elevatedWeb.Folders[&amp;quot;Lists&amp;quot;].SubFolders[item.ParentList.RootFolder.Name].SubFolders[&amp;quot;Attachments&amp;quot;].SubFolders[item.ID.ToString()];&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;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;     return folder;&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;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;You can then get the &lt;em&gt;ith&lt;/em&gt; attachment from the folder. Since your call to folder.Files[index or file name] will not be in an elevated call, SharePoint will do the right thing and block unauthorized accesses as expected.&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/2008/12/29/download-attachments-from-sharepoint-listitems.aspx&amp;amp;;subject=Download+Attachments+from+SharePoint+ListItems" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/29/download-attachments-from-sharepoint-listitems.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/29/download-attachments-from-sharepoint-listitems.aspx&amp;amp;;title=Download+Attachments+from+SharePoint+ListItems" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/29/download-attachments-from-sharepoint-listitems.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/29/download-attachments-from-sharepoint-listitems.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/29/download-attachments-from-sharepoint-listitems.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/29/download-attachments-from-sharepoint-listitems.aspx&amp;amp;title=Download+Attachments+from+SharePoint+ListItems" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/29/download-attachments-from-sharepoint-listitems.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/29/download-attachments-from-sharepoint-listitems.aspx&amp;amp;;title=Download+Attachments+from+SharePoint+ListItems" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/29/download-attachments-from-sharepoint-listitems.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/2008/12/29/download-attachments-from-sharepoint-listitems.aspx&amp;amp;;title=Download+Attachments+from+SharePoint+ListItems&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/29/download-attachments-from-sharepoint-listitems.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=17007" width="1" height="1"&gt;</description></item><item><title>Custom NAnt Tasks: TFSCheckOut and TFSCheckIn</title><link>http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/24/custom-nant-tasks-tfscheckout-and-tfscheckin.aspx</link><pubDate>Wed, 24 Dec 2008 15:50:17 GMT</pubDate><guid isPermaLink="false">647108ca-f046-4d8d-9feb-a7fbd2049b37:16974</guid><dc:creator>jacobl</dc:creator><slash:comments>0</slash:comments><comments>http://www.atalasoft.com/cs/blogs/jake/comments/16974.aspx</comments><wfw:commentRss>http://www.atalasoft.com/cs/blogs/jake/commentrss.aspx?PostID=16974</wfw:commentRss><description>&lt;p&gt;Here are a few custom NAnt tasks we use in-house for our TFS needs: tfscheckout, tfscheckin, tfsmerge, and a few others. I posted on the topic of &lt;a href="http://www.atalasoft.com/cs/blogs/jake/archive/2008/05/07/writing-custom-nant-tasks.aspx"&gt;Writing Custom NAnt Tasks&lt;/a&gt; a while ago, and some of them have been updated. So, if you are using those, make sure you update your build scripts to use the modified schema.&lt;/p&gt;  &lt;p&gt;Below is a list of some of the included tasks and how you might use them.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;TFSCheckOut&lt;/strong&gt;&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.79%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;height:210px;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;&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;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tfscheckout&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;server&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;tfsServerName&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;              &lt;span style="color:#ff0000;"&gt;ssl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;false&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;   4:&lt;/span&gt;              &lt;span style="color:#ff0000;"&gt;port&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;8080&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;   5:&lt;/span&gt;              &lt;span style="color:#ff0000;"&gt;projectPath&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;$/Path/to/Project/In/TFS&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;   6:&lt;/span&gt;              &lt;span style="color:#ff0000;"&gt;localPath&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C:\path\to\workspace\dir&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;span style="color:#ff0000;"&gt;recursionType&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Full&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;   8:&lt;/span&gt;              &lt;span style="color:#ff0000;"&gt;workspace&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;nameOfWorkspace&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;   9:&lt;/span&gt;              &lt;span style="color:#ff0000;"&gt;deleteWorkspace&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;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;  10:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;fileset&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;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;  11:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;include&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C:\Path\to\file\in\workspace&amp;quot;&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;/&amp;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;  12:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;include&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C:\Path\to\another\file\in\workspace&amp;quot;&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;/&amp;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;  13:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;fileset&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;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;  14:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tfscheckout&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;TFSCheckIn&lt;/strong&gt;&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;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tfscheckin&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;server&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;tfsServerName&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;   2:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;ssl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;false&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;          &lt;span style="color:#ff0000;"&gt;port&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;8080&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;   4:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;projectPath&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;$/Path/to/Project/In/TFS&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;   5:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;localPath&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C:\path\to\workspace\dir&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;   6:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;recursionType&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Full&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;span style="color:#ff0000;"&gt;comment&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;NAnt Checkin&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;   8:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;workspace&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;nameOfWorkspace&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;   9:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;deleteWorkspace&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;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;  10:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;fileset&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;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;  11:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;include&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C:\Path\to\file\in\workspace\that\is\checked\out&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;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;  12:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;include&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C:\Path\to\another\file\in\workspace\that\is\checked\out&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;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;  13:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;fileset&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;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;  14:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tfscheckin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;TFSMerge&lt;/strong&gt;&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;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tfsmerge&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;server&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;atalatfs&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;   2:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;ssl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;false&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;          &lt;span style="color:#ff0000;"&gt;port&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;8080&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;   4:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;projectPath&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;${ProjectPath}&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;   5:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;localPath&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;${Atala::GetCWD()}&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;   6:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;comment&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;NAnt Library Merge&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;span style="color:#ff0000;"&gt;workspace&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;${Server}&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;   8:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;deleteWorkspace&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;false&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;   9:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;force&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;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;  10:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;merges&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;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;  11:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;merge&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;from&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;$/Path/to/file/in/tfs&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;to&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;$/Path/to/branched/file&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;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;  12:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;merge&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;from&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;$/Path/to/another/file/in/tfs&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;to&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;$/Path/to/this/files/branched/copy&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;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;  13:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;merges&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;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;  14:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tfsmerge&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Also Included&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Other tasks that are included in this assembly are &lt;em&gt;TFSGet, AddXMLElement, RemoveXMLElements, RemoveTFSBindings, and LaunchDebugger.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;
  &lt;div class="wlWriterSmartContent" id="scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:a12a4613-fedd-4a2b-aefb-77e329d6cd15" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;p&gt;Download &lt;a href="http://www.atalasoft.com/cs/blogs/jake/WindowsLiveWriter/CustomNAntTasksTFSCheckOutandTFSCheckIn_69EA/NAntTasks.zip" target="_blank"&gt;the Atalasoft.NAnt Tasks (with source) GPL&lt;/a&gt;&lt;/p&gt;&lt;/div&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/2008/12/24/custom-nant-tasks-tfscheckout-and-tfscheckin.aspx&amp;amp;;subject=Custom+NAnt+Tasks%3a+TFSCheckOut+and+TFSCheckIn" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/24/custom-nant-tasks-tfscheckout-and-tfscheckin.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/24/custom-nant-tasks-tfscheckout-and-tfscheckin.aspx&amp;amp;;title=Custom+NAnt+Tasks%3a+TFSCheckOut+and+TFSCheckIn" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/24/custom-nant-tasks-tfscheckout-and-tfscheckin.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/24/custom-nant-tasks-tfscheckout-and-tfscheckin.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/24/custom-nant-tasks-tfscheckout-and-tfscheckin.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/24/custom-nant-tasks-tfscheckout-and-tfscheckin.aspx&amp;amp;title=Custom+NAnt+Tasks%3a+TFSCheckOut+and+TFSCheckIn" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/24/custom-nant-tasks-tfscheckout-and-tfscheckin.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/24/custom-nant-tasks-tfscheckout-and-tfscheckin.aspx&amp;amp;;title=Custom+NAnt+Tasks%3a+TFSCheckOut+and+TFSCheckIn" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/24/custom-nant-tasks-tfscheckout-and-tfscheckin.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/2008/12/24/custom-nant-tasks-tfscheckout-and-tfscheckin.aspx&amp;amp;;title=Custom+NAnt+Tasks%3a+TFSCheckOut+and+TFSCheckIn&amp;amp;;top=1" target="_blank" title = "Post http://www.atalasoft.com/cs/blogs/jake/archive/2008/12/24/custom-nant-tasks-tfscheckout-and-tfscheckin.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.atalasoft.com/cs/aggbug.aspx?PostID=16974" width="1" height="1"&gt;</description></item></channel></rss>