<?xml version="1.0" encoding="UTF-8"?>
<rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>GridPulse</title>
	
	<link>http://www.gridpulse.com</link>
	<description>as stimulating as black coffee and just as hard to sleep after.</description>
	<lastBuildDate>Fri, 14 May 2010 19:19:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/gridpulse" /><feedburner:info uri="gridpulse" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Why releasing new versions is like shaving</title>
		<link>http://feedproxy.google.com/~r/gridpulse/~3/FE-7oRmxUbg/</link>
		<comments>http://www.gridpulse.com/2010/04/21/why-releasing-new-versions-is-like-shaving/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 21:59:59 +0000</pubDate>
		<dc:creator>Bogdan</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Working smart]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[releasing]]></category>
		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://www.gridpulse.com/?p=243</guid>
		<description><![CDATA[Some time ago I was talking about the similarities of shaving and product releasing, especially the impact of release frequency on velocity. Returning to this idea, i realized that,increased releasing or increased deployment frequency has a beneficial effect on the overall velocity and quality of the release or deployment, while also improving team morale. Because [...]]]></description>
			<content:encoded><![CDATA[<p>Some time ago I was talking about the similarities of shaving and product releasing, especially the impact of release frequency on velocity.</p>
<p><a href="http://twitter.com/gridpulse/status/3513151986"><img src="http://www.gridpulse.com/wp-content/uploads/2010/04/releasing_shaving1.jpg" alt="" title="Releasing is like shaving" width="400" height="194" class="alignnone size-full wp-image-491" /></a></p>
<p>Returning to this idea, i realized that,<b>increased releasing or increased deployment frequency has a beneficial effect on the overall velocity and quality of the release or deployment, while also improving team morale</b>.</p>
<p>Because of this, I&#8217;ve been trying to create and respect strict deployment schedules, matching every development or bug-fixing iteration, namely(and usually)&#8230; every week. </p>
<p>It&#8217;s hard at the beginning and the first 3-4 iterations are tough (testing and deployment continues through the night because of inefficient planning and scoping) but after the team gets into the rhythm releasing and deployment becomes a trivial and actually fun activity.</p>
<p>Frequent release and deployment cycles also have a tendency of raising customer trust levels and wining some points for the development team, so release fast, release often, release good&#8230; and you&#8217;ll constantly get better results.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/8pUGmTPn09mcHT9ZhkXsBBaaJ2k/0/da"><img src="http://feedads.g.doubleclick.net/~a/8pUGmTPn09mcHT9ZhkXsBBaaJ2k/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/8pUGmTPn09mcHT9ZhkXsBBaaJ2k/1/da"><img src="http://feedads.g.doubleclick.net/~a/8pUGmTPn09mcHT9ZhkXsBBaaJ2k/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/gridpulse?a=FE-7oRmxUbg:eBIYPaVjcd4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/gridpulse?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gridpulse?a=FE-7oRmxUbg:eBIYPaVjcd4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/gridpulse?i=FE-7oRmxUbg:eBIYPaVjcd4:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/gridpulse/~4/FE-7oRmxUbg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gridpulse.com/2010/04/21/why-releasing-new-versions-is-like-shaving/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.gridpulse.com/2010/04/21/why-releasing-new-versions-is-like-shaving/</feedburner:origLink></item>
		<item>
		<title>TLDSP: Fraternization, or creating friends and allies</title>
		<link>http://feedproxy.google.com/~r/gridpulse/~3/MVtAR-oJ4Ik/</link>
		<comments>http://www.gridpulse.com/2010/03/16/tldsp-fraternization-or-creating-friends-and-allies/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 20:59:27 +0000</pubDate>
		<dc:creator>Bogdan</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Working smart]]></category>
		<category><![CDATA[customer immersion]]></category>
		<category><![CDATA[friends]]></category>
		<category><![CDATA[TLDSP]]></category>

		<guid isPermaLink="false">http://www.gridpulse.com/?p=430</guid>
		<description><![CDATA[<b>Customer immersion is not a dirty secret</b>; the acceptance is not eased because they get a greater sense of ownership, <b>it is eased because you are actually doing what they want</b>. While working with the customer's project team, during long projects, you will undoubtedly start to know them better, especially the team members that tend to interact often with your team. <b>Nurture this interaction, accept them as part of the team, be honest and always respect their opinion</b>. Remember that they know what they want and your job is to help them achieve their objectives.]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://www.gridpulse.com/2010/03/02/tldsp-inception-or-what-you-do-before-you-begin/"><b>Inception</b>, or what you do before you begin</a> I talked about a phase of discovery and acquaintance both for you and for your customer. In &#8220;<b>Fraternization</b>, or creating friends and allies&#8221; I take that further, describing how genuine collaboration and friendship between you and the customer can bring you closer to delivering a great software product, while creating allies and long-lasting friendships.</p>
<p>It is a known fact in software development that <b>customer involvement in all phases of the project greatly increases the chances of success</b>. Having the customer work together with your team gives them a greater sense of ownership, increases their interest and will ease the way to acceptance. </p>
<p><b>Customer immersion is not a dirty secret</b>; the acceptance is not eased because they get a greater sense of ownership, <b>it is eased because you are actually doing what they want</b>. While working with the customer&#8217;s project team, during long projects, you will undoubtedly start to know them better, especially the team members that tend to interact often with your team. <b>Nurture this interaction, accept them as part of the team, be honest and always respect their opinion</b>. Remember that they know what they want and your job is to help them achieve their objectives.</p>
<p>Having said that, I have to warn you about two things: first, <b>fraternizing only works on long term projects</b> (I&#8217;m talking years&#8230; not months) and secondly, <b>it must be genuine</b>. Trying to fake friendship and involvement is a cheap trick that can be easily seen and that will turn them into enemies. </p>
<h3 style="display:block; width:100%; border-bottom:1px solid black; font-weight:bold;text-shadow:1px 1px 1px #BBBBBB;">Together from day zero</h3>
<p>Spend as much time as you can with the customer&#8217;s team at the beginning of the project. It&#8217;s that easy!</p>
<div style="border: 1px solid rgb(204, 204, 204); margin: 7px; padding: 5px; float: right;">
<img src="http://www.gridpulse.com/wp-content/uploads/2010/03/3385885531_4f5b69f1b5.png" alt="Friends and allies" title="Friends and allies" width="300" height="239" class="aligncenter size-medium wp-image-317" /></p>
<p><span style="font-size: 8px;">Photo by <a href="http://www.flickr.com/photos/imcomkorea/3385885531/in/photostream/">imcomkorea</a></span>
</p>
</div>
<p><b>Even if your customer is on the other side of the world, that is not an excuse</b> &#8211; get laptops, get on a plane, work with them. If it&#8217;s in their offices that&#8217;s even better. <b>I am writing this from my hotel room in Baku, Azerbaijan, after spending the entire day with the customer discussing and planning the start-up of a new phase of a national project.</b></p>
<p>No!, <b>sending a team of analysts does not qualify as &#8220;quality time together&#8221;</b>. Prove that you are on the same boat by bringing as many team members from as many disciplines as you can.</p>
<p>Quality time together will help create a bond between your teams and it will put the project on the right track. It will give your team the opportunity to prove that you are the real thing and most importantly it will:</p>
<ul>
<li>give you a valuable insight on your customers inner workings</li>
<li>have a great project start-up together and thoroughly note their expectations</li>
<li>allow you to adapt to their culture and filter out 80% of the misconceptions at minimum cost</li>
<li>have your team meet the customer&#8217;s team so that in the future, when working together, even on critical incidents they will be able to communicate more effective because of familiarity</li>
<li>exchange contacts securely and directly &#8211; detect and familiarize yourself with those key members that we talked about in <a href="http://www.gridpulse.com/2010/03/02/tldsp-inception-or-what-you-do-before-you-begin/"><b>Inception</b>, or what you do before you begin</a> </li>
</ul>
<p><b>I you run an agile shop, have iteration zero together</b>. Show them you mean business, involve them in the process, immerse them in the design phase, build a macro road-map together and position some stories. Demonstrate what you have achieved together in the first review and then&#8230;</p>
<h3 style="display:block; width:100%; border-bottom:1px solid black; font-weight:bold;text-shadow:1px 1px 1px #BBBBBB;">Enjoy the fruits of your labor</h3>
<p><b>A key factor of productivity and success, both personal and work related is celebrating.</b><br />
Celebration and dissemination of success is a key technique that, when used properly and correctly, <b>will advance your project, create long-lasting and successful collaborations, reduce stress and prepare everybody for the next big step.</b></p>
<p>Celebrating you success together, even small breakthroughs, beyond creating a bond between your team and the customers team also:</p>
<ul>
<li>gives an overall sense of good, the &#8220;closure&#8221; needed to proceed to bigger challenges</li>
<li>proves that your mission is not impossible and that by working together you can accomplish anything</li>
<li>proves to the stakeholders that the project is advancing</li>
<li>bigger success stories are perfect for large scale dissemination, getting the project out of the hidden corner and into the light</li>
</ul>
<p>You can celebrate together by taking the team out for drinks, having a small in-office party or just by having a time-out and discussing what you have just achieved. <b>It all depends on the size of the achievement.</b></p>
<p><b>After the celebration</b>, send an email to the customers team leader, project manager or even general manager stating <b>what a great job their team does and what their contribution was to the achievement</b>. <b>Don&#8217;t overdue it and don&#8217;t CC or BCC the team, their manager will let them know, in his own way.</b></p>
<h3 style="display:block; width:100%; border-bottom:1px solid black; font-weight:bold;text-shadow:1px 1px 1px #BBBBBB;">Shoot the messenger</h3>
<p>Give them a direct channel for communication. If they want to get in touch with you, make it easy for them.</p>
<p><b>Give them your phone number and always answer. </b>If you really can&#8217;t answer when they call, have an internal non-official maximum time of response and stick to it. <b>If you&#8217;re doing something else, excuse yourself, answer and tell them that you will call them back as soon as possible.</b><br />
If they use instant messaging or Skype, get an account and talk directly to them, whenever they need you. </p>
<p>You will be surprised of the long-term effects. <b>When you will need them, and you will, they will also be available for you</b>. Fixing dodgy or unclear issues will be a breeze, by avoiding emails and the incident tracking system you will win time, clarity and in time, friends and allies.</p>
<h3 style="display:block; width:100%; border-bottom:1px solid black; font-weight:bold;text-shadow:1px 1px 1px #BBBBBB;">Mutual help and lasting relations</h3>
<p>By following this simple set of rules, <b>I have gained friends in every project that I have ever worked on</b>, people that <b>I still interact with and help and that also help me when I need it, be it introductions, references or even the occasional hotel reservation in their city</b>. I enjoy meeting them and I always enjoy working with them.</p>
<hr/>
<p>Some of the topics expressed here will be elaborated further in my  <a href="http://www.gridpulse.com/2010/03/02/the-lore-of-delivering-software-products" title="The lore of delivering software products"><em>The lore of delivering software products</em> series</a> so stay tuned in for more information.</p>
<p><br/></p>

<p><a href="http://feedads.g.doubleclick.net/~a/-l19k1fDDQ761ov_ZKX0HryC6w0/0/da"><img src="http://feedads.g.doubleclick.net/~a/-l19k1fDDQ761ov_ZKX0HryC6w0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/-l19k1fDDQ761ov_ZKX0HryC6w0/1/da"><img src="http://feedads.g.doubleclick.net/~a/-l19k1fDDQ761ov_ZKX0HryC6w0/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/gridpulse?a=MVtAR-oJ4Ik:nwDZgbxnsaY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/gridpulse?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gridpulse?a=MVtAR-oJ4Ik:nwDZgbxnsaY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/gridpulse?i=MVtAR-oJ4Ik:nwDZgbxnsaY:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/gridpulse/~4/MVtAR-oJ4Ik" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gridpulse.com/2010/03/16/tldsp-fraternization-or-creating-friends-and-allies/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.gridpulse.com/2010/03/16/tldsp-fraternization-or-creating-friends-and-allies/</feedburner:origLink></item>
		<item>
		<title>TLDSP: Inception, or what you do before you begin</title>
		<link>http://feedproxy.google.com/~r/gridpulse/~3/UPpBQCOZumw/</link>
		<comments>http://www.gridpulse.com/2010/03/02/tldsp-inception-or-what-you-do-before-you-begin/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 23:44:48 +0000</pubDate>
		<dc:creator>Bogdan</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Working smart]]></category>
		<category><![CDATA[TLDSP]]></category>

		<guid isPermaLink="false">http://www.gridpulse.com/?p=341</guid>
		<description><![CDATA[Noun S: (n) origin, origination, inception (an event that is a beginning; a first part or stage of subsequent events) Inception, the first article in my The lore of delivering software products series presents one of the key phases of a software project, a phase so important and sensitive that it alone may decide the [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>
<strong>Noun</strong><br />
S: (n) origin, origination, <em>inception </em>(an event that is a beginning; a first part or stage of subsequent events) </p></blockquote>
<p><b>Inception</b>, the first article in my  <a href="http://www.gridpulse.com/2010/03/02/the-lore-of-delivering-software-products" title="The lore of delivering software products"><em>The lore of delivering software products</em> series</a> presents one of the key phases of a software project, a phase so important and sensitive that it alone may decide the final outcome of the project: <b>success</b> or <b>failure</b>.</p>
<p>This is <b>a phase of discovery, acquaintance and assurance</b> both for you, as a provider and for your customer, which so <b>anxiously awaits the day when he can reap the fruits of his financial and social investment in this new project</b>. </p>
<p>This phase is the one that lets you <b>see if the customer is fully involved in the project</b> and is really <b>ready to go the extra mile with you to see the project delivered</b>; this is the phase that tells you if the customer really cares about the project, the product and <b>the benefits that it will bring to the general end-user population</b>, or if this project is only done just because it should, because the budget is there and because people really need something to do and a project is a good thing to do, over and over again.</p>
<h3 style="display:block; width:100%; border-bottom:1px solid black; font-weight:bold;text-shadow:1px 1px 1px #BBBBBB;">All or nothing</h3>
<p>As we all know, there&#8217;s a mythical ratio that everybody avoids mentioning in project meetings or project briefs, namely &#8220;two thirds of all software(system) projects fail&#8221;. It&#8217;s true, they do, but I&#8217;ll let somebody else write the series on project failure.</p>
<div style="border: 1px solid rgb(204, 204, 204); margin: 7px; padding: 5px; float: right;">
<img src="http://www.gridpulse.com/wp-content/uploads/2010/03/track_start.gif" alt="Inception" title="Inception" width="270" height="404" class="aligncenter size-medium wp-image-317" /></p>
<p><span style="font-size: 8px;">Photo by <a href="http://www.flickr.com/photos/34371745@N05/4001274268/">conray</a></span>
</p>
</div>
<p>Now, as we know, <b>failure is a very relative term in the software development and integration world</b>. A project can be successfully implemented and used on a nation-wide level while being a huge failure for the company that implemented it, because the costs were 200% more than the contract value. Eh, they&#8217;ll be able to use the good references and maybe, in the future, they&#8217;ll learn from their mistakes.</p>
<p>Most software projects fail in this phase, which is a good thing, <b>if you want to fail, this is the best phase to fail in</b>, and there&#8217;s a good reason for that.</p>
<p>In this phase, your investment, as a provider, will be minimal and &#8211; wait, let me rephrase that &#8211; <b>your investment in this phase should be minimized</b>, always. <b>Under no circumstance will you start developing the product or purchasing required hardware, software or services.</b> Nah, wait until you have a solid grasp of the project and until you&#8217;ve met the customer.</p>
<p>During this phase, your senses must be alert at all times, during all meetings with the customer and your partners, ready to sense any problems, even before any of them can cause them, because they will. <b>If you feel that, even from the first meetings, the engagement of the customer is not up to the challenge, address this issue. If addressing this issue does not work, prepare a contingency plan&#8230; an exit strategy.</b> Who knows, maybe you&#8217;ll need it.</p>
<p><b>If the engagement of your customer and your partners reaches your expectations</b>, the project seems to be on track or it&#8217;s steadily getting there, <b>you have a moral responsibility to take this project to delivery&#8230; and success</b>, because quitting the project once you have completed this phase you cost you not only financially, but it will also hurt your image.</p>
<h3 style="display:block; width:100%; border-bottom:1px solid black; font-weight:bold;text-shadow:1px 1px 1px #BBBBBB;">The real stuff</h3>
<p>Enough with the chit-chat, and down to the quick and dirty business. This article is actually about <b>what you should do to ensure that the project has a smooth start and that everything is on track</b>.</p>
<p>What you do, as a service provider, is the most important part of this phase. You are responsible for planning and executing most of the activities of this phase. Most importantly, you are responsible with the engagement of the customer and partners in these activities. <b>If you are not the prime contractor and you see that they&#8217;re holding back, your main task is to engage them and to make them realize the importance of this phase.</b></p>
<p>- Be professional, be polite, never over-commit and under-achieve<br />
- Just as you can, the customer can prepare and execute an exit strategy and find another supplier</p>
<h3 style="display:block; width:100%; border-bottom:1px solid black; font-weight:bold;text-shadow:1px 1px 1px #BBBBBB;">The activities and outcomes you must target</h3>
<p>In this phase there are some things that must be accomplished just for the sake of it and there are other things that are really important and can decide the fate of the project. Just like in life, the ones that really matter seem to avoid the eye. </p>
<p>Activities and deliverables for this phase are split up into two categories:</p>
<p><em>1. Important to your customer (will actually make their day happy):</em><br />
- <b>Interim project plan</b>, or working with them on the project plan. A third of the project should be enough. Remember, we&#8217;re talking macro planning, a WBS 3 levels deep. Details spoil the whole thing. <b>You know that you&#8217;ll have to deliver the final plan sometimes soon, so why not involve the customer in the process.</b><br />
- <b>Quality assurance</b>, the magical term stating the fact that the project will be guided by quality and that quality assurance procedures will be part of every activity. You know, like testing, standardized work, proof reading, that sort of thing. Yes &#8211; you got that right &#8211; proofreading documents. Don&#8217;t put it in the plan. <b>Just do it!</b><br />
- <b>Promotion (dissemination) plan</b>. If it&#8217;s a big project they&#8217;ll want to show it off. You&#8217;ll have to create a visual identity, advertise it on TV, have press conferences and go to international fairs and summits. Who knows, maybe it will increase your business in the vertical, it usually does. When you disseminate, do it by <a href="http://www.gridpulse.com/2010/03/16/tldsp-fraternization-or-creating-friends-and-allies/">cellebrating your achievements with the customer&#8217;s team</a>, and letting everybody know.<br />
- <b>Knowledge transfer</b>, or how the French would put it &#8220;transfert de savoir-faire&#8221;. You have to do it. I know that vendor lock-in is really sweet, but transferring the know-how to your customer will save you a whole lot on maintenance, technical support, upgrades and <b>it will give them the sense of independence and self determination that they desire internally</b>. This is a real gem, and I&#8217;ll talk about it in detail in the future.</p>
<p><em>2. Really important, even critical for the outcome of the project:</em><br />
- <b>Identify the internal apparatus of the customer.</b> This is really important! You have to identify the organizational chart of the customer, in regard to this project, the mirror image of your own organizational structure. The most important positions to identify are: <b>who will oversee delivery, who is the person that will give you access to the end-users (this is really important), who is the main stakeholder, the project owner on behalf of the customer, the one that really cares.</b> Usually, the people that hold the power are not the apparent ones. The project director on behalf of the customer will only sign the delivery if one of his aids will give him the technical and business approval. Find these people, as you will really need them during the project.<br />
- <b>Communications plan</b>. Who you talk to, what will you talk about, how often will the meetings happen. It&#8217;s a project buster! <b>Having a good communication plan, accepted and executed by you and the customer will ensure that you&#8217;re on the same page, all the time.</b><br />
-<b>The kick-off</b>.The meeting that says it all. Have your team meat with the customer&#8217;s team. Show them what you&#8217;ll be doing for them. Do it clearly and slowly. Use graphical means. Don&#8217;t scare them away. Include everything on this list, even as bullet items. <b>Get a feeling of the customer&#8217;s team. Are they into the project?</b></p>
<p><b>All of the things above are coming from a pragmatic perspective &#8211; just sharing with you what works &#8211; not a project management one.</b> Maybe a full blown project manager will have a few more plans or a few more activities up his sleeve or maybe your project has these activities set in stone, some do. <b>The bottom line is that if you cover all aspects but always keep an eye on what your objectives are for this phase, then you&#8217;re on the right track.</b></p>
<h3 style="display:block; width:100%; border-bottom:1px solid black; font-weight:bold;text-shadow:1px 1px 1px #BBBBBB;">Your objectives&#8230; achieved</h3>
<p>To conclude, your minimal objectives for this phase are:</p>
<ul>
<li>Get to know your customer and your partners, make them your <a href="http://www.gridpulse.com/2010/03/16/tldsp-fraternization-or-creating-friends-and-allies/">friends and allies</a></li>
<li>Show your customer that you are professionals and that you are at their disposal</li>
<li>Have a project plan, at least for the first third of the project</li>
<li>Identify the internal apparatus of the customer. Identify the people that matter</li>
<li>Setup a clear and concise communications plan</li>
<li>Have a kick-off, meet face to face as often as possible</li>
<li>Never over-promise and under-deliver, especially not in this phase!</li>
</ul>
<p>If you achieve these objectives, you&#8217;ll be on the right track to a sustainable project, where all parties are engaged and willing to give their best to produce a great, usable and long lived software product.</p>
<hr/>
<p>Some of the topics expressed here will be elaborated further in my  <a href="http://www.gridpulse.com/2010/03/02/the-lore-of-delivering-software-products" title="The lore of delivering software products"><em>The lore of delivering software products</em> series</a> so stay tuned in for more information.</p>
<p><br/></p>

<p><a href="http://feedads.g.doubleclick.net/~a/rh_nbz90E3gknXGLbqwWWHLSBWI/0/da"><img src="http://feedads.g.doubleclick.net/~a/rh_nbz90E3gknXGLbqwWWHLSBWI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/rh_nbz90E3gknXGLbqwWWHLSBWI/1/da"><img src="http://feedads.g.doubleclick.net/~a/rh_nbz90E3gknXGLbqwWWHLSBWI/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/gridpulse?a=UPpBQCOZumw:WpAmdWt16-E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/gridpulse?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gridpulse?a=UPpBQCOZumw:WpAmdWt16-E:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/gridpulse?i=UPpBQCOZumw:WpAmdWt16-E:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/gridpulse/~4/UPpBQCOZumw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gridpulse.com/2010/03/02/tldsp-inception-or-what-you-do-before-you-begin/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.gridpulse.com/2010/03/02/tldsp-inception-or-what-you-do-before-you-begin/</feedburner:origLink></item>
		<item>
		<title>The lore of delivering software products</title>
		<link>http://feedproxy.google.com/~r/gridpulse/~3/8fFX6C-eta4/</link>
		<comments>http://www.gridpulse.com/2010/03/02/the-lore-of-delivering-software-products/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 23:44:04 +0000</pubDate>
		<dc:creator>Bogdan</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[Working smart]]></category>

		<guid isPermaLink="false">http://www.gridpulse.com/?p=334</guid>
		<description><![CDATA[This is not a series about programming, using a specific framework or development methodology. <strong>This is a series about delivering great software on time, on scope and on budget.</strong>]]></description>
			<content:encoded><![CDATA[<p><strong>The lore of delivering software products</strong> is a small series I&#8217;m writing about processes and best-practices meant to pave the road to delivering great software products.</p>
<p><a href="http://jwz.org" title="Jamie Zawinski">Jamie Zawinski</a>, as quoted in &#8220;Coders at Work&#8221;, elegantly summarizes everything that I&#8217;m trying to express:</p>
<blockquote><p>“At the end of the day, ship the f*cking thing! It’s great to rewrite your code and make it cleaner and by the third time it’ll actually be pretty. But that’s not the point—you’re not here to write code; you’re here to ship products.”</p></blockquote>
<p>This is not a series about programming, using a specific framework or development methodology, although it includes bits of everything.<strong>This is a series about improving the way you work, focusing on the project at hand and delivering great software on time, on scope and on budget.</strong></p>
<p>This series encompasses the lessons that I&#8217;ve learned by repeatedly hitting my head against problems with projects, people, processes and occasionally, my own stubbornness.     </p>
<p>
<div style="border: 1px solid rgb(204, 204, 204); margin: 7px; padding: 5px; float: right;">
<img src="http://www.gridpulse.com/wp-content/uploads/2010/03/4279479345_8a00667d51.png" alt="Delivering software products" title="4233144961_59488a0b51" width="300" height="306" class="aligncenter size-medium wp-image-317" /></p>
<p><span style="font-size: 8px;">Photo by <a href="http://www.flickr.com/photos/46632302@N06/">Damon Duncan</a></span>
</p>
</div>
<p><br/><br />
Series articles (<em>list may change</em>):</p>
<ol>
<li><a href='http://www.gridpulse.com/2010/03/02/tldsp-inception-or-what-you-do-before-you-begin/'><b>Inception</b>, or what you do before you begin</a></li>
<li><a href='http://www.gridpulse.com/2010/03/16/tldsp-fraternization-or-creating-friends-and-allies/'><b>Fraternization</b>, or creating friends and allies</a></li>
<li><b>Fixed scope</b>, or the holy grail of software development</li>
<li><b>Dangers</b>, or the risks of the trade</li>
<li><b>Genesis</b>, or coming into being</li>
<li><b>Shims</b>, or the tools of the trade</li>
<li><b>Construction</b>, or getting it done</li>
<li><b>Quality</b>, or the other part of construction</li>
<li><b>Spells</b>, or handing over the knowledge</li>
<li><b>Done</b>, or how &#8220;the best is better than good&#8221;</li>
<li><b>Covenant</b>, or what happens after you&#8217;re done</li>
<li><b>Phoenix</b>, or rising from the ashes</li>
</ol>
<p>I&#8217;ll try to publish one every week, starting with this week&#8217;s article, &#8220;<a href='http://www.gridpulse.com/2010/03/02/tldsp-inception-or-what-you-do-before-you-begin/'><b>Inception</b>, or what you do before you begin</a>&#8220;.</p>
<p>Feedback is welcomed, <b>bad feedback even more</b>.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/6tgCr3qc9U5-V3p8mFk459oAg6A/0/da"><img src="http://feedads.g.doubleclick.net/~a/6tgCr3qc9U5-V3p8mFk459oAg6A/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/6tgCr3qc9U5-V3p8mFk459oAg6A/1/da"><img src="http://feedads.g.doubleclick.net/~a/6tgCr3qc9U5-V3p8mFk459oAg6A/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/gridpulse?a=8fFX6C-eta4:w3Pripgg1WY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/gridpulse?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gridpulse?a=8fFX6C-eta4:w3Pripgg1WY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/gridpulse?i=8fFX6C-eta4:w3Pripgg1WY:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/gridpulse/~4/8fFX6C-eta4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gridpulse.com/2010/03/02/the-lore-of-delivering-software-products/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.gridpulse.com/2010/03/02/the-lore-of-delivering-software-products/</feedburner:origLink></item>
		<item>
		<title>The uncertain future of GUtil!</title>
		<link>http://feedproxy.google.com/~r/gridpulse/~3/Ep9aRZbblg4/</link>
		<comments>http://www.gridpulse.com/2010/02/22/the-uncertain-future-of-gutil/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 21:36:10 +0000</pubDate>
		<dc:creator>Bogdan</dc:creator>
				<category><![CDATA[GUtil]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://www.gridpulse.com/?p=323</guid>
		<description><![CDATA[I think that it&#8217;s about time for this post so here goes. Brief history GUtil! was born sometime in 2006 and I released the first version (GUtil! 0.4.9.5) on November 3rd 2006, for Firefox 1.5. At first it was something that I used to speed up access to the Google tools that I was using [...]]]></description>
			<content:encoded><![CDATA[<p>I think that it&#8217;s about time for this post so here goes.</p>
<p><b><em>Brief history</em></b><br />
GUtil! was born sometime in 2006 and I released the first version (GUtil! 0.4.9.5) on November 3rd 2006, for Firefox 1.5.</p>
<p>At first it was something that I used to speed up access to the Google tools that I was using so I only had a couple of links. Then somebody asked for it and also asked me to add some more things that he used. So I did. And I published it. And more people wanted it. That is all.</p>
<p><b><em>Current status</em></b><br />
I haven&#8217;t touched the code since July 30, 2009.<b>I&#8217;m not using it anymore.</b> I have restricted my Google usage to Google apps, Picasa and Reader.I don&#8217;t care about anything else, nor do I have the time to care about anything else.</p>
<p>Some statistics:<br />
- GUtil! <b>has been downloaded 240,651 times</b><br />
- GUtil! <b>is part of 198 collections on AMO</b><br />
- GUtil! <b>has 8680 active daily users</b> down from <b>more than 12000</b></p>
<p><b><em>Future</em></b><br />
Well, here comes the bad news.<br />
I&#8217;m not updating it anymore. I don&#8217;t have the time, the patience or the interest to update GUtil! anymore.</p>
<p>If you want to work on it, it&#8217;s always been open so go get the source and have a whack!<br />
<a href="http://code.google.com/p/gutil-firefox-extension/">http://code.google.com/p/gutil-firefox-extension/</a></p>
<p>All the best to whoever wants to continue with GUtil!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/qaWpC2XdFlZjR-6HA9873XEUiqc/0/da"><img src="http://feedads.g.doubleclick.net/~a/qaWpC2XdFlZjR-6HA9873XEUiqc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/qaWpC2XdFlZjR-6HA9873XEUiqc/1/da"><img src="http://feedads.g.doubleclick.net/~a/qaWpC2XdFlZjR-6HA9873XEUiqc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/gridpulse?a=Ep9aRZbblg4:CAzOyE8gtL8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/gridpulse?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gridpulse?a=Ep9aRZbblg4:CAzOyE8gtL8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/gridpulse?i=Ep9aRZbblg4:CAzOyE8gtL8:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/gridpulse/~4/Ep9aRZbblg4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gridpulse.com/2010/02/22/the-uncertain-future-of-gutil/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.gridpulse.com/2010/02/22/the-uncertain-future-of-gutil/</feedburner:origLink></item>
		<item>
		<title>Post new-year resolutions for 2010</title>
		<link>http://feedproxy.google.com/~r/gridpulse/~3/Ur2cmLo9zEM/</link>
		<comments>http://www.gridpulse.com/2010/01/04/post-new-year-resolutions/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 19:15:02 +0000</pubDate>
		<dc:creator>Bogdan</dc:creator>
				<category><![CDATA[My life]]></category>
		<category><![CDATA[whatever]]></category>
		<category><![CDATA[resolutions]]></category>

		<guid isPermaLink="false">http://www.gridpulse.com/?p=314</guid>
		<description><![CDATA[I&#8217;m a little late with my new year&#8217;s resolutions so I&#8217;ll just call them Jan 4&#8242;th resolutions. Photo by katerha Last year&#8217;s recap: - Quit smoking: done - Learn Turkish or Arabic: not done, moved to 2010 - I try to learn a new language every year. 2009 was C# year: as done as you [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a little late with my new year&#8217;s resolutions so I&#8217;ll just call them Jan 4&#8242;th resolutions.</p>
<div style="border: 1px solid rgb(204, 204, 204); margin: 7px; padding: 5px; float: right;">
<img src="http://www.gridpulse.com/wp-content/uploads/2010/01/4233144961_59488a0b51-300x225.jpg" alt="2010 resolutions" title="4233144961_59488a0b51" width="300" height="225" class="aligncenter size-medium wp-image-317" /></p>
<p><span style="font-size: 8px;">Photo by <a href="http://www.flickr.com/photos/katerha/4233144961/">katerha</a></span>
</p>
</div>
<p>Last year&#8217;s recap:<br />
- Quit smoking: <strong>done</strong><br />
- Learn Turkish or Arabic: <strong>not done</strong>, <em>moved to 2010</em><br />
- I try to learn a new language every year. 2009 was C# year: <strong>as done as you can learn a language in one year</strong></p>
<p>So&#8230; my resolutions for 2010 are (drum roll):<br />
- Learn Turkish or Arabic: hopefully a new project I have in Morocco will help me learn some Arabic<br />
- The new language for this year is Scala<br />
- Buy a car for the wifey<br />
- Deliver better software</p>

<p><a href="http://feedads.g.doubleclick.net/~a/SGADede9O4VBwE_2bzWzzGDc9yE/0/da"><img src="http://feedads.g.doubleclick.net/~a/SGADede9O4VBwE_2bzWzzGDc9yE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/SGADede9O4VBwE_2bzWzzGDc9yE/1/da"><img src="http://feedads.g.doubleclick.net/~a/SGADede9O4VBwE_2bzWzzGDc9yE/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/gridpulse?a=Ur2cmLo9zEM:hT3UOWr9-dk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/gridpulse?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gridpulse?a=Ur2cmLo9zEM:hT3UOWr9-dk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/gridpulse?i=Ur2cmLo9zEM:hT3UOWr9-dk:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/gridpulse/~4/Ur2cmLo9zEM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gridpulse.com/2010/01/04/post-new-year-resolutions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.gridpulse.com/2010/01/04/post-new-year-resolutions/</feedburner:origLink></item>
		<item>
		<title>Get all the types contained in all the assemblies loaded, filtered by namespace</title>
		<link>http://feedproxy.google.com/~r/gridpulse/~3/kc5uehzhIYY/</link>
		<comments>http://www.gridpulse.com/2009/10/29/get-all-the-types-contained-in-all-the-assemblies-loaded-filtered-by-namespace/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 09:05:49 +0000</pubDate>
		<dc:creator>Bogdan</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Unit testing]]></category>
		<category><![CDATA[AppDomain]]></category>
		<category><![CDATA[Assembly]]></category>
		<category><![CDATA[NUnit]]></category>

		<guid isPermaLink="false">http://www.gridpulse.com/?p=268</guid>
		<description><![CDATA[This quick snippet will give you all the types declared in all the assemblies loaded, filtered by namespace. List types = new List(); Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly asm in assemblies) { IEnumerable asmTypes = from t in asm.GetTypes() where t.IsClass &#038;&#038; (t.Namespace != null &#038;&#038; t.Namespace.StartsWith(targetNamespace)) select t; types.AddRange(asmTypes); } I actually got [...]]]></description>
			<content:encoded><![CDATA[<p>This quick snippet will give you all the types declared in all the assemblies loaded, filtered by namespace.</p>
<pre class="prettyprint">
List<Type> types = new List<Type>();
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();

foreach (Assembly asm in assemblies)
{
        IEnumerable<Type> asmTypes = from t in asm.GetTypes()
              where t.IsClass
                &#038;&#038; (t.Namespace != null &#038;&#038; t.Namespace.StartsWith(targetNamespace))
              select t;
        types.AddRange(asmTypes);
}
</pre>
<p>I actually got to this point because of the way <a href="http://www.nunit.org/index.php">NUnit</a> wraps an assembly in another AppDomain. </p>
<p>The snippet need <strong>Linq </strong>so it’s for <strong>3.5 </strong>or newer.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/ueU0eEkp3Ui4EswtOx4D2hDi_VE/0/da"><img src="http://feedads.g.doubleclick.net/~a/ueU0eEkp3Ui4EswtOx4D2hDi_VE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ueU0eEkp3Ui4EswtOx4D2hDi_VE/1/da"><img src="http://feedads.g.doubleclick.net/~a/ueU0eEkp3Ui4EswtOx4D2hDi_VE/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/gridpulse?a=kc5uehzhIYY:7tJqCsqv6r8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/gridpulse?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gridpulse?a=kc5uehzhIYY:7tJqCsqv6r8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/gridpulse?i=kc5uehzhIYY:7tJqCsqv6r8:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/gridpulse/~4/kc5uehzhIYY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gridpulse.com/2009/10/29/get-all-the-types-contained-in-all-the-assemblies-loaded-filtered-by-namespace/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.gridpulse.com/2009/10/29/get-all-the-types-contained-in-all-the-assemblies-loaded-filtered-by-namespace/</feedburner:origLink></item>
		<item>
		<title>How to solve BindException: Address already in use: JVM_Bind in JBoss on Windows</title>
		<link>http://feedproxy.google.com/~r/gridpulse/~3/1GYZkiaK2EU/</link>
		<comments>http://www.gridpulse.com/2009/10/28/how-to-solve-bindexception-address-already-in-use-jvm_bind-in-jboss-on-windows/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 13:09:35 +0000</pubDate>
		<dc:creator>Bogdan</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[BindException]]></category>
		<category><![CDATA[JBoss]]></category>

		<guid isPermaLink="false">http://www.gridpulse.com/2009/10/28/how-to-solve-bindexception-address-already-in-use-jvm_bind-in-jboss-on-windows/</guid>
		<description><![CDATA[&#160; Sometimes, you&#8217;re just having a wonderful day and suddenly the worst just happens: [ServiceController] Problem starting service jboss:service=Naming java.rmi.server.ExportException: Port already in use: 1198; nested exception is: java.net.BindException: Address already in use: JVM_Bind at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:243) ............ The regular solution is to check if the port is actually used. So fire up a command prompt [...]]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p>Sometimes, you&#8217;re just having a wonderful day and suddenly the worst just happens:</p>
<pre class="prettyprint">[ServiceController] Problem starting service jboss:service=Naming
    java.rmi.server.ExportException: Port already in use: 1198; nested exception is:
    java.net.BindException: Address already in use: JVM_Bind
    at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:243)
    ............</pre>
<p>The regular solution is to check if the port is actually used. So fire up a command prompt and <strong>netstat –aon</strong>.<strong> </strong></p>
<p>If you find the port, see what process is using it and kill it <img src='http://www.gridpulse.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . </p>
<p>If you don’t see the port you can reserve it by following the information in <strong>KB812873 &#8211; <a title="http://support.microsoft.com/kb/812873" href="http://support.microsoft.com/kb/812873">http://support.microsoft.com/kb/812873</a>.</strong></p>
<p>My <strong>ReservedPorts</strong> entry contains:</p>
<blockquote>
<p>1433-1434<br />
    	<br />1097-1200<br />
    	<br />4543-4545</p>
</blockquote>
<p><strong></strong></p>
<p><strong>That should fix it. The bad thing is that it requires a restart.</strong></p>

<p><a href="http://feedads.g.doubleclick.net/~a/zsy0ErdoqX3uMtu4FaBgC5qB2-8/0/da"><img src="http://feedads.g.doubleclick.net/~a/zsy0ErdoqX3uMtu4FaBgC5qB2-8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/zsy0ErdoqX3uMtu4FaBgC5qB2-8/1/da"><img src="http://feedads.g.doubleclick.net/~a/zsy0ErdoqX3uMtu4FaBgC5qB2-8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/gridpulse?a=1GYZkiaK2EU:r7Xccls9xHs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/gridpulse?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gridpulse?a=1GYZkiaK2EU:r7Xccls9xHs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/gridpulse?i=1GYZkiaK2EU:r7Xccls9xHs:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/gridpulse/~4/1GYZkiaK2EU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gridpulse.com/2009/10/28/how-to-solve-bindexception-address-already-in-use-jvm_bind-in-jboss-on-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.gridpulse.com/2009/10/28/how-to-solve-bindexception-address-already-in-use-jvm_bind-in-jboss-on-windows/</feedburner:origLink></item>
		<item>
		<title>NanoDI, a small .NET Dependency Injection container</title>
		<link>http://feedproxy.google.com/~r/gridpulse/~3/6VYmq7nONNQ/</link>
		<comments>http://www.gridpulse.com/2009/09/10/nanodi-a-small-net-dependency-injection-container/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 23:50:19 +0000</pubDate>
		<dc:creator>Bogdan</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://www.gridpulse.com/?p=244</guid>
		<description><![CDATA[Some time ago I worked on some projects using ASP.NET that were mostly ASPX with some specialized ASHX&#8217;s (c# behind the scenes). The handlers just generated some graphs or exported Excel files, regular code monkey style, no architecture, no plan, just write it fast &#8211; quick dirty hack, quick buck &#8211; and I always thought [...]]]></description>
			<content:encoded><![CDATA[<p>Some time ago I worked on some projects using ASP.NET that were mostly ASPX with some specialized ASHX&#8217;s (c# behind the scenes).<br />
The handlers just generated some graphs or exported Excel files, regular code monkey style, no architecture, no plan, just write it fast &#8211; quick dirty hack, quick buck &#8211; and I always thought that these guys that accept .NET inferior stuff deserve what they get. </p>
<p>As time flew by, I started to get a taste of what .NET is all about, luring me to the dark side.</p>
<div style="border: 1px solid rgb(204, 204, 204); margin: 7px; padding: 5px; float: right;">
<img src="http://www.gridpulse.com/wp-content/uploads/2009/09/engine1.jpg" alt="engine1" title="engine1" width="216" height="325" class="aligncenter size-full wp-image-252" /></p>
<p><span style="font-size: 8px;">Photo by <a href="http://www.flickr.com/photos/b-tal/428943971/">B-tal</a></span>
</div>
<p>At the beginning I felt like &#8220;this is what evil must taste like&#8221;, but I quickly got accustomed to all the new things and now, I&#8217;m playing with .NET stuff again, mostly C#, trying to level my skills and having a lot of fun in the process. I built things like the quick and dirty <a href="http://www.gridpulse.com/2009/08/13/multi-font-viewer-on-xandertoolscom/" title="Multi font viewer">multi font viewer</a>, buggy and poor, mostly because nobody uses it.</p>
<p>Now, I wanted to start something bigger, and nicer (I won&#8217;t say what) and I felt that I needed to do it the right way, you know, MAINTAINABLE.<br />
I started looking for a DI container and I started with Spring and Pico. I&#8217;m pretty accustomed to pico and I&#8217;ve been using Spring since version 1 so I though I&#8217;d give them a try. Wrong, strange, alien, weird, huge, EVIL. </p>
<p>For what I wanted to do it really seemed this way. How&#8217;s about something that is 10 megs big because spring and dependencies is 7 megs big. And I&#8217;m not even going to use most of it, I just want some plain <a href="http://en.wikipedia.org/wiki/Dependency_injection">dependency injection</a> and maybe some tooling , like fast i18n.</p>
<p><b>Problem solved, evil destroyed</b><br />
I found the solution! Why not have some fun AND learn the inner workings of C# and .Net? Why not build my own?  So I did!</p>
<p><b>NanoDI</b> is a small dependency injection container and tooling for .NET C# projects that are small or that do not need the complexity of bigger IoC solutions.</p>
<p><b>NanoDI</b>&#8216;s goal is to be small, fast and clean.</p>
<p>Links:<br />
<a href="http://www.xandertools.com/nanodi"> Nano Dependency Injection home</a><br />
<a href="https://www.ohloh.net/p/nanodi"> NanoDI Ohloh.net project page</a><br />
<a href="http://code.google.com/p/nanodi/"> NanoDI Google Code project</a></p>
<p>The code is junky by my standards but I&#8217;m slowly refactoring as my c# skills get better. Next week I&#8217;m going to finish scoping and start working on proxies and interceptors. You can help too! </p>
<p>Have a taste, have fun!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/AzkDP64WgF2S2UxidOs0077iHOc/0/da"><img src="http://feedads.g.doubleclick.net/~a/AzkDP64WgF2S2UxidOs0077iHOc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/AzkDP64WgF2S2UxidOs0077iHOc/1/da"><img src="http://feedads.g.doubleclick.net/~a/AzkDP64WgF2S2UxidOs0077iHOc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/gridpulse?a=6VYmq7nONNQ:bnmGhIyzBbk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/gridpulse?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gridpulse?a=6VYmq7nONNQ:bnmGhIyzBbk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/gridpulse?i=6VYmq7nONNQ:bnmGhIyzBbk:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/gridpulse/~4/6VYmq7nONNQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gridpulse.com/2009/09/10/nanodi-a-small-net-dependency-injection-container/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.gridpulse.com/2009/09/10/nanodi-a-small-net-dependency-injection-container/</feedburner:origLink></item>
		<item>
		<title>Transactional unit tests that support scopes using JUnit and Spring</title>
		<link>http://feedproxy.google.com/~r/gridpulse/~3/NKdVDanoois/</link>
		<comments>http://www.gridpulse.com/2009/08/21/transactional-unit-tests-that-support-scopes-using-junit-and-spring/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 16:45:31 +0000</pubDate>
		<dc:creator>Bogdan</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring Framework]]></category>
		<category><![CDATA[Unit testing]]></category>

		<guid isPermaLink="false">http://www.gridpulse.com/?p=225</guid>
		<description><![CDATA[Most of the unit tests that you write don&#8217;t need support for transactions and scopes, but if you ever want to test your web frontend code properly you&#8217;ll hit into this one. Writing transactional unit test with JUnit, Spring and Hibernate is easy, what you want to do is: - Add a transaction management bean [...]]]></description>
			<content:encoded><![CDATA[<p>Most of the unit tests that you write don&#8217;t need support for transactions and scopes, but if you ever want to test  your web frontend code properly you&#8217;ll hit into this one. </p>
<p>Writing transactional unit test with JUnit, Spring and Hibernate is easy, what you want to do is:</p>
<p>- Add a transaction management bean in your test context:<br />
<code class="prettyprint"><br />
    &lt;bean id="transactionManager"<br />
          class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt;<br />
        &lt;property name="sessionFactory" ref="sessionFactory"/&gt;<br />
    &lt;/bean&gt;<br />
</code></p>
<p>- Make your test extend <a href="http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/test/context/junit4/AbstractTransactionalJUnit4SpringContextTests.html">AbstractTransactionalJUnit4SpringContextTests</a><br />
- Annotate you test class with <a href="http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/test/context/transaction/TransactionConfiguration.html">@TransactionConfiguration</a> and <a href="http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/transaction/annotation/Transactional.html">@Transactional</a></p>
<p>If your transaction demarcation is correct( surrounding your dao or service ) you should be done. This is the cleanest way that I found.</p>
<p>Everything until now is fine and dandy. The problem arises when one of the injected beans is bound to a scope. It can be any scope but for this example I&#8217;ll take the simplest scope &#8211; the &#8216;session&#8217; scope.</p>
<p>In a non-transactional situation this should be pretty straight forward, just implement <a href="http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/beans/factory/config/Scope.html">Scope</a> and using a <a href="http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/beans/factory/config/ConfigurableBeanFactory.html">ConfigurableBeanFactory</a> register it. The fact that we are extending <a href="http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/test/context/junit4/AbstractTransactionalJUnit4SpringContextTests.html"AbstractTransactionalJUnit4SpringContextTests</a> and that our context is automatically created really kills the simple path. </p>
<p>You&#8217;ll get a <a href="http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/beans/factory/BeanCreationException.html">org.springframework.beans.factory.BeanCreationException</a> with a nested &#8220;java.lang.IllegalStateException: No Scope registered for scope &#8216;session&#8217;&#8221;.</p>
<p>But do not despair, there is simple solution available and it&#8217;s called <a href="http://static.springsource.org/spring/docs/2.5.6/api/org/springframework/beans/factory/config/CustomScopeConfigurer.html">CustomScopeConfigurer</a>.</p>
<p>The fastest and cleanest way to use it is:<br />
- Create a simple class that will be used as our scope manager. Let&#8217;s call it <a href="http://code.google.com/p/alexandria-umbrella/source/browse/trunk/code/xandria-tooling/xandria-translator/xandria-translator-core/src/test/java/com/gridpulse/xandria/translator/MockSessionScope.java">MockSessionScope</a>.</p>
<p><img src="http://www.gridpulse.com/wp-content/uploads/2009/08/code.jpg" alt="code" title="code" width="630" height="378" class="aligncenter size-full wp-image-238" /></p>
<p>- In your test context, create a <a href="http://static.springsource.org/spring/docs/2.5.6/api/org/springframework/beans/factory/config/CustomScopeConfigurer.html">CustomScopeConfigurer</a> that will automatically register your scope on context creation:<br />
<code class="prettyprint"><br />
    &lt;bean class="org.springframework.beans.factory.config.CustomScopeConfigurer"&gt;<br />
        &lt;property name="scopes"&gt;<br />
            &lt;map&gt;<br />
                &lt;entry key="session"&gt;<br />
                    &lt;bean class="com.gridpulse.xandria.translator.MockSessionScope"/&gt;<br />
                &lt;/entry&gt;<br />
            &lt;/map&gt;<br />
        &lt;/property&gt;<br />
    &lt;/bean&gt;<br />
</code></p>
<p><b>Run your tests and you&#8217;re done!</b></p>

<p><a href="http://feedads.g.doubleclick.net/~a/_P28Lj08wF3QVPBRhmi0KZ6LnI8/0/da"><img src="http://feedads.g.doubleclick.net/~a/_P28Lj08wF3QVPBRhmi0KZ6LnI8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/_P28Lj08wF3QVPBRhmi0KZ6LnI8/1/da"><img src="http://feedads.g.doubleclick.net/~a/_P28Lj08wF3QVPBRhmi0KZ6LnI8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/gridpulse?a=NKdVDanoois:ll0KQ2Vp_mI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/gridpulse?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gridpulse?a=NKdVDanoois:ll0KQ2Vp_mI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/gridpulse?i=NKdVDanoois:ll0KQ2Vp_mI:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/gridpulse/~4/NKdVDanoois" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gridpulse.com/2009/08/21/transactional-unit-tests-that-support-scopes-using-junit-and-spring/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.gridpulse.com/2009/08/21/transactional-unit-tests-that-support-scopes-using-junit-and-spring/</feedburner:origLink></item>
	</channel>
</rss>
