<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Jay Harris is Cpt. LoadTest</title>
    <link>http://www.cptloadtest.com/</link>
    <description>a .net developers blog on improving user experience of humans and coders</description>
    <language>en-us</language>
    <copyright>Jason Harris</copyright>
    <lastBuildDate>Thu, 01 Oct 2009 02:33:55 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>jharris@harrisdesigns.com</managingEditor>
    <webMaster>jharris@harrisdesigns.com</webMaster>
    <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/CaptainLoadtest" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <trackback:ping>http://www.cptloadtest.com/Trackback.aspx?guid=fa601dad-9032-43a8-ba67-195baa859d88</trackback:ping>
      <pingback:server>http://www.cptloadtest.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.cptloadtest.com/PermaLink,guid,fa601dad-9032-43a8-ba67-195baa859d88.aspx</pingback:target>
      <dc:creator>Jay Harris</dc:creator>
      <wfw:comment>http://www.cptloadtest.com/CommentView,guid,fa601dad-9032-43a8-ba67-195baa859d88.aspx</wfw:comment>
      <wfw:commentRss>http://www.cptloadtest.com/SyndicationService.asmx/GetEntryCommentsRss?guid=fa601dad-9032-43a8-ba67-195baa859d88</wfw:commentRss>
      
      <title>dasControls v1.0, a Twitter Status Macro for dasBlog</title>
      <guid isPermaLink="false">http://www.cptloadtest.com/PermaLink,guid,fa601dad-9032-43a8-ba67-195baa859d88.aspx</guid>
      <link>http://feedproxy.google.com/~r/CaptainLoadtest/~3/YmrXhRchZwg/dasControls-V10-A-Twitter-Status-Macro-For-DasBlog.aspx</link>
      <pubDate>Thu, 01 Oct 2009 02:33:55 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
If you have read my post on &lt;a title="Blog Post: Misconceptions on JavaScript Plugins and SEO" href="http://www.cptloadtest.com/2009/08/31/Misconceptions-On-JavaScript-Plugins-And-SEO.aspx" target="_blank"&gt;Misconceptions&#xD;
on JavaScript Plugins and SEO&lt;/a&gt;, you know that search engines don't do JavaScript.&#xD;
Though these plugins and libraries (such as one for pulling your latest Twitter Updates)&#xD;
are nice for adding dynamic content for your users, they are just end-user flare and&#xD;
add nothing to your SEO rankings. They also put an unnecessary tax on your users,&#xD;
as each client browser is responsible for independently retrieving the external content;&#xD;
the time for your page to render is extended by a few seconds as the client must first&#xD;
download the JS library then make the JSON/AJAX request for your content.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
In response to this, I have created &lt;a title="dasControls on CodePlex" href="http://dascontrols.codeplex.com/" target="_blank"&gt;dasControls&lt;/a&gt;,&#xD;
a library of custom macros for dasBlog (the blogging engine that powers &lt;a href="http://www.cptloadtest.com"&gt;www.cptloadtest.com&lt;/a&gt;).&#xD;
I have started with content that is driven by custom JavaScript libraries and convert&#xD;
the content and data retrieval into server-side controls. For now, dasControls contains&#xD;
only a Twitter Status macro, but I intend to add more controls in the coming months.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
dasControls [Build 1.0.0.0] : &lt;a title="Download dasControls v1.0" href="http://dascontrols.codeplex.com/Release/ProjectReleases.aspx" target="_blank"&gt;Download&lt;/a&gt; | &lt;a title="dasControls on CodePlex" href="http://dascontrols.codeplex.com/" target="_blank"&gt;Project&#xD;
Page&lt;/a&gt;&lt;/p&gt;&#xD;
        &lt;h3&gt;dasControls TwitterStatus Macro&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
The TwitterStatus macro uses server-side retrieval of your Twitter data, eliminating&#xD;
all client-side JavaScript calls for your tweets. By placing the Twitter request on&#xD;
the server, the data is also available to any search engines that index your page.&#xD;
Additionally, data is cached on the server, and new updates are retrieved based on&#xD;
the polling interval you specify. When using real-time client-side JavaScript calls,&#xD;
there is a 2-5 second delay for your end-users while the data is retrieved from Twitter;&#xD;
by caching the data on the local server, this delay is eliminated, and the content&#xD;
for each user is delivered from the local cache, lightening the load for the end-user&#xD;
while avoiding an undue burden for high-traffic sites.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;strong&gt;Macro Name:&lt;/strong&gt; TwitterStatus &#xD;
&lt;br&gt;&lt;strong&gt;Macro Syntax:&lt;/strong&gt; &amp;lt;% TwitterStatus("user name"[, number of tweets[,&#xD;
polling interval]])|dasControls %&amp;gt;&#xD;
&lt;/p&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;strong&gt;User Name&lt;/strong&gt; : String. Your Twitter handle. &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;strong&gt;Number of Tweets&lt;/strong&gt; : Integer. The number of tweets to retrieve and&#xD;
display. [default: 10] &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;strong&gt;Polling Interval &lt;/strong&gt;: Integer. The number of minutes between each Twitter&#xD;
retrieval. [default: 5] &#xD;
&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;strong&gt;Relevant CSS:&lt;/strong&gt;&#xD;
        &lt;/p&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;strong&gt;TwitterStatusItem&lt;/strong&gt; : CSS class given to each Tweet, rendered as a&#xD;
DIV. &#xD;
&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
            &lt;strong&gt;TwitterStatusTimestamp&lt;/strong&gt; : CSS class given to each Tweet's timestamp&#xD;
("32 minutes ago"), rendered as an inline SPAN within each Tweet element. &#xD;
&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;h4&gt;Using the Macro within a dasBlog Template&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
This macro is for use in the dasBlog HomeTemplate. The macro works just like any out-of-the&#xD;
box macro, except that you must also include the alias specified within dasControls&#xD;
entry the web.config (the value of the "macro" attribute). Your twitter handle is&#xD;
required, though you can also optionally include the number of Tweets to pull from&#xD;
Twitter (default: 10) and the number of minutes between each Twitter data request&#xD;
(default: 5). Because everything happens on the server, there is no need to include&#xD;
any of the Twitter JSON JavaScript libraries or HTML markup.&#xD;
&lt;/p&gt;&#xD;
        &lt;pre&gt;&amp;lt;% TwitterStatus("jayharris", 6, 5)|dasControls %&amp;gt;&lt;/pre&gt;&#xD;
        &lt;h3&gt;Installation and Setup of dasControls&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Download dasControls, extract the assembly into your dasBlog 'bin' directory.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
dasControls [Build 1.0.0.0] : &lt;a title="Download dasControls v1.0" href="http://dascontrols.codeplex.com/Release/ProjectReleases.aspx" target="_blank"&gt;Download&lt;/a&gt; | &lt;a title="dasControls on CodePlex" href="http://dascontrols.codeplex.com/" target="_blank"&gt;Project&#xD;
Page&lt;/a&gt;&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Enable Custom Macros within your dasBlog installation, and add the Twitter macro to&#xD;
your list of Custom Macros. &#xD;
&lt;br&gt;&#xD;
First, ensure that the &amp;lt;newtelligence.DasBlog.Macros&amp;gt; section exists within&#xD;
your web.config:&#xD;
&lt;/p&gt;&#xD;
        &lt;pre class="xml:nocontrols" name="code"&gt;&amp;lt;newtelligence.DasBlog.Macros&amp;gt;&#xD;
  &amp;lt;!-- Other Macro Libraries --&amp;gt;&#xD;
&amp;lt;/newtelligence.DasBlog.Macros&amp;gt;&lt;/pre&gt;&#xD;
        &lt;p&gt;&#xD;
Second, ensure that the Macros Configuration Section is defined in to your web.config&#xD;
&amp;lt;configSections&amp;gt;:&#xD;
&lt;/p&gt;&#xD;
        &lt;pre class="xml:nocontrols" name="code"&gt;&amp;lt;configSections&amp;gt;&#xD;
  &amp;lt;!—Other Configuration Sections --&amp;gt;&#xD;
  &amp;lt;section requirePermission="false" name="newtelligence.DasBlog.Macros"  &#xD;
    type="newtelligence.DasBlog.Web.Core.MacroSectionHandler, newtelligence.DasBlog.Web.Core" /&amp;gt;&#xD;
&amp;lt;/configSections&amp;gt;&lt;/pre&gt;&#xD;
        &lt;p&gt;&#xD;
Third, add the dasControls library entry to the dasBlog Macros section:&#xD;
&lt;/p&gt;&#xD;
        &lt;pre class="xml:nocontrols" name="code"&gt;&amp;lt;newtelligence.DasBlog.Macros&amp;gt;&#xD;
  &amp;lt;add macro="dasControls"&#xD;
    type="HarrisDesigns.Controls.dasBlogControls.Macros,HarrisDesigns.Controls.dasBlogControls"/&amp;gt;&#xD;
&amp;lt;/newtelligence.DasBlog.Macros&amp;gt;&lt;/pre&gt;&#xD;
        &lt;h4&gt;&#xD;
        &lt;/h4&gt;&#xD;
        &lt;h3&gt;Roadmap for dasControls&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
In the upcoming weeks and months, I plan on adding additional macros to the dasControls&#xD;
library, including Delicious, Google Reader's Shared Items, and Facebook. If you're&#xD;
interested in any others, or have any ideas, please let me know.&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="margin: 0px; padding: 0px; display: inline; float: none;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:238d54f0-5dde-4a71-b7ed-b73b8f647b47" class="wlWriterEditableSmartContent"&gt;Technorati&#xD;
Tags: &lt;a href="http://technorati.com/tags/dasBlog" rel="tag"&gt;dasBlog&lt;/a&gt;,&lt;a href="http://technorati.com/tags/dasControls" rel="tag"&gt;dasControls&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Open+Source" rel="tag"&gt;Open&#xD;
Source&lt;/a&gt;,&lt;a href="http://technorati.com/tags/CodePlex" rel="tag"&gt;CodePlex&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SEO" rel="tag"&gt;SEO&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Twitter" rel="tag"&gt;Twitter&lt;/a&gt;&lt;/div&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.cptloadtest.com/aggbug.ashx?id=fa601dad-9032-43a8-ba67-195baa859d88"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=YmrXhRchZwg:6WHWciCdwAg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=YmrXhRchZwg:6WHWciCdwAg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=YmrXhRchZwg:6WHWciCdwAg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=YmrXhRchZwg:6WHWciCdwAg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=YmrXhRchZwg:6WHWciCdwAg:gsZI0cpJP_o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=gsZI0cpJP_o" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=YmrXhRchZwg:6WHWciCdwAg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CaptainLoadtest/~4/YmrXhRchZwg" height="1" width="1"/&gt;</description>
      <comments>http://www.cptloadtest.com/CommentView,guid,fa601dad-9032-43a8-ba67-195baa859d88.aspx</comments>
      <category>Blogging</category>
      <category>dasControls</category>
      <category>JavaScript</category>
      <category>SEO</category>
    <feedburner:origLink>http://www.cptloadtest.com/2009/10/01/dasControls-V10-A-Twitter-Status-Macro-For-DasBlog.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.cptloadtest.com/Trackback.aspx?guid=88fb8162-b06b-4df8-91ef-c2aefe0e1b8f</trackback:ping>
      <pingback:server>http://www.cptloadtest.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.cptloadtest.com/PermaLink,guid,88fb8162-b06b-4df8-91ef-c2aefe0e1b8f.aspx</pingback:target>
      <dc:creator>Jay Harris</dc:creator>
      <wfw:comment>http://www.cptloadtest.com/CommentView,guid,88fb8162-b06b-4df8-91ef-c2aefe0e1b8f.aspx</wfw:comment>
      <wfw:commentRss>http://www.cptloadtest.com/SyndicationService.asmx/GetEntryCommentsRss?guid=88fb8162-b06b-4df8-91ef-c2aefe0e1b8f</wfw:commentRss>
      
      <title>Misconceptions on JavaScript Plugins and SEO</title>
      <guid isPermaLink="false">http://www.cptloadtest.com/PermaLink,guid,88fb8162-b06b-4df8-91ef-c2aefe0e1b8f.aspx</guid>
      <link>http://feedproxy.google.com/~r/CaptainLoadtest/~3/JHzerd3Qocc/Misconceptions-On-JavaScript-Plugins-And-SEO.aspx</link>
      <pubDate>Mon, 31 Aug 2009 12:47:29 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
