<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8597123411962258877</id><updated>2011-08-01T20:35:42.824-05:00</updated><category term='Book Review'/><category term='jQuery'/><category term='General'/><category term='IoC'/><category term='Craftsmanship'/><category term='Windsor'/><category term='SRS'/><category term='Screencast'/><category term='Design'/><category term='Inkscape'/><category term='ASP.Net'/><category term='GZIP'/><category term='Coding Dojo'/><category term='IIS'/><category term='Azure'/><category term='LinqToSql'/><category term='IE Hack'/><category term='Cloud'/><title type='text'>ChewyQ</title><subtitle type='html'>An exploration of technology and community</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.qteko.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-3016695264984947215</id><published>2010-08-31T09:28:00.004-05:00</published><updated>2010-09-01T09:00:54.895-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><category scheme='http://www.blogger.com/atom/ns#' term='Craftsmanship'/><title type='text'>Where do you start as a newbie programmer?</title><content type='html'>&lt;span class="Apple-style-span" style="color: #6e7173; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="copy" style="color: #6e7173; font-size: 13px; line-height: 15px; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;Yesterday I was asked the following question about programming:&lt;/span&gt;&lt;/div&gt;&lt;blockquote style="border-left-color: rgb(220, 220, 220); border-left-style: solid; border-left-width: 4px; margin-bottom: 10px; margin-left: 10px; margin-right: 0px; margin-top: 10px; padding-left: 15px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;What should I learn to do, where do I start, and how do I learn it?&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;It’s an extremely interesting question and really difficult to answer. &amp;nbsp;Below was my response:&lt;/span&gt;&lt;/div&gt;&lt;blockquote style="border-left-color: rgb(220, 220, 220); border-left-style: solid; border-left-width: 4px; margin-bottom: 10px; margin-left: 10px; margin-right: 0px; margin-top: 10px; padding-left: 15px;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;You’re email really got me thinking. &amp;nbsp;Getting started in software development isn’t easy, and it’s really hard to pin-point “How” to start. &amp;nbsp;I asked around and everyone had their own way to approach it. &amp;nbsp;I think it boils down to two key things, your current understanding of how computers work, and what you find rewarding.&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote style="border-left-color: rgb(220, 220, 220); border-left-style: solid; border-left-width: 4px; margin-bottom: 10px; margin-left: 10px; margin-right: 0px; margin-top: 10px; padding-left: 15px;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;If you really have little to no background in computers I think the best place to start is with HTML. &amp;nbsp;This is a top down approach; what I mean by that is that you’ll be starting with something that you can actually see and interact with. Over time you’ll dig down to the nitty gritty computer science stuff, but you’ll start out with tangible things like web pages. &amp;nbsp;The good news is that you can go a long way without having to dig very deep into the bowels of your computer, you only need a text editor and a web browser to get started, and there are ton of free resources on the topic. &amp;nbsp;Here’s a very basic HTML tutorial -&amp;nbsp;&lt;a href="http://www.w3schools.com/html/default.asp" style="text-decoration: underline;" target="_blank" title="http://www.w3schools.com/html/default.asp"&gt;&lt;/a&gt;&lt;/span&gt;&lt;a href="http://www.w3schools.com/html/default.asp" style="text-decoration: underline;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;http://www.w3schools.com/html/default.asp&lt;/span&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote style="border-left-color: rgb(220, 220, 220); border-left-style: solid; border-left-width: 4px; margin-bottom: 10px; margin-left: 10px; margin-right: 0px; margin-top: 10px; padding-left: 15px;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;If that’s not interesting to you, then maybe you should try a bottom up approach. &amp;nbsp;This approach starts with the computer science stuff, involves the command line (not as scary as you think), and will take a little bit more work before anyone understands that what you’re showing them is cool :) &amp;nbsp;If you think this is more you’re style, then I would take a look at the Ruby language -&amp;nbsp;&lt;a href="http://www.ruby-lang.org/en/" style="text-decoration: underline;" target="_blank" title="http://www.ruby-lang.org/en/"&gt;&lt;/a&gt;&lt;/span&gt;&lt;a href="http://www.ruby-lang.org/en/" style="text-decoration: underline;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;http://www.ruby-lang.org/en/&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&amp;nbsp;&amp;nbsp;Check out the “Get Started” link. &amp;nbsp;Also check out the Documentation section. Here’s a great “beginners guide” from the documents section&amp;nbsp;&lt;a href="http://pine.fm/LearnToProgram/" style="text-decoration: underline;" target="_blank" title="http://pine.fm/LearnToProgram/"&gt;&lt;/a&gt;&lt;/span&gt;&lt;a href="http://pine.fm/LearnToProgram/" style="text-decoration: underline;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;http://pine.fm/LearnToProgram/&lt;/span&gt;&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote style="border-left-color: rgb(220, 220, 220); border-left-style: solid; border-left-width: 4px; margin-bottom: 10px; margin-left: 10px; margin-right: 0px; margin-top: 10px; padding-left: 15px;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;Over time, if you like Ruby and HTML, you’ll find that they both come together in a framework called Ruby on Rails, often referred to as just Rails, or RoR. &amp;nbsp;You can find out more about rails here&amp;nbsp;&lt;a href="http://rubyonrails.org/" style="text-decoration: underline;" target="_blank" title="http://rubyonrails.org/"&gt;&lt;/a&gt;&lt;/span&gt;&lt;a href="http://rubyonrails.org/" style="text-decoration: underline;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;http://rubyonrails.org/&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&amp;nbsp;&amp;nbsp;This site is loaded with information but may be hard to understand if you’re just starting out.&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote style="border-left-color: rgb(220, 220, 220); border-left-style: solid; border-left-width: 4px; margin-bottom: 10px; margin-left: 10px; margin-right: 0px; margin-top: 10px; padding-left: 15px;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;Let me know if this isn’t what you’re looking for. &amp;nbsp;There are a ton of other languages and tools out there. &amp;nbsp;I’m pushing you to Ruby b/c I believe it’s one of the best languages in the marketplace right now. &amp;nbsp;Microsoft also has their own languages (VB.net, C#, F#, IronPython, IronRuby) and a whole host of frameworks, expensive tools, and crazy licensing schemes that they’d love to sell you. &amp;nbsp;In reality, they have some solid tools and resources but I think you’ll be better off by not going directly to Microsoft products.&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote style="border-left-color: rgb(220, 220, 220); border-left-style: solid; border-left-width: 4px; margin-bottom: 10px; margin-left: 10px; margin-right: 0px; margin-top: 10px; padding-left: 15px;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;So to sum it up just start building things. &amp;nbsp;Build a web page, or build a console app. &amp;nbsp;If you get tired with HTML, take a look at Ruby or vice versa. &amp;nbsp;Once you start building things you’ll start to understand programming a little more…and you’ll have a lot more questions to ask.&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote style="border-left-color: rgb(220, 220, 220); border-left-style: solid; border-left-width: 4px; margin-bottom: 10px; margin-left: 10px; margin-right: 0px; margin-top: 10px; padding-left: 15px;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;I hope this helps and good luck!&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;What do you think? &amp;nbsp;What would you tell someone who has almost no understanding of computers but wants to get into programming? &amp;nbsp;I’d love to hear your thoughts.&lt;/span&gt;&lt;/div&gt;&lt;a href="http://kevinwlee.tumblr.com/post/1042569343/where-do-you-start-as-a-newbie-programmer" style="color: #6e7173; text-decoration: none;"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kevinwlee.tumblr.com/post/1042569343/where-do-you-start-as-a-newbie-programmer" style="color: #6e7173; text-decoration: none;"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kevinwlee.tumblr.com/post/1042569343/where-do-you-start-as-a-newbie-programmer" style="color: #6e7173; text-decoration: none;"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kevinwlee.tumblr.com/post/1042569343/where-do-you-start-as-a-newbie-programmer" style="color: #6e7173; text-decoration: none;"&gt;&lt;div class="footer" style="background-attachment: initial; background-clip: initial; background-color: #eaeaea; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 4px 4px; border-bottom-right-radius: 4px 4px; border-top-left-radius: 4px 4px; border-top-right-radius: 4px 4px; color: #666666; font-family: 'Lucida Sans', 'Lucida Grande', 'Lucida Sans Unicode', sans-serif; font-size: 11px; margin-top: 10px; padding-bottom: 5px; padding-left: 10px; padding-right: 10px; padding-top: 5px;"&gt;&lt;/div&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-3016695264984947215?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/3016695264984947215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=3016695264984947215' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/3016695264984947215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/3016695264984947215'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2010/08/where-do-you-start-as-newbie-programmer.html' title='Where do you start as a newbie programmer?'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-6196398953550929699</id><published>2010-02-12T21:56:00.001-06:00</published><updated>2010-02-12T21:57:34.149-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Screencast'/><category scheme='http://www.blogger.com/atom/ns#' term='Inkscape'/><title type='text'>Creating a Call To Action Button in Inkscape</title><content type='html'>In this screencast I'll show you how to create a "Call To Action" button using Inkscape.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" height="97" src="http://4.bp.blogspot.com/_2vsBDUpb9uE/S3YiSxkQiyI/AAAAAAAAATo/yqR9r9NspqE/s320/call2action.png" width="320" /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;You can read more about call to action buttons in &lt;a href="http://www.smashingmagazine.com/2009/10/13/call-to-action-buttons-examples-and-best-practices/"&gt;this article on smashing magazine.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="c2a"&gt;&lt;object height="360" width="580"&gt;&lt;param name="movie" value="http://www.youtube.com/v/cwhRvPu8TDE&amp;hl=en_US&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hd=1&amp;border=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/cwhRvPu8TDE&amp;hl=en_US&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hd=1&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="580" height="360"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;Let me know what you think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-6196398953550929699?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/6196398953550929699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=6196398953550929699' title='36 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/6196398953550929699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/6196398953550929699'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2010/02/creating-call-to-action-button-in.html' title='Creating a Call To Action Button in Inkscape'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_2vsBDUpb9uE/S3YiSxkQiyI/AAAAAAAAATo/yqR9r9NspqE/s72-c/call2action.png' height='72' width='72'/><thr:total>36</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-8244444800898204792</id><published>2010-02-07T00:41:00.000-06:00</published><updated>2010-02-07T00:41:18.741-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>BM MS150 in 2010</title><content type='html'>Today my wife and I dusted off our road bikes and began training for the &lt;a href="http://www.nationalmssociety.org/chapters/bp-ms-150/index.aspx"&gt;BP MS150&lt;/a&gt;.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://farm3.static.flickr.com/2339/2419488211_79edb76986_m.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://farm3.static.flickr.com/2339/2419488211_79edb76986_m.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;We rode in the&lt;a href="http://www.flickr.com/photos/kevinwarrenlee/sets/72157604585918868/show/"&gt; ms150 in 2008&lt;/a&gt; but had to miss last years ride b/c &lt;a href="http://chewyq.blogspot.com/2009/03/hello-world-from-kyle-walker.html"&gt;our son was due&lt;/a&gt; the same weekend. &amp;nbsp;This year we're back in the saddle and ready to go!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;The BP MS 150 is a two-day fundraising bike ride from Houston to Austin organized by the National MS Society. It's the largest non-profit event of its kind in North America with&amp;nbsp;more than&amp;nbsp;13,000 registered cyclists, 3,000 volunteers, and countless supporters and spectators. In 2009, the ride raised $17 million for MS research and services for persons living with MS.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This year we'll be riding on the &lt;a href="http://www.saintarnold.com/"&gt;Saint Arnold&lt;/a&gt; (local brewery) Team, and couldn't be happier with our choice. &amp;nbsp;It looks like it will be a great team and the free beer doesn't hurt either. &lt;br /&gt;&lt;br /&gt;If you'd like to help me reach my fund raising goal and &lt;span class="Apple-style-span" style="font-size: x-large;"&gt;help change the lives of over 400,000&lt;/span&gt; americans you can &lt;a href="http://bit.ly/apgQUu"&gt;make an&amp;nbsp;donation on my personal ms150 page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Don't be&amp;nbsp;afraid&amp;nbsp;to go crazy and make a &lt;span class="Apple-style-span" style="font-size: x-large;"&gt;HUGE&lt;/span&gt; &lt;b&gt;donation&lt;/b&gt;. &amp;nbsp;Every dollar will be put to good use!!&amp;nbsp;:)&lt;br /&gt;&lt;br /&gt;Thanks for your support,&lt;br /&gt;&lt;br /&gt;Kevin Lee&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-8244444800898204792?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/8244444800898204792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=8244444800898204792' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/8244444800898204792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/8244444800898204792'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2010/02/bm-ms150-in-2010.html' title='BM MS150 in 2010'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2339/2419488211_79edb76986_t.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-1940064889540101939</id><published>2009-12-16T21:44:00.000-06:00</published><updated>2009-12-16T21:44:53.432-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Screencast'/><title type='text'>Youtube Screencast Test</title><content type='html'>This is a test blog entry. &amp;nbsp;I just upgraded &lt;a href="http://www.telestream.net/screen-flow/overview.htm"&gt;Screenflow&lt;/a&gt; on my mac and I now have the ability to publish video's directly to youtube. &amp;nbsp;I've really been working on refining my screencasting skills, and this is a huge step in the right direction. &amp;nbsp;Up until now I've been using screencast.com to host my videos b/c the quality of the video was much higher than on youtube. &amp;nbsp;Now that youtube supports HD videos, I think I may switch. &lt;br /&gt;&lt;br /&gt;Here's a sample video of what a screencast looks like on youtube. &amp;nbsp;I think I like it.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;object height="360" width="580"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vfxWUnspy-o&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hd=1&amp;border=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/vfxWUnspy-o&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hd=1&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="580" height="360"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div&gt;Let me know what you think.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-1940064889540101939?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/1940064889540101939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=1940064889540101939' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/1940064889540101939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/1940064889540101939'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/12/youtube-screencast-test.html' title='Youtube Screencast Test'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-8461159309833749496</id><published>2009-12-11T08:30:00.000-06:00</published><updated>2009-12-11T10:04:06.820-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Craftsmanship'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><title type='text'>From Paper to HTML</title><content type='html'>In my entry on &lt;a href="http://chewyq.blogspot.com/2009/11/paper-and-prototypes.html"&gt;Paper and Prototypes&lt;/a&gt;, I discussed some of the pain points of "working" prototypes and offered up paper prototyping as a low-fi solution. Obviously you can't just draw pictures forever, eventually you'll have to start building the pages that you've been drawing on paper.&lt;br /&gt;&lt;br /&gt;There are many approaches and opinions on what you should do next. From dragging and dropping controls on a designer to object modeling, and everything in between. So what is your approach? Do you go to the domain model, or do you focus on the UI, or are you a database first type of person?&lt;br /&gt;&lt;br /&gt;I've found that turning a drawing directly into an application, or even worse, building the application without a prototype at all, wastes a lot of time and tends to jump-start the accumulation of technical debt.&lt;br /&gt;&lt;br /&gt;We've all been in a situation were we jumped headfirst into building a feature only to find out a week later that the "must have" feature is now a low priority. Because the UI is the window into the application, most of the time the changes arise when the users start to see bits and pieces of it for the first time. Inevitably you end up squeezing the new requirements into the existing code which can lead to a design that is less than optimal and therefore not resilient to change.&lt;br /&gt;&lt;br /&gt;For me I find a lot of benefits in staying in the prototype arena for just a little bit longer. So instead of investing much time in the object model at this point, I like to take my paper prototype and turn it into an HTML + CSS prototype.&lt;br /&gt;&lt;br /&gt;So what is an HTML + CSS prototype you ask? It's exactly that, HTML + CSS, nothing more nothing less. Here's what you'll need to get started on the road to better design:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Grab a good text editor (&lt;a href="http://notepad-plus.sourceforge.net/uk/site.htm"&gt;notepad++&lt;/a&gt;, or &lt;a href="http://macromates.com/"&gt;textmate&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Dust off your HTML skills and build your mockup in plain old HTML. That means no server side controls!&lt;/li&gt;&lt;li&gt;Finally Layout and style the elements using CSS.&lt;/li&gt;&lt;/ol&gt;So let me just walk you through this process. Here are the sketches, html, and screen shots for a three page app that I'm going to build.&lt;b&gt; &lt;/b&gt;This assumes that you have your overall style and structure defined, so the focus is on the content sections of the page. (let me know if you want to read about building CSS layouts).&lt;br /&gt;&lt;br /&gt;So you'll notice that the first page has a heading and a paragraph of text. So that's easy enough:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_2vsBDUpb9uE/SwhJj957iJI/AAAAAAAAARc/3fWIhNTBeTc/s1600/IMG_0387.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 267px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5406652234920069266" border="0" alt="" src="http://1.bp.blogspot.com/_2vsBDUpb9uE/SwhJj957iJI/AAAAAAAAARc/3fWIhNTBeTc/s400/IMG_0387.jpg" /&gt;&lt;/a&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;(my scanner is dead, so I'm sorry about the pic above)&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_2vsBDUpb9uE/SwdcPPUfuxI/AAAAAAAAAQE/POEF2CnkKTE/s1600/Page1.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 70px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5406391294561860370" border="0" alt="" src="http://1.bp.blogspot.com/_2vsBDUpb9uE/SwdcPPUfuxI/AAAAAAAAAQE/POEF2CnkKTE/s400/Page1.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_2vsBDUpb9uE/Swdi8W7fGoI/AAAAAAAAAQs/z6ZIAIynxJw/s1600/screenshot1.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 170px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5406398666768325250" border="0" alt="" src="http://2.bp.blogspot.com/_2vsBDUpb9uE/Swdi8W7fGoI/AAAAAAAAAQs/z6ZIAIynxJw/s400/screenshot1.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The second page is a grid with a hyperlink.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_2vsBDUpb9uE/SwhH_uLlQhI/AAAAAAAAARM/8Ejz_PhPeek/s1600/IMG_0385.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 254px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5406650512712221202" border="0" alt="" src="http://2.bp.blogspot.com/_2vsBDUpb9uE/SwhH_uLlQhI/AAAAAAAAARM/8Ejz_PhPeek/s400/IMG_0385.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_2vsBDUpb9uE/Swdi8P-2CZI/AAAAAAAAAQc/x58awg152RQ/s1600/page2.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 166px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5406398664903362962" border="0" alt="" src="http://4.bp.blogspot.com/_2vsBDUpb9uE/Swdi8P-2CZI/AAAAAAAAAQc/x58awg152RQ/s400/page2.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_2vsBDUpb9uE/Swdi8nfC4KI/AAAAAAAAAQ0/7buXkWyAT_s/s1600/screenshot2.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 182px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5406398671212437666" border="0" alt="" src="http://2.bp.blogspot.com/_2vsBDUpb9uE/Swdi8nfC4KI/AAAAAAAAAQ0/7buXkWyAT_s/s400/screenshot2.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And the final page is the is the comment which has a couple sections, a grid, a text area, and some buttons.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_2vsBDUpb9uE/SwhH_1WAfDI/AAAAAAAAARU/ibvXJin9NWU/s1600/IMG_0386.jpg"&gt;&lt;img style="WIDTH: 334px; HEIGHT: 400px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5406650514634996786" border="0" alt="" src="http://2.bp.blogspot.com/_2vsBDUpb9uE/SwhH_1WAfDI/AAAAAAAAARU/ibvXJin9NWU/s400/IMG_0386.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_2vsBDUpb9uE/Swdi8ay3FBI/AAAAAAAAAQk/mZZJ2TKxOHI/s1600/page3.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 255px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5406398667805889554" border="0" alt="" src="http://2.bp.blogspot.com/_2vsBDUpb9uE/Swdi8ay3FBI/AAAAAAAAAQk/mZZJ2TKxOHI/s400/page3.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_2vsBDUpb9uE/Swdi80XVWAI/AAAAAAAAAQ8/92klIcUoB44/s1600/screenshot3.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 283px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5406398674669754370" border="0" alt="" src="http://2.bp.blogspot.com/_2vsBDUpb9uE/Swdi80XVWAI/AAAAAAAAAQ8/92klIcUoB44/s400/screenshot3.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And believe it or not, these are the only styles applied to the content of the site&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_2vsBDUpb9uE/SwdnPP16m8I/AAAAAAAAARE/WNJgcMHtsjU/s1600/style.png"&gt;&lt;img style="WIDTH: 300px; HEIGHT: 317px; CURSOR: pointer" id="BLOGGER_PHOTO_ID_5406403389329939394" border="0" alt="" src="http://4.bp.blogspot.com/_2vsBDUpb9uE/SwdnPP16m8I/AAAAAAAAARE/WNJgcMHtsjU/s400/style.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(like I said, if you want to know more about the css layout, let me know via the comments)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So hopefully you have noticed that this doesn't take very much effort. With a little bit of html and css, you begin to get a good feel for the site. As you write the pages you are forced to think about the design, and you might even stumble on some rough spots in the page flow.&lt;br /&gt;&lt;br /&gt;Another benefit is that when your done you will have "clean" markup that you can use to build the "real" pages. An added bonus is that this technique will help you reduce the number of server-side controls (in asp.net web forms) that you use and will help you break away from the bad habits that they tend to reinforce.&lt;br /&gt;&lt;br /&gt;Lastly, you now have a page that the users can fiddle with so that they can start to give feedback on usability, layout, behavior, and styling.&lt;br /&gt;&lt;br /&gt;I promise that after you do this a few times you'll get comfortable with HTML again. I'm also willing to bet that you'll like the quick feedback of the text editor and html and you'll begin to want to do more work outside of the IDE.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-8461159309833749496?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/8461159309833749496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=8461159309833749496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/8461159309833749496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/8461159309833749496'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/12/from-paper-to-html.html' title='From Paper to HTML'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2vsBDUpb9uE/SwhJj957iJI/AAAAAAAAARc/3fWIhNTBeTc/s72-c/IMG_0387.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-1767209312817472861</id><published>2009-11-06T21:51:00.000-06:00</published><updated>2009-11-06T22:31:09.098-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Craftsmanship'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><title type='text'>Paper and Prototypes</title><content type='html'>I've been hearing a lot of chatter about &lt;a href="http://www.microsoft.com/expression/products/SketchFlow_OverView.aspx"&gt;Sketchflow&lt;/a&gt; and &lt;a href="http://www.balsamiq.com/"&gt;Balsamiq&lt;/a&gt; and the importance of prototypes.   I think we all know that the sooner we get screens/designs in front of the users the better off the project will be.   In the past I would spend hours throwing together "working" prototypes to help facilitate discussions about functionality that would inevitably turn into long debates about colors and button locations.   The prototype meetings would get derailed because the prototypes looked too real, gave the false impression that a lot of work had been completed, and were in a format that users didn't know how to change.&lt;br /&gt;&lt;br /&gt;That's where Balsamiq steps in.   If you haven't tried it out, you should &lt;a href="http://www.balsamiq.com/#"&gt;at least take a look at it&lt;/a&gt;.   It makes throwing together a quick UI layout fun.  You'll be amazed and surprised with how intuitive and easy it is to use.   I haven't spent much time playing with Sketchflow, but it also &lt;a href="http://www.microsoft.com/expression/products/SketchFlow_OverView.aspx"&gt;looks like it could be a really useful tool &lt;/a&gt;when it comes to building prototypes and wiring up storyboards.   So by all means take a look at both of these tools.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;blockquote&gt;...but don't forget the power of paper, pencil, and your brain.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Paper, Pencil, and Your Brain&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;If you're anything like me you've already been using pencil and paper to prototype.  I'm willing to bet that you have probably jotted down an idea for a page layout on a napkin, or in a notebook, or some printer paper.  Does this look familiar?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_2vsBDUpb9uE/SvTxpc8y--I/AAAAAAAAAP0/vTJfkCYjSbY/s1600-h/IMG_1275.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 319px;" src="http://2.bp.blogspot.com/_2vsBDUpb9uE/SvTxpc8y--I/AAAAAAAAAP0/vTJfkCYjSbY/s400/IMG_1275.jpg" alt="" id="BLOGGER_PHOTO_ID_5401207547572190178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If so, then your just a few minutes away from completing a very useful prototype that you and your users could use to clarify and refine a story.  So what do you need to do to turn a sketch into a Prototype?  As it turns out, not much.&lt;br /&gt;&lt;br /&gt;Here's an example of a dialog box that I recently had to build.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_2vsBDUpb9uE/SvTvlMxatjI/AAAAAAAAAPs/DnByyt-LMZY/s1600-h/IMG_0629.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 266px;" src="http://1.bp.blogspot.com/_2vsBDUpb9uE/SvTvlMxatjI/AAAAAAAAAPs/DnByyt-LMZY/s400/IMG_0629.jpg" alt="" id="BLOGGER_PHOTO_ID_5401205275486762546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You should notice that the main difference between the two drawings isn't the skill of the drawing, it's the addition of details like column headings, sample data, and a little bit of text to explain things.&lt;br /&gt;&lt;br /&gt;Here's another example of a page I'm working on for &lt;a href="http://www.runnersq.com"&gt;runnersq.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_2vsBDUpb9uE/SvTyHSuW8OI/AAAAAAAAAP8/RitTFtQRHss/s1600-h/IMG_1277.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_2vsBDUpb9uE/SvTyHSuW8OI/AAAAAAAAAP8/RitTFtQRHss/s400/IMG_1277.jpg" alt="" id="BLOGGER_PHOTO_ID_5401208060223353058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Yes, the drawings are mostly scribble scabble, but they get the point across, and the details in the drawings convey the intent of the page.&lt;br /&gt;&lt;br /&gt;So if you want to turn your sketches into prototypes, here's my advice:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Start by sketching out the general framework of the page.&lt;/li&gt;&lt;li&gt;Spend just a few minutes thinking about the purpose of the page and what elements need to be on the page.&lt;/li&gt;&lt;li&gt;Lightly draw the elements on the page.   Don't worry about being perfect, just get them on the page.&lt;/li&gt;&lt;li&gt;Write in the text for your labels, columns, select lists, and headings.   If you have a grid, be sure to spell out each column heading and give 1 row of sample data.&lt;/li&gt;&lt;li&gt;Finally, grab your pencil and your prototype, and get it in front of the subject matter experts.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;I promise that if you take the time to put the labels, headings, and sample data on the drawing, you'll get a lot of feedback.   You'll learn things like, they always want to seen "LastName, FirstName", and the date should be formatted "11-MAR-09".   Even better, you'll be using a tool that they know how to use (pencil and paper) which will inevitably get them more engaged in the design process.&lt;br /&gt;&lt;br /&gt;So be sure to check out the latest and greatest tools on the market, but don't forget that a large amount of people are intimidated by shiny new technology.  So if you find that you're prototype meetings are full of color and font discussions, don't be afraid to leverage low-fi tools that everyone can use.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-1767209312817472861?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/1767209312817472861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=1767209312817472861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/1767209312817472861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/1767209312817472861'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/11/paper-and-prototypes.html' title='Paper and Prototypes'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2vsBDUpb9uE/SvTxpc8y--I/AAAAAAAAAP0/vTJfkCYjSbY/s72-c/IMG_1275.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-5754232557876264859</id><published>2009-09-04T14:45:00.000-05:00</published><updated>2009-09-04T22:36:28.122-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IIS'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='GZIP'/><title type='text'>Turning on GZIP and Compression on IIS6</title><content type='html'>Over the last few months we've been building an ASP.Net site to help a human resource department manage many of their day-to-day tasks.  It's an awesome project loaded with jQuery, Ajax, silverlight, and all the typical Microsoft goodness.  One of the aspects of the project that I find particularly interesting and challenging is that the web application is used all over the world both on-shore and off-shore. &lt;br /&gt;&lt;br /&gt;Up until now, I have only built small personal websites and line of business applications and thus, I've never needed to worry about bandwidth.  Since a large population of our users is accessing our site over satellite connections, bandwidth has become a precious commodity.  We need to squeeze every  KB we can out of our pages.  This is the perfect candidate for compression which leads me to the topic of this post.&lt;br /&gt;&lt;br /&gt;If you've ever wanted to know how to enable compression in IIS this is how:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Configure IIS&lt;br /&gt;&lt;/span&gt;First you need to configure IIS.  &lt;a href="http://blogs.msdn.com/vivekkum/archive/2009/02/18/http-compression-in-iis-6-and-iis-7-using-service-account.aspx"&gt;This article&lt;/a&gt; does a great job of explaining how to do this, and these were our basic steps (i'm really just documenting this for me)&lt;br /&gt;1.  Open IIS Administrator&lt;br /&gt;2.  Right-click the "Web Sites" folder and click properties.&lt;br /&gt;3.  Click the service tab and mark the following options&lt;br /&gt;&lt;ul&gt;&lt;li&gt;compress application files&lt;/li&gt;&lt;li&gt;compress static files&lt;/li&gt;&lt;li&gt;unlimited&lt;/li&gt;&lt;/ul&gt;4.  Click OK&lt;br /&gt; &lt;span style="font-size:130%;"&gt;&lt;br /&gt;Configure Compression&lt;/span&gt;&lt;br /&gt;Next you'll need to turn on dynamic and static compression, and specify which file extensions to compress.  You can read a little more about this process &lt;a href="http://technet.microsoft.com/en-us/library/cc782942%28WS.10%29.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://technet.microsoft.com/en-us/library/cc756725%28WS.10%29.aspx"&gt;here&lt;/a&gt;.  This is how we did it:&lt;br /&gt;1) Open a command prompt on the server (Must be and administrator on the server)&lt;br /&gt;2) CD c:\inetpub\adminscripts\&lt;br /&gt;3) Run the following commands:        &lt;br /&gt;&lt;ul&gt;&lt;li&gt;cscript adsutil.vbs set w3svc/filters/compression/parameters/HcDoDynamicCompression true         &lt;/li&gt;&lt;li&gt;cscript adsutil.vbs set w3svc/filters/compression/parameters/HcDoStaticCompression true &lt;/li&gt;&lt;li&gt;cscript.exe adsutil.vbs set w3svc/Filters/Compression/DEFLATE/HcFileExtensions "txt""css""js"&lt;/li&gt;&lt;li&gt;cscript.exe adsutil.vbs set w3svc/Filters/Compression/GZIP/HcFileExtensions "txt""css""js"&lt;/li&gt;&lt;li&gt;cscript.exe adsutil.vbs set w3svc/Filters/Compression/GZIP/HcScriptFileExtensions "aspx"&lt;/li&gt;&lt;li&gt;cscript.exe adsutil.vbs set w3svc/Filters/Compression/DEFLATE/HcScriptFileExtensions "aspx"&lt;/li&gt;&lt;/ul&gt;4) Finally reset iis by typing: iisreset&lt;br /&gt;&lt;br /&gt;As usual google and &lt;a href="http://stackoverflow.com/questions/702124/enable-iis7-gzip"&gt;this question&lt;/a&gt; on stackoverflow were the key to figuring this out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-5754232557876264859?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/5754232557876264859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=5754232557876264859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/5754232557876264859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/5754232557876264859'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/09/turning-on-gzip-and-compression-on-iis6.html' title='Turning on GZIP and Compression on IIS6'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-3788384084524437813</id><published>2009-06-25T07:00:00.000-05:00</published><updated>2009-06-25T07:07:56.545-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Screencast'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery and ASP.NET Webforms - Part 4 - Saving Sortable</title><content type='html'>In this episode, I continue to work with the &lt;a href="http://jqueryui.com/demos/sortable/"&gt;sortable&lt;/a&gt; plug-in from &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; UI.   This is part 4 in a series of screencasts on how to effectively use jQuery and ASP.NET Webforms. If you haven't seen the other episodes, you can catch up &lt;a href="http://chewyq.blogspot.com/search/label/Screencast"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In this screencast I will show you how to capture the client side sort order using the sortable plug-in,  and then I'll show you how to retrieve that sort order on the post back so that it can be saved. To make this work efficiently, I've moved away from the GridView and started using the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.aspx"&gt;Repeater&lt;/a&gt; control.  If you have never used a repeater now's a great time to start, especially if you really want to make your jQuery life easy.&lt;br /&gt;&lt;br /&gt;Based on some feedback, I'm going to start including more code snippets here on my blog.  I won't go into a lot of detail about the snippets; that's what the screencasts are for. As always, then entire solution is also available &lt;a href="http://code.google.com/p/chewyq/source/browse/#svn/trunk/BlogCode/jQuery%20Part4"&gt;here on google code&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So in this episode, I'll show you how the following javascript:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$(document).ready(function() {&lt;br /&gt;$(".grid tbody").sortable({&lt;br /&gt;   axis: "y",&lt;br /&gt;   sort: function(event, ui) { $(ui.item).addClass("sortRow"); },&lt;br /&gt;   stop: Sorted,&lt;br /&gt;   handle: "img"&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;function Sorted(event, ui) {&lt;br /&gt;   $(ui.item).removeClass("sortRow");&lt;br /&gt;   $("input").removeAttr("disabled");&lt;br /&gt;   var result = $(this).sortable('toArray')&lt;br /&gt;   $("#NewSortOrder").val(result.toString());&lt;br /&gt;}&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;...and this asp:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_2vsBDUpb9uE/SkLmgvtjg0I/AAAAAAAAAOs/Wbj53NeAyp4/s1600-h/screenshot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 314px; height: 320px;" src="http://2.bp.blogspot.com/_2vsBDUpb9uE/SkLmgvtjg0I/AAAAAAAAAOs/Wbj53NeAyp4/s320/screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5351092757507310402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;...Will give you all you need to enable drag and drop sorting on the client with the ability to save the sort order on the server.&lt;br /&gt;&lt;br /&gt;Here's the link to the video on screencast.com:&lt;br /&gt;&lt;a href="http://www.screencast.com/t/euiVwT4hiNS"&gt;jQuery and ASP.NET Webforms - Part 4 - Saving Sortable&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Let me know what you think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-3788384084524437813?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/3788384084524437813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=3788384084524437813' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/3788384084524437813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/3788384084524437813'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/06/jquery-and-aspnet-webforms-part-3.html' title='jQuery and ASP.NET Webforms - Part 4 - Saving Sortable'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2vsBDUpb9uE/SkLmgvtjg0I/AAAAAAAAAOs/Wbj53NeAyp4/s72-c/screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-6218110949570344475</id><published>2009-05-31T21:39:00.000-05:00</published><updated>2009-05-31T21:49:13.851-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Inkscape'/><title type='text'>Inkscape Keyboard Binding for OSX and xQuartz</title><content type='html'>This is a quick entry that will hopefully help some of the OSX &lt;a href="http://www.inkscape.org/"&gt;Inkscape&lt;/a&gt; users.  This weekend I opened up Inkscape and noticed that my keyboard binding was all messed up, and by all messed up, I mean it was unusable.  I would type the letter "d" and it would output "2". Every key on the keyboard was incorrectly mapped.  After hours of searching on the web I didn't' find any help, but I finally figured out how to fix the problem.  I upgraded &lt;a href="http://xquartz.macosforge.org/trac/wiki"&gt;xQuartz&lt;/a&gt; (x11 2.3.3.2) and it fixed the problem.  So if you're having an issue with you keyboard in Inkscape, pull down the latest version of xQuartz and see if it fixes your problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-6218110949570344475?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/6218110949570344475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=6218110949570344475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/6218110949570344475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/6218110949570344475'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/05/inkscape-keyboard-binding-for-osx-and.html' title='Inkscape Keyboard Binding for OSX and xQuartz'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-8345670081394088755</id><published>2009-05-28T14:05:00.000-05:00</published><updated>2009-05-28T12:02:58.953-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Screencast'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery and ASP.NET Webforms - Part 3 - Sortable</title><content type='html'>This week I continue to add some excitement to the typically drab GridView control using &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;, and the &lt;a href="http://jqueryui.com/demos/sortable/"&gt;Sortable&lt;/a&gt; plug-in from &lt;a href="http://jqueryui.com/"&gt;jQuery UI&lt;/a&gt;.  This is part 3 in a series of screencasts on how to effectively use jQuery and ASP.NET Webforms.  If you haven't seen the other two you can catch &lt;a href="http://chewyq.blogspot.com/2009/05/jquery-and-aspnet-webforms-part-1.html"&gt;part 1&lt;/a&gt;  and &lt;a href="http://chewyq.blogspot.com/2009/05/jquery-and-aspnet-webforms-part-2.html"&gt;part 2 &lt;/a&gt;here on my blog.&lt;br /&gt;&lt;br /&gt;As with the two previous screencasts, this episode will show you that you can significantly spice up your standard ASP.Net website with just a few lines of javascript and the jQuery library.&lt;br /&gt;&lt;br /&gt;You can download or watch the full screen video &lt;a href="http://www.screencast.com/t/x9jv9DoiLLn"&gt;here&lt;/a&gt;, and you can get the code &lt;a href="http://code.google.com/p/chewyq/source/browse/#svn/trunk/BlogCode/jQuery%20Part3"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;object width="540" height="347"&gt; &lt;param name="movie" value="http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/8fd09f11-10c6-4a45-b511-6ef6070f1d6d/flvplayer.swf"&gt; &lt;param name="quality" value="high"&gt; &lt;param name="bgcolor" value="#FFFFFF"&gt; &lt;param name="flashVars" value="thumb=http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/8fd09f11-10c6-4a45-b511-6ef6070f1d6d/FirstFrame.jpg&amp;amp;containerwidth=540&amp;amp;containerheight=347&amp;amp;content=http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/8fd09f11-10c6-4a45-b511-6ef6070f1d6d/jQuery%20Webforms%20-%20Part%203%20-%20%20Sortable.m4v"&gt; &lt;param name="allowFullScreen" value="true"&gt; &lt;param name="scale" value="showall"&gt; &lt;param name="allowScriptAccess" value="always"&gt; &lt;param name="base" value="http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/8fd09f11-10c6-4a45-b511-6ef6070f1d6d/"&gt;  &lt;embed src="http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/8fd09f11-10c6-4a45-b511-6ef6070f1d6d/flvplayer.swf" quality="high" bgcolor="#FFFFFF" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="thumb=http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/8fd09f11-10c6-4a45-b511-6ef6070f1d6d/FirstFrame.jpg&amp;amp;containerwidth=540&amp;amp;containerheight=347&amp;amp;content=http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/8fd09f11-10c6-4a45-b511-6ef6070f1d6d/jQuery%20Webforms%20-%20Part%203%20-%20%20Sortable.m4v" allowfullscreen="true" base="http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/8fd09f11-10c6-4a45-b511-6ef6070f1d6d/" scale="showall" width="540" height="347"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;As always, I'm still experimenting with producing screencasts, so if you have any tips please feel free to leave a comment here on my blog.  Also, if there is something you are struggling with, let me know, and I'll see if I can put together a screencast about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-8345670081394088755?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/8345670081394088755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=8345670081394088755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/8345670081394088755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/8345670081394088755'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/05/jquery-and-aspnet-webforms-part-3.html' title='jQuery and ASP.NET Webforms - Part 3 - Sortable'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-9106852808448001483</id><published>2009-05-20T21:19:00.001-05:00</published><updated>2009-05-25T21:29:30.784-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Coding Dojo'/><title type='text'>Flash Card Coding Dojo</title><content type='html'>Last week I coordinated my first Coding Dojo at my office.  From my perspective it went really well, and we actually got through a lot of the problem. Since people are always looking for good problems to use for coding dojo's I thought I would post the scenario that I handed out for the Flash Card Dojo.  We worked on Phase one.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Flash Card Dojo&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Overview:&lt;/span&gt;&lt;br /&gt;The objective of the dojo will be to implement a console application that children can use to practice solving multiplication problems. Being that this is an architecture round table, we will focus on sound Object Oriented principles during the Dojo. Ideally, the core of this application should be portable to WPF, Silverlight, and other .Net applications.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Style:&lt;/span&gt;&lt;br /&gt;Randori Kata&lt;br /&gt;Time Box or Ping-Pong&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Requirements:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Phase I&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The application should ask the users to solve multiplication problems.&lt;/li&gt;&lt;li&gt;The factors should include positive integers between 1 and 10&lt;/li&gt;&lt;li&gt;For the purpose of flash cards 10 * 1 is not the same as 1 * 10&lt;/li&gt;&lt;li&gt;The application should run until the complete set of flash cards has been answered correctly.&lt;/li&gt;&lt;li&gt;The order in which the questions are asked should be somewhat random (we can use the &lt;a href="http://en.wikipedia.org/wiki/Fisher-Yates_shuffle"&gt;Fisher-Yates Shuffel&lt;/a&gt;, or the Sort shuffle)&lt;/li&gt;&lt;li&gt;The student should be notified when an incorrect answer is given.&lt;/li&gt;&lt;li&gt;Answers that cannot be parsed as integers are considered incorrect.&lt;/li&gt;&lt;li&gt;If an incorrect answer is given, the problem should be moved to the end of the questions and asked again. (queue)&lt;/li&gt;&lt;li&gt;When a correct answer is given, the next problem should be shown in response to the answer.&lt;/li&gt;&lt;li&gt;Problems that are answered correctly should not be repeated.&lt;/li&gt;&lt;li&gt;Once all the problems have been correctly answered, the application should notify the player that they have completed all of the problems and prompt the user to play again.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;Example of the Fisher Yates Shuffle:&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;for (int i = deck.Count - 1; i &gt; 0; i--) {&lt;br /&gt;        Random rand = new Random();&lt;br /&gt;        int n = rand.Next(i - 1);&lt;br /&gt;        var temp = deck[i];&lt;br /&gt;        deck[i] = deck[n];&lt;br /&gt;        deck[n] = temp;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Example of a shuffle that is good enough for flash cards that I pulled from &lt;a href="http://www.codinghorror.com/blog/archives/001008.html?r=31644"&gt;codinghorror&lt;/a&gt;:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;deck.OrderBy(a =&gt; Guid.NewGuid());&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Phase II&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The application should keep a count of the number of questions asked.&lt;/li&gt;&lt;li&gt;The application should track the time it takes to complete the questions.&lt;/li&gt;&lt;li&gt;The application should report the number of questions and amount of time when the game completes.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Phase III&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The application should allow a drill mode in which the problems are ordered by factor.&lt;/li&gt;&lt;li&gt;The application should allow a specific fact to be practiced, both in factor order and in random order.&lt;/li&gt;&lt;li&gt;The application should let the user set the maximum limit of the factors up to 100.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Phase IV&lt;/span&gt;&lt;br /&gt;The student should be able to complete all actions using the operator of their choice (addition, subtraction, division, or multiplication.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-9106852808448001483?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/9106852808448001483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=9106852808448001483' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/9106852808448001483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/9106852808448001483'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/05/flash-card-coding-dojo.html' title='Flash Card Coding Dojo'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-6433483150248957086</id><published>2009-05-17T16:09:00.000-05:00</published><updated>2009-05-18T07:05:44.517-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Screencast'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>JQuery and ASP.NET Webforms - Part 2 - tablesorter</title><content type='html'>In this screencast, I continue to spice up the standard ASP.NET GridView control by adding client-side sorting using &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; and the &lt;a href="http://tablesorter.com/docs/"&gt;tablesorter&lt;/a&gt; plug-in.  One of the major perks of using a library like jQuery, is that there is an extremely active plug-in community.  If you find yourself writing a lot of javascript to accomplish a task, the chances are high that there is already a plug-in out there that you could use.&lt;br /&gt;&lt;br /&gt;Also, I had a little problem while I was editing the section where I wire up the UseAccessibleHeader of the gridview. So here's the code.  This will add the thead, tbody, and tfoot, tags to the html that is output by the GridView:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  protected void GridView_DataBound(object sender, EventArgs e)&lt;br /&gt;  {&lt;br /&gt;            var grid = (GridView) sender;&lt;br /&gt;             grid.UseAccessibleHeader = true;&lt;br /&gt;             grid.HeaderRow.TableSection = TableRowSection.TableHeader;&lt;br /&gt;             grid.FooterRow.TableSection = TableRowSection.TableFooter;&lt;br /&gt;  }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;a href="http://www.screencast.com/t/uiD8nzVFN"&gt;Here's&lt;/a&gt; a direct link to the video, and you can get the code &lt;a href="http://code.google.com/p/chewyq/source/browse/#svn/trunk/BlogCode/jQuery%20Part2"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="540" height="347"&gt; &lt;param name="movie" value="http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/f6b8964e-62fc-445e-b979-bf4400b6e616/flvplayer.swf"&gt; &lt;param name="quality" value="high"&gt; &lt;param name="bgcolor" value="#FFFFFF"&gt; &lt;param name="flashVars" value="thumb=http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/f6b8964e-62fc-445e-b979-bf4400b6e616/FirstFrame.jpg&amp;amp;containerwidth=540&amp;amp;containerheight=347&amp;amp;content=http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/f6b8964e-62fc-445e-b979-bf4400b6e616/jQuery%20Webforms%20Part%20II%20-%20Tablesorter.m4v"&gt; &lt;param name="allowFullScreen" value="true"&gt; &lt;param name="scale" value="showall"&gt; &lt;param name="allowScriptAccess" value="always"&gt; &lt;param name="base" value="http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/f6b8964e-62fc-445e-b979-bf4400b6e616/"&gt;  &lt;embed src="http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/f6b8964e-62fc-445e-b979-bf4400b6e616/flvplayer.swf" quality="high" bgcolor="#FFFFFF" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="thumb=http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/f6b8964e-62fc-445e-b979-bf4400b6e616/FirstFrame.jpg&amp;amp;containerwidth=540&amp;amp;containerheight=347&amp;amp;content=http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/f6b8964e-62fc-445e-b979-bf4400b6e616/jQuery%20Webforms%20Part%20II%20-%20Tablesorter.m4v" allowfullscreen="true" base="http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/f6b8964e-62fc-445e-b979-bf4400b6e616/" scale="showall" width="540" height="347"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Side Note&lt;/span&gt;&lt;br /&gt;I've been messing around with different screen capture software.  I used &lt;a href="http://www.telestream.net/screen-flow/overview.htm"&gt;screenflow&lt;/a&gt; to create this screencast.  I haven't figured out how to smooth out the transitions, so I apologize for some of the abrupt skips throughout the video.  I'm still learning the art of screencasting, so your feedback is really appreciated.  Also, if you have any experience converting mp4 to wmv, I'd really like to know what tools you use.  I'm not happy with what the &lt;a href="http://www.telestream.net/flip4mac-wmv/overview.htm"&gt;Flip4Mac&lt;/a&gt; studio had to offer.  If you have used the other versions of Flip4Mac or have experience with a different encoder, please let me know how your experiences have been.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-6433483150248957086?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/6433483150248957086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=6433483150248957086' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/6433483150248957086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/6433483150248957086'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/05/jquery-and-aspnet-webforms-part-2.html' title='JQuery and ASP.NET Webforms - Part 2 - tablesorter'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-6919817963249831614</id><published>2009-05-10T09:46:00.000-05:00</published><updated>2009-06-22T21:32:59.810-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Screencast'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery and ASP.NET Webforms - Part 1 - mouseover</title><content type='html'>Unless you've been hiding under a rock, you have most likely heard of &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;.  It seems like all the "cool" kids are using jQuery to make their websites more interactive.  On our latest project, my friend Joe Southern and I decided that we needed to jump on the bandwagon and leverage all of the jQuery goodness that we could.  We have learned a lot over the past few weeks and we thought it would be good to share what we've learned.&lt;br /&gt;&lt;br /&gt;This is &lt;span style="font-weight: bold;"&gt;Part 1&lt;/span&gt; of a blog series in which I'm going to talk about how to effectively use jQuery in an ASP.Net webform application.   Instead of writing pages and pages of text, I've decided to screencast this series.   This is my first time to ever try this, so your feedback is much appreciated.  So enough blabbing, here's Part 1.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Adding Pop To A GridView&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;In this screencast, i'm going to show you how these few lines of javascript...&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  &lt;span style="font-size:100%;"&gt;$(".grid tr").mouseover(function () {&lt;br /&gt;    $(this).addClass("altrow")};&lt;br /&gt;&lt;br /&gt;$(".grid tr").mouseout(function () {&lt;br /&gt;    $(this).removeClass("altrow")};&lt;/span&gt; &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;...and this simple stylesheet...&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;.grid th {color:White; background-color:#507CD1; font-weight:bold;}&lt;br /&gt;&lt;br /&gt;.altrow {background-color:Red;}&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;...can turn a "plain Jane" GridView into an interactive grid.&lt;br /&gt;&lt;br /&gt;The link below will take you to the video on screencast.com:&lt;br /&gt;&lt;a href="http://www.screencast.com/t/kdjIKD4UKUx"&gt;jQuery Webform - mouseover&lt;/a&gt;&lt;br /&gt;&lt;object height="558" width="960"&gt; &lt;param name="movie" value="http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/629b9dac-c6da-48af-b853-a92566f34e79/flvplayer.swf"&gt; &lt;param name="quality" value="high"&gt; &lt;param name="bgcolor" value="#FFFFFF"&gt; &lt;param name="flashVars" value="thumb=http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/629b9dac-c6da-48af-b853-a92566f34e79/FirstFrame.jpg&amp;amp;containerwidth=960&amp;amp;containerheight=558&amp;amp;content=http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/629b9dac-c6da-48af-b853-a92566f34e79/jQuery%20Webform%20-%20mouseover.m4v"&gt; &lt;param name="allowFullScreen" value="true"&gt; &lt;param name="scale" value="showall"&gt; &lt;param name="allowScriptAccess" value="always"&gt; &lt;param name="base" value="http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/629b9dac-c6da-48af-b853-a92566f34e79/"&gt;  &lt;embed src="http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/629b9dac-c6da-48af-b853-a92566f34e79/flvplayer.swf" quality="high" bgcolor="#FFFFFF" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="thumb=http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/629b9dac-c6da-48af-b853-a92566f34e79/FirstFrame.jpg&amp;amp;containerwidth=960&amp;amp;containerheight=558&amp;amp;content=http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/629b9dac-c6da-48af-b853-a92566f34e79/jQuery%20Webform%20-%20mouseover.m4v" allowfullscreen="true" base="http://content.screencast.com/users/kevinWLee/folders/Blog%20Videos/media/629b9dac-c6da-48af-b853-a92566f34e79/" scale="showall" height="558" width="960"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;I've also put the code into my google code repository &lt;a href="http://code.google.com/p/chewyq/source/browse/#svn/trunk/BlogCode/jQuery%20Part1"&gt;here&lt;/a&gt;.  If you're not familiar with tortoise svn, drop me a line and I'll provide a zip file of the source.&lt;br /&gt;&lt;br /&gt;Please let me know what you think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-6919817963249831614?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/6919817963249831614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=6919817963249831614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/6919817963249831614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/6919817963249831614'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/05/jquery-and-aspnet-webforms-part-1.html' title='jQuery and ASP.NET Webforms - Part 1 - mouseover'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-4282940890796386835</id><published>2009-04-26T07:11:00.000-05:00</published><updated>2009-04-26T07:46:14.283-05:00</updated><title type='text'>Playing around with Jing</title><content type='html'>I've been playing around with &lt;a href="http://www.jingproject.com/"&gt;Jing&lt;/a&gt; for the past few days.    So far I like what I'm seeing, and I want to test a few things out.  In this post I'm going to test out the three options I have for posting the videos that I've taken with the free version of Jing and a free &lt;a href="http://www.screencast.com/"&gt;screencast.com&lt;/a&gt; account.&lt;br /&gt;&lt;br /&gt;Option 1 - url&lt;br /&gt;http://www.screencast.com/t/24pcH81zdq&lt;br /&gt;&lt;br /&gt;Option 2 - hyperlink&lt;br /&gt;&lt;a href="http://www.screencast.com/t/24pcH81zdq"&gt;Jing_Test_Video&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Option 3 - embedded (I had to adjust this so that it would fit on this blog.)&lt;br /&gt;&lt;object height="400" width="600"&gt; &lt;param name="movie" value="http://content.screencast.com/users/kevinWLee/folders/Jing/media/24c061a6-2351-4505-8f3d-7f448bf76521/jingswfplayer.swf"&gt; &lt;param name="quality" value="high"&gt; &lt;param name="bgcolor" value="#FFFFFF"&gt; &lt;param name="flashVars" value="thumb=http://content.screencast.com/users/kevinWLee/folders/Jing/media/24c061a6-2351-4505-8f3d-7f448bf76521/FirstFrame.jpg&amp;amp;containerwidth=600&amp;amp;containerheight=400&amp;amp;loaderstyle=jing&amp;amp;content=http://content.screencast.com/users/kevinWLee/folders/Jing/media/24c061a6-2351-4505-8f3d-7f448bf76521/00000006.swf"&gt; &lt;param name="allowFullScreen" value="true"&gt; &lt;param name="scale" value="showall"&gt; &lt;param name="allowScriptAccess" value="always"&gt; &lt;param name="base" value="http://content.screencast.com/users/kevinWLee/folders/Jing/media/24c061a6-2351-4505-8f3d-7f448bf76521/"&gt;  &lt;embed src="http://content.screencast.com/users/kevinWLee/folders/Jing/media/24c061a6-2351-4505-8f3d-7f448bf76521/jingswfplayer.swf" quality="high" bgcolor="#FFFFFF" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="thumb=http://content.screencast.com/users/kevinWLee/folders/Jing/media/24c061a6-2351-4505-8f3d-7f448bf76521/FirstFrame.jpg&amp;amp;containerwidth=600&amp;amp;containerheight=1200&amp;amp;loaderstyle=jing&amp;amp;content=http://content.screencast.com/users/kevinWLee/folders/Jing/media/24c061a6-2351-4505-8f3d-7f448bf76521/00000006.swf" allowfullscreen="true" base="http://content.screencast.com/users/kevinWLee/folders/Jing/media/24c061a6-2351-4505-8f3d-7f448bf76521/" scale="showall" height="400" width="600"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-4282940890796386835?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/4282940890796386835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=4282940890796386835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/4282940890796386835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/4282940890796386835'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/04/playing-around-with-jing_26.html' title='Playing around with Jing'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-3422997604877794353</id><published>2009-04-11T22:41:00.000-05:00</published><updated>2009-04-11T22:57:59.346-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Craftsmanship'/><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Clean Code Book Review</title><content type='html'>I recently finished reading &lt;a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882"&gt;Clean Code: A Handbook of Agile Software Craftsmanship&lt;/a&gt;  by &lt;a href="http://www.objectmentor.com/omTeam/martin_r.html"&gt;Robert C. Martin&lt;/a&gt;.  When I’m reading non-fiction books, I take notes when I come across something that seems particularly enlightening or useful.  If the book is really good, I’ll take the extra step to put all my notes into a book review/reference that I keep in Evernote.  As I mentioned a few blog posts ago, I’m going to start to add my book references to this blog.  So here it is: &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Clean Code: A Handbook of Agile Software Craftsmanship &lt;/span&gt;&lt;br /&gt;By Robert C. Martin&lt;br /&gt;&lt;br /&gt;Recommended by: n/a&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;My Thoughts&lt;/span&gt;&lt;br /&gt;As programming books go, this was an exceptional book full of practical recommendations on how to write “clean”, maintainable code.  Every chapter was loaded with good advice.  As a programmer who came to the profession from the Business School rather than the Computer Science School, I feel like I have a lot of question that the CompSci guys don’t have.&lt;br /&gt;&lt;br /&gt;Do I put this function here, or there?&lt;br /&gt;How should I organize my code?&lt;br /&gt;Should I break this function down into smaller pieces?&lt;br /&gt;Should I come up with a better variable name than “i”? &lt;br /&gt;&lt;br /&gt;These are all trivial questions that don’t really matter to the compiler, but as Clean Code points out, the answers to these questions can and do have a large impact on the other consumers of the code. Namely you and me and the next guy that is going to inherit the code base.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Important Concepts&lt;/span&gt;&lt;br /&gt;I usually have a list of what I think are the key points of the book.  This book was so loaded with :Important Concepts", that all I can really do in this section is high-light the chapters that I found particularly useful.  So read the entire book, but if you’re short on time, you could probably just read these chapters.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Chapter 2 - Meaningful Names&lt;/span&gt;&lt;br /&gt; “One difference between a smart programmer and a professional programmer is that the professional understands that clarity is king.”&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Chapter 3 - Functions&lt;/span&gt;&lt;br /&gt;Everyone and every team should read this chapter, period.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Chapter 9 - Unit Tests&lt;/span&gt;&lt;br /&gt;Three Laws of TDD&lt;br /&gt;&lt;ol&gt;&lt;li&gt;You may not write production code until you have written a failing unit test&lt;/li&gt;&lt;li&gt;You may not write more of a unit test than is sufficient to fail, and not compiling is failing.&lt;/li&gt;&lt;li&gt;You may not write more production code than is sufficient to pass the currently failing test.&lt;/li&gt;&lt;/ol&gt;“It is unit tests that keep our code flexible, maintainable, and reusable”&lt;br /&gt;&lt;br /&gt;“No matter how flexible your architecture is, no matter how nicely partitioned your design, without tests you will be reluctant to make changes because of the fear that you might introduce undetected bugs.”&lt;br /&gt;&lt;br /&gt;F. I. R. S. T - Fast, Independent, Repeatable, Self-Validating, Timely&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Chapter 10 - Classes&lt;/span&gt;&lt;br /&gt;“The first rule of classes is that they should be small.  The second rule is that they should be smaller than that.”&lt;br /&gt;&lt;br /&gt;DRY - Don’t Repeat Yourself!&lt;br /&gt;&lt;br /&gt;“We want our systems to be composed of many small classes not a few large ones.”&lt;br /&gt;&lt;br /&gt;Dependency Inversion Principle - Our classes should depend upon abstractions, not concrete details.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Chapter 17 - Smells and Heuristics&lt;/span&gt;&lt;br /&gt;This chapter will give you a quick hit of the high points of the book.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Other Stuff&lt;/span&gt;&lt;br /&gt;Rules of Design - in order of importance.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Runs all tests&lt;/li&gt;&lt;li&gt;Contains no duplication&lt;/li&gt;&lt;li&gt;Expresses the intent of the programmer&lt;/li&gt;&lt;li&gt;Minimizes the number of classes and methods&lt;/li&gt;&lt;/ol&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;“Getting software to work and making software clean are two very different activities.”&lt;br /&gt;&lt;br /&gt;“...programming is a craft more than it is a science.”&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-3422997604877794353?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/3422997604877794353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=3422997604877794353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/3422997604877794353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/3422997604877794353'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/04/clean-code-book-review.html' title='Clean Code Book Review'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-4019958723238841025</id><published>2009-03-30T23:38:00.001-05:00</published><updated>2009-03-30T23:41:05.006-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LinqToSql'/><title type='text'>Linq to Sql and the NerdDinner Repository</title><content type='html'>&lt;p&gt;Over the past 8 months I've been working a lot with LinqToSql. Professionally I've used it as THE data access layer for an ASP.Net Webform project, and I've also been playing around with it a lot for &lt;a href="http://www.runnersq.com/"&gt;runnersq&lt;/a&gt; and &lt;a href="http://www.chewyq.com/" target="_blank"&gt;chewyq&lt;/a&gt;, both MVC projects. So far I've really enjoyed the experience. In both cases, my domain model has been relatively simple, and it hasn't varied too much from my data model. This sort of direct mapping between the objects and the database fits perfectly with LinqToSql. &lt;/p&gt;  &lt;p&gt;When I first started working with LinqToSql, I didn't have a very good understanding of how the data context really worked. Because of that, I shielded my model from the Context that was generated by LinqToSql. I basically followed &lt;a href="http://blog.wekeroad.com/" target="_blank"&gt;Rob Conery's&lt;/a&gt; example and employed an anti-corruption layer in my Repository layer. I'm referring to the way that Rob mapped his objects to his data model in the MVC Storefront. (&lt;a href="http://blog.wekeroad.com/mvc-storefront/" target="_blank"&gt;read more here&lt;/a&gt;, or on &lt;a href="http://www.asp.net/learn/mvc-videos/#MVCStorefrontStarterKit" target="_blank"&gt;the asp.net site&lt;/a&gt;) &lt;/p&gt;  &lt;p&gt;Needless to say, over the last 8 months I've really learned a lot about the ins and outs of LinqToSql. I'm very comfortable and confident in the technology and I'm putting a lot of faith in it. (Yes I know about &lt;a href="http://blogs.msdn.com/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx" target="_blank"&gt;this&lt;/a&gt;, but I believe &lt;a href="http://videos.visitmix.com/MIX09/T49F" target="_blank"&gt;Hanselman&lt;/a&gt; when he says it's not going anywhere.) In fact, we recently started a new project at my client in which we are pretty much leveraging LinqToSql for 80 percent of our data access work. It's going to be a huge project and this should save us a ton of time and will help us control the database layer. &lt;/p&gt;  &lt;p&gt;So now jump to a few weeks ago when the &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx" target="_blank"&gt;Gu and his guys&lt;/a&gt; released the fist section of their new MVC book.  In the ebook Scott walks through the end-to-end process of building the core of the MVC site, NerdDinner.com.   And guess what, they used LinqToSql as their O/RM. As I was reading through the book, I took a close look at the DinnerRepsitory. &lt;/p&gt;  &lt;div   style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; height: 269px; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;class&lt;/span&gt; DinnerRepository {&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt; NerdDinnerDataContext db = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; NerdDinnerDataContext();&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(0, 128, 0);"&gt;// Query Methods &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; IQueryable&amp;lt;Dinner&amp;gt; FindAllDinners() {&lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; db.Dinners;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; IQueryable&amp;lt;Dinner&amp;gt; FindUpcomingDinners() {&lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; from dinner &lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt; db.Dinners&lt;br /&gt;              &lt;span style="color: rgb(0, 0, 255);"&gt;where&lt;/span&gt; dinner.EventDate &amp;gt; DateTime.Now&lt;br /&gt;              orderby dinner.EventDate&lt;br /&gt;              select dinner;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; Dinner GetDinner(&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt; id) {&lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; db.Dinners.SingleOrDefault(d =&amp;gt; d.DinnerID == id);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(0, 128, 0);"&gt;// Insert/Delete Methods &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; Add(Dinner dinner) {&lt;br /&gt;       db.Dinners.InsertOnSubmit(dinner);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; Delete(Dinner dinner) {&lt;br /&gt;       db.RSVPs.DeleteAllOnSubmit(dinner.RSVPs);&lt;br /&gt;       db.Dinners.DeleteOnSubmit(dinner);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(0, 128, 0);"&gt;// Persistence  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt; Save() {&lt;br /&gt;       db.SubmitChanges();&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;I couldn't believe what I was seeing. It was like I had been staring at one of those &lt;a href="http://en.wikipedia.org/wiki/Autostereogram" target="_blank"&gt;autostereogram&lt;/a&gt; pictures for 8 months and all of the sudden I could see the image emerge out of the blur. In this case it was the DataContext that emerged. Not only were they using LinqToSql, but they were fully leveraging the power of the &lt;a href="http://martinfowler.com/eaaCatalog/unitOfWork.html" target="_blank"&gt;Unit Of Work&lt;/a&gt; that the DataContext implements. Sure, I've used the data context, but I never really USED it. Let me show you what I mean.&lt;br /&gt;&lt;p&gt;Here's my book repository from chewyQ.com: &lt;/p&gt;&lt;div   style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;br /&gt; &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;private&lt;/span&gt; ChewyqDataContext _db;&lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; BookShelfRepository()&lt;br /&gt;       {&lt;br /&gt;           _db = &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; ChewyqDataContext();&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; BookShelfRepository(ChewyqDataContext dbContext)&lt;br /&gt;       {&lt;br /&gt;           _db = dbContext;&lt;br /&gt;       }&lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; IQueryable&amp;lt;Book&amp;gt; GetBooks()&lt;br /&gt;       {&lt;br /&gt;           &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; from book &lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt; _db.Books select book;&lt;br /&gt;       }&lt;br /&gt;      &lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;bool&lt;/span&gt; Add(Book book)&lt;br /&gt;       {&lt;br /&gt;           _db.Books.InsertOnSubmit(book);&lt;br /&gt;           _db.SubmitChanges();  &lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;bool&lt;/span&gt; Save(Book book)&lt;br /&gt;       {&lt;br /&gt;           &lt;span style="color: rgb(0, 0, 255);"&gt;try&lt;/span&gt;&lt;br /&gt;           {&lt;br /&gt;           var updatedBook = (from existingBook &lt;span style="color: rgb(0, 0, 255);"&gt;in&lt;/span&gt; _db.Books&lt;br /&gt;                             &lt;span style="color: rgb(0, 0, 255);"&gt;where&lt;/span&gt; existingBook.BookID == book.BookID&lt;br /&gt;                             select existingBook).FirstOrDefault();&lt;br /&gt;           &lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt; (updatedBook != &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;)&lt;br /&gt;           {&lt;br /&gt;               updatedBook.AmazonLink = book.AmazonLink;&lt;br /&gt;               updatedBook.Author = book.Author;&lt;br /&gt;               updatedBook.BlogLink = book.BlogLink;&lt;br /&gt;               updatedBook.Category = book.Category;&lt;br /&gt;               updatedBook.Comment = book.Comment;&lt;br /&gt;               updatedBook.DateAdded = book.DateAdded;&lt;br /&gt;               updatedBook.PictureLink = book.PictureLink;&lt;br /&gt;               updatedBook.Title = book.Title;&lt;br /&gt;               updatedBook.CurrentlyReading = book.CurrentlyReading;&lt;br /&gt;&lt;br /&gt;               _db.SubmitChanges();&lt;br /&gt;           }&lt;br /&gt;           }&lt;br /&gt;           &lt;span style="color: rgb(0, 0, 255);"&gt;catch&lt;/span&gt; (Exception ex)&lt;br /&gt;           {&lt;br /&gt;               &lt;span style="color: rgb(0, 128, 0);"&gt;//TODO: log messages someday&lt;/span&gt;&lt;br /&gt;               &lt;span style="color: rgb(0, 0, 255);"&gt;throw&lt;/span&gt; ex;&lt;br /&gt;           }&lt;br /&gt;           &lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;Now take a look at the NerdDinner implementation again.&lt;br /&gt;&lt;br /&gt;Notice how DinnerRepository looks like a list that has a save method, and the BookRepository has an add method that persists every time it is called and a save method that does an uncomfortable insert/update type of an operation. (hello!)  With DinnerRepository you can add, delete, update, add again and again and again, and then call save and BOOM goes the dynamite. I know this capability was probably obvious to most of you, but I was ignoring the power of the unit of work. I knew that the Context would track the changes of its objects, I just wasn't using letting it.  I was doing a lot of work inside my repository that the context could and should do for me.  This caused the repository to be confusing and a little difficult to understand.&lt;br /&gt;&lt;br /&gt;Needless to say this was a breakthrough for me.  I came across the DinnerRepository at the right time, and it was the type of breakthrough that energized me.  With minor tweaks here and there I've added it to some of my existing projects, and I really like the way it is working out.  I've also incorporated some of their validation ideas and am have a similar breakthrough.&lt;br /&gt;&lt;br /&gt;What do you think?  I'd love to hear your thoughts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-4019958723238841025?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/4019958723238841025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=4019958723238841025' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/4019958723238841025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/4019958723238841025'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/03/linq-to-sql-and-nerddinner-repository.html' title='Linq to Sql and the NerdDinner Repository'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-3816899267808594524</id><published>2009-03-30T07:29:00.000-05:00</published><updated>2009-03-30T07:58:58.460-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Hello, world! from Kyle Walker</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_2vsBDUpb9uE/SdC9xSDD58I/AAAAAAAAANI/E54XqqksLn8/s1600-h/IMG_8713.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 134px; height: 200px;" src="http://3.bp.blogspot.com/_2vsBDUpb9uE/SdC9xSDD58I/AAAAAAAAANI/E54XqqksLn8/s200/IMG_8713.jpg" alt="" id="BLOGGER_PHOTO_ID_5318959814280472514" border="0" /&gt;&lt;/a&gt;It's official, Kyle Walker was born yesterday (3/29) at 12:30PM.  He weighed in at a whopping 9 pounds 2 ounces; this is  just 6 ounces less than his big brother Warren.&lt;br /&gt;&lt;br /&gt;It started out like it was going to be one of those race to the hospital type of births.     At 3:00am I rolled over in bed and my wife whispered to me "are you awake?"     I quickly replied "yes", pretending that I was wide awake.    She then said "I think this is happening."    We were in the car in about 10 minutes and in the hospital by 3:35.     Natalie was having contractions every 2 minutes, and they were getting stronger and stronger as we drove.   We made great time, and were even able to drop off my two year old son Warren.   Well, after a few hours things started to stall a little bit, and if you're paying attention you'll notice that Kyle wasn't born for another 9 hours.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_2vsBDUpb9uE/SdDBNLwyS0I/AAAAAAAAANQ/KeFWfHeEcyU/s1600-h/w-reading-paper.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_2vsBDUpb9uE/SdDBNLwyS0I/AAAAAAAAANQ/KeFWfHeEcyU/s200/w-reading-paper.JPG" alt="" id="BLOGGER_PHOTO_ID_5318963592164428610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I couldn't be happier, in fact, the only other time that I remember being this happy was when my other son Warren was born.   Both mom and the baby are doing great!!  So I guess we are officially now "Lee, party of four"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-3816899267808594524?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/3816899267808594524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=3816899267808594524' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/3816899267808594524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/3816899267808594524'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/03/hello-world-from-kyle-walker.html' title='Hello, world! from Kyle Walker'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_2vsBDUpb9uE/SdC9xSDD58I/AAAAAAAAANI/E54XqqksLn8/s72-c/IMG_8713.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-2490982534689411012</id><published>2009-03-16T07:35:00.001-05:00</published><updated>2009-03-16T07:35:07.768-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Book Reviews</title><content type='html'>&lt;p&gt;As I mentioned in &lt;a href="http://chewyq.blogspot.com/2009/03/my-new-home-on-web.html"&gt;my last post&lt;/a&gt;, I have been working on my web site a lot lately. As I was brainstorming ideas on what I wanted to include on the site, I came up with the idea of having a &lt;a href="http://www.chewyq.com/Home.aspx/Books"&gt;bookshelf&lt;/a&gt;.&amp;#160;&amp;#160; This should be pretty self explanatory, but the idea is to keep a list of the books that I'm reading, planning on reading, or have read.&amp;#160; &lt;/p&gt;  &lt;p&gt;Last year I started writing book reviews of the books that I really liked.&amp;#160; The &amp;quot;reviews&amp;quot; are really more like a reference/index to the sections of the books that I found particularly interesting.&amp;#160; As of now I have kept these reviews in &lt;a href="http://www.evernote.com/"&gt;evernote&lt;/a&gt; which really only serves me.&amp;#160; So with the release of my bookshelf, I'm also going to start to post my book reviews here on my blog. &lt;a href="http://chewyq.blogspot.com/2008/09/getting-things-done-book-review.html"&gt;Here is a sample&lt;/a&gt; of my GTD review. I'm going to postdate the reviews so that the publish date matches the edit date in evernote; so if you follow this blog, I'm sorry if there is any confusion in the atom feed.&lt;/p&gt;  &lt;p&gt;Let me know what you think, I'd love to hear from you.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-2490982534689411012?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/2490982534689411012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=2490982534689411012' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/2490982534689411012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/2490982534689411012'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/03/book-reviews.html' title='Book Reviews'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-5238813861755167291</id><published>2009-03-11T21:01:00.001-05:00</published><updated>2009-03-24T08:06:21.775-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>My New Home on the web</title><content type='html'>&lt;p&gt;If you haven't noticed, I've been making some changes over on &lt;a href="http://www.chewyq.com/"&gt;ChewyQ.com&lt;/a&gt;.&amp;#160; I have completely redesigned the site, and linked it in with my web persona.&amp;#160; This idea stemmed from a some design discussions that I had with my dad a few weeks ago.&amp;#160; I have been working with him on a &lt;a href="http://mdumcresponse.com"&gt;web site&lt;/a&gt; that he wants to put together for a mission that he is leading at his church.&amp;#160; During our discussions about his site, I started pushing him to leverage all of the community stuff that is already out there on the web.&amp;#160; I told him we should tie his site in with flickr, facebook, and his blog.&amp;#160; He liked the ideas, and so did I.&lt;/p&gt;  &lt;p&gt;It did take me very long to decide that it was time to put some effort into my own site.&amp;#160; Considering that I'm a pretty seasoned web developer, it is pretty sad how weak my presence has been on the Internet.&amp;#160; So to improve that presence, and to have a little fun, I have put together a fresh new look and feel for ChewyQ.com.&amp;#160; I'm using the ASP.NET MVC framework, and having a great time with it.&amp;#160; It's a very refreshing way to develop web sites.&amp;#160; It just seems to fit the workflow of the web, and that being said, the MVC template has you up and running in abut 5 minutes.&amp;#160; &lt;/p&gt;  &lt;p&gt;I'm sure I'll start to add more things to the site over time, but&amp;#160; for now I'm pretty happy with the way it has come together.&amp;#160; Last weekend I add my bookshelf, which was pretty fun to design, and will give me a reason to publish my Book Reviews/Recaps.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_2vsBDUpb9uE/Sbhs5i_QyQI/AAAAAAAAAMM/Yeez-ufB56s/s1600-h/ChewyQ_Blue%5B2%5D.png"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Let me know what you think.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-5238813861755167291?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/5238813861755167291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=5238813861755167291' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/5238813861755167291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/5238813861755167291'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/03/my-new-home-on-web.html' title='My New Home on the web'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-8237483686718365537</id><published>2009-02-27T21:07:00.001-06:00</published><updated>2009-02-27T21:15:56.162-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>MVC Killed my Dasblog</title><content type='html'>&lt;p&gt;Well, I've been thinking about moving to blogger.com for a while and it just so happens that I killed my DasBlog install when I pushed out a new build of my site &lt;a href="http://www.chewyq.com/"&gt;www.chewyq.com&lt;/a&gt;.  I'm sure it wouldn't take much to get it back up and running, but to be honest, I've never really liked my Dasblog blog.  It was a little hard to get the look and feel working, and I didn't really want to have to work on my blog.  Blogger seems to be a good fit, and it was where I posted my first "Hello, world!" post.  So I'm back on blogger now, and that's all I have to say about that.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-8237483686718365537?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/8237483686718365537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=8237483686718365537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/8237483686718365537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/8237483686718365537'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/02/mvc-killed-my-dasblog.html' title='MVC Killed my Dasblog'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-2861537792655005873</id><published>2009-01-21T17:59:00.000-06:00</published><updated>2009-02-27T21:16:48.383-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><title type='text'>How to make an iPhone styled logo</title><content type='html'>&lt;p&gt;Have you ever looked at the Icons on an iPhone and thought, “wow, I could never make anything that looks like that.”  If so, you probably feel creatively challenged like I do. But just b/c I’m a developer, doesn’t mean that I can’t make stuff that looks somewhat good.  So I’ve been fumbling around with design the past few weeks and thought that i’d blog about some of the things that I’ve learned. &lt;/p&gt;  &lt;p&gt;Here’s a quick way to make a simple icon that has a glossy, rounded, iPhone look. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_2vsBDUpb9uE/Sah-MZoyt2I/AAAAAAAAAI4/3vrW6yqTvWM/s1600-h/FinalImage2.jpg"&gt;&lt;img style="border-width: 0px;" alt="FinalImage" src="http://lh4.ggpht.com/_2vsBDUpb9uE/Sah-MtNpx-I/AAAAAAAAAI8/N8PA7fPy9GQ/FinalImage_thumb.jpg?imgmax=800" width="115" border="0" height="116" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;h3&gt;The tools:&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.blogger.com/%20http://www.inkscape.org/"&gt;Inkscape&lt;/a&gt;...and maybe a color.  &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_2vsBDUpb9uE/Sah-MzNrH2I/AAAAAAAAAJA/K2JlvYOrAqc/s1600-h/InkskapeLogo2.jpg"&gt;&lt;img style="border-width: 0px;" alt="InkskapeLogo" src="http://lh5.ggpht.com/_2vsBDUpb9uE/Sah-NHJAUKI/AAAAAAAAAJE/tLqPgY0mHOM/InkskapeLogo_thumb.jpg?imgmax=800" width="244" border="0" height="55" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Not being a design guy, I don’t really know if Inkscape is great or not, I can only say that it’s not that hard to pick up, and the help file does an okay job of showing you some samples on how to use the product. &lt;/p&gt;  &lt;h3&gt;Step 1 - Getting Started&lt;/h3&gt;  &lt;p&gt;Open inkscape and create a new drawing.  I usually use the default size when I’m working on icons, but they do have a lot of other drawing sizes that you can pick from. &lt;/p&gt;  &lt;h3&gt;Step 2 - Creating the shapes&lt;/h3&gt;  &lt;p&gt;You’ll need to draw &lt;strong&gt;two squares&lt;/strong&gt; with rounded corners and an &lt;strong&gt;oval&lt;/strong&gt;.  You do this by clicking the rectangle tool, (F4), and then draw a square.  Next, using the pointer (F1),  select the square you just drew.  Now you’re going to make sure that your square is "square" and your rounded corners are even.  In the menu you can adjust things like the Height, Width, Rx, and Ry.  &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_2vsBDUpb9uE/Sah-NmA93iI/AAAAAAAAAJI/shlDTDs5sN4/s1600-h/Inkscapewhry7.jpg"&gt;&lt;img style="border-width: 0px;" alt="Inkscape w h ry" src="http://lh4.ggpht.com/_2vsBDUpb9uE/Sah-N7sIG4I/AAAAAAAAAJM/p08NDcfFOcI/Inkscapewhry_thumb3.jpg?imgmax=800" width="509" border="0" height="137" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Highlight the width (W) number and set it to 128, then the make the height 128 as well.  (the size doesn’t really matter, but they need to be equal).  Then adjust the rounding (Ry) to 30.  A designer once told me that 8-12 was normal, but I like 30 for icons. &lt;/p&gt;  &lt;p&gt;When your done, you should now have a nice rounded square like this: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_2vsBDUpb9uE/Sah-OR4Ja0I/AAAAAAAAAJQ/owiiptiEXw8/s1600-h/RoundedSquare3.jpg"&gt;&lt;img style="border-width: 0px;" alt="RoundedSquare" src="http://lh5.ggpht.com/_2vsBDUpb9uE/Sah-PUdb1WI/AAAAAAAAAJU/FaGuBnGZeFU/RoundedSquare_thumb1.jpg?imgmax=800" width="157" border="0" height="132" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now copy and past this image, so that you have two identical squares on the drawing surface.  &lt;/p&gt;  &lt;p&gt;Next you will need to draw an ellipse.  Using the Circle tool (F5), draw an ellipse on the canvas.  Select the ellipse and adjust the W to 200px and the H to 90px.  It should look something like this when your done. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_2vsBDUpb9uE/Sah-PkALUII/AAAAAAAAAJY/w2sNM-aEGBA/s1600-h/ellipse2.jpg"&gt;&lt;img style="border-width: 0px;" alt="ellipse" src="http://lh6.ggpht.com/_2vsBDUpb9uE/Sah-QKnBrYI/AAAAAAAAAJc/m2Nw87tkRPw/ellipse_thumb.jpg?imgmax=800" width="244" border="0" height="140" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt; &lt;/h3&gt;  &lt;h3&gt;Step 4 - Creating the “shine” shape by creating a new shape&lt;/h3&gt;  &lt;p&gt;In this step you are going to create a new shape using one of the squares, and the ellipse.  Take the ellipse and place it on top of one of the squares.  Something like this: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_2vsBDUpb9uE/Sah-RKMQtpI/AAAAAAAAAJg/ck3gsUk2Xj8/s1600-h/Layered2.jpg"&gt;&lt;img style="border-width: 0px;" alt="Layered" src="http://lh6.ggpht.com/_2vsBDUpb9uE/Sah-RUNUmVI/AAAAAAAAAJk/fc3YmyLxa0M/Layered_thumb.jpg?imgmax=800" width="244" border="0" height="207" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You’ll want to make sure that these are centered along their vertical access.  To do this, open up the Align and Distribute tool box(Shift+Ctrl+A).  Now shift click the square and ellipse to select them both, and then click the vertical center button in the Align and Distribute tool box.  &lt;/p&gt;  &lt;p&gt;I guess I should point out that the amount of overlap is really up to you, I like to overlap just past the center line of the ellipse. &lt;/p&gt;  &lt;p&gt;Now we’ll do some magic to make the new shape.  Holding down shift, click the ellipse, and then click the square.  Now go to the Path menu.  You'll have quite a few options, but for this we're going to use the intersection tool. All you need to do is click the Intersection (Ctrl+*) menu item and you're done.  This should leave you with a shape like this: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_2vsBDUpb9uE/Sah-R4f8i-I/AAAAAAAAAJo/vAqM51Qj2XU/s1600-h/shiny2.jpg"&gt;&lt;img style="border-width: 0px;" alt="shiny" src="http://lh5.ggpht.com/_2vsBDUpb9uE/Sah-Sa-DVSI/AAAAAAAAAJs/BF3WIkRkfdk/shiny_thumb.jpg?imgmax=800" width="244" border="0" height="162" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I'm going to refer to this as the shiny shape for the rest of this blog.&lt;/p&gt;  &lt;h3&gt; &lt;/h3&gt;  &lt;h3&gt;Step 5 - Creating a Gradient&lt;/h3&gt;  &lt;p&gt;Next you’ll want to place this new shape on top of the remaining rounded square.  To do this, hit F1, then while holding down the shift key, select the square and the shiny shape.  Using the Align and distribute tool, click the align right, and then the align top button.  The shapes should now be layered one on top of the other and should look like this: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_2vsBDUpb9uE/Sah-So5O2oI/AAAAAAAAAJw/52QnRfYWD3M/s1600-h/Layeredwithshiny3.jpg"&gt;&lt;img style="border-width: 0px;" alt="Layered with shiny" src="http://lh4.ggpht.com/_2vsBDUpb9uE/Sah-S1kQDrI/AAAAAAAAAJ0/77KHPv5D5Gk/Layeredwithshiny_thumb1.jpg?imgmax=800" width="244" border="0" height="224" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now to make it shine.  Select just the shiny shape by hitting escape and the clicking on the top of the square.  If you find that you can’t select just the shiny shape, you’ll need to move the square down a layer.  To do this click the square and click the lower layer button. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_2vsBDUpb9uE/Sah-Tc1AYsI/AAAAAAAAAJ4/oWvS9yjSp3U/s1600-h/LayeredTool2.jpg"&gt;&lt;img style="border-width: 0px;" alt="Layered Tool" src="http://lh6.ggpht.com/_2vsBDUpb9uE/Sah-T7jelbI/AAAAAAAAAJ8/IcCAJIgF-uc/LayeredTool_thumb.jpg?imgmax=800" width="244" border="0" height="98" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Then you’ll need to hit escape and click the top part of the square.  This should select the tiny shape and look like this: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_2vsBDUpb9uE/Sah-UIx0aWI/AAAAAAAAAKA/eF39Q3xxxG4/s1600-h/Layeredshinyselected2.jpg"&gt;&lt;img style="border-width: 0px;" alt="Layered shiny selected" src="http://lh5.ggpht.com/_2vsBDUpb9uE/Sah-Ue_vD7I/AAAAAAAAAKE/-8j6BpOiLuQ/Layeredshinyselected_thumb.jpg?imgmax=800" width="244" border="0" height="213" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;What we want is a shiny effect, so to accomplish this, we are going to change the fill color and apply a gradient to the shiny shape. &lt;/p&gt;  &lt;p&gt;Open the fill and Stroke tool bar (Shift+Ctrl+F).  The fill tab should be selected, and the solid color should be selected.  To change the color to white, you’ll need to adjust the RGBA (bottom right) to “ffffffff”. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_2vsBDUpb9uE/Sah-UnE2cQI/AAAAAAAAAKI/5ofkuB2i2UY/s1600-h/fillandstroke8.jpg"&gt;&lt;img style="border-width: 0px;" alt="fill and stroke" src="http://lh5.ggpht.com/_2vsBDUpb9uE/Sah-VO64-UI/AAAAAAAAAKM/eqaVD2gbQCM/fillandstroke_thumb4.jpg?imgmax=800" width="364" border="0" height="375" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Next click on the gradient square:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_2vsBDUpb9uE/Sah-VauzGvI/AAAAAAAAAKQ/2pMduMidebM/s1600-h/gradienttool4.jpg"&gt;&lt;img style="border-width: 0px;" alt="gradient tool" src="http://lh3.ggpht.com/_2vsBDUpb9uE/Sah-WFFWAeI/AAAAAAAAAKU/HrZdI6dAYuw/gradienttool_thumb2.jpg?imgmax=800" width="367" border="0" height="250" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You’ll notice the color in the shiny shape now looks like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_2vsBDUpb9uE/Sah-WVG9yfI/AAAAAAAAAKY/PHDs20g2vZ4/s1600-h/gradientleft2.jpg"&gt;&lt;img style="border-width: 0px;" alt="gradientleft" src="http://lh5.ggpht.com/_2vsBDUpb9uE/Sah-WsTSW8I/AAAAAAAAAKc/Zyu4p74viqY/gradientleft_thumb.jpg?imgmax=800" width="244" border="0" height="182" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now we need to get the gradient going the right way.  You’ll want the darker side to be at the top of the image.  Using the edit paths by node (F2) tool, you can change the direction and length of the gradient.  It should look something like this &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_2vsBDUpb9uE/Sah-XOjKLJI/AAAAAAAAAKg/8T0P0-h3PmQ/s1600-h/gradienttop2.jpg"&gt;&lt;img style="border-width: 0px;" alt="gradient top" src="http://lh4.ggpht.com/_2vsBDUpb9uE/Sah-XXEyZnI/AAAAAAAAAKk/-xHFTb0dNfY/gradienttop_thumb.jpg?imgmax=800" width="221" border="0" height="244" /&gt;&lt;/a&gt;  &lt;/p&gt;  &lt;p&gt;And that’s it, hit escape an you’ll see that you have a shiny rounded square.&lt;/p&gt;  &lt;h3&gt;Step 6 the finishing touch&lt;/h3&gt;  &lt;p&gt;Since this is chewyQ, my logo’s tend to have Q’s in them.  So to finish the logo, I simply add a large Q and center it both vertically and horizontally inside the square image.  I then make sure that I move the shiny shape to the top layer (using the layer tool bar), and then I’m done: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_2vsBDUpb9uE/Sah-XkVjGBI/AAAAAAAAAKo/JeSdzZ_LPMk/s1600-h/FinalImage3.jpg"&gt;&lt;img style="border-width: 0px;" alt="FinalImage" src="http://lh3.ggpht.com/_2vsBDUpb9uE/Sah-YDIm-jI/AAAAAAAAAKs/JCi8Qvfk76M/FinalImage_thumb1.jpg?imgmax=800" width="115" border="0" height="116" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Final Thoughts&lt;/h3&gt;  &lt;p&gt;What you’ll find is that you now have a solid colored square, with an overlay that is used to create the shiny/beveled look.  The cool thing is that if you want to change the look, all you need to do is change the color of the square.  There’s nothing to keep you from copying and pasting this logo and creating tons of other similar logo’s: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_2vsBDUpb9uE/Sah-YlZ4JtI/AAAAAAAAAKw/SZ1eFUy2gy4/s1600-h/Qlogos2.jpg"&gt;&lt;img style="border-width: 0px;" alt="Q logos" src="http://lh5.ggpht.com/_2vsBDUpb9uE/Sah-Y0c1WoI/AAAAAAAAAK0/wC0IYyPOpY0/Qlogos_thumb.jpg?imgmax=800" width="184" border="0" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Hope this helps you out, have fun, and let me know if you have any questions or comments.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-2861537792655005873?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/2861537792655005873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=2861537792655005873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/2861537792655005873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/2861537792655005873'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/02/how-to-make-iphone-styled-logo.html' title='How to make an iPhone styled logo'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_2vsBDUpb9uE/Sah-MtNpx-I/AAAAAAAAAI8/N8PA7fPy9GQ/s72-c/FinalImage_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-2357291844284928997</id><published>2009-01-17T20:58:00.000-06:00</published><updated>2009-02-27T21:17:05.595-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='Azure'/><title type='text'>Adding Azure Cloud Services to your existing MVC project</title><content type='html'>&lt;p&gt;I've been working on a new site, &lt;a href="http://www.runnersq.com/"&gt;RunnersQ.com&lt;/a&gt;, and was recently included in the Azure CTP.  Since I'm using this site as sort of a &lt;a href="http://en.wikipedia.org/wiki/Micro_ISV"&gt;microISV&lt;/a&gt; test run, I figured it would be good to see what Azure has to offer  small startups/microISV's. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;So how do you take an existing MVC app and get it running in the "&lt;em&gt;Cloud&lt;/em&gt;"?&lt;/strong&gt;  Since there aren't that many articles out there on it, I figured I'd post what worked for me.&lt;/p&gt;  &lt;p&gt;This post has been given the "It works on my PC" stamp of approval.  &lt;/p&gt;  &lt;h3&gt;Step 1 - Unload your MVC project&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_2vsBDUpb9uE/SaioUOB8yWI/AAAAAAAAAK4/-v5k1KcQBUc/s1600-h/UnloadProject2.jpg"&gt;&lt;img style="border-width: 0px;" alt="UnloadProject" src="http://lh4.ggpht.com/_2vsBDUpb9uE/SaioUZmG8PI/AAAAAAAAAK8/ZKcRHPMHHKM/UnloadProject_thumb.jpg?imgmax=800" width="244" border="0" height="138" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;To do this, Right-Click your project file and click Unload Project.&lt;/p&gt;  &lt;h3&gt;Step 2 - Open the solution for editing&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_2vsBDUpb9uE/SaioUp6pq_I/AAAAAAAAALA/5pejT8iTVUs/s1600-h/unloaded2.jpg"&gt;&lt;img style="border-width: 0px;" alt="unloaded" src="http://lh5.ggpht.com/_2vsBDUpb9uE/SaioVPkolDI/AAAAAAAAALE/MSt9vCJymj0/unloaded_thumb.jpg?imgmax=800" width="244" border="0" height="95" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Step 3 - Add two lines to the project file&lt;/h3&gt;  &lt;div&gt;   &lt;div style="border-style: none; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: rgb(244, 244, 244);"&gt;     &lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; font-size: 8pt; width: 100%; color: black; line-height: 12pt; font-family: consolas,'Courier New',courier,monospace; background-color: white;"&gt;&amp;lt;RoleType&amp;gt;Web&amp;lt;/RoleType&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&amp;lt;ServiceHostingSDKInstallDir Condition=&lt;span style="color: rgb(0, 96, 128);"&gt;" '$(ServiceHostingSDKInstallDir)' == '' "&lt;/span&gt;&amp;gt;$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\ServiceHosting\v1.0@InstallPath)&amp;lt;/ServiceHostingSDKInstallDir&amp;gt;&lt;/pre&gt;&lt;br /&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You will need to paste these lines into your csproj file.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_2vsBDUpb9uE/SaioVx-PIRI/AAAAAAAAALI/EPqHT0GK9y0/s1600-h/projectfile2.jpg"&gt;&lt;img style="border-width: 0px;" alt="projectfile" src="http://lh4.ggpht.com/_2vsBDUpb9uE/SaioWNWf-YI/AAAAAAAAALM/LVNPYBndfr0/projectfile_thumb.jpg?imgmax=800" width="244" border="0" height="119" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This is at the top of the file.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Step 4  - Reload the project&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Just right-click the project file and select reload.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Step 5 - Now the cloud stuff&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You will need to add a Blank Cloud Service project to your solution&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;File--Add--New Project--&amp;gt; then select the Blank Cloud Service.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Step 6 - Add your MVC project as the Role&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_2vsBDUpb9uE/SaioW6MpHdI/AAAAAAAAALQ/uqo6Yc27pyk/s1600-h/addwebrole2.jpg"&gt;&lt;img style="border-width: 0px;" alt="addwebrole" src="http://lh3.ggpht.com/_2vsBDUpb9uE/SaioXPO6Y8I/AAAAAAAAALU/lE2jbEgr4QA/addwebrole_thumb.jpg?imgmax=800" width="244" border="0" height="125" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Right-click the roles folder and select "Web Role in solution..."  The dialog should show your MVC project if you followed the steps.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;And that's it!&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I followed these steps and was able to publish the package and get it running the in the &lt;strong&gt;&lt;em&gt;&lt;u&gt;cloud&lt;/u&gt;&lt;/em&gt;&lt;/strong&gt; in just a few hours.  If you want to follow the progress of my app, you can browse the &lt;a href="http://runnersq.cloudapp.net/Home/About"&gt;cloud version here&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-2357291844284928997?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/2357291844284928997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=2357291844284928997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/2357291844284928997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/2357291844284928997'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2009/01/adding-azure-cloud-services-to-your.html' title='Adding Azure Cloud Services to your existing MVC project'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_2vsBDUpb9uE/SaioUZmG8PI/AAAAAAAAAK8/ZKcRHPMHHKM/s72-c/UnloadProject_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-8103732245345272474</id><published>2008-09-20T21:11:00.000-05:00</published><updated>2009-03-24T08:06:10.383-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Getting Things Done Book Review</title><content type='html'>&lt;p&gt;Book Review/Recap &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Getting Things Done&lt;/strong&gt;     &lt;br /&gt;By David Allen &lt;/p&gt;  &lt;p&gt;Recommended by Greg Long &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;My Thoughts      &lt;br /&gt;&lt;/strong&gt;This was an excellent book and really takes personal productivity to the next level.&amp;#160; Being a Covey fan, and a list maker,&amp;#160; I've always struggled with prioritized tasks.&amp;#160; They were just to static, and never really accurate.&amp;#160; Year's ago I got rid of the prioritization, and just kind of winged the tasks.&amp;#160; &lt;/p&gt;  &lt;p&gt;After reading Getting Things Done, my approach to task management has all changed.&amp;#160; I now Collect, Process, Organize, Review, and do everything using this system.&amp;#160; It's an amazingly simple yet powerful concept to capture everything in an inbox, not just mail, email, and voice mail, but everything.&amp;#160; Need a new brake light, great, put it in your inbox, and then process it, and then do it when&amp;#160; the time is right.&amp;#160; It's just so simple and sophisticated at the same time. &lt;/p&gt;  &lt;p&gt;I use Things, to capture everything, and now I use Evernote as my primary storage for reference material.&amp;#160; I also have a physical filing box, and a filing folder on my computer.&amp;#160; It's been great!!! &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Important Concepts      &lt;br /&gt;&lt;/strong&gt;The Core Process     &lt;br /&gt;1.&amp;#160; Collect     &lt;br /&gt;2.&amp;#160; Process     &lt;br /&gt;3.&amp;#160; Organize     &lt;br /&gt;4.&amp;#160; Review     &lt;br /&gt;5.&amp;#160; Do &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Four Criteria Model for Choosing Actions in the Moment pg. 49      &lt;br /&gt;&lt;/strong&gt;Context     &lt;br /&gt;Time Available     &lt;br /&gt;Energy Available     &lt;br /&gt;Priority &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Threefold Model for Evaluating Daily Work pg. 50      &lt;br /&gt;&lt;/strong&gt;Doing predefined work     &lt;br /&gt;Doing work as it shows up     &lt;br /&gt;Defining your work &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Six-Level Model for Reviewing Your Own Work pg. 51&lt;/strong&gt;     &lt;br /&gt;50,000+ feet:&amp;#160; Life     &lt;br /&gt;40,000 feet:&amp;#160; Three to five year vision     &lt;br /&gt;30,000 feet:&amp;#160; One to two year goals     &lt;br /&gt;20,000 feet:&amp;#160; Areas of responsibility (roles)     &lt;br /&gt;10,000 feet:&amp;#160; Current projects     &lt;br /&gt;Runway:&amp;#160; Current Actions     &lt;br /&gt;He recommends starting from the runway and working your way up when you begin this process. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Natural Planning Model pg. 56      &lt;br /&gt;&lt;/strong&gt;1.&amp;#160; Defining purpose and principles     &lt;br /&gt;2.&amp;#160; outcome visioning     &lt;br /&gt;3.&amp;#160; Brainstorming     &lt;br /&gt;4.&amp;#160; Organizing     &lt;br /&gt;5.&amp;#160; Identifying next actions &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-8103732245345272474?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/8103732245345272474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=8103732245345272474' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/8103732245345272474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/8103732245345272474'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2008/09/getting-things-done-book-review.html' title='Getting Things Done Book Review'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-3433487907825111616</id><published>2008-09-03T22:00:00.000-05:00</published><updated>2009-02-27T21:17:36.832-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SRS'/><title type='text'>Rendering an SRS report as pdf</title><content type='html'>&lt;p&gt;Since ASP.NET 2.0 was released, I've been using the ReportViewer Control to render reports in my web application projects.  For the longest time I've just settled on the idea that the report would have to be rendered first, and then the user would then need to export the report to pdf or excel manually, and then print.  When you break it down it could take a user six clicks to actually get a report printed.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;click the print button on the page which renders the report &lt;/li&gt;    &lt;li&gt;Select the export option &lt;/li&gt;    &lt;li&gt;click export &lt;/li&gt;    &lt;li&gt;click open to the download dialog &lt;/li&gt;    &lt;li&gt;click print, this time in adobe or excel &lt;/li&gt;    &lt;li&gt;...and then confirm the print options. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;It really is ridiculous when you think about it, but that's just it, I've never really thought about it...until today.  So I set out in google to find a way to "render an rdlc to pdf programmatically" and after a few misses, I found &lt;a href="http://technoblab.blogspot.com/2007/08/render-rdlc-as-pdf.html"&gt;this blog entry&lt;/a&gt; from Anamika.  If you read the blog, you'll see that the pdf is written to a file and then rendered. The real gem from this blog is one of the comments where someone recommends to call the render function in the Page_SaveStateComplete event.  So this was how I implemented it (sorry for the vb, but this is what my client likes) :&lt;/p&gt;  &lt;div   style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;   &lt;div   style="border-style: none; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;     &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Protected&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Sub&lt;/span&gt; LoadPDF()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   2:&lt;/span&gt;         &lt;span style="color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt; warnings &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; Warning() = &lt;span style="color: rgb(0, 0, 255);"&gt;Nothing&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   3:&lt;/span&gt;         &lt;span style="color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt; streamids &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;String&lt;/span&gt;() = &lt;span style="color: rgb(0, 0, 255);"&gt;Nothing&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   4:&lt;/span&gt;         &lt;span style="color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt; mimeType &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;String&lt;/span&gt; = &lt;span style="color: rgb(0, 0, 255);"&gt;Nothing&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   5:&lt;/span&gt;         &lt;span style="color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt; encoding &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;String&lt;/span&gt; = &lt;span style="color: rgb(0, 0, 255);"&gt;Nothing&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   6:&lt;/span&gt;         &lt;span style="color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt; extension &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;String&lt;/span&gt; = &lt;span style="color: rgb(0, 0, 255);"&gt;Nothing&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   7:&lt;/span&gt;         &lt;span style="color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt; bytes &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Byte&lt;/span&gt;()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   8:&lt;/span&gt;         &lt;span style="color: rgb(0, 0, 255);"&gt;Try&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   9:&lt;/span&gt;             &lt;span style="color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt; FolderLocation &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;String&lt;/span&gt; = &lt;span style="color: rgb(0, 96, 128);"&gt;"c:\test\"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  10:&lt;/span&gt;             &lt;span style="color: rgb(0, 128, 0);"&gt;'First delete existing file&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  11:&lt;/span&gt;             &lt;span style="color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt; filepath &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;String&lt;/span&gt; = FolderLocation &amp;amp; &lt;span style="color: rgb(0, 96, 128);"&gt;"Report.PDF"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  12:&lt;/span&gt;             File.Delete(filepath)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  13:&lt;/span&gt;             &lt;span style="color: rgb(0, 128, 0);"&gt;'Then create new pdf file&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  14:&lt;/span&gt;             bytes = &lt;span style="color: rgb(0, 0, 255);"&gt;Me&lt;/span&gt;.ResumePrintViewer.LocalReport.Render(&lt;span style="color: rgb(0, 96, 128);"&gt;"PDF"&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;Nothing&lt;/span&gt;, mimeType, encoding, extension, streamids, warnings)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  15:&lt;/span&gt;             &lt;span style="color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt; fs &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;New&lt;/span&gt; FileStream(FolderLocation &amp;amp; &lt;span style="color: rgb(0, 96, 128);"&gt;"Report.PDF"&lt;/span&gt;, FileMode.Create)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  16:&lt;/span&gt;             fs.Write(bytes, 0, bytes.Length)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  17:&lt;/span&gt;             fs.Close()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  18:&lt;/span&gt;             &lt;span style="color: rgb(0, 128, 0);"&gt;'Set the appropriate ContentType.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  19:&lt;/span&gt;             Response.ContentType = &lt;span style="color: rgb(0, 96, 128);"&gt;"Application/pdf"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  20:&lt;/span&gt;             &lt;span style="color: rgb(0, 128, 0);"&gt;'Write the file directly to the HTTP output stream.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  21:&lt;/span&gt;             Response.WriteFile(filepath)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  22:&lt;/span&gt;             Response.&lt;span style="color: rgb(0, 0, 255);"&gt;End&lt;/span&gt;()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  23:&lt;/span&gt;         &lt;span style="color: rgb(0, 0, 255);"&gt;Catch&lt;/span&gt; ex &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; Exception&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  24:&lt;/span&gt;             &lt;span style="color: rgb(0, 0, 255);"&gt;Throw&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  25:&lt;/span&gt;         &lt;span style="color: rgb(0, 0, 255);"&gt;End&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Try&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  26:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;End&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  27:&lt;/span&gt;  &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  28:&lt;/span&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;Protected&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Sub&lt;/span&gt; Page_SaveStateComplete(&lt;span style="color: rgb(0, 0, 255);"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Object&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;ByVal&lt;/span&gt; e &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; System.EventArgs) &lt;span style="color: rgb(0, 0, 255);"&gt;Handles&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Me&lt;/span&gt;.SaveStateComplete&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  29:&lt;/span&gt;         LoadPDF()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  30:&lt;/span&gt;   &lt;span style="color: rgb(0, 0, 255);"&gt;End&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Sub&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This would work, but there is one side effect that I don't like; this process could leave pdf reports behind.  My app is being used by hundreds of users which would only compound this problem.  So how do you fix this you may ask, well this was my solution:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div   style="border: 1px solid gray; margin: 20px 0px 10px; padding: 4px; overflow: auto; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;br /&gt;&lt;div   style="border-style: none; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Protected&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Sub&lt;/span&gt; Page_SaveStateComplete(&lt;span style="color: rgb(0, 0, 255);"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Object&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;ByVal&lt;/span&gt; e &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; System.EventArgs) &lt;span style="color: rgb(0, 0, 255);"&gt;Handles&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Me&lt;/span&gt;.SaveStateComplete&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   2:&lt;/span&gt;    LoadPDF()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   3:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;End&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   4:&lt;/span&gt;  &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   5:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Protected&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Sub&lt;/span&gt; LoadPDF()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   6:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt; warnings &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; Warning() = &lt;span style="color: rgb(0, 0, 255);"&gt;Nothing&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   7:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt; streamids &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;String&lt;/span&gt;() = &lt;span style="color: rgb(0, 0, 255);"&gt;Nothing&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   8:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt; mimeType &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;String&lt;/span&gt; = &lt;span style="color: rgb(0, 0, 255);"&gt;Nothing&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   9:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt; encoding &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;String&lt;/span&gt; = &lt;span style="color: rgb(0, 0, 255);"&gt;Nothing&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  10:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt; extension &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;String&lt;/span&gt; = &lt;span style="color: rgb(0, 0, 255);"&gt;Nothing&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  11:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;Dim&lt;/span&gt; bytes &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Byte&lt;/span&gt;()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  12:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;Try&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  13:&lt;/span&gt;         &lt;span style="color: rgb(0, 128, 0);"&gt;'create new pdf file&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  14:&lt;/span&gt;         bytes = &lt;span style="color: rgb(0, 0, 255);"&gt;Me&lt;/span&gt;.ResumePrintViewer.LocalReport.Render(&lt;span style="color: rgb(0, 96, 128);"&gt;"PDF"&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;Nothing&lt;/span&gt;, mimeType, encoding, extension, streamids, warnings)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  15:&lt;/span&gt;  &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  16:&lt;/span&gt;         &lt;span style="color: rgb(0, 128, 0);"&gt;'Set the appropriate ContentType.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  17:&lt;/span&gt;         Response.ContentType = &lt;span style="color: rgb(0, 96, 128);"&gt;"Application/pdf"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  18:&lt;/span&gt;  &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  19:&lt;/span&gt;         &lt;span style="color: rgb(0, 128, 0);"&gt;'Write the file directly to the HTTP output stream.&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  20:&lt;/span&gt;         Response.BinaryWrite(bytes)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  21:&lt;/span&gt;         Response.&lt;span style="color: rgb(0, 0, 255);"&gt;End&lt;/span&gt;()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  22:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;Catch&lt;/span&gt; ex &lt;span style="color: rgb(0, 0, 255);"&gt;As&lt;/span&gt; Exception&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  23:&lt;/span&gt;         &lt;span style="color: rgb(0, 128, 0);"&gt;'this throws a threading exception&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  24:&lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;End&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;Try&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;  &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;  25:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Instead of using a streamwriter, I'm using the BinaryWrite method and passing in the bytes from the ReportViewer.LocalReport.Render() method.  With some error handling this process is done.  &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This method turned the six click process into a three click process.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Click print on the page &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Click print in adobe &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;...and then confirm the print options. &lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Hopefully this helps you, it certainly has helped me.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-3433487907825111616?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/3433487907825111616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=3433487907825111616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/3433487907825111616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/3433487907825111616'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2008/09/rendering-srs-report-as-pdf.html' title='Rendering an SRS report as pdf'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-3147480524692127160</id><published>2008-08-21T21:59:00.000-05:00</published><updated>2009-02-27T21:17:57.425-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IE Hack'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><title type='text'>Page flicker in IE fixed by FAJAX</title><content type='html'>&lt;p&gt;I just wanted to drop a quick note about a great solution to a common problem in ASP.NET web development.  I'm currently building an intranet site at work that will be used to distribute Human Resource information to employees all over the world.   This week, the designer delivered all of the artwork and a template layout for the site.  I plugged my very non-designer site into the template and with a few tweaks had it up and running.  (I wish I could work with a designer on all of my Asp.Net projects.)&lt;/p&gt;  &lt;p&gt;After I deployed the site, for some reason, I really started to notice the page flicker when the page was posting back.  At first I thought it was due to poor connectivity on the dev server, but then everyone that was testing the site started reporting the problem.  Nothing had change except for the new design.  Actually the pages had shrunk in size b/c the large ugly logo that I had designed had been replaced with a new streamlined look.  This is a typical site, with one master page and about 8 content pages.  There was nothing fancy going on in the page itself, so what was the problem?&lt;/p&gt;  &lt;p&gt;One of my co-worker noted that it probably wouldn't have the flickering problem in firefox, and he was right.  So after a few hours of googling and messing around with ajax, I finally stumbled across &lt;a href="http://weblogs.asp.net/stefansedich/archive/2008/01/31/stop-ie-flickering-between-pages.aspx"&gt;this&lt;/a&gt; blog entry on Stefan Sedich's blog.  He suggests putting the following two lines in the &amp;lt;head&amp;gt; tag of the HTML page.&lt;/p&gt;  &lt;div&gt;   &lt;div   style="border-style: none; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;     &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt;font-family:consolas,'Courier New',courier,monospace;font-size:8pt;color:white;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;meta&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;http-equiv&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Page-Enter"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;content&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="blendTrans(Duration=0)"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;   &lt;pre   style="border-style: none; margin: 0em; padding: 0px; overflow: visible; width: 100%; color: black; line-height: 12pt; background-color: rgb(244, 244, 244);font-family:consolas,'Courier New',courier,monospace;font-size:8pt;"&gt;&lt;span style="color: rgb(96, 96, 96);"&gt;   2:&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;meta&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;http-equiv&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="Page-Exit"&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;content&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;="blendTrans(Duration=0)"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;It's very simple, and it worked.  I added the above two lines to my master page, and all of a sudden the flickering was gone.  Thanks Stefan, you saved me with this one.  If you want to find out more about what blendTrans can do, just  google fajax (fake ajax) and you will find a ton of entries about it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-3147480524692127160?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/3147480524692127160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=3147480524692127160' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/3147480524692127160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/3147480524692127160'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2008/08/page-flicker-in-ie-fixed-by-fajax.html' title='Page flicker in IE fixed by FAJAX'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-6580009337131721595</id><published>2008-07-31T22:01:00.000-05:00</published><updated>2009-02-27T21:18:52.139-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IoC'/><category scheme='http://www.blogger.com/atom/ns#' term='Windsor'/><title type='text'>ioc, Windsor and WorkoutQ</title><content type='html'>&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Inversion_of_Control"&gt;Inversion of control&lt;/a&gt; (IoC) containers have really started to pop up on my radar lately.&amp;#160; I've been hearing about them at work, have been reading about them on blogs for a while now, and I think IoC containers have been talked about on almost all of the podcasts that I follow. (&lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=362"&gt;here&lt;/a&gt;, and &lt;a href="http://altnetpodcast.com/episodes/6-more-di-and-ioc"&gt;here&lt;/a&gt; are two recent shows that i can remember)&amp;#160; IoC Containers really&amp;#160; peaked my interest (big surprise here) when &lt;a href="http://blog.wekeroad.com/mvc-storefront/mvcstore-part-13/"&gt;Rob Conery&lt;/a&gt; added structure map to the MVC Commerce starter kit.&amp;#160; I finally got to see someone walk through the process with a seasoned pro, or should I say, THE pro and inventor of one of the many IoC containers out there, &lt;a href="http://codebetter.com/blogs/jeremy.miller/"&gt;Jeremy Miller&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;So why does an IoC container make since for workoutq? Well first of all, I've been using workoutQ as my training grounds for a lot of good habits, TDD being just one of them.&amp;#160; TDD really makes you practice good object orientated principles&amp;#160; like separation of concerns, and Inversion of Control.&amp;#160; So what I've noticed, is that as I'm building my classes, I end up with&amp;#160; dependencies that need to be injected into the constructors of my objects.&amp;#160; Eventually these dependencies bubble way up to the top layer of the app, which ends up having to instantiate all of the objects in the dependency chain.&amp;#160;&amp;#160; So I have an IWorkoutRepository that is injected into the IWorkoutService which is injected into the WorkoutController.&amp;#160; So when instantiating the controller I not only have to know about its dependencies, but I need to know about its dependencies dependencies and so on.&amp;#160; So my WorkoutController constructor looks like this right now:&lt;/p&gt;  &lt;div&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;readonly&lt;/span&gt; IWorkoutService _service;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   2:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   3:&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; WorkoutController()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   4:&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   5:&lt;/span&gt;     &lt;span style="color: rgb(0,128,0)"&gt;//TODO Look into IoC container to do this for  me!!&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   6:&lt;/span&gt;     _service = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; WorkoutService(&lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; TestWorkoutRepository());&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   7:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Notice the new WorkoutService which takes a new TestWorkoutRepository.&amp;#160; What I've learned is that when you end up in this scenario, an IoC container is a good fit.&amp;#160; For WorkoutQ, I decided not to copy Rob exactly, (after all what fun would that be?)&amp;#160; so Instead of using &lt;a href="http://structuremap.sourceforge.net/Default.htm"&gt;Structuremap&lt;/a&gt; I'm going to let &lt;a href="http://www.castleproject.org/"&gt;Castle Windsor&lt;/a&gt; inject my dependencies for me.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;First things first, where do you start?&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;For starters you'll need to &lt;a href="http://www.castleproject.org/"&gt;download the Castle project&lt;/a&gt; and reference Castle.Core, Castle.MicroKernal, and Castle.Windsor.&amp;#160; There are quite a few samples that come with the castle project, and I highly recommend looking them over.&amp;#160; Again, this is my first time to use an IoC container, and I found the tutorials very helpful.&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Next you'll need to find the place in your application to setup the container, and since all of my components are application specific, I'm going to use the Application_Start() in the global.asax.&amp;#160; So far, my global.asax page is only used to register my routes (and test them thanks phil):&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;protected&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Application_Start()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   2:&lt;/span&gt;        {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   3:&lt;/span&gt;            RegisterRoutes(RouteTable.Routes);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   4:&lt;/span&gt;    &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   5:&lt;/span&gt;            &lt;span style="color: rgb(0,128,0)"&gt;//Thanks Phil Haak&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   6:&lt;/span&gt;            &lt;span style="color: rgb(0,128,0)"&gt;//RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   7:&lt;/span&gt;        }&lt;/pre&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now that we know where we want to create the container, the next step is to actually configure the container, and configure workoutQ to use it.&amp;#160; Using the Castle samples as our example, lets instantiate the container, and add the components using the API:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: rgb(244,244,244)"&gt;&lt;br /&gt;  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;protected&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Application_Start()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   2:&lt;/span&gt;        {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   3:&lt;/span&gt;            RegisterRoutes(RouteTable.Routes);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   4:&lt;/span&gt;    &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   5:&lt;/span&gt;            var _container = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; WindsorContainer();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   7:&lt;/span&gt;            _container.AddComponent(&lt;span style="color: rgb(0,96,128)"&gt;&amp;quot;workoutService&amp;quot;&lt;/span&gt;, &lt;span style="color: rgb(0,0,255)"&gt;typeof&lt;/span&gt;(IWorkoutService), &lt;span style="color: rgb(0,0,255)"&gt;typeof&lt;/span&gt;(WorkoutService));&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   8:&lt;/span&gt;            _container.AddComponent(&lt;span style="color: rgb(0,96,128)"&gt;&amp;quot;workoutRepository&amp;quot;&lt;/span&gt;, &lt;span style="color: rgb(0,0,255)"&gt;typeof&lt;/span&gt;(IWorkoutRepository), &lt;span style="color: rgb(0,0,255)"&gt;typeof&lt;/span&gt;(TestWorkoutRepository));&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   9:&lt;/span&gt;            _container.AddComponent(&lt;span style="color: rgb(0,96,128)"&gt;&amp;quot;workoutcontroller&amp;quot;&lt;/span&gt;, &lt;span style="color: rgb(0,0,255)"&gt;typeof&lt;/span&gt;(WorkoutController));&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  10:&lt;/span&gt;            _container.AddComponent(&lt;span style="color: rgb(0,96,128)"&gt;&amp;quot;homecontroller&amp;quot;&lt;/span&gt;, &lt;span style="color: rgb(0,0,255)"&gt;typeof&lt;/span&gt;(HomeController));&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  11:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  12:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  13:&lt;/span&gt;            &lt;span style="color: rgb(0,128,0)"&gt;//Thanks Phil Haak&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  14:&lt;/span&gt;            &lt;span style="color: rgb(0,128,0)"&gt;//RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  15:&lt;/span&gt;        }&lt;/pre&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;As the code shows, I've added the WorkoutService, TestWorkoutRepository, and my two controllers, WorkoutController and HomeController.&amp;#160; And that's it, windsor now knows that when it's asked for and IWorkoutService, that it should instantiate and return a reference to the concrete WorkoutService:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: rgb(244,244,244)"&gt;&lt;br /&gt;  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;class&lt;/span&gt; WorkoutService : IWorkoutService&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   3:&lt;/span&gt;     &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;readonly&lt;/span&gt; IWorkoutRepository _repository;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   5:&lt;/span&gt;     &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; WorkoutService(IWorkoutRepository repository)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   7:&lt;/span&gt;         _repository = repository;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   8:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   9:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  10:&lt;/span&gt;     &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; IQueryable&amp;lt;Workout&amp;gt; GetWorkouts()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  11:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  12:&lt;/span&gt;         var workouts = _repository.GetWorkouts();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  13:&lt;/span&gt;         &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; workouts;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  14:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  15:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  16:&lt;/span&gt;     &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; SaveWorkout(Workout workout)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  17:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  18:&lt;/span&gt;         _repository.SaveWorkout(workout);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  19:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  20:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;What makes Windsor even cooler, is that it will also notice that the WorkoutService needs an IWorkoutRepository, so it will instantiate the TestWorkoutRepository that is configured in the container, then inject it into the WorkoutService constructor, and then hand back the reference.&amp;#160; Pretty cool if you ask me.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Next I'm going to remove the default constructor of the WorkoutController and replace it with this:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; WorkoutController(IWorkoutService service)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   3:&lt;/span&gt;     _service = service;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   4:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;So now, the Controller will have to have an IWorkoutService injected.&amp;#160; Windsor should be able to take care of the entire dependency chain, so let's build it and see what happens. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_2vsBDUpb9uE/SaipShls4vI/AAAAAAAAALY/lp3hajgxjNY/s1600-h/NoParameterlessConstructor4.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="280" alt="NoParameterlessConstructor" src="http://lh6.ggpht.com/_2vsBDUpb9uE/SaipTfI0JqI/AAAAAAAAALc/5z6H7BPocps/NoParameterlessConstructor_thumb2.jpg?imgmax=800" width="400" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Oops, a configured container is useless until you use it.&amp;#160; So now what; how do I intercept the controller instantiation and use Windsor to control its instantiation?&amp;#160; Well it turns out that with MVC it's not that difficult.&amp;#160; You basically create a class that inherits from the DefaultControllerFactory and set it as the default controller.&amp;#160; Again there are a lot of examples on the net, but &lt;a href="http://haacked.com/archive/2007/12/07/tdd-and-dependency-injection-with-asp.net-mvc.aspx"&gt;this blog from Phil Haak&lt;/a&gt; , and the &lt;a href="http://www.codeplex.com/MVCContrib"&gt;mvccontrib&lt;/a&gt; project pointed me in the right direction. So you'll need something like this WindsorControllerFactory:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: rgb(244,244,244)"&gt;&lt;br /&gt;  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;class&lt;/span&gt; WindsorControllerFactory : DefaultControllerFactory&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   3:&lt;/span&gt;     &lt;span style="color: rgb(0,0,255)"&gt;private&lt;/span&gt; IWindsorContainer _container;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   5:&lt;/span&gt;     &lt;span style="color: rgb(0,0,255)"&gt;public&lt;/span&gt; WindsorControllerFactory(IWindsorContainer container)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   7:&lt;/span&gt;         &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (container == &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   8:&lt;/span&gt;         {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   9:&lt;/span&gt;             &lt;span style="color: rgb(0,0,255)"&gt;throw&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; ArgumentNullException(&lt;span style="color: rgb(0,96,128)"&gt;&amp;quot;container&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  10:&lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  11:&lt;/span&gt;         _container = container;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  12:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  13:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  14:&lt;/span&gt;     &lt;span style="color: rgb(0,0,255)"&gt;protected&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;override&lt;/span&gt; IController CreateController(RequestContext context, &lt;span style="color: rgb(0,0,255)"&gt;string&lt;/span&gt; controllerName)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  15:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  16:&lt;/span&gt;         controllerName = controllerName.ToLower() + &lt;span style="color: rgb(0,96,128)"&gt;&amp;quot;controller&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  17:&lt;/span&gt;         &lt;span style="color: rgb(0,0,255)"&gt;return&lt;/span&gt; (IController)_container.Resolve(controllerName);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  18:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  19:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  20:&lt;/span&gt;     &lt;span style="color: rgb(0,0,255)"&gt;protected&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;override&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; DisposeController(IController controller)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  21:&lt;/span&gt;     {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  22:&lt;/span&gt;         var disposable = controller &lt;span style="color: rgb(0,0,255)"&gt;as&lt;/span&gt; IDisposable;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  23:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  24:&lt;/span&gt;         &lt;span style="color: rgb(0,0,255)"&gt;if&lt;/span&gt; (disposable != &lt;span style="color: rgb(0,0,255)"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  25:&lt;/span&gt;         {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  26:&lt;/span&gt;             disposable.Dispose();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  27:&lt;/span&gt;         }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  28:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  29:&lt;/span&gt;         _container.Release(controller);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  30:&lt;/span&gt;     }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  31:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;And then you'll need to register the WindsorControllerFactory as the default factory in your Global.asax file and pass in the container.&amp;#160; So the Application_Start() now looks like this:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; background-color: rgb(244,244,244)"&gt;&lt;br /&gt;  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   1:&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;protected&lt;/span&gt; &lt;span style="color: rgb(0,0,255)"&gt;void&lt;/span&gt; Application_Start()&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   3:&lt;/span&gt;     RegisterRoutes(RouteTable.Routes);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   5:&lt;/span&gt;     var _container = &lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; WindsorContainer();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   7:&lt;/span&gt;     _container.AddComponent(&lt;span style="color: rgb(0,96,128)"&gt;&amp;quot;workoutService&amp;quot;&lt;/span&gt;, &lt;span style="color: rgb(0,0,255)"&gt;typeof&lt;/span&gt;(IWorkoutService), &lt;span style="color: rgb(0,0,255)"&gt;typeof&lt;/span&gt;(WorkoutService));&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   8:&lt;/span&gt;     _container.AddComponent(&lt;span style="color: rgb(0,96,128)"&gt;&amp;quot;workoutRepository&amp;quot;&lt;/span&gt;, &lt;span style="color: rgb(0,0,255)"&gt;typeof&lt;/span&gt;(IWorkoutRepository), &lt;span style="color: rgb(0,0,255)"&gt;typeof&lt;/span&gt;(TestWorkoutRepository));&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;   9:&lt;/span&gt;     _container.AddComponent(&lt;span style="color: rgb(0,96,128)"&gt;&amp;quot;workoutcontroller&amp;quot;&lt;/span&gt;, &lt;span style="color: rgb(0,0,255)"&gt;typeof&lt;/span&gt;(WorkoutController));&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  10:&lt;/span&gt;     _container.AddComponent(&lt;span style="color: rgb(0,96,128)"&gt;&amp;quot;homecontroller&amp;quot;&lt;/span&gt;, &lt;span style="color: rgb(0,0,255)"&gt;typeof&lt;/span&gt;(HomeController));&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  11:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  12:&lt;/span&gt;     ControllerBuilder.Current.SetControllerFactory(&lt;span style="color: rgb(0,0,255)"&gt;new&lt;/span&gt; WindsorControllerFactory(_container));&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  13:&lt;/span&gt;&amp;#160; &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  14:&lt;/span&gt;     &lt;span style="color: rgb(0,128,0)"&gt;//Thanks Phil Haak&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  15:&lt;/span&gt;     &lt;span style="color: rgb(0,128,0)"&gt;//RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; border-right-style: none; border-left-style: none; background-color: rgb(244,244,244); border-bottom-style: none"&gt;&lt;span style="color: rgb(96,96,96)"&gt;  16:&lt;/span&gt; }&lt;/pre&gt;&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;So let's give it a shot now...&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_2vsBDUpb9uE/SaipT3bLccI/AAAAAAAAALg/rPXQPgvCYXo/s1600-h/ItWorks3.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="330" alt="ItWorks" src="http://lh6.ggpht.com/_2vsBDUpb9uE/SaipUdCYfVI/AAAAAAAAALk/uQI8mkJAajo/ItWorks_thumb1.jpg?imgmax=800" width="503" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;It worked!!! the above screen shot is a view rendered by the WorkoutController, which is displaying the data from my TestWorkoutRepository, which is passed to the controller via the WorkoutService.&amp;#160; Goodbye &amp;quot;new&amp;quot;, and hello Windsor. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I have to confess, I was only able to spend a few hours at a time over the past few weeks on this, and it was very frustrating at first.&amp;#160; I was having all sorts of issues getting this to work, but as soon as I started looking at the sample projects that came with the castle project download, everything started to click.&amp;#160; After I started to grasp the different concepts, it took me all of an hour to get it running.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-6580009337131721595?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/6580009337131721595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=6580009337131721595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/6580009337131721595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/6580009337131721595'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2008/07/ioc-windsor-and-workoutq.html' title='ioc, Windsor and WorkoutQ'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_2vsBDUpb9uE/SaipTfI0JqI/AAAAAAAAALc/5z6H7BPocps/s72-c/NoParameterlessConstructor_thumb2.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-8659720865363213096</id><published>2008-05-27T22:05:00.000-05:00</published><updated>2009-03-24T08:06:57.922-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>ChewyQ - My First Post</title><content type='html'>So here it is.  My first blog entry on my first public domain.  Since nobody is reading this, it doesn't really matter what I say now, but I thought I would start off with who I am and what I plan to blog about in the future.   &lt;p&gt;&lt;span style="font-weight: bold;"&gt;So here's me:&lt;/span&gt;  I am 31, married (5+years), and have an incredible son who is 1.5 years old.  I've been working in the Technology Industry for about 10 years now and have been primarily focused on software development for the past 3.5 years.  Back in the late 90's I got introduced to classic asp, and SQL when my office decided to implement an eCommerce solution.  The site didn't turn out to be that successful for my company, but it was a gold mine of knowledge for me.  It was the project that introduced me to development.  I messed around with building applications and web sites as a hobby for the next few years, dabbled with .Net 1.1, and then took a job as Consultant/ developer in 2005.  I walked right into what turned out to be a pretty large .Net 2.0/ ASP.Net project and have never looked back.  Back in 2003 I decided that I needed to finish college and after 4 years of Night school I graduated from UHD with a Finance degree.  Which brings me here, one year later, writing my first blog. &lt;/p&gt;   &lt;p&gt;&lt;span style="font-weight: bold;"&gt;The last year: &lt;/span&gt;After school was out I got back to being a husband and new father.  Life was great, and I found myself enjoying my time.  Then after a few months I started to crave knowledge.  I missed school, and really missed learning new things.  So last September I decided that it was time that I really started to put some effort into becoming really good at developing software.  I started to read, read, and read some more.  A guy in our Austin office took me under his wing, and sent me his blog list.  This turned out to be a huge step.  He's turned out to be a huge stepping stone for me, and has played a huge part in pointing me to great resources.  All of the sudden i was trying to cram TDD, BDD, Domain driven design, OO Principles, IoC, ORM's, and anything else into my head.  I realized that for the past few years, I had just been using the tools and didn't have a true understanding of how to design and develop software.  I started to see that it was more of an art form than a hobby, and most of all, I learned that I was way behind everyone else...or at least that's how it seems.  &lt;/p&gt;   &lt;p&gt;&lt;span style="font-weight: bold;"&gt;My Plan: &lt;/span&gt; I guess my primary purpose for this blog is to use it to help me formalize my thoughts on software development.  I plan to share my ideas on patterns and practices, and will write about things that I find interesting at work.  Most importantly I plan to use this as my home base in the development community.  My hope is that this site will be helpful to you, and that you will help me through the learning process.&lt;/p&gt;   &lt;p&gt;kl&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-8659720865363213096?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/8659720865363213096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=8659720865363213096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/8659720865363213096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/8659720865363213096'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2008/05/chewyq-my-first-post.html' title='ChewyQ - My First Post'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8597123411962258877.post-1249610002514390595</id><published>2008-03-02T07:49:00.000-06:00</published><updated>2008-03-02T07:50:55.196-06:00</updated><title type='text'>Hello World</title><content type='html'>This is a hello world post.&lt;br /&gt;&lt;br /&gt;wasn't that interesting?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8597123411962258877-1249610002514390595?l=blog.qteko.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.qteko.com/feeds/1249610002514390595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8597123411962258877&amp;postID=1249610002514390595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/1249610002514390595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8597123411962258877/posts/default/1249610002514390595'/><link rel='alternate' type='text/html' href='http://blog.qteko.com/2008/03/hello-world.html' title='Hello World'/><author><name>Kevin Lee</name><uri>http://www.blogger.com/profile/08906712958416981842</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_2vsBDUpb9uE/Si_V8UNZX-I/AAAAAAAAAOM/UlI1azBOnpg/S220/IMG_7980_50.gif'/></author><thr:total>0</thr:total></entry></feed>
