<?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>Wagnerblog</title>
	<atom:link href="http://wagnerblog.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://wagnerblog.com</link>
	<description>Development Ideas and Ramblings</description>
	<lastBuildDate>Fri, 06 Nov 2009 19:11:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Tearing down walls</title>
		<link>http://wagnerblog.com/2009/11/tearing-down-walls/</link>
		<comments>http://wagnerblog.com/2009/11/tearing-down-walls/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 16:23:29 +0000</pubDate>
		<dc:creator>twagner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=1074</guid>
		<description><![CDATA[
This month marks the 20th anniversary of the fall of the Berlin Wall. Having grown up in East Germany and defected in 1979, I have  a special connection with this symbol of oppression. To most of us living behind this wall it really seemed insurmountable. For starters, unlike the West Berlin side where people had [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-1075" style="border: 1px solid black; margin: 3px;" title="Berlin Wall 2" src="http://wagnerblog.com/wp-content/uploads/2009/11/Berlin-Wall-2.jpg" alt="Berlin Wall 2" width="600" height="398" /></p>
<p style="text-align: left;">This month marks the 20th anniversary of the fall of the Berlin Wall. Having grown up in East Germany and defected in 1979, I have  a special connection with this symbol of oppression. To most of us living behind this wall it really seemed insurmountable. For starters, unlike the West Berlin side where people had free access to the wall, in the East you could not even get close to it.  If you tried to approach it you would get shot. While the West has used the wall time and time again as a staging ground of political and cultural assaults on the oppressive East German and Soviet regime, in the East the government cleared entire buildings of occupants because of the close vicinity to the wall.</p>
<p style="text-align: left;">From Kennedy&#8217;s famous quote of &#8220;Ich bin ein Berliner&#8221; ( I am a Berliner), to Reagan&#8217;s challenge of &#8220;Mr. Gorbachev &#8211; tear down this wall &#8221; even down to U2 performing concerts in Berlin singing about &#8220;scale these city walls&#8221; &#8211; no other symbol in modern times has stood for the oppressive regime fostered on the former Soviet Occupation Zone  after WW2.</p>
<p>As much as I may think this anniversary is important, it only seems that way to a minority of people in the world. German Chancellor Angela Merkel during her recent visit to Washington DC invited US President Obama to the 20th Anniversary festivities.  I am told he politely declined. The Berlin Wall doesnt rank that high on current political agendas anymore. In Obama&#8217;s defense, even within Germany itself I find an entire generation of kids having grown up after the fall of this wall who nowadays have next to no connection at all with it , nor with  the former East German country.  Many of these teenagers who are  now the same age as my own daughter point to a distorted image being handed down by parents and relatives that are having a hard time adjusting to life in the competitive world of free economies. Many members of my generation are infected with nostalgia about the old system. Freqently you will hear descriptions like &#8221; things weren&#8217;t really that bad. We all were in it together. Everybody had work and everybody had a roof over their head&#8221; &#8211; unfortunately, much like an Adult Survivor of Child Abuse will see the former abuse in less severe terms, these folks often see East Germany through rose colored glasses of nostalgia and  don&#8217;t remember having to stand in line at stores to get something as simple as bread &#8211; or the fact that every other person you meet was likely to be an informant.</p>
<p><img class="alignright size-medium wp-image-1076" style="border: 1px solid black; margin: 3px;" title="Berlin Wall Freedom" src="http://wagnerblog.com/wp-content/uploads/2009/11/Berlin-Wall-Freedom-300x200.jpg" alt="Berlin Wall Freedom" width="300" height="200" /></p>
<p>Yes life is different in a free society when your no longer told what to read, think or believe.  But overall I much prefer it this way.</p>
<p>President Obama could not make it to the 20th anniversary, neither could President Reagan for obvious reasons &#8211; but U2 can ! Bono and his group are performing under the Brandenburg Gate in a massive concert being televised via MTV Germany. Good for him.</p>
<p>For many years after our defection I used to have nightmares about the Stasi finding us in the US and taking us back to East Germany. As I watched the wall coming down in 1989, almost ten years after we made it into the West,  sitting in the comfort of my living room in Los Angeles I did not realize how much fear I had carried with me.  It wasn&#8217;t until tears streamed down my face and I cheered for all the East Berliners crossing over into the West that I sensed a mighty feeling of relieve.  A weight that I did not know had been there was lifted off my shoulders.</p>
<p>Thinking back 20 years, it still amazes me  how profoundly an event that affected 15 million East German&#8217;s in the middle of Europe also affected one singular person  thousands of miles West of the Berlin Wall. Even though I had been free &#8220;on paper&#8221; for ten years already,  I felt a profound sense of freedom rolling over me as I saw wave after wave of East Germans pass into the West.  I laughed, cried, and clapped my hands remembering the old saying &#8221; Would the last person leaving East Germany please turn out the lights&#8221; .</p>
<p style="text-align: center;"><img class="aligncenter size-medium wp-image-1077" style="border: 1px solid black;" title="Berlin Wall U2" src="http://wagnerblog.com/wp-content/uploads/2009/11/Berlin-Wall-U2-300x187.jpg" alt="Berlin Wall U2" width="300" height="187" /></p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2009/11/tearing-down-walls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You don&#8217;t have to be 100 percent Agile to be productive</title>
		<link>http://wagnerblog.com/2009/11/you-dont-have-to-be-100-percent-agile-to-be-productive/</link>
		<comments>http://wagnerblog.com/2009/11/you-dont-have-to-be-100-percent-agile-to-be-productive/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 00:18:58 +0000</pubDate>
		<dc:creator>twagner</dc:creator>
				<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Software Quality]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[qa]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=1048</guid>
		<description><![CDATA[Under the best of circumstances, Agile Methodologies &#8211; especially SCRUM &#8211; puts the development team smack dab in the center of the process and has the entire life cycle revolve around it. That’s why so many programmers love Agile. But even organizations that, for whatever reason, are not able to support a 100% Agile environment [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-1051" style="border: 1px solid black; margin: 5px;" title="bullseye" src="http://wagnerblog.com/wp-content/uploads/2009/11/bullseye-300x225.jpg" alt="bullseye" width="300" height="225" />Under the best of circumstances, Agile Methodologies &#8211; especially SCRUM &#8211; puts the development team smack dab in the center of the process and has the entire life cycle revolve around it. That’s why so many programmers love Agile. But even organizations that, for whatever reason, are not able to support a 100% Agile environment can benefit from some of the basic tenets of SCRUM.</p>
<p>Let’s get one thing out of the way. If you are a programmer, chances are you would love SCRUM. Love with a capital L.  I mean really…. Think about it… if you come from the typical top down process where “Moses delivers the ten commandments to the tribes”  -  in other words the Dir of Development sits the team down and explains XYZ has to be done in 4 weeks – if you come from that sort of place, and find yourself in an agile world where programmers look at “user stories” and estimate sprints while an entire team discusses and sets the schedule – you’d probably feel like you’ve made a wrong turn somewhere and ended in alternate universe.</p>
<p>Suffice it to say there is definitely a culture shift across an entire organization when you switch to Agile. Some companies may not be quite as ready as others to embrace the change.</p>
<p>One of the first victims to get hit by an Agile team is the persona of Heroic Programmer. The type of programmer who by design or default likes to single handedly save everyone’s bacon. Agile focuses on the effort, communication and process of the ENTIRE team – not just the lone gun slinger. People who need to be the Heroic Programmer in a company often will not like Agile very much.</p>
<p>Another victim of the rising popularity of Agile are dev shops that operate on outdated principles and support dysfunctional processes. Through the emphasis on team empowerment I find more and more developers take up the battle cry of “Give me Agile or give me … [fill in the blank]”  A recruiter friend tells me about candidates who will not entertain an offer at all if it  isn’t  in an agile shop. Kudos to them. There is much to like about improved team communication and process enhancements.</p>
<p>Even if your own company cannot be 100%  formally Agile, with everyone buying into the change,  perhaps you can use some aspects of the methodology to improve your own processes. That has been my experience.</p>
<p>One of the key features of Agile (SCRUM) methodologies is the prevention of process hijacking. In  my 20 years of work experience I found two major types of development shops – those driven by engineers and those driven by sales people. Whichever group controls the process ends up setting the corporate culture. Agile shares responsibility between both groups and therefore prevents either group from hijacking the environment. That’s admirable.</p>
<p>Agile teams work hard to deliver predictable, high quality results in a relatively difficult setting. Difficult because software development all too often seems to go against a normal  predictive process. Unlike a Model A Ford, software cannot be built in an assembly line fashion. Hence the difficulty.</p>
<p><img class="aligncenter size-full wp-image-1060" title="heroic" src="http://wagnerblog.com/wp-content/uploads/2009/11/heroic3.jpg" alt="heroic" width="600" height="197" /></p>
<p>The mandate of Agile development is to create an environment where that uncertainty is removed through an iterative process and  much, much, much more communication than any other development methodology I have seen.  Meetings before things get built, meetings while things get built and more meetings after your done building things.</p>
<p>I have seen two interesting situations in all these meetings: programmers who by nature might be more introverted become much more open, and stakeholders who are used to issuing an edict and walking away become much closer to the development team. Both are good things.</p>
<p>There are a number of books on the market that describe Agile and SCRUM better than I can, but in a summarized form, Agile consists of</p>
<ul>
<li>A prioritized product backlog of themes, epics and user stories</li>
<li>A self managing and empowered, cross functional team</li>
<li>A SCRUM Leader / Master</li>
<li>One or more product owners / stake holders</li>
<li>Sprints that break user stories into tasks and produce a certain amount of work over a specified time, most frequently 10 business days.</li>
</ul>
<p>Of course those are only the highlights. There are a number of important “ceremonies” and behavioral changes that come with the SCRUM territory. For example the practice of daily stand up meetings where team members briefly touch on what is on their plate.</p>
<p>In my own experience, the area where Agile makes the greatest impact is in the shared responsibility and empowerment of the team. By giving the team a way to estimate, manage and build code quickly and iteratively the group as a whole tends to be very productive.</p>
<p>During my time as VP of Server Development of SkillJam Inc. I was able to move a dev team toward a more agile approach by making sure a few key features were in place. First and foremost, we instituted a good product backlog.  I purchased enough licenses of Fogbugz to take care of all developers, QA People,  project managers and product stakeholders in the organization. I cannot tell you how important some of the seemingly simple features of Fogbugz became once we started cranking out code. Something as simple as an email conversation thread being automatically stored and associated with the task or issue in Fogbugz is a life saver. (Instead of logging into Fogbugz to record a comment, an email reply to a mail sent from Fogbugz automatically shows up in the right position within the task comments. Nice!)</p>
<p>Having set up FogBugz we got busy producing a big picture prioritized list of work. Any bug, any feature request and even entire new products where organized by themes , user stories and tasks within the stories.</p>
<p>After some arm wrestling with the key product stakeholders and other Senior Management Team members I was able to get buy-in for the concept of 10 business day sprints ( 2 calendar weeks). These sprints could not be interrupted for unplanned tasks under any circumstances. That’s not to say an emergency shouldn’t be addressed by the team.  But let me tell you,  its not easy convincing a CEO that giving up the ability to demand something RIGHT NOW is good for business. In the end it was the prospect of better schedule adherence, better quality and lower defect counts that sold this effort.</p>
<p>As I said, we were not formally Agile across the entire board. Our organization loved a considerable amount of design up front. That meant more information was written down and documented in formal requirements than you would typically see in an agile shop.</p>
<p>At the same time, our developers and qa analysts met several times a week for progress checks – admittedly this could have been handled with daily stand up meetings to which we could have invited visitors ( as long as the visitors kept quiet), but in a nod to the PMO we continued with the legacy status meetings.</p>
<p>As work progressed through a sprint we needed to look ahead at the pipeline ( the product backlog ) . So toward the end of a given sprint the team leaders and myself would spend some time planning the next iteration to make sure we could address any problems before we had our next Sprint is to kick off. For the actual kick off itself, the entire dev team (including qa people) gathered around a large conference table where we projected to prioritized backlog out of Fogbugz on a large screen. The team as a whole took on the User Stories needing to be built – based on prioritization – and committed to a certain amount of work being done in the sprint. Frequently we invited stakeholders and product owners to these meetings in order to get immediate feedback to questions that helped us with the production of a Sprint schedule.</p>
<p>That’s it. Simple and straight forward. I was blessed with a fantastic team who had been working together for a while already. That made SCRUM planning easier. And yes I know this wasn’t the  comprehensive SCRUM setup that you read about in the many Agile books on the market, but even in this pared-down format we were able to reap the benefits of planned iterative production.</p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2009/11/you-dont-have-to-be-100-percent-agile-to-be-productive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LLBLGen &#8211; Linq  &#8211; NHibernate &#8211; an embarrassment of riches</title>
		<link>http://wagnerblog.com/2009/10/llblgen-linq-nhibernate-an-embarrassment-of-riches/</link>
		<comments>http://wagnerblog.com/2009/10/llblgen-linq-nhibernate-an-embarrassment-of-riches/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 21:33:27 +0000</pubDate>
		<dc:creator>twagner</dc:creator>
				<category><![CDATA[.NET Tools]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[data access]]></category>
		<category><![CDATA[EF]]></category>
		<category><![CDATA[LLBLGen]]></category>
		<category><![CDATA[NHibernate]]></category>
		<category><![CDATA[ORM]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=1034</guid>
		<description><![CDATA[Recently I was asked “ What technology do you recommend Linq or NHibernate” ?  My knee jerk reaction was “ It depends – potentially neither”. But that’s not good enough as an answer. The feeling that I owed a better explanation led me to this post.
Let’s start with some basics. Object Relational Modeling has been [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I was asked “ What technology do you recommend Linq or NHibernate” ?  My knee jerk reaction was “ It depends – potentially neither”. But that’s not good enough as an answer. The feeling that I owed a better explanation led me to this post.</p>
<p>Let’s start with some basics. Object Relational Modeling has been around for quite some time. The work by Dr. Raymond Chen has informed the design process of ORM systems for almost 30 years now. <a href="http://wagnerblog.com/2006/06/extra-extra-microsoft-to-use-30-year-old-data-model-in-adonet/" target="_blank">I posted 3 years</a> ago that even Microsoft based its own decisions on the work of Dr. Chen.</p>
<p>Fast forward 3 years and it seems that many MS shops think that Business Objects, or ORM, in .NET 3.5 requires Linq.  Far from it. There are other, potentially more rewarding ways of doing ORM in .NET. Two prominent and mature alternatives on the market  are NHibernate and LLBLGen.</p>
<p>I should qualify one thing right up front: Linq tries to be more than an ORM tool. By definition Linq is “ a set of proprietary query operators that can be used to query, project and filter data in arrays, enumerable classes, XML (XLINQ), relational database, and third party data sources “</p>
<p>In short, Linq is more than a typical ORM mapper against a database. That is its strength and also potentially its downfall when compared to ORM mapper. While I personally think its great to use Linq to query things like Directory Structures or Strings, I also personally think that both NHibernate and LLBLGen are better at ORM – much the same way that SQL Server is better at managing data than say an XML document. Specifically, for example, Linq requires a developer to <a href="- http://www.west-wind.com/Weblog/posts/38838.aspx" target="_blank">jump through some hoops when lazy loading an object graph</a>. In addition the query tree expression generation code that Linq employes makes some odd decisions on occasion. That can lead to severely slow query performance.</p>
<p>As it stands, Linq is the 800Ib gorilla in the room because it originates with Microsoft. That means developers need to be able to work with it and the third party tool market has to cater to this by potentially adjusting its products to work with Linq.</p>
<p>Linq is extensible via a Provider pattern that implement the IQueryable&lt;T&gt; interface. A quick search of the Internet brought back examples of providers for CSV, OpenMapi and even Twitter. But writing a good Linq provider is no picnic at all. Many providers on the market today only cover a subset of the Linq spectrum. Writing a full-fledged Linq provider has taken one of the best programmers in the business almost a year and it is 1.2MB large. That should be a caveat for anyone contemplating that this is an easy task.</p>
<p>While Linq as a technology wants to be more than just an Object Relational Mapper for databases, both NHibernate and LLBLGen are exactly that and don’t try to be anything else. As a matter of fact, in the big scheme of things both tools are “closer to the metal” than Linq.  So much so that both tools offer a Linq provider that allows a developer to run Linq against NHibernate or Linq against LLBLGen. In that manner both tools broaden their market scope and build on the knowledge that developers have acquired when coming to the ORM space from MS centric projects. I am told by users who have tried the NHibernate Linq provider that it is still a bit immature at the time of this post. This just underscores the difficulty of writing a good one.</p>
<p>What then is the difference between NHibernate and LLBLGen? As far as I am concerned the differences fall into three large areas:   product philosophy, developer productivity and vendor quality / product maturity .<br />
<strong><br />
Product Philosophy: </strong><br />
NHibernate approaches the concept of building entities and mappers from the stand-point of designing business objects first, without any regard for databases or persistence structures at all.</p>
<p>LLBLGen, on the other hand, adheres closely to the work of Dr. Raymond Chen mentioned earlier. It builds entities on the basis of a database schema.</p>
<p>The tool of choice here really depends on how you approach the ORM space. Do you prefer to work with objects first and disregard persistence? For the time being NHibernate makes that easier than LLBLGen. I should point out that the next version of LLBLGen, due in a few months, has one incredible advantage over the competition &#8211; it will support Model-First development.  By encompassing both design philosophies the LLBLGen designer tool &#8211; which by the way is the only fully functional designer tool in the ORM market &#8211; will cater to both camps. Essentially LLBLGen will allow you to work with NHibernate files, its own providers as well as Linq. Its a win win win situation.</p>
<p><img class="alignleft size-medium wp-image-1044" title="LLBLGen" src="http://wagnerblog.com/wp-content/uploads/2009/10/LLBLGen-300x236.jpg" alt="LLBLGen" width="300" height="236" /></p>
<p>Personally I have always worked with the db first approach.  I understand and sympathize with the object first approach. But the majority of my larger projects have existing databases. For instance I can’t very well insist that Chevron change its db structures, just to accommodate my ORM system.</p>
<p>LLBLGen makes work with existing data structures a breeze. Unlike NHibernate it supports multiple databases within one project, foreign key relations, prefetch paths and typed lists</p>
<p>As a side note, if you want to learn more about the object design first approach I recommend Jimmy Nilsson’s book “<a href="http://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1255642840&amp;sr=8-1" target="_blank">Applying Domain Driven Design Patterns</a>”.  It’s a fantastic work on that subject.</p>
<p><strong>Developer Productivity:</strong><br />
LLBLGen runs within a  separate development IDE (not within Visual Studio) and is by far the more productive tool. Turning a database into entities and using them in a project requires but a few clicks and option selections.</p>
<p>In NHibernate the developer is asked to hand code empty business objects (usually POCO’s) , then  manipulate an XML mapping file. I realize the typical argument here is to point out that this approach offers more control to the developer. Yes it does.  But the fine grained approach impacts productivity whenever changes need to made after the initial design. Especially with larger projects the need to work at a fine grained level can become cumbersome. After all the mapping files in NHibernate do not live in a vacuum.</p>
<p>A couple of years ago I had the pleasure of watching a longtime Hibernate architect become completely addicted to the productivity of LLBLGen. He literally was blown away by how much he could accomplish in very little time. In the end, the formerly dreaded change / update cycle became one of his biggest tools in being productive. My colleague took part in building one of the larger real estate loan processing engines in the US using Hibernate and Java &#8211; he knew those products inside out.<br />
<strong><br />
Vendor quality / Product maturity:</strong><br />
If you are faced with a tricky medical decision, whom would you trust more – a GP who deals with a variety of medical issues or a specialist that eats,  sleeps and breaths the specialty you need?  In other words if you can see the quality of the people whom you trust would that help in your decision process? It does in mine.</p>
<p>How smart are the people behind the tools you choose? In the case of LLBLGen and NHibernate I’d say the development is headed by a couple of programmers who are absolutely the best in the field (Ayende Rahien and Frans Bouma).  Contrast that to another ORM tool on the market – the MS Entity Framework and its problems over the past three years and you can see how essential the capabilities of the core devs in a tool like this really are.</p>
<p>Both LLBLGen and NHibernate are mature within the marketplace. NHibernate builds on its “big brother” Hibernate for Java.  While NHibernate is a failry mature open source project, LLBLGen is the most mature commercial tool of its kind in the .NET market.</p>
<p>Open Source projects are great in many ways – especially after they have settled down a little. But as a personal choice I will frequently pick a good commercial product over an open source one. There are several reasons for that. When your reputation is on the line with the projects you implement, its good to have a person who is directly responsible to you by the fact that you paid for their product. Granted with some vendors that’s a useless measuring stick but in a comparison between NHibernate and LLBLGen, I favor the latter because a very specific person is responsible for the performance of the product.</p>
<p>Overall there is a great sense of design and continuity in the product. I have used it since 2003 and I am here to tell you that in 6 years, through dozens of commercial projects for a raft of important customers – from Chevron to ITT Corp and Chrysler; from Lycos to Gameshow Network – accounting for several thousand man-hours of work it has never let me down.</p>
<p>Since this is not a product review I would urge you to visit the llblgen website and have a look. Features like visual inheritance definition, non-overwrite of custom code, support for all relationship types (1:1 ; 1:M ; M:1 and M:M) and much more can be reviewed there. And of course take a look at the NHibernate site as well. There is much to like in both tools. As it stands when someone asks me &#8220;Linq or NHibernate&#8221; I am very likely to answer &#8220;Neither my friend&#8230; but let me tell you about the tool that you should use ! &#8221;</p>
<p>Update:  10-31-2009 &#8211; I just had to include Mohammed Meligy&#8217;s post because his experience parallels mine. <a href="http://weblogs.asp.net/meligy/archive/2009/10/31/which-orm-linq-to-sql-entity-framework-llblgen-nhibernate.aspx">Here is a link</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2009/10/llblgen-linq-nhibernate-an-embarrassment-of-riches/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile / Extreme Programming</title>
		<link>http://wagnerblog.com/2009/08/agile-extreme-programming/</link>
		<comments>http://wagnerblog.com/2009/08/agile-extreme-programming/#comments</comments>
		<pubDate>Sat, 29 Aug 2009 14:59:32 +0000</pubDate>
		<dc:creator>twagner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Extreme]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=1030</guid>
		<description><![CDATA[Sometimes I wonder if Scott Adams is wiser than he is given credit for.


]]></description>
			<content:encoded><![CDATA[<p>Sometimes I wonder if Scott Adams is wiser than he is given credit for.</p>
<p><img src="file:///C:/Users/Thomas/AppData/Local/Temp/moz-screenshot.png" alt="" /></p>
<p><img class="alignleft size-full wp-image-1031" title="ScreenShot146" src="http://wagnerblog.com/wp-content/uploads/2009/08/ScreenShot146.jpg" alt="ScreenShot146" width="692" height="526" /></p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2009/08/agile-extreme-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# on the IPhone</title>
		<link>http://wagnerblog.com/2009/06/c-on-the-iphone/</link>
		<comments>http://wagnerblog.com/2009/06/c-on-the-iphone/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 14:06:25 +0000</pubDate>
		<dc:creator>twagner</dc:creator>
				<category><![CDATA[.NET Tools]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=1027</guid>
		<description><![CDATA[This morning I stumbled across some discussion of using C# to build IPhone apps. You may know already that ordinarily IPhone apps are built using Apple&#8217;s Objective-C , which is pretty ancient and lacks some useful features like automatic memory management for example. Objective C came out as part of NextStep which was a company [...]]]></description>
			<content:encoded><![CDATA[<p>This morning I stumbled across some discussion of using C# to build IPhone apps. You may know already that ordinarily IPhone apps are built using Apple&#8217;s Objective-C , which is pretty ancient and lacks some useful features like automatic memory management for example. Objective C came out as part of NextStep which was a company that Steve Jobs had for a little while during the years when John Scully was at the helm of Apple. This was back in the late 80&#8217;s early 90&#8217;s I think.  So basically the code used to write IPhone apps is about 15 -20 years old and at this point its only a version 2 product. Seems odd. From what I have read, dealing with Objective-C is no picnic. Imagine my surprise when I saw <a href="http://www.mono-project.com/Mono:Iphone">this note </a>on the Mono site.I followed the links and found <a href="http://unity3d.com/unity/features/iphone-publishing">Unity </a>- what looks to be a very capable game design IDE that uses C# and compiles to Apple Objective-C. Thats pretty neat. I suspect it probably has some early version hiccups but in time with proper care and  feeding I wonder if this IDE wouldnt grow into something usable for general IPhone dev.</p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2009/06/c-on-the-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET MVC Impressions after 1 week</title>
		<link>http://wagnerblog.com/2009/06/aspnet-mvc-impressions-after-1-week/</link>
		<comments>http://wagnerblog.com/2009/06/aspnet-mvc-impressions-after-1-week/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 16:45:07 +0000</pubDate>
		<dc:creator>twagner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=1025</guid>
		<description><![CDATA[
I like it, but boy it requires a shift in thinking and has a learning curve since you need to practically relearn how to do everything on the web page. No more controls.
It suffers a little bit from RoR envy.
It will probably take some time before the best ways to do certain things in this [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><span><span style="font-family: Helvetica,Arial,sans-serif;">I like it, but boy it requires a shift in thinking and has a learning curve since you need to practically relearn how to do everything on the web page. No more controls.</span></span></li>
<li>It suffers a little bit from RoR envy.</li>
<li>It will probably take some time before the best ways to do certain things in this framework will be discovered. Looks like everybody is trying new and different things.</li>
<li>Because it does everything different than webforms it takes me longer to create something &#8211; that will change over time</li>
<li>It drives home the point just how different web forms are from &#8220;normal&#8221; html based development because it lets you do things with CSS that you dont see in reg ASP.NET sites, because regular .net controls are not too open standards compliant.</li>
<li>The separation of concerns into model / view and controller code is refreshing</li>
<li>There will be a lot of open source feedback which will influence the next versions of MS MVC as well as offer substitute ways of doing things. Just like the RoR community, a MVC developer will be faced with a plethora of choices. I dont know how  I feel about that because it can lead to religious arguments &#8212; my Spark View Engine is better than you built in View Engine&#8230;.use FubuMVC as opposed to MS MVC etc etc etc. Unless there is a clear frontrunner for a given aspect I am worried that there will be a lot of confusion.</li>
</ul>
<p><span><span style="font-family: Helvetica,Arial,sans-serif;"> Overall I still wonder how much need there will be for MVC in the long run as opposed to Silverlight or even something like Adobe Flex. In other words will the web move more toward Rich Apps or will it move more toward jazzed up HTML apps. Fact is there are things you can do in MVC that are not possible to build quite as nicely and easily in regular ASP.NET. For example there is a plethora of CSS tools out there and freely available plugins and whatnot for jQuery that may work easier in MVC pages.</p>
<p></span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2009/06/aspnet-mvc-impressions-after-1-week/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>No RenderPartial from a different folder</title>
		<link>http://wagnerblog.com/2009/06/no-renderpartial-from-a-different-folder/</link>
		<comments>http://wagnerblog.com/2009/06/no-renderpartial-from-a-different-folder/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 18:17:54 +0000</pubDate>
		<dc:creator>twagner</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=1019</guid>
		<description><![CDATA[Maybe this is not supposed to work out of the box in the manner I thought&#8230;..
In order to render something similar to a user control in ASP.NET MVC one creates a partial view &#8211; which ends up with the extension of ascx.  This partial view can be embedded into and rendered through other pages (views) [...]]]></description>
			<content:encoded><![CDATA[<p>Maybe this is not supposed to work out of the box in the manner I thought&#8230;..</p>
<p>In order to render something similar to a user control in ASP.NET MVC one creates a partial view &#8211; which ends up with the extension of ascx.  This partial view can be embedded into and rendered through other pages (views) . That&#8217;s normally done via the RenderPartial method. It all works very well until you need to render a partial view that sits in another folder.Then for whatever reason the system starts to complain bitterly. Yes I know &#8230; your supposed to put it into the Shared folder. But somehow that doesnt sit well with my sense of organization. Why have one folder that has a bunch of partials from all over the place.  ( I have not tried adding sub folders to /Shared. Maybe thats an idea as well)</p>
<p>Seems to me that I should be able to create a partial view that has a table of data and then embed this partial view in a variety of other views- wherever I might need this list. And the places where I might need this list could be scattered all over the Views structure.</p>
<p>I am not the only one who ran into issues like this.  <a href="http://www.clanmonroe.com/Blog/archive/2009/04/30/organize-your-views-in-asp.net-mvc.aspx" target="_blank">Here is a post by a fellow</a> who had similar issues with entire pages.</p>
<p>An internet search turned up the following idea which may possibly do the job:</p>
<pre>protected void Application_Start()
{
	var engine = (WebFormViewEngine) ViewEngines.Engines[0];
	engine.MasterLocationFormats = new string[] { "~/Views/{1}/{0}.master", "~/Views/Shared/{0}.master" };
	engine.ViewLocationFormats = new string[] { "~/Views/{1}/{0}.aspx", "~/Views/{1}/{0}.ascx", "~/Views/Shared/{0}.aspx", "~/Views/Shared/{0}.ascx" };
	engine.PartialViewLocationFormats = new string[] { "~/Views/{1}/Partial/{0}.aspx", "~/Views/{1}/Partial/{0}.ascx", "~/Views/Shared/Partial/{0}.aspx", "~/Views/Shared/Partial/{0}.ascx" };
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2009/06/no-renderpartial-from-a-different-folder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The problem with the ASP.NET MVC Revolution</title>
		<link>http://wagnerblog.com/2009/06/the-problem-with-the-aspnet-mvc-revolution/</link>
		<comments>http://wagnerblog.com/2009/06/the-problem-with-the-aspnet-mvc-revolution/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 21:58:36 +0000</pubDate>
		<dc:creator>twagner</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=1010</guid>
		<description><![CDATA[Many years ago I lived in a Communist country. I grew up there.  All children growing up in this Communist country had to learn about various Revolutions in history. Most dominantly the October Revolution in Russia that overthrew the Czar and established a Communist government. So it can be said that I have some idea [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-1011" style="border: 1px solid black; margin: 5px;" title="blog-revolution" src="http://wagnerblog.com/wp-content/uploads/2009/06/blog-revolution-292x300.jpg" alt="blog-revolution" width="292" height="300" />Many years ago I lived in a Communist country. I grew up there.  All children growing up in this Communist country had to learn about various Revolutions in history. Most dominantly the October Revolution in Russia that overthrew the Czar and established a Communist government. So it can be said that I have some idea of what it takes to make a Revolution.</p>
<p>Having spent some time with ASP.NET MVC &#8211; the revolutionary &#8221; new &#8221; direction of ASP.NET software development I have a few observations:</p>
<p>ASP.NET MVC is more than just the code necessary to make MVC compliant apps in C#. Seriously. It is a lot more. Just as the .NET System.Web namespace put a wrapper around HTML so does ASP.NET MVC.  Its not as deeply permeated as the regular Webform system but there is still an awful lot more to this implementation than simply the code needed to run an MVC app.</p>
<p>Here is the deal &#8211; in order to have a plain and simple MVC you don&#8217;t need all the stuff provided by ASP.NET MVC.  Basically you need a bit of dependency injection (just a few lines), an Action Framework and Routing Structure. That&#8217;s it.</p>
<p>Of course ASP.NET MVC has all that &#8211; and I must say the Action Framework is done very nicely &#8211; but at the same time it also contains a fullfledged attempt to substitute an entirely new paradigm for the existing webform system. Consequently you have all sorts of wacky stuff going on like Views that look a look like tag soup , partial views that are similar to user controls, a magical way of passing data back and forth among the models, views and controllers and number of other features that are intended to make the system more testable.</p>
<p>I have spent several days so far building an internal test app on the ASP.NET MVC framework and I am here to tell you this is no walk in the park. Considering this is a released product, it strikes me as ironic that there are only a handful sample apps out there which contain any sort of complexity.  There are a handful open source apps out there which range from absolutely pedestrian to entirely new generations of MVC that dont much resemble the MS release version (on the surface anyways)</p>
<p>In addition there seems to be a lot of flux in what is accepted as a good design and architecture. Several of the more prominent samples (Kobe, Oxite, MVC Commerce) are being rewritten based on extensive criticism by the OSS community. This begs the question who is the OSS community and how is it these folks have so much criticism of these products. I really hope its more than the handful of &#8220;usual suspects&#8221; in the .NET community. You know&#8230; the guys that like to congregate around the Alt.Net water cooler.</p>
<p>Here is my issue. When I am learning a new tool Ilook for definitive examples of good design and usage of that tool. And I just don&#8217;t see enough of those examples. Having 6 month old sample apps criticized as being incorrect architecture and in need of updates only adds to the frustration levels.</p>
<p>Consider how many millions of ASP.NET programmers there are in the world &#8211; heck the Indian sub continent alone can probably account for a few mill &#8211; the dearth of good ASP.NET MVC reference material is alarming. One would think that there would be more excitement around this stuff.  Of course I don&#8217;t have the same visibility into acceptance rates as some of the MS Regional directors. Its quite a dilemma I think. For almost 10 years MS web technology has gone one way ( web forms) and now here comes this entirely different way of doing it.  Like I said before, I am still waiting to see how ASP.NET 4.0 deals with routing (it still uses web forms). In the meantime I will keep plugging away at MVC.</p>
<p>One thing is for sure, in order for this Revolution to take hold there will need to be a much greater acceptance by the .NET community and that in turn requires more than a handful of books  and a dozen sample apps. In the end I am not even sure that the greater developer community at large will switch to MVC as opposed to Silverlight. Yes MVC will always have its audience , but I am thinking along the lines of the thousands of corporate developers. These guys would have a hard time with yet another paradigm shift and the reward seems to be so much greater in the area of Silverlight apps for these fellows.</p>
<p>I sure hope that in time my posts about this framework will become more positive.  I suppose that once I get past the frustrations there is a lot to like there.</p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2009/06/the-problem-with-the-aspnet-mvc-revolution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vendor Client Relations</title>
		<link>http://wagnerblog.com/2009/06/vendor-client-relations/</link>
		<comments>http://wagnerblog.com/2009/06/vendor-client-relations/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 01:15:21 +0000</pubDate>
		<dc:creator>twagner</dc:creator>
				<category><![CDATA[Software Quality]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=1008</guid>
		<description><![CDATA[This is so correct and true to life it is scary.

]]></description>
			<content:encoded><![CDATA[<p>This is so correct and true to life it is scary.</p>
<p><object width="660" height="405" data="http://www.youtube-nocookie.com/v/R2a8TRSgzZY&amp;hl=en&amp;fs=1&amp;color1=0x006699&amp;color2=0x54abd6&amp;border=1" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube-nocookie.com/v/R2a8TRSgzZY&amp;hl=en&amp;fs=1&amp;color1=0x006699&amp;color2=0x54abd6&amp;border=1" /><param name="allowfullscreen" value="true" /></object></p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2009/06/vendor-client-relations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More ASP.NET MVC Puzzlement</title>
		<link>http://wagnerblog.com/2009/05/more-aspnet-mvc-puzzlement/</link>
		<comments>http://wagnerblog.com/2009/05/more-aspnet-mvc-puzzlement/#comments</comments>
		<pubDate>Sun, 31 May 2009 03:50:09 +0000</pubDate>
		<dc:creator>twagner</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[.NET Code Related]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=1004</guid>
		<description><![CDATA[I have been slogging my way through the MS MVC architecture. There are some good parts and some really hard to get used to parts. Some stuff just has me completely puzzled. For example when your used to setting an autopostback property on a drop down control, the need to have to hand code some [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://wagnerblog.com/wp-content/uploads/2009/05/puzzled.jpg" alt="puzzled" title="puzzled" width="240" height="280" class="alignright size-full wp-image-1005" />I have been slogging my way through the MS MVC architecture. There are some good parts and some really hard to get used to parts. Some stuff just has me completely puzzled. For example when your used to setting an autopostback property on a drop down control, the need to have to hand code some js to do the same every time I want an autopostback gets old pretty quick. </p>
<p>I love the way MVC separates out the code that used to get thrown into the same code behind in web forms. It really shines in that regard. Who knows maybe it will have a positive influence on webforms apps in that regard. </p>
<p>For the moment my bottom line is that it takes a lot longer to write the same functionality in MVC than webforms. That&#8217;s partly due to the learning curve and partly due to the fact that there is more code to write. The fact that there is more code will be interesting to watch. Maybe in time people will find some efficient practices that will help to bring down the overall effort required. If thats not the case I wonder how someone would justify the cost of building a system one way versus another. And dont tell me to build it in MVC because webforms are evil. Thats nonesense. We have almost ten years of webform driven sites out there. </p>
<p>Lastly, for all those folks who are jumping on the &#8220;Viewstate is evil&#8221; bandwagon &#8211; which seems to be the same lemmings who jumped on Datasets as a DAO in 2002 &#8211; have a look at the following<a href="http://www.slideshare.net/rudib/aspnet-mvc-performance"> performance test</a>. 6-8 requests per second for an MVC app is laughable. I sure hope that&#8217;s not the case presently. Its worth some internal testing to see. By the way, just on a purely subjective note, for the past year I have frequently spent time on MarketWatch. Since they switched to MVC I have noticed a small performance penalty. Purely subjective. Heck maybe its even a matter of browsers. </p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2009/05/more-aspnet-mvc-puzzlement/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
