<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>Nathan Edminster</title>
	<atom:link href="http://blog.ntierdesign.com/index.php/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.ntierdesign.com</link>
	<description>"...THE INTERNET IS NOT SOMETHING THAT YOU JUST DUMP SOMETHING ON."</description>
	<pubDate>Sat, 10 Sep 2011 23:59:54 +0000</pubDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Creating a user friendly app_offline system maintenance page</title>
		<link>http://blog.ntierdesign.com/index.php/blog/creating-a-user-friendly-app-offline-system-maintenance-page</link>
		<comments>http://blog.ntierdesign.com/index.php/blog/creating-a-user-friendly-app-offline-system-maintenance-page#comments</comments>
		<pubDate>Fri, 28 Aug 2009 05:01:25 +0000</pubDate>
		<dc:creator>Nathan</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<category><![CDATA[app_offline.htm]]></category>

		<category><![CDATA[asp.net]]></category>

		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://blog.ntierdesign.com/?p=219</guid>
		<description><![CDATA[Undoubtedly you&#8217;ve heard of the app_offline.htm file by now.  If you haven&#8217;t, you can read more about it on ScottGu&#8217;s blog post.  This technique has been one of my favorite tricks for many years.  From time to time, like all of us, I need to take down a high profile site to apply some &#8220;enhancements&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Undoubtedly you&#8217;ve heard of the app_offline.htm file by now.  If you haven&#8217;t, you can read more about it on <a title="app_offline.htm description" href="http://weblogs.asp.net/scottgu/archive/2006/04/09/442332.aspx" target="_blank">ScottGu&#8217;s blog post</a>.  This technique has been one of my favorite tricks for many years.  From time to time, like all of us, I need to take down a high profile site to apply some &#8220;enhancements&#8221; and I unfortunately can&#8217;t wean users off gracefully.  I always feel bad when I publish that file to the server, knowing there could be hundreds of users sitting at, in their mind, an inexcusable system maintenance page.</p>
<p><strong>So what are we to do?</strong></p>
<p><span id="more-219"></span>I thought, why not make that experience a little bit friendlier.  Why not show them a Flikr slideshow, a YouTube video or maybe a count down of the estimated repair time.  Maybe even a screencast of the new features that will be available when the updates are done.  The possibilities are endless.  So I threw together a simple app_offline.htm that utilizes a little client side scripting to improve the experience.</p>
<p><img class="size-medium wp-image-238 alignnone" title="AppOffline Screenshot" src="http://blog.ntierdesign.com/wp-content/uploads/2009/08/appofflinescreen-234x300.png" alt="AppOffline Screenshot" width="234" height="300" /></p>
<p>For my example, which you can view <a title="app_offline.htm example" href="http://ntierdesign.com/_app_offline.htm" target="_blank">here</a> (be sure to start the video right away to see the full effect), I added a YouTube video for their enjoyment.  The app_offline.htm file pings the application every 5 seconds.  If the site returns ok (status 200) we pass them on to the application.  To help usability, I only redirect them if the video is in a &#8220;not started&#8221;, &#8220;ended&#8221; or &#8220;cued&#8221; state.  If the video is playing, I update a message on the page, letting them that the site is back up and they can navigate to it when they are ready.</p>
<p>I also thought it might be nice for this example to pull in a Twitter feed account that is set up for applicaition outages.  This way users get an idea of what is going on.</p>
<p>Really the possibilities are endless.  Just remember, you&#8217;re restricted to resources with the app_offline.htm file or pulled in from another domain.  That&#8217;s right, no local images or scripts.  If you come up with a creative app_offline.htm file, please post a comment and link for others to gain inspiration.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ntierdesign.com/index.php/blog/creating-a-user-friendly-app-offline-system-maintenance-page/feed</wfw:commentRss>
		</item>
		<item>
		<title>How to return LLBLGenPro Entities to JSON</title>
		<link>http://blog.ntierdesign.com/index.php/blog/how-to-return-llblgenpro-entities-to-json</link>
		<comments>http://blog.ntierdesign.com/index.php/blog/how-to-return-llblgenpro-entities-to-json#comments</comments>
		<pubDate>Sat, 08 Aug 2009 00:31:50 +0000</pubDate>
		<dc:creator>Nathan</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<category><![CDATA[clubhouse]]></category>

		<category><![CDATA[JSON]]></category>

		<category><![CDATA[Linq]]></category>

		<category><![CDATA[LLBLGenPro]]></category>

		<guid isPermaLink="false">http://blog.ntierdesign.com/?p=221</guid>
		<description><![CDATA[I was recently searching for a way to convert LLBLGenPro Entities to JSON when I ran across Josh&#8217;s approach.  I like the approach but thought there must be an easier way.  This approach requires LLBLGenPro 2.6 or above and .NET 3.0.
Here&#8217;s an example


           [...]]]></description>
			<content:encoded><![CDATA[<p>I was recently searching for a way to convert LLBLGenPro Entities to JSON when I ran across <a href="http://www.readingwright.com/Post/Show/LLBLGen-to-JSon" target="_blank">Josh&#8217;s</a> approach.  I like the approach but thought there must be an easier way.  This approach requires LLBLGenPro 2.6 or above and .NET 3.0.</p>
<p>Here&#8217;s an example</p>
<pre name="code" class="c#">

            LinqMetaData metaData = new LinqMetaData();

            var q = from customer in metaData.Customer
                    where customer.Id == customerId
                    select new { id = customer.Id, name = p.FullName };

            JavaScriptSerializer serializer = new JavaScriptSerializer();
            return serializer.Serialize(q);
</pre>
<p>Here&#8217;s another example with a 1:m return:</p>
<pre name="code" class="c#" width="300px">
            LinqMetaData metaData = new LinqMetaData();

            var q = from meeting in metaData.ReviewMeeting
                    select new
                    {
                        CreatedBy = meeting.CreatedBy,
                        ReviewProvider = from providers in meeting.ReviewProvider
                                         select new { ProviderName = providers.FullName }
                    };

            JavaScriptSerializer serializer = new JavaScriptSerializer();
            return serializer.Serialize(q);
</pre>
<p>Nice thing about using the new linq features in LLBLGenPro is you&#8217;re only bringing back the data you care about. Yes, you could always ignore fields, but isn&#8217;t it easier to tell it what you want instead of what you don&#8217;t want?</p>
<p>Thoughts?  I&#8217;d love to hear them.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ntierdesign.com/index.php/blog/how-to-return-llblgenpro-entities-to-json/feed</wfw:commentRss>
		</item>
		<item>
		<title>How to prevent gifs from rendering grainy using .Net GDI</title>
		<link>http://blog.ntierdesign.com/index.php/blog/how-to-prevent-gifs-from-rendering-grainy-using-net-gdi</link>
		<comments>http://blog.ntierdesign.com/index.php/blog/how-to-prevent-gifs-from-rendering-grainy-using-net-gdi#comments</comments>
		<pubDate>Sat, 20 Dec 2008 19:52:28 +0000</pubDate>
		<dc:creator>Nathan</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://blog.ntierdesign.com/?p=55</guid>
		<description><![CDATA[I recently built a Http Handler for an Asp.net application that needed to generate image thumbnails from different image types on the fly. Sounds easy enough, right?

Well it was a simple task until I tried to generate a thumbnail from a gif. After hours and hours trying to figure out how to improve the resolution I found a great article addressing this particular issue.]]></description>
			<content:encoded><![CDATA[<p>I recently built a <span id="SPELLING_ERROR_0" class="blsp-spelling-corrected">Http Handler</span> for an Asp.net application that needed to generate image thumbnails from different image types on the fly. Sounds easy enough, right?</p>
<p>Well it was a simple task until I tried to generate a thumbnail from a <span id="SPELLING_ERROR_1" class="blsp-spelling-error">gif</span>. After hours and hours trying to figure out how to improve the resolution I found a great <a href="http://codebetter.com/blogs/brendan.tompkins/archive/2007/06/14/gif-image-color-quantizer-now-with-safe-goodness.aspx">article</a> addressing this particular issue.<span id="more-55"></span></p>
<p>The key to this <span id="SPELLING_ERROR_2" class="blsp-spelling-corrected">conundrum</span> you ask? <a href="http://codebetter.com/blogs/brendan.tompkins/archive/2007/06/14/gif-image-color-quantizer-now-with-safe-goodness.aspx">Color quantization</a>.</p>
<p>Unfortunately System.Drawing uses a web-safe palette even though just about every <span id="SPELLING_ERROR_3" class="blsp-spelling-error">gif</span> you&#8217;ve ever seen uses an adaptive palette.</p>
<p><strong>Before implementing Brendan Tompkins Octree-based quantization technique:</strong><br />
<img class="aligncenter size-full wp-image-56" title="Grainy" src="http://blog.ntierdesign.com/wp-content/uploads/2008/12/gdi_grainy.gif" alt="Grainy" width="300" height="225" /><strong>After implementing Brendan Tompkins </strong><span id="SPELLING_ERROR_4" class="blsp-spelling-error"><strong>Octree</strong></span><strong>-based quantization technique:</strong><br />
<img class="aligncenter size-full wp-image-57" title="Smooth" src="http://blog.ntierdesign.com/wp-content/uploads/2008/12/gdi_smooth.gif" alt="Smooth" width="300" height="225" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ntierdesign.com/index.php/blog/how-to-prevent-gifs-from-rendering-grainy-using-net-gdi/feed</wfw:commentRss>
		</item>
		<item>
		<title>How to update an UpdatePanel from two different ContentPlaceHolders using MasterPages</title>
		<link>http://blog.ntierdesign.com/index.php/blog/how-to-update-an-updatepanel-from-two-different-contentplaceholders-using-masterpages</link>
		<comments>http://blog.ntierdesign.com/index.php/blog/how-to-update-an-updatepanel-from-two-different-contentplaceholders-using-masterpages#comments</comments>
		<pubDate>Sat, 20 Dec 2008 07:02:04 +0000</pubDate>
		<dc:creator>Nathan</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<category><![CDATA[ajax]]></category>

		<category><![CDATA[asp.net]]></category>

		<guid isPermaLink="false">http://blog.ntierdesign.com/?p=163</guid>
		<description><![CDATA[The first thing you want to do is always set your UpdatePanel&#8217;s UpdateMode to Conditional. By default UpdateMode is set to Always which is great when you&#8217;re first learning, but not efficient. Why? Because every time a postback is triggered, your update panel reloads, which 9 times out of 10, isn&#8217;t what you want.
The trick [...]]]></description>
			<content:encoded><![CDATA[<p>The first thing you want to do is always set your UpdatePanel&#8217;s UpdateMode to Conditional. By default UpdateMode is set to Always which is great when you&#8217;re first learning, but not efficient. Why? Because every time a postback is triggered, your update panel reloads, which 9 times out of 10, isn&#8217;t what you want.</p>
<p>The trick to setting up two different UpdatePanels is this. Lets say you have an UpdatePanel containing a GridView in one ContentPlaceHolder displaying a customer&#8217;s order history. You have another UpdatePanel in another ContentPlaceHolder that will display the order details when an order is selected.</p>
<p><span id="more-163"></span>The problem is you can&#8217;t declaratively set the Trigger to a control in a different ContentPlaceHolder.</p>
<p>What you need to do is override the OnInit() method.</p>
<p>Here is an example:</p>
<pre name="code" class="c#">
protected override void OnInit(EventArgs e)
{
     base.OnInit(e);
     AsyncPostBackTrigger trigger = new AsyncPostBackTrigger();
     trigger.ControlID = grdOrderList.UniqueID;
     trigger.EventName = &quot;SelectedIndexChanged&quot;;
     updateDetails.Triggers.Add(trigger);
}
</pre>
<p>Combine this with the UpdatePanelAnimation control to give a visual cue to the user that the data has been updated and you have a simple ajaxified solution.</p>
<pre name="code" class="html">
&lt;ajaxtoolkit:updatepanelanimationextender
    id=&quot;upAnimation&quot;
    behaviorid=&quot;upAnim&quot;
    targetcontrolid=&quot;updateDetails&quot;
    runat=&quot;server&quot;&gt;
    &lt;animations&gt;
        &lt;onupdating&gt;
            &lt;sequence&gt;
                &lt;color
                 animationtarget=&quot;updateDetails&quot;
                 duration=&quot;1&quot;
                 startvalue=&quot;#ffffff&quot;
                 endvalue=&quot;#ffffcc&quot;
                 property=&quot;style&quot;
                 propertykey=&quot;backgroundColor&quot;&gt;
                &lt;/color&gt;
            &lt;/sequence&gt;
        &lt;/onupdating&gt;
        &lt;onupdated&gt;
            &lt;sequence&gt;
                &lt;color
                 animationtarget=&quot;updateDetails&quot;
                 duration=&quot;1&quot;
                 startvalue=&quot;#ffffcc&quot;
                 endvalue=&quot;#ffffff&quot;
                 property=&quot;style&quot;
                 propertykey=&quot;backgroundColor&quot;&gt;
                &lt;/color&gt;
            &lt;/sequence&gt;
        &lt;/onupdated&gt;
    &lt;/animations&gt;
&lt;/ajaxtoolkit:updatepanelanimationextender&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.ntierdesign.com/index.php/blog/how-to-update-an-updatepanel-from-two-different-contentplaceholders-using-masterpages/feed</wfw:commentRss>
		</item>
		<item>
		<title>Starbucks Card Balance Google Gadget</title>
		<link>http://blog.ntierdesign.com/index.php/blog/starbucks-card-balance-google-gadget</link>
		<comments>http://blog.ntierdesign.com/index.php/blog/starbucks-card-balance-google-gadget#comments</comments>
		<pubDate>Fri, 19 Dec 2008 18:42:24 +0000</pubDate>
		<dc:creator>Nathan</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<category><![CDATA[gadget]]></category>

		<guid isPermaLink="false">http://blog.ntierdesign.com/?p=23</guid>
		<description><![CDATA[
I created a simple Google gadget to show me how much money I have left before my caffeine headache kicks in. It&#8217;s a nice addition to my iGoogle account.

]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-27" title="Starbucks Google Gadget" src="http://blog.ntierdesign.com/wp-content/uploads/2008/12/sbux_gadget_screenshot.png" alt="Starbucks Google Gadget" width="320" height="208" /></p>
<p>I created a simple Google gadget to show me how much money I have left before my caffeine headache kicks in. It&#8217;s a nice addition to my iGoogle account.</p>
<p><a href="http://www.google.com/ig/adde?moduleurl=hosting.gmodules.com/ig/gadgets/file/114100072513082799201/sbux.xml"><img src="http://buttons.googlesyndication.com/fusion/add.gif" border="0" alt="Add to Google" width="104" height="17" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ntierdesign.com/index.php/blog/starbucks-card-balance-google-gadget/feed</wfw:commentRss>
		</item>
		<item>
		<title>Labontes Law</title>
		<link>http://blog.ntierdesign.com/index.php/portfolio/hello-world</link>
		<comments>http://blog.ntierdesign.com/index.php/portfolio/hello-world#comments</comments>
		<pubDate>Fri, 19 Dec 2008 01:34:28 +0000</pubDate>
		<dc:creator>Nathan</dc:creator>
		
		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://10.10.10.52/?p=1</guid>
		<description><![CDATA[Super 8 site to help promote Bobby Labonte and Super 8 hotels.]]></description>
			<content:encoded><![CDATA[<p>Super 8 site to help promote Bobby Labonte and Super 8 hotels.</p>
<p> </p>
<p><em>Project owned by: </em><a href="http://www.millerwr.com" target="_blank"><em>Miller Whiterunkle</em></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ntierdesign.com/index.php/portfolio/hello-world/feed</wfw:commentRss>
		</item>
		<item>
		<title>Motorola Deals</title>
		<link>http://blog.ntierdesign.com/index.php/portfolio/test-post-title</link>
		<comments>http://blog.ntierdesign.com/index.php/portfolio/test-post-title#comments</comments>
		<pubDate>Thu, 18 Dec 2008 06:22:09 +0000</pubDate>
		<dc:creator>Nathan</dc:creator>
		
		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://216.255.196.52/?p=5</guid>
		<description><![CDATA[Single sign-on web application connecting Motorola phone dealers with their customers by zip code proximity search.  Dealers can create custom brand compliant coupons right in their browser.]]></description>
			<content:encoded><![CDATA[<p>Single sign-on web application connecting Motorola phone dealers with their customers by zip code proximity search.  Dealers can create custom brand compliant coupons right in their browser.</p>
<p> </p>
<p><em>Project owned by: </em><a href="http://www.millerwr.com" target="_blank"><em>Miller Whiterunkle</em></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ntierdesign.com/index.php/portfolio/test-post-title/feed</wfw:commentRss>
		</item>
		<item>
		<title>Motorola XLR8</title>
		<link>http://blog.ntierdesign.com/index.php/portfolio/motorola-xlr8</link>
		<comments>http://blog.ntierdesign.com/index.php/portfolio/motorola-xlr8#comments</comments>
		<pubDate>Tue, 16 Dec 2008 21:26:22 +0000</pubDate>
		<dc:creator>Nathan</dc:creator>
		
		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://blog.ntierdesign.com/?p=125</guid>
		<description><![CDATA[Allows Motorola sales reps the ability to create brand compliant sales incentive promotions.]]></description>
			<content:encoded><![CDATA[<p>Allows Motorola sales reps the ability to create brand compliant sales incentive promotions.</p>
<p> </p>
<p><em>Project owned by: </em><a href="http://www.millerwr.com" target="_blank"><em>Miller Whiterunkle</em></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ntierdesign.com/index.php/portfolio/motorola-xlr8/feed</wfw:commentRss>
		</item>
		<item>
		<title>Hoopfest : Tournament Management System</title>
		<link>http://blog.ntierdesign.com/index.php/portfolio/hoopfest-tournament-management-system</link>
		<comments>http://blog.ntierdesign.com/index.php/portfolio/hoopfest-tournament-management-system#comments</comments>
		<pubDate>Thu, 04 Dec 2008 03:16:59 +0000</pubDate>
		<dc:creator>Nathan</dc:creator>
		
		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://blog.ntierdesign.com/?p=78</guid>
		<description><![CDATA[A 3 on 3 basketball tournament management system to facilitate the registration and bracketing of over 6,400 teams and 27,000 players.]]></description>
			<content:encoded><![CDATA[<p>A 3 on 3 basketball tournament management system to facilitate the registration and bracketing of over 6,400 teams and 27,000 players.</p>
<p>System utilizes an extensive team/player validation engine that not only guarantees data integrity, but ensures the teams are ranked according to the aggregate of the player’s abilities.</p>
<p> </p>
<p><em>Project owned by: </em><a href="http://www.millerwr.com" target="_blank"><em>Miller Whiterunkle</em></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ntierdesign.com/index.php/portfolio/hoopfest-tournament-management-system/feed</wfw:commentRss>
		</item>
		<item>
		<title>Bloomsday Registration</title>
		<link>http://blog.ntierdesign.com/index.php/portfolio/bloomsday-registration</link>
		<comments>http://blog.ntierdesign.com/index.php/portfolio/bloomsday-registration#comments</comments>
		<pubDate>Wed, 03 Dec 2008 03:53:27 +0000</pubDate>
		<dc:creator>Nathan</dc:creator>
		
		<category><![CDATA[Portfolio]]></category>

		<guid isPermaLink="false">http://blog.ntierdesign.com/?p=101</guid>
		<description><![CDATA[Registration system handles over 30,000 online runner registrations.]]></description>
			<content:encoded><![CDATA[Registration system handles over 30,000 online runner registrations.]]></content:encoded>
			<wfw:commentRss>http://blog.ntierdesign.com/index.php/portfolio/bloomsday-registration/feed</wfw:commentRss>
		</item>
	</channel>
</rss>

