<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Corey Coogan</title>
	<atom:link href="http://blog.coreycoogan.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.coreycoogan.com</link>
	<description>.Net, C#, ASP.NET MVC, Architecture and Design</description>
	<lastBuildDate>Tue, 23 Feb 2010 03:18:57 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='blog.coreycoogan.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/ba1b8857133275abcfb1794dbd2e242e?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>Corey Coogan</title>
		<link>http://blog.coreycoogan.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.coreycoogan.com/osd.xml" title="Corey Coogan" />
	<atom:link rel='hub' href='http://blog.coreycoogan.com/?pushpress=hub'/>
		<item>
		<title>What does a Proof of Concept Really Prove?</title>
		<link>http://blog.coreycoogan.com/2010/02/23/what-does-a-proof-of-concept-really-prove/</link>
		<comments>http://blog.coreycoogan.com/2010/02/23/what-does-a-proof-of-concept-really-prove/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 03:17:52 +0000</pubDate>
		<dc:creator>coreycoogan</dc:creator>
				<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Developer Life]]></category>
		<category><![CDATA[Software Management]]></category>
		<category><![CDATA[Pitfalls]]></category>
		<category><![CDATA[POC]]></category>
		<category><![CDATA[Proof of Concept]]></category>
		<category><![CDATA[Software POC]]></category>
		<category><![CDATA[Software Proof of Concept]]></category>

		<guid isPermaLink="false">http://coreycoogan.wordpress.com/2010/02/23/what-does-a-proof-of-concept-really-prove/</guid>
		<description><![CDATA[The company where I’m working right now likes to invest resources in Proof of Concept, or POC, projects.&#160; The intent is admirable enough – prove that a concept/process/technology/etc. works by spiking some small portion of it and evaluating the results.
This sound really great in theory.&#160; But if it was all gravy I wouldn’t be writing [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=270&subd=coreycoogan&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>The company where I’m working right now likes to invest resources in Proof of Concept, or POC, projects.&#160; The intent is admirable enough – prove that a concept/process/technology/etc. works by spiking some small portion of it and evaluating the results.</p>
<p>This sound really great in theory.&#160; But if it was all gravy I wouldn’t be writing this post.&#160; So here’s the rub – it has to be crystal clear exactly what is being proved.&#160; If management is vague and just wants to see some documents or a demo, the risk in moving from POC to a production project becomes very high.</p>
<p>Let’s look at an example.&#160; A project that I’m involved in right now is proving that legacy code can be taken from the outdated, purchased system with a proprietary-language and migrate core functionality to .NET – specifically WCF services.&#160; Sounds simple enough, right?</p>
<p>The code in the existing system is a tangled mess, as one might expect, and all the logic is buried in the 3GL-type forms.&#160; The database is also a rat’s nest and the converted code must use the legacy database.</p>
<p>The project is moving along and things are working, but an all too common dismissal for the quality of code that’s being written is “hey, it’s POC code”, which leads me to the point of this post.</p>
<p>Because the goal of this POC is only to see that it is possible to move legacy code to C# on WCF, it’s acceptable to the team that the code being written is a house of cards.&#160; It is so brittle and hard to test that the smallest change could send it tumbling down.&#160; My worst fear, however, is the possibility that a number of bugs and issues that result from a change could go undetected.</p>
<p>I don’t believe, in this example, that the concept is truly getting proved.&#160; By not specifying that the project should prove the concept in a manageable way, following established practices for creating highly cohesive and loosely coupled code that is testable and continuously integrated with automated testing, the project sponsors have essentially said “build a house of cards” – hence the attitude that quality doesn’t matter because it’s just POC code.&#160; </p>
<p>It’s my opinion that if one wants to prove a concept like the one I’ve been talking about, it has to be proven to be a viable solution in some real world capacity.&#160; At the end of the project, the POC may be deemed a success but few will know if it is actually possible to build with a sense of confidence and stability.&#160; The other angle is that management may expect that since the POC has already been completed, it shouldn’t take much more time to get it ready for prime-time, which is this case would be a fantasy.</p>
<p>In conclusion, when drafting POC project document, make sure to specify some degree of real-world expectations.&#160; Build in the extra time to ensure that the concept can be built to withstand the pressures of real-world change.&#160; Otherwise, you may not know the truth until you’ve either deployed a fragile system or found yourself sinking more resources into a project than you ever would have expected. This may not be applicable to the smaller projects, but for larger ones, I think it’s worth the investment.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/coreycoogan.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/coreycoogan.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/coreycoogan.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/coreycoogan.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/coreycoogan.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/coreycoogan.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/coreycoogan.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/coreycoogan.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/coreycoogan.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/coreycoogan.wordpress.com/270/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=270&subd=coreycoogan&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.coreycoogan.com/2010/02/23/what-does-a-proof-of-concept-really-prove/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e09ede8123295427210e9a3565804401?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">coreycoogan</media:title>
		</media:content>
	</item>
		<item>
		<title>ReSharper Coupon Code and Extended Trial</title>
		<link>http://blog.coreycoogan.com/2010/02/21/resharper-coupon-code-and-extended-trial/</link>
		<comments>http://blog.coreycoogan.com/2010/02/21/resharper-coupon-code-and-extended-trial/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 07:54:29 +0000</pubDate>
		<dc:creator>coreycoogan</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Coupon Code]]></category>
		<category><![CDATA[Promo Code]]></category>
		<category><![CDATA[R#]]></category>
		<category><![CDATA[Resharper]]></category>
		<category><![CDATA[ReSharper Promo Code]]></category>

		<guid isPermaLink="false">http://coreycoogan.wordpress.com/2010/02/21/resharper-coupon-code-and-extended-trial/</guid>
		<description><![CDATA[I’ve been using the trial version of R#, but recently expired.  I’ve grown quite used to it and thought it to be a worthwhile business expense.  Because I’m cheap and figure there’s always a better deal, I immediately started searching for a promo code when I saw the “Coupon Code” field on the checkout form.
That [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=267&subd=coreycoogan&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I’ve been using the trial version of R#, but recently expired.  I’ve grown quite used to it and thought it to be a worthwhile business expense.  Because I’m cheap and figure there’s always a better deal, I immediately started searching for a promo code when I saw the “Coupon Code” field on the checkout form.</p>
<p>That brought me to <a href="http://web2asp.net/">David Ridgway’s blog</a>, where he has a <a href="http://web2asp.net/2009/01/resharper-extended-trial-period-and.html">post</a> about how to get 10% off and an extended 60 day trial license key.  The blog says to email him and he’ll send the info.</p>
<p>If you’re like me, this sounds a bit fishy and I was apprehensive to try, but the blog looked legit so I gave it a shot.  To my surprise, I received a response within 10 minutes at 1:30 AM.  The details were there and they are right on.</p>
<p>If you are thinking about buying or trying ReSharper 4.5, definitely <a href="http://mailto:web2asp@gmail.com">send David an email</a> and ask him for the scoop.  You’ll save some cash or get the longer trial (or both).</p>
<p><a title="http://web2asp.net/2009/01/resharper-extended-trial-period-and.html" href="http://web2asp.net/2009/01/resharper-extended-trial-period-and.html">http://web2asp.net/2009/01/resharper-extended-trial-period-and.html</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/coreycoogan.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/coreycoogan.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/coreycoogan.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/coreycoogan.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/coreycoogan.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/coreycoogan.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/coreycoogan.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/coreycoogan.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/coreycoogan.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/coreycoogan.wordpress.com/267/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=267&subd=coreycoogan&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.coreycoogan.com/2010/02/21/resharper-coupon-code-and-extended-trial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e09ede8123295427210e9a3565804401?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">coreycoogan</media:title>
		</media:content>
	</item>
		<item>
		<title>Eggheads, Elite, Shills and the Mainstream</title>
		<link>http://blog.coreycoogan.com/2010/02/12/eggheads-elite-shills-and-the-mainstream/</link>
		<comments>http://blog.coreycoogan.com/2010/02/12/eggheads-elite-shills-and-the-mainstream/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 02:51:00 +0000</pubDate>
		<dc:creator>coreycoogan</dc:creator>
				<category><![CDATA[Alt.Net]]></category>
		<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Developer Life]]></category>
		<category><![CDATA[Egghead]]></category>
		<category><![CDATA[Elite]]></category>
		<category><![CDATA[Scott Bellware]]></category>
		<category><![CDATA[User Group]]></category>

		<guid isPermaLink="false">http://coreycoogan.wordpress.com/2010/02/12/eggheads-elite-shills-and-the-mainstream/</guid>
		<description><![CDATA[Scott Bellware, a once prominent member of the Alt.Net community before seemingly denouncing it sometime last year, has been very busy lately with some interesting and thought-provoking posts.  True to his usual form, you may want to keep a dictionary handy while reading.
In his post, How Mainstream Lost Software, Scott really said some things that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=264&subd=coreycoogan&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.scottbellware.com">Scott Bellware</a>, a once prominent member of the Alt.Net community before <a href="http://www.google.com/search?q=bellware+alt.net&amp;ie=utf-8&amp;oe=utf-8&amp;aq=t&amp;rls=org.mozilla:en-US:official">seemingly denouncing it</a> sometime last year, has been very busy lately with <a href="http://blog.scottbellware.com/2010/02/to-control-and-observe-productive.html">some interesting and thought-provoking posts</a>.  True to his usual form, you may want to keep a dictionary handy while reading.</p>
<p>In his post, <a href="http://blog.scottbellware.com/2010/02/how-mainstream-lost-software.html">How Mainstream Lost Software</a>, Scott really said some things that hit home for me.  He talks about Eggheads in the following way:</p>
<blockquote><p>Eggheads write and speak for other eggheads. The language they chose and the names given to design principles, as well as practices and patterns are stimulating to other eggheads and yet utterly obstructive to the other part of the software development population. When you measure the Egghead population against the mainstream population, the Egghead population doesn&#8217;t appear to be much more than a rounding error. There&#8217;s a lot of work to do, and we can do it much better.</p>
<p>Eggheads preach to the choir, and this is often so stimulating that they never leave the echo chamber. They don&#8217;t learn how to reach the mainstream. They hope that the people they do reach will somehow reach the mainstream, but those people usually end up emulating their egghead heros and become eggheads themselves. The circle expands slightly, but not merely enough to have the meaningful effect on software development productivity that their knowledge and understanding should already have had.</p></blockquote>
<p>The other end of the spectrum is who he called Shills.  It takes only one meaningful sentence to convey what a Shill is:</p>
<blockquote><p>Shills convince the mainstream to buy snake oil solutions to problems that could be easily solved with plain old soap and water.</p></blockquote>
<p>So why did all this hit home?  The fact is, I’m an aspiring Egghead.  I absolutely love this stuff and am passionate about all things Egghead.  I work all day.  I work at night.  When I’m not working, I’m thinking about this stuff.  When I’m not thinking about it, I’m reading about it and wondering how I can improve my craft.  I try to emulate my Egghead heroes like <a href="http://codebetter.com/blogs/jeremy.miller/">Jeremy D. Miller</a>, <a href="http://ayende.com/blog/default.aspx">Ayende Rahien</a>, <a href="http://www.udidahan.com/">Udi Dahan</a> and many others.  I know I’m not even on the same planet and probably never will be, but I’ll never stop trying.</p>
<p>Scott says that people who really care about this stuff are nothing more than “a rounding error” compared with the mainstream development community, who has bought into what the Shills are selling.  I see it all the time.  “Why write unit tests first, or even by hand, when I have a wizard to generate them for me when I’m done?”.  “Why write my own decoupled, testable authentication scheme when I have the AspNetMembershipProvider?”.  It’s tough to win those debates because this is just not how most people understand things.</p>
<p>The impending doom of the <a href="http://tech.groups.yahoo.com/group/altdotnet-NEW/">Northeast WI Alt.Net User Group</a> is what really brought this home.  It’s not officially over yet, but I was very surprised to find out how very little of the local population is in learning about things NOT mainstream Microsoft. I advocated the group to almost every developer I met but nobody ever showed any interest.  They show up at the <a href="http://www.fvnug.org/">INETA sponsored .NET User Group</a> to learn about SharePoint and Silverlight RIA, but not Alt.net.  In my opinion, we were talking and learning about things that could be implemented right away to.  Things that had immediate benefit.  Why wouldn’t this interest people?</p>
<p><a href="http://blog.coreycoogan.com/2009/11/06/nservicebus-and-event-driven-architecture-eda/">Scott Felder covered NServiceBus</a> to an audience of 5.  I prepared a presentation on the Spark View Engine, which was supposed to be for an audience of 7.  Unfortunately only one person was actually going to come so I called him from the parking lot to let him know not to bother.  Other topics were going to include <a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">SRP/S.O.L.I.D.</a>, <a href="http://structuremap.sourceforge.net/">StructureMap</a>, <a href="http://www.sharparchitecture.net/">S#arpArchitecture</a>, <a href="https://www.hibernate.org/343.html">NHibernate</a> and so much more.  The fact is, people just weren’t interested.</p>
<p>There was a <a href="http://tech.groups.yahoo.com/group/altdotnet-NEW/message/111">bunch of discussion on our group</a> about marketing and branding to generate interest, but it honestly seems like too much work.  I am a very busy person and time is so precious to me that it’s really hard to justify investing my time and energy into getting people interested in improving their craft.  We are in charge of our own path as developers – nobody else.  If they aren’t willing or interested in seeing what else is out there, it’s their loss, right?   Right?</p>
<p>So that’s the nerve that was touched.  Scott’s closing words included this:</p>
<blockquote><p>What&#8217;s needed is a new generation of productivity missionaries who are willing to master the field of knowledge and are willing to learn to connect with the mainstream.</p></blockquote>
<p>Again, I am not claiming to be elite or even in the top 50%, but I do admit to understanding a lot of this stuff.  Reading his post makes me feel a little guilty for wanting to bail on the Alt.Net user group.  It really made me look at that decision and reflect on the current state of the mainstream development community and ask myself if I’m happy with where things are.  The answer is no.  It takes too much energy to get people to even consider possibilities beyond 3 Tier architectures with so-called BLL’s that act as a pass-through to a DAL.  I don’t want to explain why breaking a God class down into 10 separate classes in the name of SRP really isn’t “a lot of extra work”.  Yes, IoC containers use reflection, but most of it gets done upfront and you have to consider everything you get&#8230; etc&#8230;</p>
<p>Thanks Scott for giving me more to think about.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/coreycoogan.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/coreycoogan.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/coreycoogan.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/coreycoogan.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/coreycoogan.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/coreycoogan.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/coreycoogan.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/coreycoogan.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/coreycoogan.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/coreycoogan.wordpress.com/264/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=264&subd=coreycoogan&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.coreycoogan.com/2010/02/12/eggheads-elite-shills-and-the-mainstream/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e09ede8123295427210e9a3565804401?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">coreycoogan</media:title>
		</media:content>
	</item>
		<item>
		<title>Holy Over Mocking Batman: A Natural Progression</title>
		<link>http://blog.coreycoogan.com/2010/01/28/holy-over-mocking-batman-a-natural-progression/</link>
		<comments>http://blog.coreycoogan.com/2010/01/28/holy-over-mocking-batman-a-natural-progression/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 05:40:02 +0000</pubDate>
		<dc:creator>coreycoogan</dc:creator>
				<category><![CDATA[Alt.Net]]></category>
		<category><![CDATA[Architecture and Design]]></category>
		<category><![CDATA[Rhino Mocks]]></category>
		<category><![CDATA[SOLID]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Interaction Testing]]></category>
		<category><![CDATA[Mocking]]></category>
		<category><![CDATA[Uncle Bob]]></category>

		<guid isPermaLink="false">http://coreycoogan.wordpress.com/?p=258</guid>
		<description><![CDATA[Uncle Bob has been on an interesting kick lately, writing thought provoking posts with some controversial undertones. A few days ago, he posted &#8220;Mocking Mocking and Testing Outcomes&#8220;, where he mocked the [over?]use of mocking frameworks. It&#8217;s an interesting article and worth a read.
I can certainly see where he is coming from with this post. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=258&subd=coreycoogan&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.objectmentor.com/omTeam/martin_r.html">Uncle Bob</a> has been on an interesting kick lately, writing thought provoking posts with some controversial undertones. A few days ago, he posted &#8220;<a href="http://blog.objectmentor.com/articles/2010/01/23/mocking-mocking-and-testing-outcomes">Mocking Mocking and Testing Outcomes</a>&#8220;, where he mocked the [over?]use of mocking frameworks. It&#8217;s an interesting article and worth a read.</p>
<p>I can certainly see where he is coming from with this post. The part that really grabbed me was the last paragraph:</p>
<blockquote><p>&#8220;Also, why do you need to verify that “verify(manager).createCredential” was called? If you really get the credentials you’re expecting from the Authenticator, why would you need to check where they come from? Isn’t it one more way to couple your test to the implementation?&#8221;</p></blockquote>
<p>I think this is the single most common pitfall of anyone who has been doing TDD with mocking for a short period of time.  The initial tendency is to test each and every interaction between the objects.  It usually starts out with large tests that make too many assertions.  It’s not uncommon in these tests to see the developer assert that:</p>
<ol>
<li>The application service layer gets called</li>
<li>A transaction is started</li>
<li>The appropriate repository method[s] are called, which can be multiple repositories</li>
<li>Some business logic is executed</li>
<li>The right value is returned</li>
</ol>
<p>Such a test is going to be very brittle and break upon any serious refactoring.  As Uncle Bob points out, do we really care about each of these interactions?  Sure, in some cases it may be important to make sure a transaction is started, but in most cases all you care about is that the right value is returned.  This is the natural progression of implementing TDD, especially when mocking gets introduced.  I think it takes the pains of these brittle tests to discover that asserting all those interactions is really not necessary.</p>
<p>The next progression starts is when the developer begins to understand what one assertion, or logical assertion group, per test really means.  This phase is a little less painful because at least now there is a separate test for each interaction, which is still typically unnecessary.  Now that the tests are broken up into logical units, the tests are easier to fix when refactoring breaks the interactions.</p>
<p>Now the final progression &#8211; the pains of these fragile tests lead to the notion that all these tests really don’t matter.  They really don’t prove anything about the quality of the software.  The tests match the implementation and the system depends a set of very brittle tests that could make refactoring too painful.  That’s when the tests get simpler.  That’s when the realization that a mock isn&#8217;t needed for everything and ever interaction doesn&#8217;t need to be tested.</p>
<p>If you are reading this and it sounds like you are in phase 1 or 2, I highly recommend you read the post “<a href="http://www.lostechies.com/blogs/jimmy_bogard/archive/2008/10/05/three-simple-rhino-mocks-rules.aspx">Three simple Rhino Mocks rules</a>” by <a href="http://www.lostechies.com/blogs/jimmy_bogard/default.aspx">Jimmy Bogard</a>.  It really influenced the way I write tests.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/coreycoogan.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/coreycoogan.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/coreycoogan.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/coreycoogan.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/coreycoogan.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/coreycoogan.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/coreycoogan.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/coreycoogan.wordpress.com/258/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/coreycoogan.wordpress.com/258/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/coreycoogan.wordpress.com/258/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=258&subd=coreycoogan&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.coreycoogan.com/2010/01/28/holy-over-mocking-batman-a-natural-progression/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e09ede8123295427210e9a3565804401?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">coreycoogan</media:title>
		</media:content>
	</item>
		<item>
		<title>Where&#8217;s Corey Been?</title>
		<link>http://blog.coreycoogan.com/2010/01/22/wheres-corey-been/</link>
		<comments>http://blog.coreycoogan.com/2010/01/22/wheres-corey-been/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 01:50:08 +0000</pubDate>
		<dc:creator>coreycoogan</dc:creator>
				<category><![CDATA[Alt.Net]]></category>
		<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Castle]]></category>
		<category><![CDATA[Fluent Nhibernate]]></category>
		<category><![CDATA[NHibernate]]></category>
		<category><![CDATA[Castle Facilities]]></category>
		<category><![CDATA[Corey Coogan]]></category>
		<category><![CDATA[Update]]></category>

		<guid isPermaLink="false">http://blog.coreycoogan.com/?p=253</guid>
		<description><![CDATA[It&#8217;s been a long time since I&#8217;ve blogged, despite my growing list of topics.  I continue grow with Castle, NHibernate, Fluent NH and some Castle facilities.  I&#8217;m also very interested in the FubuMVC reboot.  I love Jeremy D. Miller&#8217;s style and look forward to playing with some of this.  In fact, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=253&subd=coreycoogan&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a long time since I&#8217;ve blogged, despite my growing list of topics.  I continue grow with Castle, NHibernate, Fluent NH and some <a href="http://www.castleproject.org/container/facilities/trunk/index.html">Castle facilities</a>.  I&#8217;m also very interested in the <a href="http://codebetter.com/blogs/jeremy.miller/archive/2009/12/15/an-update-on-the-fubumvc-reboot.aspx">FubuMVC reboot</a>.  I love <a href="http://codebetter.com/blogs/jeremy.miller/default.aspx">Jeremy D. Miller&#8217;s</a> style and look forward to playing with some of this.  In fact, <a href="http://www.lostechies.com/blogs/joshuaflanagan/default.aspx">Josh Flanagan</a>, who works with JDM, just wrote a <a href="http://www.lostechies.com/blogs/joshuaflanagan/archive/2010/01/18/fubumvc-define-your-actions-your-way.aspx?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+LosTechies+%28LosTechies%29&amp;utm_content=Google+Feedfetcher">really good intro article</a> on how to structure Fubu since the reboot.</p>
<p>I&#8217;ve been swamped with side work which has been consuming 20-25 hours/week of my time.  I&#8217;ll always choose billable hours over my blog, but hope to find time to write my next post soon.</p>
<p>Happy Christmas and Merry New Year since I missed my opportunity a few weeks back.</p>
<p>Till then,<br />
Corey</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/coreycoogan.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/coreycoogan.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/coreycoogan.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/coreycoogan.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/coreycoogan.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/coreycoogan.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/coreycoogan.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/coreycoogan.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/coreycoogan.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/coreycoogan.wordpress.com/253/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=253&subd=coreycoogan&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.coreycoogan.com/2010/01/22/wheres-corey-been/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e09ede8123295427210e9a3565804401?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">coreycoogan</media:title>
		</media:content>
	</item>
		<item>
		<title>Showing Strong Named Internal Classes to Rhino Mocks</title>
		<link>http://blog.coreycoogan.com/2009/12/05/showing-strong-named-internal-classes-to-rhino-mocks/</link>
		<comments>http://blog.coreycoogan.com/2009/12/05/showing-strong-named-internal-classes-to-rhino-mocks/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 05:05:30 +0000</pubDate>
		<dc:creator>coreycoogan</dc:creator>
				<category><![CDATA[Alt.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Rhino Mocks]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[InternalVisibleTo]]></category>
		<category><![CDATA[PublicKey=]]></category>
		<category><![CDATA[PublicKeyToken]]></category>
		<category><![CDATA[Rhino Mocks 3.5]]></category>
		<category><![CDATA[Rhino Mocks 3.6]]></category>
		<category><![CDATA[Strong Named]]></category>
		<category><![CDATA[Strong Naming]]></category>

		<guid isPermaLink="false">http://coreycoogan.wordpress.com/2009/12/05/showing-strong-named-internal-classes-to-rhino-mocks/</guid>
		<description><![CDATA[Other possible titles include:
Rhino Mocks 3.5 Public Key, Rhino Mocks 3.6 Public Key, Rhino Mocks Strong Named Mocking
When you design your code to be testable with a mocking framework like Rhino Mocks, you typically end up marking otherwise private classes as Internal.&#160; This allows you to share your internal classes with test project[s].&#160; To do [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=246&subd=coreycoogan&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Other possible titles include:</p>
<h2>Rhino Mocks 3.5 Public Key, Rhino Mocks 3.6 Public Key, Rhino Mocks Strong Named Mocking</h2>
<p>When you design your code to be testable with a mocking framework like Rhino Mocks, you typically end up marking otherwise private classes as Internal.&#160; This allows you to share your internal classes with test project[s].&#160; To do this, you have to use the <a href="http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx">InternalVisibleTo</a> assembly attribute in the AssemblyInfo class that you want to share.</p>
<p>[assembly: InternalsVisibleTo(“S2sol.ProjectA.TestProject”)]</p>
<p>This attribute is essentially doing what it says, “Make my stuff that is marked internal visible to the specified class”.&#160; When the project under test is strongly named, for whatever reason, it is also required that you put the public key (not the public key token) of the test project in there with the assembly name.&#160; This to ensure that the internals that are being exposed are only exposed to an assembly that is known.    </p>
<p>Rhino Mocks uses <a href="http://www.castleproject.org/dynamicproxy/index.html">Castle’s Dynamic Proxy</a> for mocking.&#160; It creates classes at runtime to act as proxies, or interceptors, whenever you create a mock or stub using MockRepository.Create&#8230;&#160; This means that the project under test must verify the dynamic proxy class via the InternalVisibleTo attribute, which means we’ll need the PublicKey for the dynamic assembly.&#160; </p>
<p>I found this somewhere on the web over a year ago and took it for granted until I needed it again today.&#160; After I hunted in some of my old code and found it, seemed like a great post that will surely help someone else out there.&#160; So when you are in this scenario, using Rhino 3.5/3.6, add this to the AssemblyInfo of the component you want to test and you will be good to go:</p>
<p><em>NOTE: breaks in the public key are intentional for rendering.&#160; It works like this or if the key is one line.</em></p>
<pre class="brush: csharp;">
//required for Rhino Mocks
[assembly: InternalsVisibleTo(&quot;DynamicProxyGenAssembly2, PublicKey=00240000048000009&quot;+
&quot;40000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f&quot; +
&quot;3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cd&quot; +
&quot;cf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74&quot; +
&quot;c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7&quot;)]  
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/coreycoogan.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/coreycoogan.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/coreycoogan.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/coreycoogan.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/coreycoogan.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/coreycoogan.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/coreycoogan.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/coreycoogan.wordpress.com/246/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/coreycoogan.wordpress.com/246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/coreycoogan.wordpress.com/246/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=246&subd=coreycoogan&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.coreycoogan.com/2009/12/05/showing-strong-named-internal-classes-to-rhino-mocks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e09ede8123295427210e9a3565804401?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">coreycoogan</media:title>
		</media:content>
	</item>
		<item>
		<title>ALT.NET Content in MSDN</title>
		<link>http://blog.coreycoogan.com/2009/12/01/alt-net-content-in-msdn/</link>
		<comments>http://blog.coreycoogan.com/2009/12/01/alt-net-content-in-msdn/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 22:33:01 +0000</pubDate>
		<dc:creator>coreycoogan</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Alt.Net]]></category>
		<category><![CDATA[Architecture and Design]]></category>
		<category><![CDATA[NHibernate]]></category>
		<category><![CDATA[Ayende]]></category>
		<category><![CDATA[Laribee]]></category>
		<category><![CDATA[MSDN]]></category>
		<category><![CDATA[Technical Debt]]></category>

		<guid isPermaLink="false">http://coreycoogan.wordpress.com/2009/12/01/alt-net-content-in-msdn/</guid>
		<description><![CDATA[Microsoft has been doing a decent job of including many Alt.net-ish articles in each issue.&#160; Most notably the Jeremy D. Miller articles that have appeared throughout the 2009 year.&#160; The December 2009 issue is following the trend with not one, but two articles from the community.
First, an article on NHibernate from Ayende (Oren Eini).&#160; It’s [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=245&subd=coreycoogan&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Microsoft has been doing a decent job of including many Alt.net-ish articles in each issue.&#160; Most notably the <a href="http://social.msdn.microsoft.com/Search/en-US/?Refinement=118&amp;Query=jeremy+d.+miller">Jeremy D. Miller articles</a> that have appeared throughout the 2009 year.&#160; The December 2009 issue is following the trend with not one, but two articles from the community.</p>
<p>First, an <a href="http://msdn.microsoft.com/en-us/magazine/ee819139.aspx">article on NHibernate</a> from <a href="http://ayende.com/blog/">Ayende (Oren Eini)</a>.&#160; It’s great to see MS embracing NHibernate and this looks to be a great article (although I haven’t read it yet).</p>
<p>The second article comes from <a href="http://codebetter.com/blogs/david_laribee/">David Laribee</a>, he who coined the term Alt.Net.&#160; He’s <a href="http://msdn.microsoft.com/en-us/magazine/ee819135.aspx">written an article on paying back technical debt with Agile techniques</a>, which I’m also looking forward to reading.</p>
<p><a href="http://msdn.microsoft.com/en-us/magazine/ee835718.aspx">Go check it out!</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/coreycoogan.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/coreycoogan.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/coreycoogan.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/coreycoogan.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/coreycoogan.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/coreycoogan.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/coreycoogan.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/coreycoogan.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/coreycoogan.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/coreycoogan.wordpress.com/245/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=245&subd=coreycoogan&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.coreycoogan.com/2009/12/01/alt-net-content-in-msdn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e09ede8123295427210e9a3565804401?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">coreycoogan</media:title>
		</media:content>
	</item>
		<item>
		<title>Command Query Responsibility Separation (CQRS)</title>
		<link>http://blog.coreycoogan.com/2009/11/18/command-query-responsibility-separation-cqrs/</link>
		<comments>http://blog.coreycoogan.com/2009/11/18/command-query-responsibility-separation-cqrs/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 00:57:31 +0000</pubDate>
		<dc:creator>coreycoogan</dc:creator>
				<category><![CDATA[Architecture and Design]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Command Query Separation]]></category>
		<category><![CDATA[CQRS]]></category>
		<category><![CDATA[CQS]]></category>
		<category><![CDATA[Greg Young]]></category>

		<guid isPermaLink="false">http://coreycoogan.wordpress.com/?p=240</guid>
		<description><![CDATA[CQRS is a relatively new way of architecting systems that is the topic of much discussion on the DDD lists.  The biggest proponents (creators?), Udi Dahan and Greg Young, are constantly answering question, giving suggestions and presenting the architecture at conferences around the world.  It’s fascinating and I really like what I’ve read and watched, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=240&subd=coreycoogan&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://codebetter.com/blogs/gregyoung/archive/2009/08/13/command-query-separation.aspx">CQRS</a> is a relatively new way of architecting systems that is the topic of much discussion on the <a href="http://tech.groups.yahoo.com/group/domaindrivendesign/">DDD lists</a>.  The biggest proponents (creators?), <a href="http://www.udidahan.com/">Udi Dahan</a> and <a href="http://codebetter.com/blogs/gregyoung/default.aspx">Greg Young</a>, are constantly answering question, giving suggestions and presenting the architecture at conferences around the world.  It’s fascinating and I really like what I’ve read and watched, but I’ve always had trouble grasping the ideas as a whole, especially <a href="http://martinfowler.com/eaaDev/EventSourcing.html">Event Sourcing</a>, without something concrete to look at.</p>
<p><strong>UPDATE:</strong> As pointed out by <a href="http://blog.coreycoogan.com/2009/11/18/command-query-responsibility-separation-cqrs/#comment-62">Mark Nijhof in the comments</a>, Greg and Udi have slightly different philosophies.  We&#8217;re talking about Greg&#8217;s flavor here.</p>
<p>The gist of CQRS is that you access your domain model for updating via commands and a separate service from the reads (queries) and reporting.  Reading from your database happens without going through the domain layer and can be performed against a denormalized database by passing simple and complete DTO’s to the UI.  The updates to the domain eventually update the read-only database when the published event messages get picked up and acted upon.</p>
<p>Thanks to <a href="http://elegantcode.com/about/mark-nijhof/">Mark Nijhof</a>, I have something more in depth that <a href="http://elegantcode.com/2009/11/11/cqrs-la-greg-young/">I can read</a> and also a <a href="http://github.com/MarkNijhof/Fohjin">code base</a> I can examine.  Anyone who is interested in this architecture should <a href="http://elegantcode.com/2009/11/11/cqrs-la-greg-young/">read this post now</a>.  It is pretty well written and really helps solidify the essence of what CQRS looks like the problem it is trying to solve.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/coreycoogan.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/coreycoogan.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/coreycoogan.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/coreycoogan.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/coreycoogan.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/coreycoogan.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/coreycoogan.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/coreycoogan.wordpress.com/240/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/coreycoogan.wordpress.com/240/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/coreycoogan.wordpress.com/240/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=240&subd=coreycoogan&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.coreycoogan.com/2009/11/18/command-query-responsibility-separation-cqrs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e09ede8123295427210e9a3565804401?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">coreycoogan</media:title>
		</media:content>
	</item>
		<item>
		<title>Synching Gmail Contact and Calendar with Yahoo and Outlook</title>
		<link>http://blog.coreycoogan.com/2009/11/14/synching-gmail-contact-and-calendar-with-yahoo-and-outlook/</link>
		<comments>http://blog.coreycoogan.com/2009/11/14/synching-gmail-contact-and-calendar-with-yahoo-and-outlook/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 03:04:03 +0000</pubDate>
		<dc:creator>coreycoogan</dc:creator>
				<category><![CDATA[27554455]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Droid]]></category>
		<category><![CDATA[GMail]]></category>
		<category><![CDATA[GMail Contacts]]></category>
		<category><![CDATA[Google Calendar]]></category>
		<category><![CDATA[Google Contacts]]></category>
		<category><![CDATA[Outlook]]></category>
		<category><![CDATA[Sync]]></category>
		<category><![CDATA[Synchronize]]></category>
		<category><![CDATA[Yahoo]]></category>
		<category><![CDATA[Yahoo Contacts]]></category>

		<guid isPermaLink="false">http://blog.coreycoogan.com/?p=234</guid>
		<description><![CDATA[As a coworker of mine put it, I recently &#8220;stepped into the 21st century&#8221; by splurging on the Droid the day after its launch. I&#8217;ve been intrigued by the smart phone for some time and would have jumped all over the iPhone but the coverage from AT&#38;T really sucks in my neck of the woods. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=234&subd=coreycoogan&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>As a <a href="http://www.linkedin.com/pub/jason-puyleart/9/1a3/b59">coworker of mine</a> put it, I recently &#8220;stepped into the 21st century&#8221; by splurging on the <a href="http://phones.verizonwireless.com/motorola/droid/">Droid</a> the day after its launch. I&#8217;ve been intrigued by the smart phone for some time and would have jumped all over the iPhone but the coverage from AT&amp;T really sucks in <a href="http://maps.google.com/maps?q=suamico,+WI&amp;oe=utf-8&amp;client=firefox-a&amp;ie=UTF8&amp;hq=&amp;hnear=Suamico,+Brown,+Wisconsin&amp;gl=us&amp;ei=HBL-SvuYB4a1tgewheiRDg&amp;ved=0CAwQ8gEwAA&amp;z=11">my neck of the woods</a>. When they started talking about the Droid on Verizon’s network, I got all giddy and couldn&#8217;t wait to get one. Not to mention how much fun it could be writing my own mobile apps. I guess it&#8217;s time to dust off my Java books and lube up my copy of Eclipse.</p>
<p>This post, however, is less about technical stuff and more about getting what you want where you want it, and that is calendar and contact synchronization. I&#8217;m not saying that this is the only way, or the best way, but I dug around for several hours and tried all sorts of free and demo software and this is what ended up working for me with the least amount of pain.</p>
<p>First, some back story on my situation. I&#8217;m an avid Yahoo Mail user and have been for about 10 years. I like Yahoo mail with all it&#8217;s Ajax goodness and sleek interface. GMail on the other hand, seems clunky. As a <a href="http://twitter.com/ryibas">coworker of mine</a> put it, &#8220;it looks like something that was designed by programmers&#8221;. I have a GMail account to use for all the wonders that Google offers, like analytics and other services. Being that the Droid is heavily integrated with Google, the calendar and contacts functionality on the phone depends on the Google Calendar and GMail Contacts. So now I was faced with the problem &#8211; how do I get my events, appointments, reminders and contacts from Yahoo to my phone?</p>
<p><em>NOTE: I’m running Office 2007 on Windows 7 64bit</em></p>
<p><strong>How I am Synchronizing Yahoo! Contacts and Calendar with Outlook and GMail</strong></p>
<ol>
<li>First I am doing 2 way synchronization between Yahoo and Outlook for contacts and calendar.  This is very simple using Yahoo’s AutoSync addon for Outlook/Outlook Express.  You can install the bits for this program by first going to Calendar and then clicking the “Sync” link in the top right.  You can also <a href="http://www.versiontracker.com/dyn/moreinfo/win/10916037">get more info from VersionTracker</a>.  This addon isn’t 100% rock solid and sometimes won’t fire up, but not sure what the circumstances are.  I don’t think it’s officially supported in Windows 7, but it’s been working good enough for now.</li>
<li>Now that I have all my Yahoo contacts and calendar entries in Outlook, it’s time to find something to synchronize Outlook to Gmail.  I went into this thinking this would be a simple task, but let’s just say there’s a lot of crap software out there both for free and for pay.  What I ended up using was the addon from <a href="http://www.soocial.com">Soocial.com</a>, which a contact management service that helps keep your contacts organized.  They offer tools to sync several providers, but the Yahoo sync is only one-way, which is why I am using AutoSync to handle that.  Their GMail sync tool only works for contacts, which leads me to item 3.</li>
<li>To keep my outlook calendar synchronized with the GMail calendar, I am using <a href="http://www.google.com/support/calendar/bin/answer.py?answer=98563">Google’s Calendar Sync Tool</a>.  You may be as surprised as I was to find that Google offers a tool to sync the calendar but not contacts.  I think it has something to do with the <a href="https://tools.google.com/dlpage/gappssync">Apps Synch</a> product that requires an Enterprise license.<br />
Note: Google does offer a way to <a href="http://news.cnet.com/8301-13880_3-10290509-68.html">sync iTunes contacts with GMail</a>, but that seemed like a whole other can of worms.</li>
</ol>
<p>At first I had reservations about putting all my contacts on Soocial.com, but I couldn’t find anything sketchy about them in the public domain.  If you have any knowledge about this service, please share.</p>
<p>So what I’ve ended up with is this:</p>
<p><strong>Yahoo </strong>-&gt;&lt;- <em>AutoSync</em> –&gt;&lt;- <strong>Outlook</strong> –&gt;&lt;- <em>Soocial.com</em> -&gt;&lt;- <strong>Gmail Contacts<br />
<strong>GMail Calendar</strong> </strong>-&gt;&lt;- <em>GMail Calendar Synch</em> –&gt;&lt;- <strong>Outlook</strong></p>
<p>Now when I add a contact or calendar entry in Outlook or Yahoo, I will see it on my Droid.  Conversely, if I’m on the road and add something in my Droid (Gmail), I’ll see it in Yahoo and Outlook within 90 minutes (configurable).  It not as seamless and I’d like, but it works pretty good for now.  I’ll update the post if things start to get dicey or <span style="text-decoration:line-through;">if</span>when something better comes along.  Based on the number posts and questions on the web regarding this topic, I’m sure this will help at least a couple people trying to mesh into this new fangled era of being constantly connected to the world from your powerful little handset.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/coreycoogan.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/coreycoogan.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/coreycoogan.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/coreycoogan.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/coreycoogan.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/coreycoogan.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/coreycoogan.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/coreycoogan.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/coreycoogan.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/coreycoogan.wordpress.com/234/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=234&subd=coreycoogan&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.coreycoogan.com/2009/11/14/synching-gmail-contact-and-calendar-with-yahoo-and-outlook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e09ede8123295427210e9a3565804401?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">coreycoogan</media:title>
		</media:content>
	</item>
		<item>
		<title>Event Mocking with[out] Rhino Mocks</title>
		<link>http://blog.coreycoogan.com/2009/11/11/event-mocking-without-rhino-mocks/</link>
		<comments>http://blog.coreycoogan.com/2009/11/11/event-mocking-without-rhino-mocks/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 23:56:32 +0000</pubDate>
		<dc:creator>coreycoogan</dc:creator>
				<category><![CDATA[Alt.Net]]></category>
		<category><![CDATA[Rhino Mocks]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Mocking Events]]></category>

		<guid isPermaLink="false">http://coreycoogan.wordpress.com/?p=230</guid>
		<description><![CDATA[One of the common tasks I come across when doing TDD is mocking events.&#160; I&#8217;m a big fan of Rhino Mocks and it&#8217;s pretty easy to raise an event on a mocked object doing something like this:
_Broker.Raise(x =&#62; x.GetData += null, this, EventArgs.Empty);
This is representative of the most typical examples you&#8217;ll find on the web [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=230&subd=coreycoogan&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>One of the common tasks I come across when doing TDD is mocking events.&#160; I&#8217;m a big fan of <a href="http://www.ayende.com/projects/rhino-mocks.aspx">Rhino Mocks</a> and it&#8217;s pretty easy to <a href="http://www.ayende.com/Wiki/Rhino+Mocks+3.5.ashx#Howtoraiseevents">raise an event</a> on a mocked object doing something like this:</p>
<p>_Broker.Raise(x =&gt; x.GetData += null, this, EventArgs.Empty);</p>
<p>This is representative of the most typical examples you&#8217;ll find on the web and this is all fine and good.&#160; However, sometimes the scenario that you need to test is a little more complicated and this method of raising events on a mock object simply won&#8217;t work without too many hassles.</p>
<p><strong>A More Complicated Scenario</strong></p>
<p>A common scenario may be where you are testing something that is subscribing to events that are actually fired by an object a couples levels deep.&#160; For example, you may have an object that sends messages to another object, which is responsible for raising the event.&#160; Hopefully this very simple textual sequence figure will help make things more clear.</p>
<p>Proxy.Execute() -&gt; Broker.HandleMessage() -&gt; Broker.RaiseEvent() -&gt; Gateway.HandleEvent(eventArg)</p>
<p>I want to test that when the Proxy publishes a certain message the Gateway handles the event properly.</p>
<p><strong>Mocking The Old Fashioned Way</strong></p>
<p>My first instinct was to look at how I could accomplish this with Rhino.&#160; After a couple minutes, I realized that this would not be a good way to spend my time.&#160; A better option for me was to mock the old fashioned way.&#160; To do this, I created a <em>MockProxy</em> and <em>MockBroker</em> class that implemented the <em>IProxy</em> and <em>IBroker</em> interfaces.&#160; I can now just write regular C# code to handle how/when to raise those events.&#160; It took only a few minutes to write the code, is intention-revealing and works like a champ.</p>
<p><em>NOTE: I tried to figure out how I could show some sample code without getting into all the gory details but couldn&#8217;t find a simple way, so I&#8217;ll just get right to the moral of the story.</em></p>
<p>When it comes to mocking, follow the KISS principal.&#160; Rhino and other frameworks are there to make our lives easier.&#160; If you are spending time and effort trying to figure out how to mock something in a framework, stop and think about doing it old school.&#160; You&#8217;ll save yourself a load of time and your simple solution should be more readable to others.&#160; You can still create a Rhino mock of your old school mock object (assuming you used virtual methods) for the purpose of asserting expectations, which will provide the best of both worlds.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/coreycoogan.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/coreycoogan.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/coreycoogan.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/coreycoogan.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/coreycoogan.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/coreycoogan.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/coreycoogan.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/coreycoogan.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/coreycoogan.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/coreycoogan.wordpress.com/230/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.coreycoogan.com&blog=7719567&post=230&subd=coreycoogan&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.coreycoogan.com/2009/11/11/event-mocking-without-rhino-mocks/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e09ede8123295427210e9a3565804401?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">coreycoogan</media:title>
		</media:content>
	</item>
	</channel>
</rss>