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

<channel>
	<title>Elegant Code &#187; Software Development</title>
	<atom:link href="http://elegantcode.com/tag/software-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://elegantcode.com</link>
	<description></description>
	<lastBuildDate>Sun, 12 Feb 2012 04:40:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>The Future of .NET</title>
		<link>http://elegantcode.com/2008/06/02/the-future-of-net/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-future-of-net</link>
		<comments>http://elegantcode.com/2008/06/02/the-future-of-net/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 18:17:40 +0000</pubDate>
		<dc:creator>Jan Van Ryswyck</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/02/the-future-of-net/</guid>
		<description><![CDATA[That&#8217;s the title of the latest .NET Rocks episode. No big deal, just one of the better podcast episodes out there. Microsoft, are you listening? Maybe you should put your chairman on a stage on one of your next big developer conferences, screaming out maintainability, maintainability, maintainability! Let the ASP.NET MVC framework be your first [...]]]></description>
			<content:encoded><![CDATA[<p>That&#8217;s the title of <a href="http://www.dotnetrocks.com/default.aspx?showNum=346" target="_blank">the latest .NET Rocks episode</a>. No big deal, just one of the better podcast episodes out there. Microsoft, are you listening? Maybe you should put your chairman on a stage on one of your next big developer conferences, screaming out <a href="http://vanryswyckjan.blogspot.com/2007/01/maintainable-code.html" target="_blank">maintainability</a>, <a href="http://codebetter.com/blogs/jeremy.miller/archive/2006/12/06/On-Writing-Maintainable-Code.aspx" target="_blank">maintainability</a>, <a href="http://elegantcode.com/2008/03/30/elegant-code-essay-contest-winner/" target="_blank">maintainability</a>! Let the ASP.NET MVC framework be your first big success and your guide on the path for providing us developers some tools and most important, some patterns &amp; practices for creating more maintainable software.</p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/02/the-future-of-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Backlog estimation photos</title>
		<link>http://elegantcode.com/2008/06/01/backlog-estimating-photos/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=backlog-estimating-photos</link>
		<comments>http://elegantcode.com/2008/06/01/backlog-estimating-photos/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 05:23:57 +0000</pubDate>
		<dc:creator>Jarod Ferguson</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/06/01/backlog-estimating-photos/</guid>
		<description><![CDATA[Over the years my company has acquired several companies products which do the same thing, in different technologies. They are all aging and becoming very difficult to maintain (gross understatement here). My current project is taking &#8220;like&#8221; functionality out of the products and creating a new platform in order to migrate our customer base and [...]]]></description>
			<content:encoded><![CDATA[<p>Over the years my company has acquired several <strike>companies</strike> products which do the same thing, in different technologies. They are all aging and becoming very difficult to maintain (gross understatement here). My current project is taking &#8220;like&#8221; functionality out of the products and creating a new platform in order to migrate our customer base and deprecate the old applications.</p>
<p><span id="more-1182"></span></p>
<p>Our organization is fairly new to Agile/SCRUM. We have always struggled to create the master backlog for this project. Along with adapting to a new process, it has been especially challenging for our product owners to consider the 60,000+ customers in which they proxy for. </p>
<p>The project is 16 iterations in (2 week), we are making great progress and are trying to finalize the vision of our first release. Over the past 3 weeks our product owners &amp; scrum masters took over a conference room and flushed out the remaining backlog items for our first delivery. As you can imagine it was a very tedious task, but I for one am extremely excited about the results. No it is not perfect, Yes there will be changes, but its great to visualize what we are trying to do in its entirety. </p>
<p>This last week the teams were brought in to do estimations and tweak stories (combine/split) to complete the backlog. Here are a few photos from the last 15 minutes on Friday as we were finishing up. </p>
<p>Chickens!</p>
<p><a href="http://elegantcode.com/wp-content/uploads/2008/06/211743984133.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="211743984133" src="http://elegantcode.com/wp-content/uploads/2008/06/211743984133-thumb.jpg" width="184" border="0"></a> </p>
<p>Here is our awesome Scrum Master John P in action</p>
<p><a href="http://elegantcode.com/wp-content/uploads/2008/06/211746898949.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="211746898949" src="http://elegantcode.com/wp-content/uploads/2008/06/211746898949-thumb.jpg" width="184" border="0"></a> </p>
<p>Windows are great with sticky cards</p>
<p><a href="http://elegantcode.com/wp-content/uploads/2008/06/211743621381.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="211743621381" src="http://elegantcode.com/wp-content/uploads/2008/06/211743621381-thumb.jpg" width="184" border="0"></a> </p>
<p>We use planning poker (fibonacci seq) for estimations, here is my sweet deck. You also have to take note of the orange with the painted face in the coffee cup. He is our bad mojo orange, so anytime you are getting frustrated there is a big scene and you have to touch the orange to remove your evil thoughts. Though by the end of the week it was kind of getting gross. </p>
<p><a href="http://elegantcode.com/wp-content/uploads/2008/06/211744660229.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="211744660229" src="http://elegantcode.com/wp-content/uploads/2008/06/211744660229-thumb.jpg" width="184" border="0"></a> </p>
<p>And this is what happens when your test engineers are trapped in a room with markers for a long period of time</p>
<p><a href="http://elegantcode.com/wp-content/uploads/2008/06/211745007877.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="211745007877" src="http://elegantcode.com/wp-content/uploads/2008/06/211745007877-thumb.jpg" width="184" border="0"></a> </p>
<p>And of course my favorite card, inspired by &#8220;doodle the developer&#8221; (Aka Steve J). It works nicely in place of the &#8216;Infinity&#8217; card.</p>
<p><a href="http://elegantcode.com/wp-content/uploads/2008/06/211743264901.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="211743264901" src="http://elegantcode.com/wp-content/uploads/2008/06/211743264901-thumb.jpg" width="184" border="0"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/06/01/backlog-estimating-photos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>What I&#8217;m looking forward to in .net 3.5 Service Pack 1</title>
		<link>http://elegantcode.com/2008/05/13/what-im-looking-forward-to-in-net-35-service-pack-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=what-im-looking-forward-to-in-net-35-service-pack-1</link>
		<comments>http://elegantcode.com/2008/05/13/what-im-looking-forward-to-in-net-35-service-pack-1/#comments</comments>
		<pubDate>Tue, 13 May 2008 21:02:47 +0000</pubDate>
		<dc:creator>Chris Brandsma</dc:creator>
				<category><![CDATA[.Net 3.5]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/05/13/what-im-looking-forward-to-in-net-35-service-pack-1/</guid>
		<description><![CDATA[So .net 3.5 service pack 1 has been announced, but not released, with a large host of new features.&#160; (Isn&#8217;t a service pack just supposed to fix things, not release a host of new stuff&#8230;not that I mind). What am I looking forward to: * Visual Studio Speed improvements.&#160; Nuff said.&#160; Please keep making it [...]]]></description>
			<content:encoded><![CDATA[<p>So .net 3.5 service pack 1 has been announced, but not released, with a large host of new features.&nbsp; (Isn&#8217;t a service pack just supposed to fix things, not release a host of new stuff&#8230;not that I mind).</p>
<h2>What am I looking forward to:</h2>
<p>* <strong>Visual Studio Speed improvements</strong>.&nbsp; Nuff said.&nbsp; Please keep making it faster.</p>
<p>* <strong>SQL Server 2008 features in LINQ 2 SQL. </strong> I just did a big demo of SQL Server 2008 T-SQL changes for <a href="http://www.bsdg.org">BSDG</a>, and the one thing I was not able to do was really show off the new features.&nbsp; How do you use the HierarchyID in LINQ2SQL right now?&nbsp; With stored procedures.&nbsp; I&#8217;m hoping this release will fix that.</p>
<p>Also, this pretty well determines when SP1 will release: at the same time as SQL Server 2008.&nbsp; If you listen to <a href="http://www.dotnetrocks.com/default.aspx?showNum=340">.Net Rock show 340</a>, they say that a SQL Server 2008 release is imminent.&nbsp; Which could mean anything.</p>
<p>* <strong>Routing for ASP.Net.</strong> We aren&#8217;t talking about Routing for ASP.Net MVC Framework, but regular old WebForms.&nbsp; I love this.</p>
<p>* <strong>Cold start performance improvements.</strong>&nbsp; One part of working with .net that kind of sucks is the cold start.&nbsp;&nbsp; Someone boots up their computer and starts your application, which take forever to load.&nbsp; Then the next time you load, it boots right up.&nbsp;&nbsp; According to Scott Guthrie the are seeing up to a 40% performance increase.</p>
<h2>What I&#8217;m interested in:</h2>
<p>Here are some new features I&#8217;m interested in, but I don&#8217;t expect to jump on right away.</p>
<p>* <strong>Dynamic Data.</strong> Much has been <a href="http://www.hanselman.com/blog/PuttingASPNETDynamicDataIntoContext.aspx">said about this already</a>.&nbsp; I will be looking into it.&nbsp; There is scaffolding support in there, as well as a lot more.&nbsp; Plus it can be used with multiple ORM solutions.&nbsp; I believe LLBLGen will have support, and <a href="http://www.hanselman.com/blog/VS2008AndNet35SP1BetaShouldYouFearThisRelease.aspx">Scott Hanselman said</a> NHibernate support was also being worked on.&nbsp; I suspect SubSonic in there somewhere as well.</p>
<p>* <strong>Entities Framework.</strong>&nbsp; I&#8217;m always looking for better ways of getting data from a database.&nbsp; While this doesn&#8217;t seem better than some of my current tools (NHibernate, SubSonic, LINQ2SQL), I&#8217;m keeping an eye on this one.&nbsp; If you read down <a href="http://weblogs.asp.net/scottgu/archive/2008/05/12/visual-studio-2008-and-net-framework-3-5-service-pack-1-beta.aspx">Scott Guthrie&#8217;s blog comments</a>, you will also see that Oracle will be supported with Entities Framework.</p>
<p>* <strong>Microsoft AJAX Stuff.</strong> I&#8217;m using JQuery for more of this right now, but there are some enhancements to the ScriptManager coming.&nbsp; And JQuery or no JQuery, I still use the ScriptManager.</p>
<p>* <strong>Improved Client Distribution.</strong> While I mainly blog about Asp.Net, I also work with WinForms.&nbsp; And in WinForms, .Net Framework distribution is always a hot topic.&nbsp; Better bootstrappers, improved ClickOnce.&nbsp; Give me everything you got.&nbsp; One key feature: they made it smaller.</p>
<p>* <strong>More WinForms Controls.</strong>&nbsp; These are actually some of the Visual Basic.Net PowerPack controls.&nbsp; Thank you.</p>
<p>* <strong>WPF Stuff.</strong>&nbsp; I having had the opportunity to really get into WPF yet, but the time will come.</p>
<p>&nbsp;</p>
<p>OK, that is all that I&#8217;m going to list.&nbsp; There really is a lot out there for a Service Pack.&nbsp; But one quick note: this is beta.&nbsp; And this is one beta I&#8217;m not installing yet &#8212; but I will as soon as it is released.&nbsp; </p>
<p>If you are looking for more information, check out these articles:</p>
<p>Scott Guthrie: <a title="http://weblogs.asp.net/scottgu/archive/2008/05/12/visual-studio-2008-and-net-framework-3-5-service-pack-1-beta.aspx" href="http://weblogs.asp.net/scottgu/archive/2008/05/12/visual-studio-2008-and-net-framework-3-5-service-pack-1-beta.aspx">http://weblogs.asp.net/scottgu/archive/2008/05/12/visual-studio-2008-and-net-framework-3-5-service-pack-1-beta.aspx</a></p>
<p>Brad Abrams: <a title="http://blogs.msdn.com/brada/archive/2008/05/05/visual-studio-2008-and-net-framework-3-5-sp1-beta.aspx" href="http://blogs.msdn.com/brada/archive/2008/05/05/visual-studio-2008-and-net-framework-3-5-sp1-beta.aspx">http://blogs.msdn.com/brada/archive/2008/05/05/visual-studio-2008-and-net-framework-3-5-sp1-beta.aspx</a></p>
<p>Scott Hanselman: <a title="http://www.hanselman.com/blog/VS2008AndNet35SP1BetaShouldYouFearThisRelease.aspx" href="http://www.hanselman.com/blog/VS2008AndNet35SP1BetaShouldYouFearThisRelease.aspx">http://www.hanselman.com/blog/VS2008AndNet35SP1BetaShouldYouFearThisRelease.aspx</a></p>
<p>Tim Sneath: <a title="http://blogs.msdn.com/tims/archive/2008/05/12/introducing-the-third-major-release-of-windows-presentation-foundation.aspx" href="http://blogs.msdn.com/tims/archive/2008/05/12/introducing-the-third-major-release-of-windows-presentation-foundation.aspx">http://blogs.msdn.com/tims/archive/2008/05/12/introducing-the-third-major-release-of-windows-presentation-foundation.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/05/13/what-im-looking-forward-to-in-net-35-service-pack-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alt.Net Seattle &#8211; Takeaway&lt;DDDD&gt;().Resources</title>
		<link>http://elegantcode.com/2008/04/30/altnet-seattle-takeawayddddresources/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=altnet-seattle-takeawayddddresources</link>
		<comments>http://elegantcode.com/2008/04/30/altnet-seattle-takeawayddddresources/#comments</comments>
		<pubDate>Thu, 01 May 2008 03:22:10 +0000</pubDate>
		<dc:creator>Jarod Ferguson</dc:creator>
				<category><![CDATA[alt.net]]></category>
		<category><![CDATA[Architecture and Design]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/04/30/altnet-seattle-takeawayddddresources/</guid>
		<description><![CDATA[As other attendees have alluded to, one of the better questions from that came from the session was &#8220;How do you move a team that&#8217;s used to working with a request/response architecture to a domain driven messaged based architecture?&#8221; I thought Martin Fowler answered the question very well: &#8220;Anything that causes a state change to [...]]]></description>
			<content:encoded><![CDATA[<p>As other attendees have alluded to, one of the better questions from that came from the <a href="http://elegantcode.com/2008/04/27/altnet-seattle-takeawayddddvideo/">session</a> was &#8220;How do you move a team that&#8217;s used to working with a request/response architecture to a domain driven messaged based architecture?&#8221;</p>
<p><span id="more-1125"></span></p>
<p>I thought Martin Fowler answered the question very well:
<p><em>&#8220;Anything that causes a state change to my world, my domain model… I capture in an object, you can think of it as a command object, I like to think of it as an event object. That object carries with it all the information about the kind of state change it might be. Then I have some way of processing it against my domain model to actually perform the change, but I still store and persist that event object as part of the record of what I’ve done.” DDDD video, 49:00ish</em>
<p>He are a couple of great articles from Martin&#8217;s site which elaborate on his statement, if you are interested in making the transition from request/response to messaging I recommend giving them both a thorough read. I am currently in the process of making the transition myself and I found them very helpful.
<p><a href="http://www.martinfowler.com/eaaDev/EventSourcing.html">Fowler &#8211; Event Sourcing</a></p>
<p><a href="http://www.martinfowler.com/eaaDev/EventCollaboration.html">Fowler &#8211; Event Collaboration</a>
<p>&nbsp;
<p>Also from the session came a great list of other reading materials, so bone up!
<p><a href="http://www.google.com/search?hl=en&amp;q=Pattern+Oriented+Software+Architecture&amp;btnG=Search">Pattern Oriented Software Architecture Books 1-4</a>
<p><a href="http://www.amazon.com/Distributed-Event-Based-Systems-Gero-M%C3%BChl/dp/3540326510/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1208908666&amp;sr=1-1">Enterprise Integration Patterns</a>&nbsp;
<p><a href="http://www.amazon.com/Distributed-Event-Based-Systems-Gero-M%C3%BChl/dp/3540326510/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1208908666&amp;sr=1-1">Domain Driven Design</a>&nbsp;
<p><a href="http://www.infoq.com/news/2006/12/domain-driven-design" target="_blank">Domain Driven Design Quickly</a> (Free 100 page compressed version in PDF provided by InfoQ)
<p><a href="http://www.amazon.com/Power-Events-Introduction-Processing-Distributed/dp/0201727897/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1208908750&amp;sr=1-1">Power of Events</a>
<p><a href="http://www.amazon.com/Distributed-Event-Based-Systems-Gero-M%C3%BChl/dp/3540326510/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1208908666&amp;sr=1-1">Distributed Event Based Systems</a>
<p><a href="http://www.amazon.com/Event-Based-Programming-Taking-Events-Limit/dp/1590596439">Event Based Programming</a>
<p><a href="http://www.amazon.com/Software-Architecture-Practice-Len-Bass/dp/0201199300">Software Architecture in Practice (weighing &#8216;ilities&#8217;)</a>
<p><a href="http://www.sei.cmu.edu/pub/documents/95.reports/pdf/tr021.95.pdf">SEI &#8211; Quality Attributes</a> (PDF)
<p>&nbsp;
<p>Thanks to all the attendees including <a href="http://www.lostechies.com/blogs/evan_hoff/">Evan Hoff</a>, <a href="http://udidahan.weblogs.us/">Udi Dahan</a> and <a href="http://codebetter.com/blogs/gregyoung/">Greg Young</a> for helping compile the great list of books you see above. (as well as their contributions to the conversation in general) </p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/04/30/altnet-seattle-takeawayddddresources/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Entity Framework Blogroll</title>
		<link>http://elegantcode.com/2008/03/15/entity-framework-blogroll/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=entity-framework-blogroll</link>
		<comments>http://elegantcode.com/2008/03/15/entity-framework-blogroll/#comments</comments>
		<pubDate>Sat, 15 Mar 2008 18:05:00 +0000</pubDate>
		<dc:creator>Jarod Ferguson</dc:creator>
				<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/03/15/entity-framework-blogroll/</guid>
		<description><![CDATA[For anyone who&#8217;s looking for more info on the Entity Framework, EDM, Astoria The Ado.Net Blog The Forum Danny Simmons Colin Meek Jaroslaw Kowalski Ju-Yi Kuo&#8217;s blog Alex James Zlatko Michailov OakLeaf Systems Andy Conrad (Astoria) Pablo Castro  (Astoria) Julie Lerman (EF, 3.5, Astoria, Silverlight, Blend) Mike Taulty  (EF, 3.5, Astoria, Silverlight, Blend)]]></description>
			<content:encoded><![CDATA[<p>For anyone who&#8217;s looking for more info on the Entity Framework, EDM, Astoria</p>
<p><a href="http://blogs.msdn.com/adonet/default.aspx"></a><a href="http://blogs.msdn.com/adonet/default.aspx"></a></p>
<p><a href="http://blogs.msdn.com/adonet/default.aspx">The Ado.Net Blog</a></p>
<p><a href="http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=533&amp;SiteID=1">The Forum</a></p>
<p><a href="http://blogs.msdn.com/dsimmons/default.aspx">Danny Simmons</a></p>
<p><a href="http://blogs.msdn.com/meek/">Colin Meek</a></p>
<p><a href="http://blogs.msdn.com/jkowalski/default.aspx">Jaroslaw Kowalski</a></p>
<p><a id="bp___v___ctl00_ctl00_bcr_bth___BlogTitle" class="headermaintitle" href="http://elegantcode.com/juyik/default.aspx">Ju-Yi Kuo&#8217;s blog</a></p>
<p><a href="http://blogs.msdn.com/alexj/default.aspx">Alex James</a></p>
<p><a href="http://blogs.msdn.com/esql/default.aspx">Zlatko Michailov</a></p>
<p><a href="http://oakleafblog.blogspot.com/">OakLeaf Systems</a></p>
<p><a href="http://blogs.msdn.com/aconrad/default.aspx">Andy Conrad</a> (Astoria)</p>
<p><a href="http://blogs.msdn.com/pablo/default.aspx">Pablo Castro</a>  (Astoria)</p>
<p><a href="http://www.thedatafarm.com/blog/">Julie Lerman</a> (EF, 3.5, Astoria, Silverlight, Blend)</p>
<p><a href="http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/default.aspx">Mike Taulty</a>  (EF, 3.5, Astoria, Silverlight, Blend)</p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/03/15/entity-framework-blogroll/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Butters Wonders About InfoPath 2007</title>
		<link>http://elegantcode.com/2008/02/18/butters-wonders-about-infopath-2007/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=butters-wonders-about-infopath-2007</link>
		<comments>http://elegantcode.com/2008/02/18/butters-wonders-about-infopath-2007/#comments</comments>
		<pubDate>Tue, 19 Feb 2008 05:37:05 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
				<category><![CDATA[Architecture and Design]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/02/18/butters-wonders-about-infopath-2007/</guid>
		<description><![CDATA[Butters, the wondering dog, is wondering today about her owner&#8217;s use of InfoPath 2007. Her owner has spent several days throwing together an InfoPath application for his employer and is quite happy with his work. Butters thinks that he should be ashamed because he is paid to be an &#8220;architect&#8221; and he has built an [...]]]></description>
			<content:encoded><![CDATA[<p>Butters, the wondering dog, is wondering today about her owner&#8217;s use of InfoPath 2007.<a href="http://elegantcode.com/wp-content/uploads/2008/02/butters-200w.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="180" alt="Butters 200W" src="http://elegantcode.com/wp-content/uploads/2008/02/butters-200w-thumb.jpg" width="240" align="right" border="0"></a> </p>
<p>Her owner has spent several days throwing together an InfoPath application for his employer and is quite happy with his work. Butters thinks that he should be ashamed because he is paid to be an &#8220;architect&#8221; and he has built an application his mother could probably get going in a pinch.</p>
<p>&#8220;But, Butters,&#8221; his owner exclaimed, &#8220;the point is to use the right tool for the job. I am just making a little form that business folks fill out and use to save XML documents. This is exactly what InfoPath is for, and it is so gosh, darned easy.&#8221;</p>
<p>&#8220;Oh,&#8221; replies Butters, &#8220;and I suppose there is validation logic and conditional formatting and other event automation going on in the form?&#8221;</p>
<p>&#8220;Uh, yes. Aren&#8217;t you a dog?&#8221;</p>
<p>&#8220;And I suppose all of those things are written right into the view, which is data bound directly onto the data sources?&#8221;</p>
<p>&#8220;Well, yeah. Aren&#8217;t bulldogs supposed to be one of the dumber breeds?&#8221;</p>
<p>&#8220;And didn&#8217;t you just blog about how easy the new MVC framework from Microsoft will make these things? Do you not promote yourself as one who can spin that code as quickly as clicking your way through the stupid InfoPath designer?&#8221;</p>
<p>&#8220;Yeah, I know, Butters. I am feeling kind of guilty about this.&#8221;</p>
<p>&#8220;You should, InfoPath Boy. You have all these great theories about separation of concerns, thin UI, and data abstraction, yet you solve a coding problem with InfoPath? You, sir, are not worthy of your peers.&#8221;</p>
<p>&#8220;Damn you, Butters. Damn you,&#8221; I replied.</p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/02/18/butters-wonders-about-infopath-2007/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MVC at Boise NetDug Tomorrow Night</title>
		<link>http://elegantcode.com/2008/01/16/mvc-at-boise-netdug-tomorrow-night/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mvc-at-boise-netdug-tomorrow-night</link>
		<comments>http://elegantcode.com/2008/01/16/mvc-at-boise-netdug-tomorrow-night/#comments</comments>
		<pubDate>Thu, 17 Jan 2008 04:02:38 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
				<category><![CDATA[Architecture and Design]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[Patterns and Practices]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Team Foundation Server]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/01/16/mvc-at-boise-netdug-tomorrow-night/</guid>
		<description><![CDATA[Anyone in the Boise area can come out and get a taste of the new ASP.Net MVC framework from Microsoft. I will be doing an hour or so on the MVC framework at the local .Net users group. Following the MVC talk, Martin Danner will be doing an hour or so on the fresh new [...]]]></description>
			<content:encoded><![CDATA[<p>Anyone in the Boise area can come out and get a taste of the new ASP.Net MVC framework from Microsoft. I will be doing an hour or so on the MVC framework at the <a href="http://www.netdug.com/" target="_blank">local .Net users group</a>.</p>
<p>Following the MVC talk, <a href="http://www.devrevolution.com/" target="_blank">Martin Danner</a> will be doing an hour or so on the fresh new features found in Team Foundation Server 2008.</p>
<p>I hope to see you there. Let&#8217;s go for a beer after over at <a href="http://www.tablerockbrewpub.com/" target="_blank">Table Rock</a>!</p>
<p>&nbsp;</p>
<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ccef7c6b-e370-4a46-b4bc-3ba3e2478067" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati Tags: <a href="http://technorati.com/tags/ASP.Net%20MVC" rel="tag">ASP.Net MVC</a></div>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/01/16/mvc-at-boise-netdug-tomorrow-night/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How Many Developers Does It Take to Send Spam?</title>
		<link>http://elegantcode.com/2008/01/08/how-many-developers-does-it-take-to-send-spam/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-many-developers-does-it-take-to-send-spam</link>
		<comments>http://elegantcode.com/2008/01/08/how-many-developers-does-it-take-to-send-spam/#comments</comments>
		<pubDate>Wed, 09 Jan 2008 04:49:13 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
				<category><![CDATA[Esoterica]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/01/08/how-many-developers-does-it-take-to-send-spam/</guid>
		<description><![CDATA[Apparently, several. I am the 2008 director for Boise Code Camp and I found myself needing to send email to 400 people from our mailing list to tell them about the upcoming Code Camp. I sent an inquiry to our Code camp online group asking the simple question, &#8220;How would you send 400 emails?&#8221; The [...]]]></description>
			<content:encoded><![CDATA[<p>Apparently, several. I am the 2008 director for Boise Code Camp and I found myself needing to send email to 400 people from our mailing list to tell them about the upcoming <a href="http://boisecodecamp.com/" target="_blank">Code Camp</a>.</p>
<p>I sent an inquiry to our Code camp online group asking the simple question, &#8220;How would you send 400 emails?&#8221; The list of answers was hilariously geeky and shows the nature of my friends.</p>
<h2>Option 1 &#8211; Write Code</h2>
<p>You could rip through a CSV and Send via code through Google.</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   1:</span> MailMessage email = <span style="color: #0000ff">new</span> MailMessage();</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   2:</span> email.From = <span style="color: #0000ff">new</span> MailAddress( <span style="color: #006080">"support@foo.com"</span>,    <span style="color: #006080">"FOO Support"</span>);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   3:</span> email.Subject = <span style="color: #006080">"Welcome to list"</span>;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   4:</span> email.Body = <span style="color: #006080">"The Message"</span>;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   5:</span> email.To.Add(TextBox1.Text);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   6:</span> SmtpClient server = <span style="color: #0000ff">new</span> SmtpClient(<span style="color: #006080">"smtp.gmail.com"</span>, 587);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   7:</span> server.Credentials = <span style="color: #0000ff">new</span>     NetworkCredential(<span style="color: #006080">"support@foo.com"</span>,     <span style="color: #006080">"ThePassword"</span>);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   8:</span> server.EnableSsl = <span style="color: #0000ff">true</span>;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   9:</span> server.Send(email); </pre>
</div>
</div>
<h2>Option 2 &#8211; Write Code</h2>
<p>Send it with a local SMTP client.</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   1:</span> <span style="color: #0000ff">using</span> System.Net.Mail;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   2:</span> <span style="color: #0000ff">using</span> System.Text;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   3:</span>&nbsp; </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   4:</span>        <span style="color: #008000">//'ute' is my utility object and it has a property 'AdminEmailAccountName':</span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   5:</span>         MailMessage msg = <span style="color: #0000ff">new</span> MailMessage(ute.AdminEmailAccountName, toUser.Email);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   6:</span>         msg.IsBodyHtml = <span style="color: #0000ff">true</span>;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   7:</span>         msg.Subject = <span style="color: #006080">"Message from Code Camp"</span>;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   8:</span>        <span style="color: #008000">//Use my template with the verbiage for the message</span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   9:</span>         StringBuilder sb = <span style="color: #0000ff">new</span> StringBuilder(Resources.ContactUser.EmailTemplate);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  10:</span>&nbsp; </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  11:</span>        <span style="color: #008000">//Replace the placeholders with actual values:</span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  12:</span>         sb.Replace(<span style="color: #006080">"recipientPlaceHolder"</span>, toUser.DisplayName);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  13:</span>         sb.Replace(<span style="color: #006080">"senderPlaceHolder"</span>, fromUser.DisplayName);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  14:</span>         sb.Replace(<span style="color: #006080">"subjectPlaceHolder"</span>, ute.CleanCusswords(txtSubject.Text));</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  15:</span>         sb.Replace(<span style="color: #006080">"bodyPlaceHolder"</span>, ute.CleanCusswords(txtMessage.Text));</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  16:</span>         sb.Replace(<span style="color: #006080">"UserIDPlaceHolder"</span>, fromUser.UserID.ToString());</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  17:</span>         msg.Body = sb.ToString();</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  18:</span>&nbsp; </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  19:</span>         SmtpClient client = <span style="color: #0000ff">new</span> SmtpClient(ute.SmtpHostName);</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  20:</span>         client.Send(msg);</pre>
</div>
</div>
<h2>Option 3 &#8211; MS Word Mail Merge Feature</h2>
<p>What is Mail Merge you ask? It&#8217;s one of those 9000 features in MS Word you never heard of and never would have considered finding in a text editor. To be fair, after playing with this feature, it is very cool and is how I will send the email next time.</p>
<p>Check it out, it&#8217;s in help. I know, I know, but that&#8217;s what I had to do.</p>
<h2>Option 4 &#8211; Brute Force</h2>
<p>Copy and paste 400 comma delimited email addresses into the TO: field of Google mail and hit &#8220;send&#8221;. When the warning pops up telling you this is taking a long time, just say &#8220;I know&#8221; and tell it to keep spinning.</p>
<p>I can tell you from experience that this works just fine <img src='http://elegantcode.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Conclusion</h2>
<p>I feel like a doof for passing up an opportunity to write code. On the other hand, I had time to blog about this because I didn&#8217;t bother writing code.</p>
<p>Go figure. </p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/01/08/how-many-developers-does-it-take-to-send-spam/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ASP.Net MVC View Controls</title>
		<link>http://elegantcode.com/2008/01/02/aspnet-mvc-view-controls/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=aspnet-mvc-view-controls</link>
		<comments>http://elegantcode.com/2008/01/02/aspnet-mvc-view-controls/#comments</comments>
		<pubDate>Wed, 02 Jan 2008 23:57:38 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
				<category><![CDATA[asp.net]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/01/02/aspnet-mvc-view-controls/</guid>
		<description><![CDATA[I am spending some time playing and loving the new MVC framework Scott Guthrie, Phil Haack, Hanselman, and crew are working on. Overall I am very excited about this technology and my hat is off to everyone involved. Most of the examples out there use code in the ASPX view page to build the view, [...]]]></description>
			<content:encoded><![CDATA[<p>I am spending some time playing and loving the new MVC framework <a href="http://weblogs.asp.net/scottgu/" target="_blank">Scott Guthrie</a>, <a href="http://haacked.com/" target="_blank">Phil Haack</a>, <a href="http://hanselman.com" target="_blank">Hanselman</a>, and crew are working on. Overall I am very excited about this technology and my hat is off to everyone involved.</p>
<p>Most of the examples out there use code in the ASPX view page to build the view, but I am a strongly typed kinda guy and I just can&#8217;t live without my user controls for rendering UI. This lead me to find an obtuse little bug in the designer.</p>
<p>I realize this is a trite detail and will likely be fixed in a future release, but I just wanted to drop this out there because it was quite frustrating for me for awhile. </p>
<p>When you create a new ViewPage via the Add &gt; New Item &gt; MVC View Content Page it created the typical ASPX and the code behind *.aspx.cs file. Then when you drop or declare a control on your ASPX page, the control is not declared in the code behind, making it impossible to bind to. We expect the control to be declared in the partial class *.aspx.designer.cs as is typical for a WebForm, but no such file is generated.</p>
<p>That&#8217;s ok, you can add your own partial class and Visual Studio sees it as a designer file. Do this before you add controls to your ViewPage and those controls will get auto-declared for you.</p>
<p>In the image below, I have added a partial class for my List page, but not for my Detail page.</p>
<p><a href="http://elegantcode.com/wp-content/uploads/2008/01/image.png"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="119" alt="image" src="http://elegantcode.com/wp-content/uploads/2008/01/image-thumb.png" width="207" border="0"></a> </p>
<p>The following code is the code I put into the file.</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   1:</span> <span style="color: #0000ff">namespace</span> MvcApplication.Views.Product {    </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   2:</span>     </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   3:</span>     <span style="color: #0000ff">public</span> <span style="color: #0000ff">partial</span> <span style="color: #0000ff">class</span> List {</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   4:</span>         </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   5:</span>     }</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   6:</span> }</pre>
</div>
</div>
<p>After dropping a literal onto my ViewPage and re-opening my designer class code file, this is what I find.</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
<div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   1:</span> <span style="color: #0000ff">namespace</span> MvcApplication.Views.Product {</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   2:</span>     </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   3:</span>     </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   4:</span>     <span style="color: #0000ff">public</span> <span style="color: #0000ff">partial</span> <span style="color: #0000ff">class</span> List {</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   5:</span>         </pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   6:</span>         <span style="color: #008000">/// &lt;summary&gt;</span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   7:</span>         <span style="color: #008000">/// _categoryName control.</span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">   8:</span>         <span style="color: #008000">/// &lt;/summary&gt;</span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">   9:</span>         <span style="color: #008000">/// &lt;remarks&gt;</span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  10:</span>         <span style="color: #008000">/// Auto-generated field.</span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  11:</span>         <span style="color: #008000">/// To modify move field declaration from designer file to code-behind file.</span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  12:</span>         <span style="color: #008000">/// &lt;/remarks&gt;</span></pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  13:</span>         <span style="color: #0000ff">protected</span> global::System.Web.UI.WebControls.Literal _categoryName;</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #606060">  14:</span>     }</pre>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"><span style="color: #606060">  15:</span> }</pre>
</div>
</div>
<p>Smooth as butter.</p>
<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:9662ae43-1c0d-4635-a2eb-9e36c2b9493c" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati Tags: <a href="http://technorati.com/tags/ASp.Net" rel="tag">ASp.Net</a>,<a href="http://technorati.com/tags/ASP.Net%20MVC" rel="tag">ASP.Net MVC</a></div>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/01/02/aspnet-mvc-view-controls/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>XForms &#8211; The Coolest Little Technology You&#8217;ve Never Heard Of</title>
		<link>http://elegantcode.com/2007/12/15/xforms-the-coolest-client-side-technology-youve-never-heard-of/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=xforms-the-coolest-client-side-technology-youve-never-heard-of</link>
		<comments>http://elegantcode.com/2007/12/15/xforms-the-coolest-client-side-technology-youve-never-heard-of/#comments</comments>
		<pubDate>Sat, 15 Dec 2007 06:21:10 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2007/12/15/xforms-the-coolest-client-side-technology-youve-never-heard-of/</guid>
		<description><![CDATA[The reason you have never heard of this sweet technology is explored in this post, Microsoft and XForms, Standards Assassin or Innovator?. &#8220;Standards? Why Bother?&#8221; asked Bill. XForms is a way of expressing data and business logic into an XML instance that you can embed into an XHTML file and run in your favorite browser [...]]]></description>
			<content:encoded><![CDATA[<p>The reason you have never heard of this sweet technology is explored in this post, <a href="http://elegantcode.com/2007/09/12/microsoft-and-xforms-standards-assassin-or-innovator/">Microsoft and XForms, Standards Assassin or Innovator?</a>.</p>
<blockquote><p>&#8220;Standards? Why Bother?&#8221; asked Bill.</p></blockquote>
<p>XForms is a way of expressing data and business logic into an XML instance that you can embed into an XHTML file and run in your favorite browser (sort of). XForms essentially provides a complete MVC programming model complete with events and view binding available within an XML file. Wikipedia describes XForms thusly:</p>
<blockquote><p><em>XForms is an </em><a href="http://en.wikipedia.org/wiki/XML"><em>XML</em></a><em> format for the specification of a data processing model for XML data and </em><a href="http://en.wikipedia.org/wiki/User_interface"><em>user interface</em></a><em>(s) for the XML data, such as </em><a href="http://en.wikipedia.org/wiki/Form_%28web%29"><em>web forms</em></a><em>. XForms was designed to be the next generation of </em><a href="http://en.wikipedia.org/wiki/HTML"><em>HTML</em></a><em> / </em><a href="http://en.wikipedia.org/wiki/XHTML"><em>XHTML</em></a><em> forms, but is generic enough that it can also be used in a standalone manner or with presentation languages other than XHTML to describe a user interface and a set of common </em><a href="http://en.wikipedia.org/wiki/Data"><em>data</em></a><em> manipulation tasks.</em></p></blockquote>
<p>Of course, an XML instance cannot <em>do</em> anything by itself, it merely represents potential for action. In order to execute the business logic and view represented in an XForm you need an XForm execution engine. Significant XForms engines fall into 2 camps, each with their own set of vendors and advocates. The different strategies are browser execution and server execution.</p>
<h3>Browser Execution Engines</h3>
<p>FireFox leads off with native support baked into the browser. This makes a convenient platform for a closed ecosystem like an enterprise document workflow application.</p>
<p>Additionally, plugins are available for IE and other browsers. The leading plugin for IE comes from <a target="_blank" href="http://www.formsplayer.com/">formsPlayer</a>, although <a target="_blank" href="http://www.picoforms.com/">Pico Forms</a> is hot on their trail with a plugin in its 3rd beta.  Pico Forms also has a custom XHTML browser and promotes XForms in the mobile space.</p>
<p>Lastly, two XForms Engine implementations exist (that I know of) in the form of JavaScript libraries.</p>
<p>The first is from the open source project <a target="_blank" href="http://www.formfaces.com/">FormFaces</a> and has not seen active development since January of 2007. FormFaces implemetns much of the XForms specifications and as long as your application doesn&#8217;t need sliders to do range selections, this is viable option. The second is a forthcoming product from the plugin provider, formsPlayer. In exchanges with the CEO of formsPlayer I learned their implementation is close to done. I actually am hoping to see a demo next week.</p>
<p>These JS libraries provide the most realistic option for getting your XForm application to function on the web as no thick app requirements exist on the client.</p>
<p>In order to get the XForms to do something interesting, it is likely you will need to include some other dynamic content technology into your application. I have had some success in including the <a target="_blank" href="http://developer.yahoo.com/yui/">Yahoo UI</a> AJAX library and triggering the AJAX controls using the data model event handlers. A model of this implementation is illustrated below.</p>
<p><a href="http://elegantcode.com/wp-content/uploads/2007/12/image3.png"><img border="0" width="244" src="http://elegantcode.com/wp-content/uploads/2007/12/image-thumb3.png" alt="image" height="182" style="border: 0px" /></a></p>
<p>Click the image for a larger version.</p>
<h3>Server Side Engines</h3>
<p>The idea here is that XForms are parsed and rendered into HTML on the server and subsequent changes to the embedded data model are managed by round tripping to the server. Sure this works, but it kind of takes all the fun out of it.</p>
<p><a target="_blank" href="http://www.ibm.com/developerworks/xml/library/x-xforms/">IBM is a major player</a> here as well as a company called <a target="_blank" href="http://www.orbeon.com/">Orbeon</a> and even <a target="_blank" href="http://labs.adobe.com/wiki/index.php/XForms_Converter">Adobe has skin in the game</a>.</p>
<h3>Now What?</h3>
<p>On November 29th, the W3C working group for XForms promoted XForms 1.1 specification to Release Candidate stage. This is really good news for vendors and developers embracing XForms technology because it represents a commitment to the technology by several leading adopters.</p>
<p>Although this technology is in its infancy, I strongly encourage you to take a look at it the next time you are asked to implement a dynamic forms application within your enterprise. After all, how many times must we reinvent this wheel?</p>
<h3>For More Information</h3>
<p>Some links I have found very useful in learning more about XForms are below:</p>
<ul>
<li><a target="_blank" href="http://www.w3.org/MarkUp/Forms/">The W3C XForms Working Group</a></li>
<li><a href="http://www.w3schools.com/xforms/default.asp" title="XForms Tutorial">XForms Tutorial</a></li>
<li><a target="_blank" href="http://xformsinstitute.com/">XForms Institute</a></li>
</ul>
<p style="display: inline; margin: 0px; padding: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0d3dc3e7-3588-4551-b69d-a00f1c6949c5" class="wlWriterSmartContent">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/XForms">XForms</a>,<a rel="tag" href="http://technorati.com/tags/XML">XML</a></p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2007/12/15/xforms-the-coolest-client-side-technology-youve-never-heard-of/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