Search Engine Optimization is high on the radar, right now. Whether it be the quest&#xD;
for the first Coupon site in Bing, the highest Cosmetics site on Google, or the top-ranked&#xD;
"Jay Harris" on every search engine, the war is waged daily throughout the&#xD;
internet. For companies, it's the next sale. For people, it's the next job. Dollars&#xD;
are on the line in a never-ending battle for supremacy.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
One of the contributing factors in your Search Engine Ranking is Content. Fresh, new&#xD;
content brings more search engine crawls. More crawls contributes to higher rankings.&#xD;
Search engines like sites that are constantly providing new content; it lets the engine&#xD;
know that the site is not dead or abandoned. And though this new content idea works&#xD;
out well for the New York Times and CNN, not everyone has a team of staff writers&#xD;
who are paid to constantly produce new content. So we shortcut. We don't so much have&#xD;
to have new content as long as we make Google think we have new content. There are&#xD;
hundreds if not thousands of JavaScript plugins out there to provide fresh content&#xD;
to our readers, ranging from Picasa photos, to Twitter updates, to AdWords, to Microsoft&#xD;
Gamercard tags. But I have to let you in on a little secret:&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
JavaScript Plugins do nothing for SEO. &#xD;
&lt;br&gt;&#xD;
Nothing. &#xD;
&lt;br&gt;&#xD;
Search engine spiders don't do JavaScript.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
"This must be a lie. When I look at my site, I see my new photos, or my new tweets,&#xD;
or my new Achievement Points; why don't the spiders see it, too?" Well, it's&#xD;
true. Google Spiders, and most other Search Engine Spiders, &lt;a title="Google Webmaster Guidelines: Search Engine spiders do not execute JavaScript" href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;amp;answer=35769#2" target="_blank"&gt;don't&#xD;
do JavaScript&lt;/a&gt;, which is why JS provides no SEO contribution; spiders do not index&#xD;
what they do not see. A look through your traffic monitor, like Google Analytics,&#xD;
will often show a disparity between logged traffic and what is actually accounted&#xD;
for in Web Server logs. Analytics, a JavaScript-based traffic monitor, only logs about&#xD;
40% of the total traffic to this site (excluding traffic to the RSS feed), which means&#xD;
that the other 60% of my visitors have JavaScript disabled. A JavaScript Disabled&#xD;
on 60% of all browsers seems like a ridiculously high percentage unless you consider&#xD;
that Spiders and Bots do not execute JavaScript.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Just like Google doesn't see the pretty layout from your stylesheet, Google also doesn't&#xD;
see the dynamic content from your JavaScript. Pulling down HTML, (since it is all&#xD;
just text, anyway) is easy; there's not even a lot of overhead associated with parsing&#xD;
that HTML. But add in some JavaScript, and suddenly there's a lot more effort involved&#xD;
in crawling your page, especially since there is a lot of bad JavaScript out there.&#xD;
So search engines just check what has been written into your HTML. They read the the&#xD;
URL, the keywords and META description, but only the content as rendered by the server.&#xD;
JavaScript is not touched, and JavaScript-based content is not indexed.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
So how do you get around this? How do you get this SEO boost, since JavaScript isn't&#xD;
an available option?&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Use plug-ins and utilities that pull your dynamic data server-side, rather than client-side.&#xD;
Create a custom WebControl that will download and parse your latest Twitter updates.&#xD;
Create a dasBlog macro to create your Microsoft Gamertag. By putting this responsibility&#xD;
on the server, not only will you make life easier on your end user (one less JavaScript&#xD;
library to download), but you also make this new content available to indexing engines,&#xD;
which can only help your Google Juice.&#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;Update:&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
I've been working on a set of macros for dasBlog to start pulling my dynamic content&#xD;
retrievals to the server. Keep an eye out over the next couple of days for the release&#xD;
of my first macro, a Twitter Status dasBlog macro that will replace the need for the&#xD;
Twitter JS libraries on your site.&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:aac5652b-95d9-407d-8780-9361eae9b5de" class="wlWriterEditableSmartContent"&gt;Technorati&#xD;
Tags: &lt;a href="http://technorati.com/tags/JavaScript" rel="tag"&gt;JavaScript&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SEO" rel="tag"&gt;SEO&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Twitter" rel="tag"&gt;Twitter&lt;/a&gt;&lt;/div&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.cptloadtest.com/aggbug.ashx?id=88fb8162-b06b-4df8-91ef-c2aefe0e1b8f"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=JHzerd3Qocc:scXsod4FEt4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=JHzerd3Qocc:scXsod4FEt4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=JHzerd3Qocc:scXsod4FEt4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=JHzerd3Qocc:scXsod4FEt4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=JHzerd3Qocc:scXsod4FEt4:gsZI0cpJP_o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=gsZI0cpJP_o" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=JHzerd3Qocc:scXsod4FEt4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CaptainLoadtest/~4/JHzerd3Qocc" height="1" width="1"/&gt;</description>
      <comments>http://www.cptloadtest.com/CommentView,guid,88fb8162-b06b-4df8-91ef-c2aefe0e1b8f.aspx</comments>
      <category>Blogging</category>
      <category>JavaScript</category>
      <category>SEO</category>
    <feedburner:origLink>http://www.cptloadtest.com/2009/08/31/Misconceptions-On-JavaScript-Plugins-And-SEO.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.cptloadtest.com/Trackback.aspx?guid=6e198e97-6c35-49d2-b959-41a3340d8991</trackback:ping>
      <pingback:server>http://www.cptloadtest.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.cptloadtest.com/PermaLink,guid,6e198e97-6c35-49d2-b959-41a3340d8991.aspx</pingback:target>
      <dc:creator>Jay Harris</dc:creator>
      <wfw:comment>http://www.cptloadtest.com/CommentView,guid,6e198e97-6c35-49d2-b959-41a3340d8991.aspx</wfw:comment>
      <wfw:commentRss>http://www.cptloadtest.com/SyndicationService.asmx/GetEntryCommentsRss?guid=6e198e97-6c35-49d2-b959-41a3340d8991</wfw:commentRss>
      
      <title>Speaking at Lansing Day of .NET 2009 on ASP.NET Page Life Cycle</title>
      <guid isPermaLink="false">http://www.cptloadtest.com/PermaLink,guid,6e198e97-6c35-49d2-b959-41a3340d8991.aspx</guid>
      <link>http://feedproxy.google.com/~r/CaptainLoadtest/~3/unEghVlbtMc/Speaking-At-Lansing-Day-Of-NET-2009-On-ASPNET-Page-Life-Cycle.aspx</link>
      <pubDate>Tue, 28 Jul 2009 23:18:18 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;div style="margin: 0px 0px 10px 30px; float: right"&gt;&#xD;
          &lt;a href="http://www.dayofdotnet.org/Lansing/"&gt;&#xD;
            &lt;img border="0" alt="Lansing Day of .Net, 1 August 2009 - I'll be there!" src="http://www.dayofdotnet.org/Lansing/2009/images/ldodn-100x160.png" width="100" height="160"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt;&#xD;
        &lt;/div&gt;&#xD;
        &lt;p&gt;&#xD;
