<?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 &#187; RoR</title>
	<atom:link href="http://wagnerblog.com/category/ror/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>Decisions Decisions&#8230;..</title>
		<link>http://wagnerblog.com/2009/05/decisions-decisions/</link>
		<comments>http://wagnerblog.com/2009/05/decisions-decisions/#comments</comments>
		<pubDate>Mon, 25 May 2009 20:39:35 +0000</pubDate>
		<dc:creator>twagner</dc:creator>
				<category><![CDATA[.NET Tools]]></category>
		<category><![CDATA[RoR]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Software Quality]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[sample code]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=997</guid>
		<description><![CDATA[ As a programmer / consultant I always work on improving my skills. Except for the past year or so. I coasted a little bit. Consequently I am faced with two technologies that I need to study up. MS MVC and Silverlight. My personal feeling is that Silverlight will grow into the larger market over [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://wagnerblog.com/wp-content/uploads/2009/05/decisions11-247x300.jpg" alt="decisions11" title="decisions11" width="247" height="300" class="alignleft size-medium wp-image-998" /> As a programmer / consultant I always work on improving my skills. Except for the past year or so. I coasted a little bit. Consequently I am faced with two technologies that I need to study up. MS MVC and Silverlight. My personal feeling is that Silverlight will grow into the larger market over time. But at the moment its still lacking a lot of tools that a normal developer (not a bleeding edge addict) would come to expect in a platform. On the other hand MVC is slated to take off like a rocket. There is sooooo much pent up RoR envy in the .NET developer community its ridiculous. </p>
<p>My main issues with MS MVC is the fact that it tries to be something very similar to RoR. I feel this way because Model View Controller can be done without MS MVC. As a matter of fact as I have mentioned ad-nauseaum Dan and I have built and MVC driven framework a while back. So if I am interested in just the simplest most straightforward way to plug MVC into ASP.NET &#8211; thats the way to go &#8211; just build a small and simple action framework / router. No tag-soup either. I suppose I have to revisit this after ASP.NET 4.0 is out because it will incorporate routing. </p>
<p>Having said all that as a preamble, I would be silly not to study up on MS MVC. There are some aspects I really do like about it. The great enforcement of separation of concerns for starters. </p>
<p>As I looked over the web to find some decent examples of people who have blazed trails in this area I came across <a href="http://codebetter.com/blogs/karlseguin/archive/2009/04/28/presenting-codebetter-canvas.aspx">Karl Seguin&#8217;s</a> <a href="http://code.google.com/p/codebettercanvas/">Canvas MVC sample app</a>. It was written with one specific purpose in mind: as a simple learning application that illustrates a good way to build an MVC app. In my opinion this app is a resounding success. It has enough code to illustrate the majority of work that one has to deal with (i.e. data entry, paged lists etc). And it doesn&#8217;t try to throw every possible scenario in the mix. The result is a well structured easy to follow sample. Believe me I have looked at numerous different ones out there and this is by far one of the better designed samples. Love it !</p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2009/05/decisions-decisions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Look at open source projects &#8212; get fired</title>
		<link>http://wagnerblog.com/2007/06/look-at-open-source-projects-get-fired/</link>
		<comments>http://wagnerblog.com/2007/06/look-at-open-source-projects-get-fired/#comments</comments>
		<pubDate>Wed, 06 Jun 2007 13:09:27 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[RoR]]></category>
		<category><![CDATA[Software Architecture]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=840</guid>
		<description><![CDATA[Ola Blini has a very interesting post about John Lam&#8217;s work on a MS version of Ruby. The most important part of it &#8211; to me &#8211; is the point that MS employees are not allowed to use Open Source projects in any way when developing new code. Hence John is not allowed to even [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ola-bini.blogspot.com/2007/06/there-can-be-only-one-tale-about-ruby.html">Ola Blini</a> has a very interesting post about John Lam&#8217;s work on a MS version of Ruby. The most important part of it &#8211; to me &#8211; is the point that MS employees are not allowed to use Open Source projects in any way when developing new code. Hence John is not allowed to even look at MRI when working on his implementation of Ruby. All I can say is Holy Smokes ! Thats quite a restraint.</p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2007/06/look-at-open-source-projects-get-fired/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft at a Crossroads? Absolutely ! How about the dev community as well.</title>
		<link>http://wagnerblog.com/2007/06/microsoft-at-a-crossroads-absolutely-how-about-the-dev-community-as-well/</link>
		<comments>http://wagnerblog.com/2007/06/microsoft-at-a-crossroads-absolutely-how-about-the-dev-community-as-well/#comments</comments>
		<pubDate>Fri, 01 Jun 2007 15:24:16 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[RoR]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Software Quality]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=839</guid>
		<description><![CDATA[Sam Gentile has a lengthy post about a recent essay called RubyMicrosoft by none other than Martin Fowler. Both items are excellent reads. Sam underscores the chasm that exists between certain elements of the MS Development community. Although I do want to add one point &#8211; I have used Dependency Injection and ORM for almost [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://codebetter.com/blogs/sam.gentile/archive/2007/05/31/microsoft-at-the-crossroads.aspx">Sam Gentile </a>has a lengthy post about a recent essay called <a href="http://martinfowler.com/bliki/RubyMicrosoft.html">RubyMicrosoft </a>by none other than Martin Fowler. Both items are excellent reads. Sam underscores the chasm that exists between certain elements of the MS Development community. Although I do want to add one point &#8211; I have used Dependency Injection and ORM for almost 2 years now but I am NOT an agile programmer. I am not thrilled with writing unit tests. There I&#8217;ve said it. Yes its not very fashionable and who knows maybe in the future I will get into unit tests but for now &#8211; thanks but no thanks. Having said that, I do see a lot of value in this practice when you have a team of people who need to work on a larger code base.</p>
<p>I would also like to juxtapose the opinions of Sam and Fowler with the absolutely <a href="http://weblogs.asp.net/nunitaddin/">shameful way that MS has been acting toward Jamie Cansdale </a>who had the gall to be smart enough to figure out how to create a VS Express Add-In without using MS&#8217; plugin architecture and keys. This whole scene <strong>stinks to high heaven</strong>. No wonder people are leaving the realm of MS centric development. And the more people leave the more brainshare alternate technologies gather. In addition the more people leave the more pressure there will be on companies to implement projects with alternate technologies. I remember the days when VB was very young and most corporations were advertising for PowerBuilder developers. We are now in a similar cycle. For Pete&#8217;s sake if you have guys like <a href="http://www.hanselman.com/blog/default.aspx?page=2">Scott Hanselman</a> going to Ruby conferences and blogging that he is a &#8220;closet railer &#8221; (ok thats my term ), then you know somethings up.</p>
<p>UPDATE 6-3-07: Frans Bouma who is an ISV <a href="http://weblogs.asp.net/fbouma/archive/2007/06/02/thou-shall-not-work-around-technical-limitations-whatever-they-are.aspx">responds at length to the ridiculous crap</a> the MS is pulling with Jamie.  You know, the &#8220;anything but MS&#8221; camp has been accusing MS for many years of this crappy behavior. I always thought there was a lot of posturing but it looks like they were right all along. MS really is a bully.</p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2007/06/microsoft-at-a-crossroads-absolutely-how-about-the-dev-community-as-well/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter scales</title>
		<link>http://wagnerblog.com/2007/05/twitter-scales/</link>
		<comments>http://wagnerblog.com/2007/05/twitter-scales/#comments</comments>
		<pubDate>Thu, 17 May 2007 13:57:15 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[RoR]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=822</guid>
		<description><![CDATA[Here is a slide show that explains the pains and optimizations that Twitter went through. With all the cute names for libs and apps I feel like I fell into the Kindergardent class of Ruby. Seriously.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://http://www.slideshare.net/Blaine/scaling-twitter">Here </a>is a slide show that explains the pains and optimizations that Twitter went through. With all the cute names for libs and apps I feel like I fell into the Kindergardent class of Ruby. Seriously.</p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2007/05/twitter-scales/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>One Softie&#8217;s experience</title>
		<link>http://wagnerblog.com/2007/02/one-softies-experience/</link>
		<comments>http://wagnerblog.com/2007/02/one-softies-experience/#comments</comments>
		<pubDate>Mon, 26 Feb 2007 04:01:20 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[.NET Tools]]></category>
		<category><![CDATA[RoR]]></category>
		<category><![CDATA[Software Architecture]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=785</guid>
		<description><![CDATA[Microsoft centric developers aka &#8220;Softies&#8221; (like myself) have very little exposure to MVC and Action Frameworks. In reading &#8220;Rails for Java Developers&#8221; I see again and again how RoR is built in many ways like Struts and Spring and how ActiveRecord resolves many of the same issues that Hibernate addresses. &#160;So I can only imagine [...]]]></description>
			<content:encoded><![CDATA[<p>Microsoft centric developers aka &ldquo;Softies&rdquo; (like myself) have very little exposure to MVC and Action Frameworks. In reading &ldquo;Rails for Java Developers&rdquo; I see again and again how RoR is built in many ways like Struts and Spring and how ActiveRecord resolves many of the same issues that Hibernate addresses. <span style="mso-spacerun: yes">&nbsp;</span>So I can only imagine that a typical Softie would approach RoR with the same curiosity accorded to other development tools, like Subsonic or even LLBLGen for example. As it stands there is no straight comparison between these technologies.</p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt">Some would argue that code behind files are the equivalent of the controller in an MVC model. That assumption is incorrect. Code behind is more akin to a View Helper but not the same as a controller. The reason being plain and simple that in a well constructed MVC system, the controller can be used to drive all sorts of front ends and in our Softie world the code behind is pretty well married to either a web page or windows form. &nbsp;</p>
<p>I have to tell you that without some of the work we did for SkillJam Technologies in 2005/2006 I would<span style="mso-spacerun: yes">&nbsp; </span>not know or appreciate these systems. Again, as a typical Softie one has very little exposure to this approach. It reminds me of trying to explain the color blue to blind person &ndash; or being married to a single person. Its an experiencial thing. But once you&rsquo;ve seen it work &hellip; oh boy you don&rsquo;t ever want to go back to the old way of building apps. </p>
<p>It is remarkable to me that both the Java based world of Struts and Ruby on Rails world have the notion of a routing table. In the .NET community there is no equivalent, save perhaps the Windsor project and PathNET ( to tout our own horn a little bit) The PathNET framework that Dan and I have deployed at SkillJam contains a routing table . As a matter of fact, PathNET is essentially very similar to Struts and RoR in its ability to map a call like <a href="http://download.skilljam.com/WebSite/Site/Downloads/Login"><font face="Calibri" color="#0000ff" size="3">http://download.skilljam.com/WebSite/Site/Downloads/Login</font></a><font size="3"></font><font face="Calibri"> to an action that intercepts the Request and based on a routing table takes appropriate actions (hence Action Framework) . The whole concept is so similar to RoR and Struts that it just tickles me. </font></p>
<p>There are other aspects of the Java / RoR universe that maybe foreign to Softies.We are just now getting into the idea of entity objects and a first class Object Relational Mapper in ADO.NET 3.x ( all the LINQ technology). Mind you the best product of this breed has been around for 5 years &ndash; LLBLGen. Trust me when I say it is better than LINQ and better than even Hibernate. But alas, I imagine Microsoft&rsquo;s Evangelism and Marketing engine will advertise LINQ&nbsp; to such an extend that those few of us who are pointing the way to a better product will be drowned out completely by the collective hype generated. Bummer. I am really not looking forward to all the wannabe&rsquo;s who have been spreading the Gospel Of The Stored Procedure changing their tune and talking about ORM technology as though they had invented it. </p>
<p>Anyway is there a point to this post? Why yes! I want to go on record as saying that PathNET with its ActionFramework and usage of LLBLGen can hold its own with many of the areas of Java Frameworks and RoR.&gt;We even have scaffolding thanks to a beta that LLBLGen is putting out. </p>
<p>And more importantly PathNET has something that RoR or equivalent Java tools do not have . It&rsquo;s called ActiveContent, and it is basically the marriage of an Action Framework to a Content Management System which builds on the unmatched capabilities of ASP.NET.<span style="mso-spacerun: yes">&nbsp; </span>Microsoft did &ldquo;wrap&rdquo; all aspects of a web application when they released ASP.NET. We take advantage of this fact by providing a way to relate content to actions&nbsp;and those actions to&nbsp;server controls. I know this sounds a little abstract, especially if you have never seen an Action Framework do its thing, but trust me this is some very cool technology. I hope to find some sort of paid project work that allows us to continue the work on this tool. Imagine being able to change the way an application executes without having to mess with the code of the app.</p>
<p>At SkillJam we dealt with a company that had 100+ partners, each of which had a slightly different looking site (some more drastically different than others) . Rolling out a Partner Site was always a pain point for the team, especially when there was a lot of custom work to be done. PathNET was well on its way to allow non technical people to change a site design including the way code executed and the workflows of an application without writing code. </p>
<p>Unfortunately SkillJam imploded under some business management issues. If we would have had another 6&nbsp; moths of concentrated develioment we could have finished this tool. Bummer. </p>
<p>Anyeway. PathNET does stack up pretty well in a comparison. We are short on some of the&nbsp;Testing goodness that&nbsp;is built into RoR. And&nbsp;while RoR has migrations we have versioned instances of ORM models.&nbsp;&nbsp;Nonetheless PathNET has best of three worlds in severla key areas</p>
<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 5.4pt 0in 5.4pt" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: black 1pt solid; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"><b style="mso-bidi-font-weight: normal"><font face="Calibri">Key Technology</font></b></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal"><font face="Calibri">Java<o :p></o></font></b></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal"><font face="Calibri">Ruby on Rails<o :p></o></font></b></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><b style="mso-bidi-font-weight: normal"><font face="Calibri">PathNET<o :p></o></font></b></p>
</td>
</tr>
<tr style="mso-yfti-irow: 1">
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: black 1pt solid; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"><b style="mso-bidi-font-weight: normal"><font face="Calibri">MVC<o :p></o></font></b></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><font face="Calibri">Struts / Spring</font></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><font face="Calibri">ActiveView</font></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><font face="Calibri">Action Framwork</font></p>
</td>
</tr>
<tr style="mso-yfti-irow: 2">
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: black 1pt solid; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"><b style="mso-bidi-font-weight: normal"><font face="Calibri">ORM<o :p></o></font></b></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><font face="Calibri">Hibernate</font></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><font face="Calibri">ActiveRecord</font></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><font face="Calibri">LLBLGen</font></p>
</td>
</tr>
<tr style="mso-yfti-irow: 3">
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: black 1pt solid; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"><b style="mso-bidi-font-weight: normal"><font face="Calibri">Scaffolding<o :p></o></font></b></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><font face="Calibri">-</font></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><font face="Calibri">Yes</font></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><font face="Calibri">Yes</font></p>
</td>
</tr>
<tr style="mso-yfti-irow: 4">
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: black 1pt solid; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"><b style="mso-bidi-font-weight: normal"><font face="Calibri">Unit Tests<o :p></o></font></b></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><o :p><font face="Calibri">&nbsp;</font></o></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><font face="Calibri">Yes</font></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><font face="Calibri">No</font></p>
</td>
</tr>
<tr style="mso-yfti-irow: 5">
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: black 1pt solid; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"><b style="mso-bidi-font-weight: normal"><font face="Calibri">Active Content<o :p></o></font></b></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><font face="Calibri">-</font></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><font face="Calibri">-</font></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><font face="Calibri">Yes</font></p>
</td>
</tr>
<tr style="mso-yfti-irow: 6; mso-yfti-lastrow: yes">
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: black 1pt solid; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal"><b style="mso-bidi-font-weight: normal"><font face="Calibri">Server Controls<o :p></o></font></b></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><font face="Calibri">-</font></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><font face="Calibri">-</font></p>
</td>
<td style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #f0f0f0; WIDTH: 119.7pt; PADDING-TOP: 0in; BORDER-BOTTOM: black 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid black .5pt; mso-border-themecolor: text1; mso-border-left-alt: solid black .5pt; mso-border-left-themecolor: text1; mso-border-top-alt: solid black .5pt; mso-border-top-themecolor: text1; mso-border-bottom-themecolor: text1; mso-border-right-themecolor: text1" valign="top" width="160">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: center" align="center"><font face="Calibri">Yes</font></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><span style="mso-spacerun: yes"><font face="Calibri" size="3">&nbsp;</font></span></p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2007/02/one-softies-experience/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Rails for Java Developers</title>
		<link>http://wagnerblog.com/2007/02/rails-for-java-developers/</link>
		<comments>http://wagnerblog.com/2007/02/rails-for-java-developers/#comments</comments>
		<pubDate>Wed, 21 Feb 2007 04:30:14 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[RoR]]></category>
		<category><![CDATA[Software Architecture]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=781</guid>
		<description><![CDATA[I&#8217;m browsing through Stuart Halloway and Justin Gehtland&#8217;s recent book &#8220;Rails for Java Developers&#8221; , published by the Pragmatic Programmers.&#160;The mere fact that there are more and&#160;more Java&#160;centric Ruby and RoR books out there tells you something. And while my main&#160;language is C#, there are enough similarities with&#160;Java to&#160;make it interesting to read.&#160;&#8220;Rails for Java [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="Fr_rails4java_small" hspace="1" src="http://www.wagnerblog.com/images/fr_rails4java_small.jpg" align="left" vspace="1" border="0" />I&rsquo;m browsing through Stuart Halloway and Justin Gehtland&rsquo;s recent book &ldquo;Rails for Java Developers&rdquo; , published by the <a href="http://www.pragmaticprogrammer.com/" target="_blank">Pragmatic Programmers.</a>&nbsp;The mere fact that there are more and&nbsp;more Java&nbsp;centric Ruby and RoR books out there tells you something. And while my main&nbsp;language is C#, there are enough similarities with&nbsp;Java to&nbsp;make it interesting to read.&nbsp;&ldquo;Rails for Java Developers&rdquo; has the single best discussion of ActiveRecord I have ever seen. I especially appreciate how the authors pulled ActiveRecord out on its own and discuss it without being tied directly to RoR. The book juxtaposes ActiveRecord against Hibernate and touches on many of the points most important to people working with ORM frameworks. ( I work with one in .NET as well so this was very applicable ). For example, the definition of a POJO and its XML Mapping files in Java took up an entire page in this book&hellip; turn the page and come face to face with the following line: </p>
<p>The ActiveRecord approach requires exactly one line of Ruby code and no YAML or XML. <em>Simply create the class with the right </em><em>name:</em><strong>&nbsp; class </strong>Person &lt;ActiveRecord::Base; <strong>end</strong></p>
<p><strong>Did you see that? 1 line of code ! </strong></p>
<p>Ok, I am a big skeptic when it comes to frameworks and tools. They all work nicely when you have an ideal environment, but what if you have to manipulate them under the hood. What if you are working with the legacy schema from hell? Well, there are examples that show what to do and how to override functionality to make ActiveRecord do your bidding. </p>
<p>I&rsquo;m not a Java developer, yet I found this book well worth my time. Hope you will too. </p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2007/02/rails-for-java-developers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Programmers are not interested in quality and Ruby on Rails has some serious short comings</title>
		<link>http://wagnerblog.com/2007/02/programmers-are-not-interested-in-quality-and-ruby-on-rails-has-some-serious-short-comings/</link>
		<comments>http://wagnerblog.com/2007/02/programmers-are-not-interested-in-quality-and-ruby-on-rails-has-some-serious-short-comings/#comments</comments>
		<pubDate>Mon, 19 Feb 2007 02:52:23 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[.NET Tools]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[RoR]]></category>
		<category><![CDATA[Software Architecture]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=778</guid>
		<description><![CDATA[
Did I get your attention? Good! 
I am reading &#8220;Founders at Work&#8221; &#8211; Stories of startups early days &#8211; a collection of interviews with the founders of ArsDigita, Blogger, Marimba, 37Signals, Lycos, Flick, SixApart, PayPal and many more, written by Jessica Livingston and published by Apress. 
It is part educational, part entertaining and part infuriating [...]]]></description>
			<content:encoded><![CDATA[</p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><font face="Calibri" size="3">Did I get your attention? Good! </font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><font face="Calibri" size="3">I am reading &ldquo;Founders at Work&rdquo; &ndash; Stories of startups early days &ndash; a collection of interviews with the founders of ArsDigita, Blogger, Marimba, 37Signals, Lycos, Flick, SixApart, PayPal and many more, written by Jessica Livingston and published by Apress. </font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><font face="Calibri" size="3">It is part educational, part entertaining and part infuriating &ndash; in short it&rsquo;s a pretty good read. </font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><font face="Calibri" size="3">One of the more interesting bits I came across were the opinions and experience of Philip Greenspun, founder of ArsDigita.&nbsp;<span style="mso-spacerun: yes">&nbsp;</span></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><font face="Calibri" size="3"><span style="mso-spacerun: yes"></span><img alt="Founders" hspace="1" src="http://www.wagnerblog.com/images/founders.jpg" align="left" vspace="1" border="0" />When discussing the profession of programmers, Greenspun said the following: </font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><font face="Calibri" size="3">&ldquo; <em>Programmers have not been professionals [in the way of a lawyer of doctor &ndash;TW] because they haven&rsquo;t cared about quality. How many programmers have you asked &ldquo;Is this the right thing, is this good for the users?&rdquo; They reply &ldquo; I don&rsquo;t know<span style="mso-spacerun: yes">&nbsp; </span>and I don&rsquo;t care&rdquo;.<span style="mso-spacerun: yes">&nbsp; </span>It&rsquo;s no surprise that programmers salaries are headed down to what an illegal immigrant working at a slaughterhouse in Nebraska would get paid. &hellip;. You never know what most programmers have accomplished&hellip;. Its hard to say what the average programmer working at a large company has accomplished. Maybe he or she knows, but from the outside the projects are so big and their contributions were so small</em>&hellip;.&rdquo;</font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><font size="3"></font><font face="Calibri">Most readers of my blog would vehemently disagree. That&rsquo;s because most readers of my blog care very much about their work. At the same time I must say that Greenspun has a point about the decline of the value of a programmer. People who were Software Engineers in the 90&rsquo;s magically became Architects in the last 5 years. All the while the term Architect as used by a majority of companies I&rsquo;ve talked to simply stands for &ldquo; A developer who knows his stuff &ldquo;.&nbsp; Seriously. The currency of Architect these days is the same thing that used to be called Lead Devs. That&rsquo;s before .NET and various Java frameworks came along and&nbsp;folks with a little something on the ball started talking GoF and&nbsp;Patterns. Hey you know Patterns? You must be an Architect.&nbsp;Who can blame them. &nbsp;<span style="mso-spacerun: yes">&nbsp;</span></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><font face="Calibri" size="3">The evolution of our industry continues to amaze and abhor me in equal amounts. <span style="mso-spacerun: yes">&nbsp;</span>From people who write entire applications by copying whatever they can find on Google, without much understanding of what they are building, to Managers and Decision Makers who really are completely lost when it comes to current technology. It&rsquo;s scary.&nbsp; And somebody please tell me why our industry continues to attract these business plan astronauts who have no clue whatsoever when it comes to managing a good tech company.&nbsp; E</font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><font face="Calibri" size="3">Even Greenspun points out that his company made a mistake of hiring the wrong managers. All in a quest to grow quickly. Here is another quote from the book: &ldquo; <em>Consider McKinsey which holds itself out as one of the worlds leading repositories of knowledge on how to manage a business. They say they&rsquo;ll never grow their company more than 25% in a year because otherwise its too hard to transmit corporate culture. So if you are trying to grow faster than 25% ask yourself what you think you know about management that McKinsey doesn&rsquo;t know.</em> &ldquo; </font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><font size="3"></font><font face="Calibri">Its not just the business aspect of management that has been under fire. How tech managers do you know&nbsp;who are not familiar with anything remotely based on the current crop of technology. Heck I work with .NET every day&nbsp;and even I feel somewhat lost when it comes to latest batch of wonderful stuff from Redmond.<span style="mso-spacerun: yes">&nbsp; Are we&nbsp;on &nbsp;</span>.NET 3.5 ? <span style="mso-spacerun: yes">&nbsp;</span>Holy smokes ! Most people are barely scratching the surface of 2.0. <span style="mso-spacerun: yes">&nbsp;</span></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><font face="Calibri" size="3">While we are on the subject of new and wonderful improvements in .NET Who amongst you does not like LINQ? Dan Madoni and I were commiserating the other day about the state of affairs in ADO.NET. Why try to bolt some declarative semi-SQL like syntax on top of ADO. Where is the syntax checking? Trust me, ORM&rsquo;s can be built just as efficiently in a way that utilizes all the advantages of a compiled language. Look at Frans Bouma&rsquo;s product LLBLGen. It does everything that LINQ can do and does it better.<span style="mso-spacerun: yes">&nbsp; </span>Maybe it&rsquo;s not so fashionable these days to come down on the side of compiled languages. What with the success of RoR and Ruby. <span style="mso-spacerun: yes">&nbsp;</span>I&rsquo;ve been working with RoR on the side, just doing some basic exercises, and you know what &ndash;it&rsquo;s the same friggen problem. I mistyped one little word in Notepad and at runtime everything goes to hell. This sort of stuff is caught in the IDE in C# long before it gets into the compiler. OK, granted both Ruby In Steel and Komodo profess to handle this, but I haven&rsquo;t worked with them and can&rsquo;t say. </font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><font face="Calibri" size="3">This weird evolution I&rsquo;ve been watching does not stop with developers and managers. I&rsquo;ve also witnessed changes in customer behavior. For whatever reason in the past&nbsp;3 years I have heard more and more about customers who engage tech companies without any sort of deep reference check. Most of the time it seems that it is the Business Units themselves who engage these tech providers. Consequently there is a distinct lack of tech knowledge at the customers side. The bigger the companies the more prevalent the problem. No reference checks or hard product tests. These sort of sanity checks <span style="mso-spacerun: yes">&nbsp;</span>used to be done by the customers IT Management . <span style="mso-spacerun: yes">&nbsp;</span>In many cases the in house IT teams are not able to keep up with the technology used by the consulting and tech solution providers.&nbsp; In some cases the in house teams were decimated by dreams of offshoring grandeur, or some other aspect of business reorganization. That may also contribute to this issue.</font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><font face="Calibri" size="3">Certain&nbsp;companies take a different, more pragmatic approach. These organizations enter into contracts in a manner that shifts all the risk onto the vendor. I completely sympathize with these companies. <span style="mso-spacerun: yes">&nbsp;</span>Essentially&nbsp;they stipulate that the project will be built on the basis of a small engagement fee. The customer will not pay the lions share of the money due until the project is done and working.&nbsp;<span style="mso-spacerun: yes">&nbsp; </span>Of course I&rsquo;ve also heard it told that these terms were creatively designed by the solution providers sales team.&nbsp; (&nbsp;nee Business Mgmt Astronauts) No matter who came up with the idea, <span style="mso-spacerun: yes">&nbsp;</span>put yourself in the shoes of the management of the tech corp that just signed a LOE or contract containing these terms.<span style="mso-spacerun: yes">&nbsp; </span>That company is going to be under tremendous pressure because the entire transaction is running in reverse. Instead of selling already built and tested code base, what is frequently being sold is a modification of the company&rsquo;s product and as such will be susceptible to all the issues and fallacies of new code. </font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><font face="Calibri" size="3">Some shops with very strong quality practices can pull this off and prosper. Most shops I&rsquo;ve seen can&rsquo;t. Most shops I&rsquo;ve seen do not work from the basis of a consistently designed architecture. Instead, whomever is free at a given point is assigned the task to make modifications to the core product. I suppose this is done because Management doesn&rsquo;t understand some of the finer details of the work. Programmer become blocks on project plans that can be plugged in and moved around as needed. (never mind the fact that this is a huge misconception) <span style="mso-spacerun: yes">&nbsp;</span>Couple that mess with the fact that <span style="mso-spacerun: yes">&nbsp;</span>programmer rather rewrite code than refactor it and you have the makings of a continued mess. </font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><font face="Calibri" size="3">I&rsquo;m not surprised that these various external forces drive so many good programmers into situations where they just become glorified puzzle solvers. If you are part of a good team with high standards of quality, count your blessings. If you work on a solid product that can withstand the vagaries of continuing changes in the business, count you blessings and if on top of that you work in a company that is driven by a sensible sales and growth strategy thank your lucky stars or God or whatever force you believe in that helped you find this place. It is indeed a rare company. </font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 10pt"><font face="Calibri" size="3"></font>&nbsp;</p>
<p><a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=Closing Medley: Folsom Prison Blues - I Walk The Line - Ring Of Fire - The Rebel - Johnny Yuma&amp;artistTerm=Johnny Cash with The Carter Family, The Statler Brother and Carl Perkins"></a>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2007/02/programmers-are-not-interested-in-quality-and-ruby-on-rails-has-some-serious-short-comings/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>RadRails is nice&#8230;. if you can configure it</title>
		<link>http://wagnerblog.com/2007/02/radrails-is-nice-if-you-can-configure-it/</link>
		<comments>http://wagnerblog.com/2007/02/radrails-is-nice-if-you-can-configure-it/#comments</comments>
		<pubDate>Thu, 01 Feb 2007 04:17:11 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[RoR]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=765</guid>
		<description><![CDATA[As you know, in a complete fit of me-too-ism I&#8217;ve been spending time with RoR. One of the nicer free IDE&#8217;s in that part of the world is RadRails. I had been using Notepad++ and JEdit, but I have to say just simply having something that feels more like an IDE is nice. One problem [...]]]></description>
			<content:encoded><![CDATA[<p>As you know, in a complete fit of me-too-ism I&#8217;ve been spending time with RoR. One of the nicer free IDE&#8217;s in that part of the world is RadRails. I had been using Notepad++ and JEdit, but I have to say just simply having something that feels more like an IDE is nice. One problem with RadRails though &#8211; its not the easiest thing in the world to configure. You have to know where all sorts of bits and pieces are installed and kept. From ruby to rails to mongrel. Since I do this little bit of work in the evening and don&#8217;t have a lot of time to dig around I just never could get that darn thing running. So it just sat there. Slick looking but not working. Hey that reminds me of some project managers <img src='http://wagnerblog.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . This evening I came across a page on InstantRails that solved all my ails. Having installed InstantRails, I came across the following note</p>
<p><em>Automatic RadRails configuration: if your choose your Instant Rails &#8220;rails_apps&#8221; subdirectory as your workspace, then all of the RadRails paths (to ruby, rake, ri, rdoc, etc.) will be automatically set. </em></p>
<p>Well hot dog it really worked. So now I&#8217;ve got some nice way of working with RoR. At least until the next neat IDE comes along.</p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2007/02/radrails-is-nice-if-you-can-configure-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>the { buckblogs :here }: Concerns in ActiveRecord</title>
		<link>http://wagnerblog.com/2007/01/the-buckblogs-here-concerns-in-activerecord/</link>
		<comments>http://wagnerblog.com/2007/01/the-buckblogs-here-concerns-in-activerecord/#comments</comments>
		<pubDate>Thu, 25 Jan 2007 19:09:34 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[RoR]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=760</guid>
		<description><![CDATA[This is annoying. I would love it if a language supported all aspects of OO. In C# this is braindead simple. 
&#8220;&#8230;..Ruby does not support multiple-inheritance. Personally, I have mixed feelings about that, but the fact of the matter is, you can accomplish almost exactly the same thing using modules.
Consider this ActiveRecord scenario. In Basecamp, [...]]]></description>
			<content:encoded><![CDATA[<p dir="ltr" style="MARGIN-RIGHT: 0px">This is annoying. I would love it if a language supported all aspects of OO. In C# this is braindead simple. </p>
<p dir="ltr" style="MARGIN-RIGHT: 0px">&ldquo;&hellip;..Ruby does not support multiple-inheritance. Personally, I have mixed feelings about that, but the fact of the matter is, you can accomplish almost exactly the same thing using modules.</p>
<p>Consider this ActiveRecord scenario. In Basecamp, we allow files to be attached to both messages, and comments. One way to do this would be to have both messages and comments inherit from a common ancestor, via single-table inheritance. Alas, the two models (in our case) are different enough that STI is not a viable option here. &hellip;.&rdquo;</p>
<p dir="ltr" style="MARGIN-RIGHT: 0px">&nbsp;</p>
<p><cite cite="http://weblog.jamisbuck.org/2007/1/17/concerns-in-activerecord"><a href="http://weblog.jamisbuck.org/2007/1/17/concerns-in-activerecord" target="_blank">Read More</a></cite>.</p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2007/01/the-buckblogs-here-concerns-in-activerecord/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Bruce Perens Rails Security with Model Security</title>
		<link>http://wagnerblog.com/2007/01/bruce-perens-rails-security-with-model-security/</link>
		<comments>http://wagnerblog.com/2007/01/bruce-perens-rails-security-with-model-security/#comments</comments>
		<pubDate>Mon, 22 Jan 2007 18:43:55 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[RoR]]></category>

		<guid isPermaLink="false">http://wagnerblog.com/?p=755</guid>
		<description><![CDATA[This certainly looks very useful to a majority of web apps I&#8217;ve worked on. Being able to control at a fine grained detail the access to a given model is a great idea. Wonder if there is an audit trail example out there as well
]]></description>
			<content:encoded><![CDATA[<p><a href="http://perens.com/FreeSoftware/ModelSecurity/Tutorial.html" target="_blank">This </a>certainly looks very useful to a majority of web apps I&rsquo;ve worked on. Being able to control at a fine grained detail the access to a given model is a great idea. Wonder if there is an audit trail example out there as well</p>
]]></content:encoded>
			<wfw:commentRss>http://wagnerblog.com/2007/01/bruce-perens-rails-security-with-model-security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