This Saturday, August 1st, I will be speaking at &lt;a href="http://www.dayofdotnet.org/Lansing/2009/" target="_blank"&gt;Lansing&#xD;
Day of .NET 2009&lt;/a&gt;, at the Breslin Student Events Center at Michigan State University,&#xD;
East Lansing, Michigan. This session will be the same ASP.NET Page Life Cycle talk&#xD;
that I gave &lt;a title="Speaking at CodeStock 2009 on ASP.NET Page Life Cycle" href="http://www.cptloadtest.com/2009/05/18/Speaking-At-CodeStock-2009-On-ASPNET-Page-Life-Cycle.aspx" target="_blank"&gt;last&#xD;
month&lt;/a&gt; at CodeStock.&#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;h3&gt;Dev Basics: The ASP.NET Page Life Cycle&#xD;
&lt;/h3&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;Jay Harris / Session Level: 100 &#xD;
&lt;br&gt;&lt;/em&gt;When a request occurs for an ASP.NET page, the response is processed through&#xD;
a series of events before being sent to the client browser. These events, known as&#xD;
the Page Life Cycle, are a complicated headache when used improperly, manifesting&#xD;
as odd exceptions, incorrect data, performance issues, and general confusion. It seems&#xD;
simple when reading yet-another-book-on-ASP.NET, but never when applied in the real&#xD;
world. In this session, we decompose this mess, and turn the Life Cycle into an effective&#xD;
and productive tool. No ASP.NET MVC, no Dynamic Data, no MonoRail, no technologies&#xD;
of tomorrow, just the basics of ASP.NET, using the tools we have available in the&#xD;
office, today.&#xD;
&lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
If you can make it, I recommend attending LDODN09. There are some &lt;a title="Lansing Day of .NET 2009 Sessions" href="http://www.dayofdotnet.org/Lansing/2009/Sessions.aspx" target="_blank"&gt;great&#xD;
sessions&lt;/a&gt; lined up, and it is all being provided free-of-charge (though the event&#xD;
organizers are encouraging donations). &lt;a title="Wrap Up on Last Year's Lansing Day of .NET" href="http://www.cptloadtest.com/2008/06/26/Lansing-Day-Of-Net-WrapUp.aspx" target="_blank"&gt;Last&#xD;
year's event&lt;/a&gt;, held at Lansing Community College, was the first Lansing Day of&#xD;
.NET and the first event that I was involved in organizing. It went well, and from&#xD;
the moment it was over I was looking forward to the next one. I'm not on the organizing&#xD;
committee this year, but I am still sure that this one is destined to be great as&#xD;
well. They rented the Breslin Center! If I knew nothing else, that would be enough.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
So come out to Lansing Day of .NET this Saturday. Registration is &lt;a title="Lansing Day of .NET Registration" href="http://www.dayofdotnet.org/Lansing/2009/Register.aspx" target="_blank"&gt;still&#xD;
open&lt;/a&gt;.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
I hope to see you there.&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:eeee88a5-b190-41e0-be21-ea20cdb67e8d" class="wlWriterEditableSmartContent"&gt;Technorati&#xD;
Tags: &lt;a href="http://technorati.com/tags/Lansing+Day+of+.NET" rel="tag"&gt;Lansing Day&#xD;
of .NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Day+of+.NET" rel="tag"&gt;Day of .NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Speaking" rel="tag"&gt;Speaking&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Events" rel="tag"&gt;Events&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Page+Life+Cycle" rel="tag"&gt;Page&#xD;
Life Cycle&lt;/a&gt;&lt;/div&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.cptloadtest.com/aggbug.ashx?id=6e198e97-6c35-49d2-b959-41a3340d8991"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=unEghVlbtMc:DCtZsz4RpSQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=unEghVlbtMc:DCtZsz4RpSQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=unEghVlbtMc:DCtZsz4RpSQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=unEghVlbtMc:DCtZsz4RpSQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=unEghVlbtMc:DCtZsz4RpSQ:gsZI0cpJP_o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=gsZI0cpJP_o" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=unEghVlbtMc:DCtZsz4RpSQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CaptainLoadtest/~4/unEghVlbtMc" height="1" width="1"/&gt;</description>
      <comments>http://www.cptloadtest.com/CommentView,guid,6e198e97-6c35-49d2-b959-41a3340d8991.aspx</comments>
      <category>ASP.Net</category>
      <category>Events</category>
      <category>Speaking</category>
    <feedburner:origLink>http://www.cptloadtest.com/2009/07/28/Speaking-At-Lansing-Day-Of-NET-2009-On-ASPNET-Page-Life-Cycle.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.cptloadtest.com/Trackback.aspx?guid=1d359ae8-9825-413f-92dc-2b533314f154</trackback:ping>
      <pingback:server>http://www.cptloadtest.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.cptloadtest.com/PermaLink,guid,1d359ae8-9825-413f-92dc-2b533314f154.aspx</pingback:target>
      <dc:creator>Jay Harris</dc:creator>
      <wfw:comment>http://www.cptloadtest.com/CommentView,guid,1d359ae8-9825-413f-92dc-2b533314f154.aspx</wfw:comment>
      <wfw:commentRss>http://www.cptloadtest.com/SyndicationService.asmx/GetEntryCommentsRss?guid=1d359ae8-9825-413f-92dc-2b533314f154</wfw:commentRss>
      
      <title>Dev Basics: ASP.NET Page Life Cycle, Part 2 [WebControl Execution Order]</title>
      <guid isPermaLink="false">http://www.cptloadtest.com/PermaLink,guid,1d359ae8-9825-413f-92dc-2b533314f154.aspx</guid>
      <link>http://feedproxy.google.com/~r/CaptainLoadtest/~3/KtBeG8YvlPg/Dev-Basics-ASPNET-Page-Life-Cycle-Part-2-WebControl-Execution-Order.aspx</link>
      <pubDate>Tue, 14 Jul 2009 22:26:15 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
The first installment of this series goes back to the beginning and describes each&#xD;
of the events within ASP.NET Page Life Cycle. Understanding the basic fundamentals&#xD;
of the ASP.NET Page Life Cycle, including the order and scope of influence for each&#xD;
of the Page Life Cycle events, will help ensure that you are executing your custom&#xD;
code at the right time, and in the right order, rather than stepping on yourself by&#xD;
conflicting with core ASP.NET framework functionality. But this is only part of the&#xD;
story, since there is more to the ASP.NET Page Life Cycle than just the page, itself.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;ASP.NET Page &amp;amp; WebControl Event Execution Order&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Pages would be nothing but a sea of crazy peach gradient backgrounds without the controls&#xD;
to display content and to interact with the user. In addition to the order of the&#xD;
various page events, it is often helpful to know the order in which a page and its&#xD;
controls execute a single event. Does Page.Load execute before Control.Load? Does&#xD;
Page.Init execute before Control.Init? Does myTextBox.TextChanged fire before myButton.Click?&#xD;
And what about myTextBox1.TextChanged versus myTextBox2.TextChanged?&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Knowing the execution order of events within the control tree will make you a better&#xD;
ASP.NET developer. If you cannot answer each of those questions above (and maybe even&#xD;
if you can), keep reading.&#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;h3&gt;About the Series&#xD;
&lt;/h3&gt;&#xD;
          &lt;p&gt;&#xD;
When a request occurs for an ASP.NET page, the response is processed through a series&#xD;
of events before being sent to the client browser. These events, known as the ASP.NET&#xD;
Page Life Cycle, are a complicated headache when used improperly, manifesting as odd&#xD;
exceptions, incorrect data, performance issues, and general confusion. It seems simple&#xD;
when reading yet-another-book-on-ASP.NET, but never when applied in the real world.&#xD;
What is covered in a few short pages in many ASP.NET books (and sometimes even just&#xD;
a few short paragraphs), is much more complicated outside of a "Hello, World!"&#xD;
application and inside of the complex demands of the enterprise applications that&#xD;
developers create and maintain in their day-to-day work life. As close to the core&#xD;
as the life cycle is to any ASP.NET web application, the complications and catches&#xD;
behind this system never seems to get wide coverage on study guides or other documentation.&#xD;
But, they should.&#xD;
&lt;/p&gt;&#xD;
          &lt;p&gt;&#xD;
Part 1: &lt;a href="http://www.cptloadtest.com/2009/06/23/Dev-Basics-ASPNET-Page-Life-Cycle-Part-1-Events.aspx" target="_blank"&gt;Events&#xD;
of the ASP.NET Page Life Cycle&lt;/a&gt;&lt;br&gt;&#xD;
Part 2: ASP.NET Page &amp;amp; WebControl Event Execution Order&#xD;
&lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;h3&gt;Event Execution Order within the Control Hierarchy &#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
At the core of the control-level event execution order is where the events fire with&#xD;
respect to the page. The majority of the events in the ASP.NET Page Life Cycle execute&#xD;
from the top, down, which is also referred to as outside-in. That is, the event is&#xD;
first executed on the page, such as Page.Load, then executed recursively through each&#xD;
of the page's controls, Control.Load, to the controls within controls, and so on.&#xD;
The two exceptions to this rule are Initialization and Unload. With these two events,&#xD;
the event is fired first on the child control, then on the container control, and&#xD;
finally on the page, known as a bottom-up or inside-out order.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
But what if a control is dynamically added to the page during a later event? In this&#xD;
case, a control will fire events to catch up to the page (though a control will never&#xD;
exceed beyond what Page Event is currently executing). In other words, if a control&#xD;
is dynamically added during the PreInit page event, the control will immediately fire&#xD;
its own PreInit. However, if a control is dynamically added during the PreLoad event,&#xD;
it will fire PreInit, Init, InitComplete, and PreLoad, all in quick succession.&#xD;
&lt;/p&gt;&#xD;
        &lt;pre class="csharp:nocontrols" name="code"&gt;private void Page_PreInit(object sender, EventArgs e)&#xD;
{&#xD;
    Trace.Write("Executing Page PreInitialization");&#xD;
    var textbox = new TextBox();&#xD;
    textbox.Init += Control_Init;&#xD;
    textbox.Load += Control_Load;&#xD;
    textbox.ID += "TextBoxFromPreInit";&#xD;
    form1.Controls.Add(textbox);&#xD;
}&#xD;
&#xD;
private void Page_Init(object sender, EventArgs e)&#xD;
{&#xD;
    Trace.Write("Executing Page Initialization (Should occur after controls)");&#xD;
}&#xD;
&#xD;
private void Page_Load(object sender, EventArgs e)&#xD;
{&#xD;
    Trace.Write("Executing Page Load (Should occur before controls)");&#xD;
    var textbox = new TextBox();&#xD;
    textbox.Init += Control_Init;&#xD;
    textbox.Load += Control_Load;&#xD;
    textbox.ID += "TextBoxFromLoad";&#xD;
    form1.Controls.Add(textbox);&#xD;
}&#xD;
&#xD;
private void Control_Init(object sender, EventArgs e)&#xD;
{&#xD;
    Trace.Write("Executing Control Init for " + ((Control)sender).UniqueID);&#xD;
}&#xD;
&#xD;
private void Control_Load(object sender, EventArgs e)&#xD;
{&#xD;
    Trace.Write("Executing Control Load for " + ((Control)sender).UniqueID);&#xD;
}&#xD;
&#xD;
/*&#xD;
Output: &#xD;
&#xD;
Begin PreInit		&#xD;
Executing Page PreInitialization&#xD;
End PreInit&#xD;
Begin Init&#xD;
Executing Control Init for TextBoxFromPreInit&#xD;
Executing Page Initialization (Should occur after controls)&#xD;
End Init&#xD;
Begin Load&#xD;
Executing Page Load (Should occur before controls)&#xD;
Executing Control Init for TextBoxFromLoad&#xD;
Executing Control Load for TextBoxFromPreInit&#xD;
Executing Control Load for TextBoxFromLoad&#xD;
End Load&#xD;
*/&lt;/pre&gt;&#xD;
        &lt;h3&gt;Event Execution Order for Sibling WebControls&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
The event execution order of parent and child controls is simple and straightforward.&#xD;
As if to maintain balance in The Force, the event execution order for sibling controls&#xD;
is a bit complicated. For siblings, this order is governed by three main and cascading&#xD;
criteria: the type of event that is being executed, the Page Event executing when&#xD;
the control was added to the page, and the index of the control within the parent's&#xD;
(or page's) Controls collection.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
First, the event type is the primary governor of when an event is fired. Just like&#xD;
the order of Page Events, Initialize events always occur before Load events, and Load&#xD;
events always occur before Render events. The complication surrounds the several control-specific&#xD;
"PostBack Events," such as Click or TextChanged, as there are three PostBack&#xD;
event types: Changed Events, Validation Events, and actual PostBack Events. The first&#xD;
that fire are Changed Events, which include any event where the value changes, such&#xD;
as TextBox.TextChanged or DropDownList.SelectedIndexChanged. Changed events should&#xD;
include any custom Value manipulation for each of your form controls. Once the values&#xD;
are defined, Validation events are executed to assist with ensuring data integrity.&#xD;
Finally, once all values are defined and validated, PostBack Events, such as Button.Command&#xD;
or Button.Click, are executed. In most cases, these PostBack events will include the&#xD;
form submission logic, such as sending the email, transmitting data through a Web&#xD;
Service, or saving data to a database. The Changed Events type of events always fire&#xD;
before Validation events, which always fire before the PostBack Events types; TextBox.TextChanged&#xD;
before Validator.Validate before Button.Click.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
If the events are the same, such as two TextBox controls that are both executing TextChanged,&#xD;
the second criteria to determine sibling event execution is when the control was added&#xD;
to the page. If a control was added in any of the Initialization events (PreInit,&#xD;
Init, InitComplete), it is executed first. If a control was added in any of the Load&#xD;
events, it is executed second. So, for the two TextBoxes, the TextChanged event for&#xD;
the TextBox added during Initialization will be fired before the same event for the&#xD;
TextBox added during Load. (txtAddedDuringInit.TextChanged will fire before txtAddedDuringLoad.TextChanged.)&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
If the executing event is the same, and the controls were added during the same Page&#xD;
Event, the final criterion for sibling execution is the index within the Controls&#xD;
collection. After the above two criteria are considered, events that still have equal&#xD;
weight are executed according to their index in their parent's Controls collection.&#xD;
&lt;/p&gt;&#xD;
        &lt;pre class="csharp:nocontrols" name="code"&gt;private void Page_Init(object sender, EventArgs e)&#xD;
{&#xD;
    TextBox textbox;&#xD;
    textbox = new TextBox();&#xD;
    textbox.TextChanged += Control_TextChanged;&#xD;
    textbox.ID += "TextBoxFromInit1";&#xD;
    form1.Controls.Add(textbox);&#xD;
    textbox = new TextBox();&#xD;
    textbox.TextChanged += Control_TextChanged;&#xD;
    textbox.ID += "TextBoxFromInit2";&#xD;
    form1.Controls.Add(textbox);&#xD;
    textbox = new TextBox();&#xD;
    textbox.TextChanged += Control_TextChanged;&#xD;
    textbox.ID += "TextBoxFromInit3At0";&#xD;
    form1.Controls.AddAt(0, textbox);&#xD;
}&#xD;
&#xD;
private void Page_Load(object sender, EventArgs e)&#xD;
{&#xD;
    TextBox textbox;&#xD;
    textbox = new TextBox();&#xD;
    textbox.TextChanged += Control_TextChanged;&#xD;
    textbox.ID += "TextBoxFromLoad1";&#xD;
    form1.Controls.Add(textbox);&#xD;
    textbox = new TextBox();&#xD;
    textbox.TextChanged += Control_TextChanged;&#xD;
    textbox.ID += "TextBoxFromLoad2";&#xD;
    form1.Controls.Add(textbox);&#xD;
    textbox = new TextBox();&#xD;
    textbox.TextChanged += Control_TextChanged;&#xD;
    textbox.ID += "TextBoxFromLoad3At0";&#xD;
    form1.Controls.AddAt(0, textbox);&#xD;
}&#xD;
&#xD;
private void Control_TextChanged(object sender, EventArgs e)&#xD;
{&#xD;
    Trace.Write("Executing Control TextChanged for " + ((Control) sender).UniqueID&#xD;
                + " / Position: " + form1.Controls.IndexOf((Control) sender));&#xD;
}&#xD;
&#xD;
/*&#xD;
Trace Output: &#xD;
&#xD;
Begin Raise ChangedEvents&#xD;
Executing Control TextChanged for TextBoxFromInit3At0 / Position: 1&#xD;
Executing Control TextChanged for TextBoxFromInit1 / Position: 2&#xD;
Executing Control TextChanged for TextBoxFromInit2 / Position: 3&#xD;
Executing Control TextChanged for TextBoxFromLoad3At0 / Position: 0&#xD;
Executing Control TextChanged for TextBoxFromLoad1 / Position: 4&#xD;
Executing Control TextChanged for TextBoxFromLoad2 / Position: 5&#xD;
End Raise ChangedEvents&#xD;
*/&lt;/pre&gt;&#xD;
        &lt;p&gt;&#xD;
So, to address the questions from above: Page.Load does execute before Control.Load,&#xD;
as the Load event is executed outside-in, however, Page.Init executes after Control.Init,&#xD;
as the Init event is executed inside-out. The TextChanged event on myTextBox is fired&#xD;
prior to myButton.Click, as control ChangedEvents are executed before control PostBackEvents.&#xD;
And finally, regarding myTextBox1.TextChanged versus myTextBox2.TextChanged, it depends;&#xD;
the order is dependent upon where the controls exist within the entire hierarchy,&#xD;
when the controls were created, and upon their position within the Controls collection.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The execution order of control events within the page life cycle is a complicated&#xD;
mess, and fortunately does not come in to play often. But for when it does, it is&#xD;
important to know how everything plays together. I find that most often, the order&#xD;
is important when dynamically adding controls to the page outside of DataBinding (though&#xD;
I would consider this a design smell), when creating custom WebControls, or when working&#xD;
with control Changed Events and validation. Still, as with before, committing this&#xD;
to memory (or at least a link to a reference, such as this post) will help with making&#xD;
you a better ASP.NET developer and with creating higher quality applications.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
So what's next? Part 1 covered the base ASP.NET Page Life Cycle, and this post covers&#xD;
the execution order of events on the page. As this series continues, we will discuss&#xD;
the details of the DataBinding events, and will dig in to some tips, tricks, and traps&#xD;
when developing ASP.NET applications. &#xD;
&lt;/p&gt;&#xD;
        &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8f035b16-2463-44d0-b6aa-1c67e951fb4c" class="wlWriterEditableSmartContent"&gt;Technorati&#xD;
Tags: &lt;a href="http://technorati.com/tags/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Page+Life+Cycle" rel="tag"&gt;Page&#xD;
Life Cycle&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Event+Life+Cycle" rel="tag"&gt;Event&#xD;
Life Cycle&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Dev+Basics" rel="tag"&gt;Dev Basics&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Back+to+Basics" rel="tag"&gt;Back&#xD;
to Basics&lt;/a&gt;&lt;/div&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.cptloadtest.com/aggbug.ashx?id=1d359ae8-9825-413f-92dc-2b533314f154"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=KtBeG8YvlPg:0dEfjZHsYcg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=KtBeG8YvlPg:0dEfjZHsYcg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=KtBeG8YvlPg:0dEfjZHsYcg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=KtBeG8YvlPg:0dEfjZHsYcg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=KtBeG8YvlPg:0dEfjZHsYcg:gsZI0cpJP_o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=gsZI0cpJP_o" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=KtBeG8YvlPg:0dEfjZHsYcg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CaptainLoadtest/~4/KtBeG8YvlPg" height="1" width="1"/&gt;</description>
      <comments>http://www.cptloadtest.com/CommentView,guid,1d359ae8-9825-413f-92dc-2b533314f154.aspx</comments>
      <category>ASP.Net</category>
      <category>Dev Basics</category>
    <feedburner:origLink>http://www.cptloadtest.com/2009/07/14/Dev-Basics-ASPNET-Page-Life-Cycle-Part-2-WebControl-Execution-Order.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.cptloadtest.com/Trackback.aspx?guid=4100313f-ecaf-401f-8581-92a49f62b87e</trackback:ping>
      <pingback:server>http://www.cptloadtest.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.cptloadtest.com/PermaLink,guid,4100313f-ecaf-401f-8581-92a49f62b87e.aspx</pingback:target>
      <dc:creator>Jay Harris</dc:creator>
      <wfw:comment>http://www.cptloadtest.com/CommentView,guid,4100313f-ecaf-401f-8581-92a49f62b87e.aspx</wfw:comment>
      <wfw:commentRss>http://www.cptloadtest.com/SyndicationService.asmx/GetEntryCommentsRss?guid=4100313f-ecaf-401f-8581-92a49f62b87e</wfw:commentRss>
      
      <title>Speaking Engagements</title>
      <guid isPermaLink="false">http://www.cptloadtest.com/PermaLink,guid,4100313f-ecaf-401f-8581-92a49f62b87e.aspx</guid>
      <link>http://feedproxy.google.com/~r/CaptainLoadtest/~3/EyWAc31zz9k/Speaking-Engagements.aspx</link>
      <pubDate>Tue, 30 Jun 2009 03:53:45 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
I enjoy being a speaker. I have learned a lot through my mentors, colleagues, and&#xD;
through other community speakers, and standing before a group of my peers and sharing&#xD;
my knowledge is one way that I can give back to the development community. By linking&#xD;
together my speaking and my blog, I can provide a central repository for the slide&#xD;
decks and demo code for my sessions and make these things available to the audience&#xD;
for further review. Here, you will find all of my slides and code for all past presentations,&#xD;
as well as information about all my past and future talks. This post will also be&#xD;
linked through my top navigation so that it can be easily found, and will also be&#xD;
regularly updated with any new schedules and slide decks.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Thank you to everyone who as attended any of my sessions, and as always, I encourage&#xD;
you to give me any feedback you have via &lt;a href="http://www.speakerrate.com/jayharris/" target="_blank"&gt;SpeakerRate&lt;/a&gt;.&#xD;
&lt;/p&gt;&#xD;
        &lt;h2&gt;Upcoming Talks&#xD;
&lt;/h2&gt;&#xD;
        &lt;p&gt;&#xD;
I would love to speak at your user group or developer's conference; please feel free&#xD;
to &lt;a title="Contact Jay Harris" href="http://www.cptloadtest.com/Email.aspx" target="_blank"&gt;contact&#xD;
me&lt;/a&gt; if you are interested. &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;GLUGnet Flint, 10 September 2009&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
On September 10, 2009, I will be presenting "Dev Basics: The ASP.NET Page Life&#xD;
Cycle." at the monthly Flint, Michigan meeting of the Greater Lansing Users Group&#xD;
for .NET developers.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;West Michigan, 13 October 2009&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
On October 13, 2009, I will be presenting "Dev Basics: The ASP.NET Page Life&#xD;
Cycle." at the October meeting for the West Michigan .NET User Group in Grand&#xD;
Rapids, Michigan.&#xD;
&lt;/p&gt;&#xD;
        &lt;h2&gt;Presentations &#xD;
&lt;/h2&gt;&#xD;
        &lt;h3&gt;Dev Basics: The ASP.NET Page Life Cycle &#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
When a request occurs for an ASP.Net page, the response is processed through a series&#xD;
of events before being sent to the client browser. These events, known as the Page&#xD;
Life Cycle, are a complicated headache when used improperly, manifesting as odd exceptions,&#xD;
incorrect data, performance issues, and general confusion. It seems simple when reading&#xD;
yet-another-book-on-ASP.NET, but never when applied in the real world. In this session,&#xD;
we decompose this mess, and turn the Life Cycle into an effective and productive tool.&#xD;
No ASP.NET MVC, no Dynamic Data, no MonoRail, no technologies of tomorrow, just the&#xD;
basics of ASP.NET, using the tools we have available in the office, today. &#xD;
&lt;br&gt;&lt;a title="Slides for &amp;quot;Dev Basics: The ASP.NET Page Life Cycle&amp;quot;" href="http://www.slideshare.net/jayharris/dev-basics-the-aspnet-page-life-cycle" target="_blank"&gt;Slides&lt;/a&gt; | &lt;a title="Code for &amp;quot;Dev Basics: The ASP.NET Page Life Cycle&amp;quot;" href="http://code.google.com/p/jayharris/source/browse/#svn/trunk/Demos/AspNetPageLifecycleDemo" target="_blank"&gt;Code&lt;/a&gt;&lt;/p&gt;&#xD;
        &lt;h3&gt;Continuous Integration: More than just a toolset &#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Does your team spend days integrating code at the end of a project? Continuous Integration&#xD;
can help. Using Continuous Integration will eliminate that end-of-project integration&#xD;
stress, and at the same time will make your development process easier. But Continuous&#xD;
Integration is more than just a tool like CruiseControl.Net; it is a full development&#xD;
process designed to bring you closer to your mainline, increase visibility of project&#xD;
status throughout your team, and to streamline deployments to QA or to your client.&#xD;
Find out what Continuous Integration is all about, and what it can do for you. &#xD;
&lt;br&gt;&lt;a title="Slides for &amp;quot;Continuous Integration: More than just a toolset&amp;quot;" href="http://www.slideshare.net/jayharris/continuous-integration-more-than-just-a-toolset" target="_blank"&gt;Slides&lt;/a&gt;&lt;/p&gt;&#xD;
        &lt;h2&gt;Past Talks &#xD;
&lt;/h2&gt;&#xD;
        &lt;h3&gt;August 2009&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Dev Basics: The ASP.NET Page Life Cycle @ Lansing Day of .NET 2009 | &lt;a title="Rate this session" href="http://www.speakerrate.com/talks/1248-dev-basics-the-asp-net-page-life-cycle" target="_blank"&gt;SpeakerRate&lt;/a&gt; | &lt;a title="Lansing Day of .NET 2009" href="http://www.dayofdotnet.org/Lansing/2009/" target="_blank"&gt;Event&#xD;
Site&lt;/a&gt;&lt;/p&gt;&#xD;
        &lt;h3&gt;June 2009 &#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Dev Basics: The ASP.NET Page Life Cycle @ CodeStock 2009 | &lt;a title="Rate this session" href="http://www.speakerrate.com/talks/1191-dev-basics-the-asp-net-page-life-cycle" target="_blank"&gt;SpeakerRate&lt;/a&gt;&lt;/p&gt;&#xD;
        &lt;h3&gt;January 2009 &#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Continuous Integration: More than just a toolset @ NWNUG Monthly Meeting &#xD;
&lt;br&gt;&#xD;
Continuous Integration: More than just a toolset @ GANG Monthly Meeting &#xD;
&lt;br&gt;&#xD;
Continuous Integration: More than just a toolset @ CodeMash 2009 &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;October 2009 &#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Continuous Integration: More than just a toolset @ AADND Monthly Meeting &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;September 2008 &#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Continuous Integration: More than just a toolset @ GLUGnet-Flint Monthly Meeting&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:5d7ded68-28b6-46ba-91a2-4256419317df" class="wlWriterEditableSmartContent"&gt;Technorati&#xD;
Tags: &lt;a href="http://technorati.com/tags/Speaking" rel="tag"&gt;Speaking&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Presentations" rel="tag"&gt;Presentations&lt;/a&gt;&lt;/div&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.cptloadtest.com/aggbug.ashx?id=4100313f-ecaf-401f-8581-92a49f62b87e"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=EyWAc31zz9k:72X3kBWe1DE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=EyWAc31zz9k:72X3kBWe1DE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=EyWAc31zz9k:72X3kBWe1DE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=EyWAc31zz9k:72X3kBWe1DE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=EyWAc31zz9k:72X3kBWe1DE:gsZI0cpJP_o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=gsZI0cpJP_o" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=EyWAc31zz9k:72X3kBWe1DE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CaptainLoadtest/~4/EyWAc31zz9k" height="1" width="1"/&gt;</description>
      <comments>http://www.cptloadtest.com/CommentView,guid,4100313f-ecaf-401f-8581-92a49f62b87e.aspx</comments>
      <category>Events</category>
      <category>Speaking</category>
    <feedburner:origLink>http://www.cptloadtest.com/2009/06/30/Speaking-Engagements.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.cptloadtest.com/Trackback.aspx?guid=d08d861c-a8fb-487e-9ead-0f64b80640ff</trackback:ping>
      <pingback:server>http://www.cptloadtest.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.cptloadtest.com/PermaLink,guid,d08d861c-a8fb-487e-9ead-0f64b80640ff.aspx</pingback:target>
      <dc:creator>Jay Harris</dc:creator>
      <wfw:comment>http://www.cptloadtest.com/CommentView,guid,d08d861c-a8fb-487e-9ead-0f64b80640ff.aspx</wfw:comment>
      <wfw:commentRss>http://www.cptloadtest.com/SyndicationService.asmx/GetEntryCommentsRss?guid=d08d861c-a8fb-487e-9ead-0f64b80640ff</wfw:commentRss>
      
      <title>Dev Basics: ASP.NET Page Life Cycle, Part 1 [Events]</title>
      <guid isPermaLink="false">http://www.cptloadtest.com/PermaLink,guid,d08d861c-a8fb-487e-9ead-0f64b80640ff.aspx</guid>
      <link>http://feedproxy.google.com/~r/CaptainLoadtest/~3/62oLL92Lbew/Dev-Basics-ASPNET-Page-Life-Cycle-Part-1-Events.aspx</link>
      <pubDate>Tue, 23 Jun 2009 03:53:57 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
When a request occurs for an ASP.NET page, the response is processed through a series&#xD;
of events before being sent to the client browser. These events, known as the ASP.NET&#xD;
Page Life Cycle, are a complicated headache when used improperly, manifesting as odd&#xD;
exceptions, incorrect data, performance issues, and general confusion. It seems simple&#xD;
when reading yet-another-book-on-ASP.NET, but never when applied in the real world.&#xD;
What is covered in a few short pages in many ASP.NET books (and sometimes even just&#xD;
a few short paragraphs), is much more complicated outside of a "Hello, World!"&#xD;
application and inside of the complex demands of the enterprise applications that&#xD;
developers create and maintain in their day-to-day work life. As close to the core&#xD;
as the life cycle is to any ASP.NET web application, the complications and catches&#xD;
behind this system never seems to get wide coverage on study guides or other documentation.&#xD;
But, they should.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
A little help on the Page Life Cycle is never a bad thing. In this series, I will&#xD;
go over the events that make up the ASP.NET Page Life Cycle, as well as some tips&#xD;
and tricks on how to get the most out of this event structure while avoiding the traps&#xD;
and pitfalls. Rather than pursuing broad coverage of the entire ASP.NET Framework,&#xD;
we'll dive deeply into the "small" portion that is the ASP.NET Page Life&#xD;
Cycle.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Events of the ASP.NET Page Life Cycle&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
I want to start at the beginning. The primary make-up of the Page Life Cycle is the&#xD;
events that process any ASP.NET requests. Unlike the public static void main of a&#xD;
WinForms application, where everything based on methods, the execution of a page request&#xD;
is the execution of these events. These events, which execute in a particular order,&#xD;
handle the entire request, including loading all of the controls, processing all of&#xD;
the form data, handling all user-initiated actions, and rendering the page to the&#xD;
web browser. Knowing the order in which these events are executed, as well as the&#xD;
responsibility of each event in processing your request, is important for developing&#xD;
solid, quality ASP.NET applications.&#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;Start&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
This is where the page object is instantiated, and where the initial properties of&#xD;
the page are set. Page properties such as Response and Request, UICulture (similar&#xD;
to the UICulture property within a WinForms thread), and the value of IsPostBack are&#xD;
all determined and assigned. No controls are available at this time, so do not try&#xD;
to set the value of that TextBox control, as it doesn't exist, yet. Fortunately, no&#xD;
event handlers can be attached to this event, anyway, so there isn't much you can&#xD;
do to customize this processing or to access that TextBox's value property; "Move&#xD;
along. There is nothing to see here." But, be aware that this event does occur&#xD;
after the Constructor, so if you try to access properties such as IsPostBack prior&#xD;
to the Start event, they have yet to be assigned, and will likely be incorrect.&#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;Page Initialization&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
During page initialization, the controls are created, initialized, and added to the&#xD;
Page's controls collection. This is the first time that you can access a control by&#xD;
its UniqueID. Do note that all control properties are set to their code values, be&#xD;
it from code-behind or code-in-front, regardless of what may be available in ViewState&#xD;
and Form Post values. Control state has yet to be restored, so ViewState and Form&#xD;
Post values have not yet been pushed to the controls. Finally, Initialization (specifically,&#xD;
PreInit) is the only time that the Theme and Master Page can be programmatically modified.&#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;Page Load&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Page Load is where control state is restored. If the request is a PostBack, rather&#xD;
than a new request, all available property values are restored from ViewState and&#xD;
Form Post data and pushed to the applicable controls. Under most scenarios, this is&#xD;
where you're going to get what you need from the Database, such as pulling a value&#xD;
from the query string and loading an item with the matching identity.&#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;Validation&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
The Validation event only applies to PostBack requests, and only when Validators are&#xD;
present in the control collection. The Validate method is executed for each Validator&#xD;
present, through which the IsValid property is set for each Validator. These IsValid&#xD;
property values are then cascaded up to the Page's IsValid property. Be aware that&#xD;
even if all Validators on the page are disabled, the Validation event will still fire;&#xD;
if a Validator is present, Validate is executed, without regard to any other property.&#xD;
Also, note that the Validation event is a child of the Page's Load event, so it is&#xD;
executed within the Page Load event chain, after Page Load, but prior to PostBack&#xD;
Events and LoadComplete.&#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;PostBack Events&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Once Validation is complete (if applicable), all PostBack events are executed, including&#xD;
the OnChange event of a DropDownList and the OnClick event of a command button. Post&#xD;
Back Events are also a child of the Page's Load event, executing after Validation&#xD;
and before LoadComplete.&#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;Render&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Finally, once all of the data is processed and Post Back events handled, the Page&#xD;
is rendered within the Web Browser. The Render event consists of saving all control&#xD;
property data to ViewState, processing the Page and each Control into HTML, and writing&#xD;
the HTML to the output stream. This is the last opportunity to modify the HTML output.&#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;h4&gt;Remembering the Order&#xD;
&lt;/h4&gt;&#xD;
          &lt;p&gt;&#xD;
If you are having trouble remembering the order, instead try and remember this simple&#xD;
mnemonic: &lt;strong&gt;SILVER&lt;/strong&gt;; Start, Initialize, Load, Validation, Events, Render.&#xD;
&lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
If you are doing a lot of ASP.NET programming, or anticipate that you will be in the&#xD;
near future, try to commit to memory the order of each of these events, and their&#xD;
scope of influence. Understanding these basic fundamentals of the ASP.NET Page Life&#xD;
Cycle will help ensure that you are executing your custom code at the right time,&#xD;
and in the right order, rather than stepping on yourself by conflicting with the core&#xD;
functionality.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Now that we know the order of execution on Page Events, what is the order of the Controls?&#xD;
Does Page.Load execute before Control.Load? How about the order of sibling controls?&#xD;
What is the order of myTextBox1.TextChanged versus myTextBox2.TextChanged? Also, what&#xD;
are some things to look out for? As this series continues, we will discuss the details&#xD;
of event execution order within the ASP.NET Page Life Cycle, as well as some tips,&#xD;
trick, and traps when developing ASP.NET applications.&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f31df0e8-d581-43ef-94f3-a3ebdce80ce6" class="wlWriterEditableSmartContent"&gt;Technorati&#xD;
Tags: &lt;a href="http://technorati.com/tags/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Page+Life+Cycle" rel="tag"&gt;Page&#xD;
Life Cycle&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Event+Life+Cycle" rel="tag"&gt;Event&#xD;
Life Cycle&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Dev+Basics" rel="tag"&gt;Dev Basics&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Back+to+Basics" rel="tag"&gt;Back&#xD;
to Basics&lt;/a&gt;&lt;/div&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.cptloadtest.com/aggbug.ashx?id=d08d861c-a8fb-487e-9ead-0f64b80640ff"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=62oLL92Lbew:mJXLbeg9VsU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=62oLL92Lbew:mJXLbeg9VsU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=62oLL92Lbew:mJXLbeg9VsU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=62oLL92Lbew:mJXLbeg9VsU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=62oLL92Lbew:mJXLbeg9VsU:gsZI0cpJP_o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=gsZI0cpJP_o" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=62oLL92Lbew:mJXLbeg9VsU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CaptainLoadtest/~4/62oLL92Lbew" height="1" width="1"/&gt;</description>
      <comments>http://www.cptloadtest.com/CommentView,guid,d08d861c-a8fb-487e-9ead-0f64b80640ff.aspx</comments>
      <category>ASP.Net</category>
      <category>Dev Basics</category>
    <feedburner:origLink>http://www.cptloadtest.com/2009/06/23/Dev-Basics-ASPNET-Page-Life-Cycle-Part-1-Events.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.cptloadtest.com/Trackback.aspx?guid=e8d18cc4-127b-4fe1-a86c-f8cd56b3edb8</trackback:ping>
      <pingback:server>http://www.cptloadtest.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.cptloadtest.com/PermaLink,guid,e8d18cc4-127b-4fe1-a86c-f8cd56b3edb8.aspx</pingback:target>
      <dc:creator>Jay Harris</dc:creator>
      <wfw:comment>http://www.cptloadtest.com/CommentView,guid,e8d18cc4-127b-4fe1-a86c-f8cd56b3edb8.aspx</wfw:comment>
      <wfw:commentRss>http://www.cptloadtest.com/SyndicationService.asmx/GetEntryCommentsRss?guid=e8d18cc4-127b-4fe1-a86c-f8cd56b3edb8</wfw:commentRss>
      
      <title>Speaking at CodeStock 2009 on ASP.NET Page Life Cycle</title>
      <guid isPermaLink="false">http://www.cptloadtest.com/PermaLink,guid,e8d18cc4-127b-4fe1-a86c-f8cd56b3edb8.aspx</guid>
      <link>http://feedproxy.google.com/~r/CaptainLoadtest/~3/7g942yTtX0M/Speaking-At-CodeStock-2009-On-ASPNET-Page-Life-Cycle.aspx</link>
      <pubDate>Mon, 18 May 2009 13:27:01 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
Next month, I will be speaking at &lt;a href="http://www.codestock.org/"&gt;CodeStock&lt;/a&gt;,&#xD;
a developer conference in Knoxville, Tennessee, held June 26-27. We will be discussing&#xD;
the ASP.NET Page Life Cycle, to help get over the fears and troubles with validation,&#xD;
event handing, data binding, and the conflicts between page load and page initialization.&#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;h3&gt;Dev Basics: The ASP.NET Page Life Cycle&#xD;
&lt;/h3&gt;&#xD;
          &lt;p&gt;&#xD;
            &lt;em&gt;Jay Harris / Session Level: 100 &#xD;
&lt;br&gt;&lt;/em&gt;When a request occurs for an ASP.NET page, the response is processed through&#xD;
a series of events before being sent to the client browser. These events, known as&#xD;
the Page Life Cycle, are a complicated headache when used improperly, manifesting&#xD;
as odd exceptions, incorrect data, performance issues, and general confusion. It seems&#xD;
simple when reading yet-another-book-on-ASP.NET, but never when applied in the real&#xD;
world. In this session, we decompose this mess, and turn the Life Cycle into an effective&#xD;
and productive tool. No ASP.NET MVC, no Dynamic Data, no MonoRail, no technologies&#xD;
of tomorrow, just the basics of ASP.NET, using the tools we have available in the&#xD;
office, today.&#xD;
&lt;/p&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
It's a long drive from Michigan to Knoxville, but the conference is worth the trip&#xD;
(the first of two Tennessee conferences I will be attending this year). A few other&#xD;
local speakers will be making the trip to Knoxville, as well. Check out the &lt;a title="CodeStock Session List" href="http://www.codestock.org/Sessions.aspx"&gt;full&#xD;
session list&lt;/a&gt; for more information, and while you are at it, &lt;a title="Register for CodeStock" href="http://www.codestock.org/Pages/Register.aspx"&gt;register&#xD;
for the event&lt;/a&gt; if you haven't already done so; the cost is only $25 if you sign&#xD;
up before the end of May. I was there last year for the first CodeStock, and I had&#xD;
a great time; I'm excited about this years event, not only because I am speaking,&#xD;
but to see what other new things that people are talking about, catch up with friends,&#xD;
and to meet new people in the community.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
I hope to see you there.&#xD;
&lt;/p&gt;&#xD;
        &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:79086fe6-58e7-4b4a-9394-194cfd2007b6" class="wlWriterEditableSmartContent"&gt;Technorati&#xD;
Tags: &lt;a href="http://technorati.com/tags/CodeStock" rel="tag"&gt;CodeStock&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Speaking" rel="tag"&gt;Speaking&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;&lt;/div&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.cptloadtest.com/aggbug.ashx?id=e8d18cc4-127b-4fe1-a86c-f8cd56b3edb8"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=7g942yTtX0M:CaNZu-PlrOQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=7g942yTtX0M:CaNZu-PlrOQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=7g942yTtX0M:CaNZu-PlrOQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=7g942yTtX0M:CaNZu-PlrOQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=7g942yTtX0M:CaNZu-PlrOQ:gsZI0cpJP_o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=gsZI0cpJP_o" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=7g942yTtX0M:CaNZu-PlrOQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CaptainLoadtest/~4/7g942yTtX0M" height="1" width="1"/&gt;</description>
      <comments>http://www.cptloadtest.com/CommentView,guid,e8d18cc4-127b-4fe1-a86c-f8cd56b3edb8.aspx</comments>
      <category>ASP.Net</category>
      <category>Events</category>
      <category>Speaking</category>
    <feedburner:origLink>http://www.cptloadtest.com/2009/05/18/Speaking-At-CodeStock-2009-On-ASPNET-Page-Life-Cycle.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.cptloadtest.com/Trackback.aspx?guid=43d7519f-a17a-4fb2-a33d-3b27cd39f994</trackback:ping>
      <pingback:server>http://www.cptloadtest.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.cptloadtest.com/PermaLink,guid,43d7519f-a17a-4fb2-a33d-3b27cd39f994.aspx</pingback:target>
      <dc:creator>Jay Harris</dc:creator>
      <wfw:comment>http://www.cptloadtest.com/CommentView,guid,43d7519f-a17a-4fb2-a33d-3b27cd39f994.aspx</wfw:comment>
      <wfw:commentRss>http://www.cptloadtest.com/SyndicationService.asmx/GetEntryCommentsRss?guid=43d7519f-a17a-4fb2-a33d-3b27cd39f994</wfw:commentRss>
      <slash:comments>1</slash:comments>
      
      <title>Virtues and Villainy of Robots.txt</title>
      <guid isPermaLink="false">http://www.cptloadtest.com/PermaLink,guid,43d7519f-a17a-4fb2-a33d-3b27cd39f994.aspx</guid>
      <link>http://feedproxy.google.com/~r/CaptainLoadtest/~3/29rr3ShiB_0/Virtues-And-Villainy-Of-Robotstxt.aspx</link>
      <pubDate>Fri, 15 May 2009 13:31:37 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
You may have heard of Robots.txt. Or, you may have seen requests for /Robots.txt in&#xD;
your web traffic logs, and if the file doesn't exist, a related HTTP 404. But what&#xD;
is this Robot file, and what does it do?&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Introduction to Robots.txt&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
When on a web server, Robots.txt is a file that directs Robots (a.k.a. Spiders or&#xD;
Web Crawlers) on which files and directories to ignore when indexing a site. The file&#xD;
is located on the root directory of the domain, and is typically used to hide areas&#xD;
of a site from search engine indexing, such as to keep a page off of Google's radar&#xD;
(such as my DasBlog login page) or if a page or image is not relevant to the traditional&#xD;
content of a site (maybe a mockup page for a CSS demo contains content about puppies,&#xD;
and you don't want to mislead potential audience). Robots request this file prior&#xD;
to indexing your site, and its absence indicates that the robot is free to index the&#xD;
entire domain. Also, note that each sub-domain uses a unique Robots.txt. When a spider&#xD;
is indexing msdn.microsoft.com, it won't look for the file on www.microsoft.com; MSDN&#xD;
will need its own copy of Robots.txt. &#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;How do I make a Robots.txt?&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Robots.txt is a simple text file. You can create it in Notepad, Word, Emacs, DOS Edit,&#xD;
or your favorite text editor. Also, the file belongs in the root of the domain on&#xD;
your web server.&#xD;
&lt;/p&gt;&#xD;
        &lt;h4&gt;Allow all robots to access everything:&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
The most basic file will be to authorize all robots to index the entire site. The&#xD;
asterisk [*] for &lt;em&gt;User Agent&lt;/em&gt; indicates that the rule applies to all robots,&#xD;
and by leaving the value of &lt;em&gt;Disallow&lt;/em&gt; blank rather than including a path,&#xD;
it effectively disallows nothing and allows everything.&#xD;
&lt;/p&gt;&#xD;
        &lt;pre class="plain:nocontrols" name="code"&gt;# Allow all robots to access everything&#xD;
User-agent: *&#xD;
Disallow:&lt;/pre&gt;&#xD;
        &lt;h4&gt;Block all robots from accessing anything:&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Conversely, with only one more character, we can invert the entire file and block&#xD;
everything. By setting &lt;em&gt;Disallow&lt;/em&gt; to a root slash, every file and directory&#xD;
stemming from the root (in other words, the entire site) will be blocked from robot&#xD;
indexing.&#xD;
&lt;/p&gt;&#xD;
        &lt;pre class="plain:nocontrols" name="code"&gt;# Block all robots from accessing anything&#xD;
User-agent: *&#xD;
Disallow: /&lt;/pre&gt;&#xD;
        &lt;h4&gt;Allow all robots to index everything except scripts, logs, images, and that CSS&#xD;
demo on Puppies:&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;em&gt;Disallow&lt;/em&gt; is a partial-match string; setting &lt;em&gt;Disallow&lt;/em&gt; to "image"&#xD;
would match both &lt;em&gt;/images/&lt;/em&gt; and &lt;em&gt;/imageHtmlTagDemo.html&lt;/em&gt;. &lt;em&gt;Disallow&lt;/em&gt; can&#xD;
also be included multiple times with different values to disallow a robot from multiple&#xD;
files and directories.&#xD;
&lt;/p&gt;&#xD;
        &lt;pre class="plain:nocontrols" name="code"&gt;# Block all robots from accessing scripts, logs,&#xD;
#    images, and that CSS demo on Puppies&#xD;
User-agent: *&#xD;
Disallow: /images/&#xD;
Disallow: /logs/&#xD;
Disallow: /scripts/&#xD;
Disallow: /demos/cssDemo/puppies.html&lt;/pre&gt;&#xD;
        &lt;h4&gt;Block all robots from accessing anything, except Google, which is only blocked&#xD;
from images:&#xD;
&lt;/h4&gt;&#xD;
        &lt;p&gt;&#xD;
Just as a browser has a user agent, so does a robot. For example, "Googlebot/2.1&#xD;
(http://www.google.com/bot.html)", is one of the user agents for Google's indexer.&#xD;
Like &lt;em&gt;Disallow&lt;/em&gt;, the &lt;em&gt;User-agent&lt;/em&gt; value in Robots.txt is a partial-match&#xD;
string, so simply setting the value to "Googlebot" is sufficient for a match.&#xD;
Also, the &lt;em&gt;User-agent&lt;/em&gt; and &lt;em&gt;Disallow&lt;/em&gt; entries cascade, with the most&#xD;
specific User Agent setting is the one that is recognized.&#xD;
&lt;/p&gt;&#xD;
        &lt;pre class="plain:nocontrols" name="code"&gt;# Block all robots from accessing anything,&#xD;
#    except Google, which is only blocked from images&#xD;
User-agent: *&#xD;
Disallow: /&#xD;
User-agent: Googlebot&#xD;
Disallow: /images/&lt;/pre&gt;&#xD;
        &lt;h3&gt;Shortcomings of Robots.txt&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Similar to the &lt;a title="Wikipedia: Pirate Code" href="http://en.wikipedia.org/wiki/Pirate_code" rel="nofollow"&gt;Code&#xD;
of the Order of the Brethren&lt;/a&gt;, Robots.txt "is more what you'd call 'guidelines'&#xD;
than actual rules." Robots.txt is not a standardized protocol, nor is it a requirement.&#xD;
Only the "honorable" robots such as the Google or Yahoo search spiders adhere&#xD;
to the file's instructions; other less-honorable bots, such as a spam spider searching&#xD;
for email addresses, largely ignore the file.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Also, do not use the file for access control. Robots.txt is just a suggestion for&#xD;
search indexing, and will by no means block requests to a disallowed directory of&#xD;
file. These disallowed URLs are still freely available to anyone on the web. Additionally,&#xD;
the contents of this file can be used to against you, as it the items you place in&#xD;
it may indicate areas of the site that are intended to be secret or private; this&#xD;
information could be used to prioritize candidates for a malicious attack with disallowed&#xD;
pages being the first places to target.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
Finally, this file must be located in the root of the domain: www.mydomain.com/robots.txt.&#xD;
If your site is in a sub-folder from the domain, such as www.mydomain.com/~username/,&#xD;
the file must still be on the root of the domain, and you may need to speak with your&#xD;
webmaster to get your modifications added to the file.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Other Resources:&#xD;
&lt;/h3&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
The Web Robots Pages : &lt;a href="http://www.robotstxt.org"&gt;http://www.robotstxt.org&lt;/a&gt;&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
Wikipedia : &lt;a title="http://en.wikipedia.org/wiki/Robots.txt" href="http://en.wikipedia.org/wiki/Robots.txt"&gt;http://en.wikipedia.org/wiki/Robots.txt&lt;/a&gt;&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e5842e47-5b09-4532-a0d2-8f965492aefc" class="wlWriterEditableSmartContent"&gt;Technorati&#xD;
Tags: &lt;a href="http://technorati.com/tags/SEO" rel="tag"&gt;SEO&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Robots.txt" rel="tag"&gt;Robots.txt&lt;/a&gt;&lt;/div&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.cptloadtest.com/aggbug.ashx?id=43d7519f-a17a-4fb2-a33d-3b27cd39f994"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=29rr3ShiB_0:fvG_NGBhMtM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=29rr3ShiB_0:fvG_NGBhMtM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=29rr3ShiB_0:fvG_NGBhMtM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=29rr3ShiB_0:fvG_NGBhMtM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=29rr3ShiB_0:fvG_NGBhMtM:gsZI0cpJP_o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=gsZI0cpJP_o" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=29rr3ShiB_0:fvG_NGBhMtM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CaptainLoadtest/~4/29rr3ShiB_0" height="1" width="1"/&gt;</description>
      <comments>http://www.cptloadtest.com/CommentView,guid,43d7519f-a17a-4fb2-a33d-3b27cd39f994.aspx</comments>
      <category>Blogging</category>
      <category>SEO</category>
    <feedburner:origLink>http://www.cptloadtest.com/2009/05/15/Virtues-And-Villainy-Of-Robotstxt.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.cptloadtest.com/Trackback.aspx?guid=77910679-8b77-44cf-87f3-67d47378e5bc</trackback:ping>
      <pingback:server>http://www.cptloadtest.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.cptloadtest.com/PermaLink,guid,77910679-8b77-44cf-87f3-67d47378e5bc.aspx</pingback:target>
      <dc:creator>Jay Harris</dc:creator>
      <wfw:comment>http://www.cptloadtest.com/CommentView,guid,77910679-8b77-44cf-87f3-67d47378e5bc.aspx</wfw:comment>
      <wfw:commentRss>http://www.cptloadtest.com/SyndicationService.asmx/GetEntryCommentsRss?guid=77910679-8b77-44cf-87f3-67d47378e5bc</wfw:commentRss>
      <slash:comments>1</slash:comments>
      
      <title>Lansing Give Camp Wrap-Up</title>
      <guid isPermaLink="false">http://www.cptloadtest.com/PermaLink,guid,77910679-8b77-44cf-87f3-67d47378e5bc.aspx</guid>
      <link>http://feedproxy.google.com/~r/CaptainLoadtest/~3/rdBuOT_zm-0/Lansing-Give-Camp-WrapUp.aspx</link>
      <pubDate>Thu, 07 May 2009 18:55:31 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
The event was about giving back to the community. A few weekends ago, April 24-26,&#xD;
2009, the Impression 5 Science Center held the first ever &lt;a href="http://www.lansinggivecamp.org/"&gt;Lansing&#xD;
Give Camp&lt;/a&gt;. The Lansing, Michigan event was a weekend of coding for charities,&#xD;
where nearly 50 area developers and over 10 volunteers gathered to donate their time&#xD;
and complete projects for 13 charities.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The event, which primarily took place in one large room on the first floor of Impression&#xD;
5, was full of excitement and emotion. Sponsors stepped up to offer additional assistance&#xD;
at the last minute, all to really make the event a success. TechSmith, DevExpress,&#xD;
the MSU University Club, and even Impression 5 all stepped up during the final week&#xD;
to sponsor a meal. The remainder of the meals were covered by collaboration between&#xD;
Microsoft, Wing Zone, Dominos Pizza, Guido's Pizza, Panera Bread, and Dunkin Donuts.&#xD;
Jennifer Middlin of TechSmith and Camron Gnass of Vision Creative also covered our&#xD;
late-night snacks, which included Tacos and "Insomnia Cookies." Nom, nom,&#xD;
nom.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
The biggest drama of the weekend had to be Mother Nature's visit on Saturday afternoon.&#xD;
A band of severe Thunderstorms rolled through Lansing on Saturday, knocking out power&#xD;
to the entire facility. We didn't lose any work, since everyone's laptop battery kicked&#xD;
in as soon as the lights went dark, but the loss of power did kill all of the wireless&#xD;
access points, and with it all connectivity to the source control server and to web&#xD;
hosting facilities. However, within minutes, Erik Larson (Director of Impression 5)&#xD;
was on the phone with Eric Hart (Director of the Lansing Center), and the Lansing&#xD;
Center responded heroically by providing us with a temporary home with power and internet&#xD;
access until power was restored at Impression 5. Between three teams shipping of to&#xD;
local coffee houses, and the rest all taking the trip across the street to the Lansing&#xD;
Center, everyone was able to continue working on their projects with minimal delay.&#xD;
I extend a huge "Thank you" to the Lansing Center for helping us get out&#xD;
of a jam that could have been a major detriment to the success of our weekend.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
However, it was the closing ceremony at Lansing Give Camp that stole the show. There&#xD;
were many emotion-filled faces throughout the staff and crowd as each project conducted&#xD;
a presentation of their output, demoing their wares, and each charity saw dreams achieved&#xD;
and went home with a year of free hosting from LiquidWeb and an "everything you&#xD;
need to maintain your site" bag of software and books from Microsoft. Each of&#xD;
the attendees even went home with one or two prizes, which included books, hardware,&#xD;
and software from Microsoft, books from TechSmith, and software from DevExpress, Telligent,&#xD;
and Telleric.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
It was a great event. The charities were happy. The developers were happy. It was&#xD;
all a huge success. And I can't wait until next year.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Lansing Give Camp in News and Blogs:&#xD;
&lt;/h3&gt;&#xD;
        &lt;ul&gt;&#xD;
          &lt;li&gt;&#xD;
Great Lakes IT Report : &lt;a href="http://www.wwj.com/Lansing-GiveCamp-Develops-Free-Software-For-Nonpro/4273994"&gt;Lansing&#xD;
GiveCamp Develops Free Software for Nonprofits&lt;/a&gt;&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
Lansing Capital Gains : &lt;a href="http://www.capitalgainsmedia.com/innovationnews/give0315.aspx"&gt;Give&#xD;
Camp Brings $50,000 in Tech Talent to Local Charities&lt;/a&gt;&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
AM Lansing : &lt;a href="http://amlansing.com/amLansing/Harris_4.27.html"&gt;On-Air Interview&#xD;
with Jay Harris on Lansing Give Camp&lt;/a&gt;&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
The Wit and Ramblings of David Giard : &lt;a href="http://www.davidgiard.com/2009/05/03/LansingGiveCampSuccess.aspx"&gt;Lansing&#xD;
Give Camp Success&lt;/a&gt;&lt;/li&gt;&#xD;
          &lt;li&gt;&#xD;
The Wit and Ramblings of David Giard : &lt;a href="http://www.davidgiard.com/2009/04/29/McWhertersAndHarrisesOnTheLansingGiveCamp.aspx"&gt;McWherters&#xD;
and Harrises on the Lansing Give Camp&lt;/a&gt;&lt;/li&gt;&#xD;
        &lt;/ul&gt;&#xD;
        &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d261b956-b3db-4d1c-b6c6-4f289d1e5d0d" class="wlWriterEditableSmartContent"&gt;Technorati&#xD;
Tags: &lt;a href="http://technorati.com/tags/Lansing" rel="tag"&gt;Lansing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Give+Camp" rel="tag"&gt;Give&#xD;
Camp&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Charity" rel="tag"&gt;Charity&lt;/a&gt;&lt;/div&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.cptloadtest.com/aggbug.ashx?id=77910679-8b77-44cf-87f3-67d47378e5bc"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=rdBuOT_zm-0:QHJr6V-SCVc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=rdBuOT_zm-0:QHJr6V-SCVc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=rdBuOT_zm-0:QHJr6V-SCVc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=rdBuOT_zm-0:QHJr6V-SCVc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=rdBuOT_zm-0:QHJr6V-SCVc:gsZI0cpJP_o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=gsZI0cpJP_o" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=rdBuOT_zm-0:QHJr6V-SCVc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CaptainLoadtest/~4/rdBuOT_zm-0" height="1" width="1"/&gt;</description>
      <comments>http://www.cptloadtest.com/CommentView,guid,77910679-8b77-44cf-87f3-67d47378e5bc.aspx</comments>
      <category>Events</category>
    <feedburner:origLink>http://www.cptloadtest.com/2009/05/07/Lansing-Give-Camp-WrapUp.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.cptloadtest.com/Trackback.aspx?guid=9c10319f-4292-41c3-af6b-44acc6ac9734</trackback:ping>
      <pingback:server>http://www.cptloadtest.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.cptloadtest.com/PermaLink,guid,9c10319f-4292-41c3-af6b-44acc6ac9734.aspx</pingback:target>
      <dc:creator>Jay Harris</dc:creator>
      <wfw:comment>http://www.cptloadtest.com/CommentView,guid,9c10319f-4292-41c3-af6b-44acc6ac9734.aspx</wfw:comment>
      <wfw:commentRss>http://www.cptloadtest.com/SyndicationService.asmx/GetEntryCommentsRss?guid=9c10319f-4292-41c3-af6b-44acc6ac9734</wfw:commentRss>
      
      <title>Attend Give Camp or the X Conference? Both!</title>
      <guid isPermaLink="false">http://www.cptloadtest.com/PermaLink,guid,9c10319f-4292-41c3-af6b-44acc6ac9734.aspx</guid>
      <link>http://feedproxy.google.com/~r/CaptainLoadtest/~3/iZCSCWjirOU/Attend-Give-Camp-Or-The-X-Conference-Both.aspx</link>
      <pubDate>Wed, 08 Apr 2009 20:55:41 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
Torn between attending Lansing Give Camp or the Kalamazoo X Conference?&lt;br&gt;&#xD;
You don't have to choose; do both!&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Give Camp or X Conference?&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
The first ever Lansing Give Camp is being held April 24-26. The first ever Kalamazoo&#xD;
X Conference is being held April 25. The sessions of the X Conference offer a great&#xD;
opportunity for learning and for improving your craft. For $20, you can't beat that.&#xD;
But Lansing Give Camp is a weekend of giving back to the community by helping out&#xD;
local charities. Coding for a cause; you can't beat that, either. Two amazing events,&#xD;
slightly more than an hour from each other, are being held the same weekend. It's&#xD;
like a bad case of deadlocked threads. Kalamazoo or Lansing? Lansing or Kalamazoo?&#xD;
How do you choose between them?&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
You don't have to choose. Go to both.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Spend the weekend in Kalamazansing!&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Kalamazoo X Conference and Lansing Give Camp have partnered together. Lansing Give&#xD;
Camp will have special projects that will accommodate X Conference attendees. Kalamazoo&#xD;
X Conference is waiving its registration fee for anyone attending Lansing Give Camp.&#xD;
Friday night, come out to Give Camp. Saturday morning you can grab a shower (thanks&#xD;
to a partnership with the Lansing YMCA), and head out to Kalamazoo. When the event&#xD;
is over, finish out the weekend back in Lansing, coding for a cause. It's almost like&#xD;
one big event, spread between two Michigan cities. Kalamazansing.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;I want to go to Kalamazansing!&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Sign up Lansing Give Camp at &lt;a href="http://www.lansinggivecamp.org"&gt;http://www.lansinggivecamp.org&lt;/a&gt;.&#xD;
The registration form includes an option to sign up for the X Conference, too. We'll&#xD;
take care of the rest.&#xD;
&lt;/p&gt;&#xD;
        &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8c55bcc1-5c4d-4459-aa76-47483eaab96d" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati&#xD;
Tags: &lt;a href="http://technorati.com/tags/X%20Conference" rel="tag"&gt;X Conference&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Kalamazoo" rel="tag"&gt;Kalamazoo&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Lansing" rel="tag"&gt;Lansing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Give%20Camp" rel="tag"&gt;Give&#xD;
Camp&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Kalamazansing" rel="tag"&gt;Kalamazansing&lt;/a&gt;&lt;/div&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.cptloadtest.com/aggbug.ashx?id=9c10319f-4292-41c3-af6b-44acc6ac9734"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=iZCSCWjirOU:OqPlMkiTovs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=iZCSCWjirOU:OqPlMkiTovs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=iZCSCWjirOU:OqPlMkiTovs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=iZCSCWjirOU:OqPlMkiTovs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=iZCSCWjirOU:OqPlMkiTovs:gsZI0cpJP_o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=gsZI0cpJP_o" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=iZCSCWjirOU:OqPlMkiTovs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CaptainLoadtest/~4/iZCSCWjirOU" height="1" width="1"/&gt;</description>
      <comments>http://www.cptloadtest.com/CommentView,guid,9c10319f-4292-41c3-af6b-44acc6ac9734.aspx</comments>
      <category>Events</category>
    <feedburner:origLink>http://www.cptloadtest.com/2009/04/08/Attend-Give-Camp-Or-The-X-Conference-Both.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.cptloadtest.com/Trackback.aspx?guid=f8b1b499-e1d1-4978-b3e9-e80c45d3f150</trackback:ping>
      <pingback:server>http://www.cptloadtest.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.cptloadtest.com/PermaLink,guid,f8b1b499-e1d1-4978-b3e9-e80c45d3f150.aspx</pingback:target>
      <dc:creator>Jay Harris</dc:creator>
      <wfw:comment>http://www.cptloadtest.com/CommentView,guid,f8b1b499-e1d1-4978-b3e9-e80c45d3f150.aspx</wfw:comment>
      <wfw:commentRss>http://www.cptloadtest.com/SyndicationService.asmx/GetEntryCommentsRss?guid=f8b1b499-e1d1-4978-b3e9-e80c45d3f150</wfw:commentRss>
      
      <title>Lansing Give Camp 2009, April 24-26</title>
      <guid isPermaLink="false">http://www.cptloadtest.com/PermaLink,guid,f8b1b499-e1d1-4978-b3e9-e80c45d3f150.aspx</guid>
      <link>http://feedproxy.google.com/~r/CaptainLoadtest/~3/msmGZB-20_A/Lansing-Give-Camp-2009-April-2426.aspx</link>
      <pubDate>Wed, 08 Apr 2009 16:50:07 GMT</pubDate>
      <description>&lt;body xmlns="http://www.w3.org/1999/xhtml"&gt;&#xD;
        &lt;p&gt;&#xD;
          &lt;a href="http://www.cptloadtest.com/content/binary/WindowsLiveWriter/LansingGiveCampApril2426_9F0E/LansGiveCamp2009_10.png"&gt;&#xD;
            &lt;img style="margin: 10px 0px 10px 10px" height="131" alt="LansGiveCamp2009" src="http://www.cptloadtest.com/content/binary/WindowsLiveWriter/LansingGiveCampApril2426_9F0E/LansGiveCamp2009_thumb_4.png" width="211" align="right" border="0"&gt;&lt;/img&gt;&#xD;
          &lt;/a&gt; On&#xD;
April 24th-26th, 2008, the local software development communities will pool their&#xD;
talents to put together the first ever Give Camp in Lansing Michigan. The event will&#xD;
be hosted at the &lt;a href="http://impression5.org"&gt;Impression 5 Science Center&lt;/a&gt; in&#xD;
downtown Lansing. For more information, please visit the event's web site, &lt;a href="http://www.lansinggivecamp.org"&gt;http://www.lansinggivecamp.org&lt;/a&gt;.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;Lansing Give Camp&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
April 24-26 at the Impression 5 Science Center&lt;br&gt;&#xD;
200 Museum Drive, Lansing, MI 48933&lt;br&gt;&lt;a href="http://www.lansinggivecamp.org"&gt;http://www.lansinggivecamp.org&lt;/a&gt;&lt;/p&gt;&#xD;
        &lt;h3&gt;What is a Give Camp?&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
A Give Camp is a weekend-long event where software developers, designers, and database&#xD;
administrators donate their time to create custom software solutions for non-profit&#xD;
organizations. This custom software could be a new web site for the nonprofit organization,&#xD;
a small data-collection application to keep track of members, or an application for&#xD;
the Red Cross that automatically will email a blood donor three months after they've&#xD;
last donated blood to remind them that they are again eligible to donate blood. The&#xD;
only limitation for a Give Camp project is that it must be scoped to be completed&#xD;
within a weekend.&#xD;
&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
During the event, developers are welcome to come and go as they please. The event&#xD;
will continue 24/7 from Friday afternoon through Sunday afternoon, and developers&#xD;
can choose to go home in the evenings or camp out for the entire weekend. Showers&#xD;
are not available at the Impression 5 facility, but the Lansing YMCA--just down the&#xD;
street--is donating their facilities throughout the weekend for any Give Camp attendees.&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;How can I help?&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
If you are a developer and are interested in attending, please go to the event web&#xD;
site and register for the event. We are looking for developers of all skill levels&#xD;
to help out, from students to senior developers, and for developers of all skill sets,&#xD;
including designers, developers, database administrators, and more. If you can code,&#xD;
we want you there!&#xD;
&lt;/p&gt;&#xD;
        &lt;h3&gt;What about Sponsorship?&#xD;
&lt;/h3&gt;&#xD;
        &lt;p&gt;&#xD;
Lansing Give Camp is seeking cash donations of any amount, or the sponsorship of a&#xD;
meal. A meal sponsorship would entail funding breakfast, lunch, or dinner for roughly&#xD;
100 volunteers. Typical meals would be sandwiches, pizza, or BBQ. As consideration&#xD;
for your donation, your organization’s logo will be added to the Give Camp web site,&#xD;
along with mention during the opening and closing sessions.&#xD;
&lt;/p&gt;&#xD;
        &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:4ca0e935-2e92-46e4-bbed-4e4eafd8831e" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati&#xD;
Tags: &lt;a href="http://technorati.com/tags/Lansing" rel="tag"&gt;Lansing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Give%20Camp" rel="tag"&gt;Give&#xD;
Camp&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Charities" rel="tag"&gt;Charities&lt;/a&gt;&lt;/div&gt;&#xD;
        &lt;img width="0" height="0" src="http://www.cptloadtest.com/aggbug.ashx?id=f8b1b499-e1d1-4978-b3e9-e80c45d3f150"&gt;&lt;/img&gt;&#xD;
      &lt;/body&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=msmGZB-20_A:nLeuyBR6UgQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=msmGZB-20_A:nLeuyBR6UgQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=msmGZB-20_A:nLeuyBR6UgQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?i=msmGZB-20_A:nLeuyBR6UgQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=msmGZB-20_A:nLeuyBR6UgQ:gsZI0cpJP_o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=gsZI0cpJP_o" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/CaptainLoadtest?a=msmGZB-20_A:nLeuyBR6UgQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/CaptainLoadtest?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/CaptainLoadtest/~4/msmGZB-20_A" height="1" width="1"/&gt;</description>
      <comments>http://www.cptloadtest.com/CommentView,guid,f8b1b499-e1d1-4978-b3e9-e80c45d3f150.aspx</comments>
      <category>Events</category>
    <feedburner:origLink>http://www.cptloadtest.com/2009/04/08/Lansing-Give-Camp-2009-April-2426.aspx</feedburner:origLink></item>
  </channel>
</rss>
