<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.devmavens.com/~d/styles/itemcontent.css"?><rss version="2.0">
<channel>
    <title>DevMavens Feed</title>
    <link>http://DevMavens.com/</link>
    <description>DevMavens</description>
    <language>en-us</language>
    <docs>http://DevMavens.com/Rss</docs>
 
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.devmavens.com/Devmavens" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="devmavens" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>The Law of Conservation of Tradeoffs</title>
      <author>Oren Eini</author>
      <link>http://feedproxy.google.com/~r/AyendeRahien/~3/IyHKrwDb_s8/the-law-of-conservation-of-tradeoffs.aspx</link>
      <description>&lt;p&gt;Every so often I see a group of people or a company come up with a new Thing. That new Thing is supposed to solve a set of problems. The common set of problems that people keep trying to solve are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Data access with relational databases &lt;/li&gt;    &lt;li&gt;Building applications without needing developers &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;And &lt;em&gt;every single time&lt;/em&gt; that I see this, I know that there is going to be a catch involved. For the most part, I can usually even tell you &lt;em&gt;what&lt;/em&gt; the catches involved going to be.&lt;/p&gt;  &lt;p&gt;It isn’t because I am smart, and it is certain that I am not omnificent. It is an issue  of knowing the problem set that is being set out to solve. &lt;/p&gt;  &lt;p&gt;If we will take data access as a good example, there aren’t that many ways tat you can approach it, when all is said and done. There is a set of competing tradeoffs that you have to make. Simplicity vs. usability would probably be the best way to describe it. For example, you can create a very simple data access layer, but you’ll give up on doing automatic change tracking. If you want change tracking, then you need to have Identity Map (even data sets had that, in the sense that every row represented a single row :-) )&lt;/p&gt;  &lt;p&gt;When I need to evaluate a new data access tool, I don’t really need to go too deeply into how it does things, all I need to do is to look at the set of tradeoffs that this tool made. Because you &lt;em&gt;have&lt;/em&gt; to make those tradeoffs, and because I know the play field, it is very easy for me to tell what is actually going on.&lt;/p&gt;  &lt;p&gt;It is pretty much the same thing when we start talking about the options for building applications without developers (a dream that the industry had chased for the last 30 – 40 years or so, unsuccessfully). The problem isn’t in lack of trying, the amount of resources that were invested in the matter are staggering. But again you come into the realm of tradeoffs.&lt;/p&gt;  &lt;p&gt;The best that a system for non developers can give you is CRUD. Which is important, certainly, but for developers, CRUD is mostly a solved problem. If we want plain CRUD screens, we can utilize a whole host of tools and approaches to do them, but beyond the simplest departmental apps, the parts of the application that really matter aren’t really CRUD. For one application, the major point was being able to assign people to their proper slot, a task with significant algorithmic complexity. In another, it was fine tuning the user experience so they would have a seamless journey into the annals of the organization decision making processes.&lt;/p&gt;  &lt;p&gt;And here we get to the same tradeoffs that you have to makes. Developer friendly CRUD system exists in abundance, ASP.Net MVC support for Editor.For(model) is one such example. And they are developer friendly because they give you he bare bones of functionality you need, allow you to define broad swaths.  of the application in general terms, but allow you to fine tune the system easily where you need it. They are also totally incomprehensible if you aren’t a developer. &lt;/p&gt;  &lt;p&gt;A system that is aimed at paradevelopers focus a lot more of visual tooling to aid the paradeveloper achieve their goal. The problem is that in order to do that, we give up the ability to do things in broad strokes, and have to pretty much do anything from scratch for everything that we do. That is acceptable for a paradeveloper, without the concepts of reuse and DRY, but those same features that make it so good for a paradeveloper would be a thorn in a developer’s side. Because they would mean having to do the same thing over &amp;amp; over &amp;amp; over again.&lt;/p&gt;  &lt;p&gt;Tradeoffs, remember?&lt;/p&gt;  &lt;p&gt;And you can’t really create a system that satisfy both. Oh, you can try, but you are going to fail. And you are going to fail because the requirement set of a developer and the requirement set of a paradeveloper are so different as to be totally opposed to one another. For example, one of the things that developers absolutely &lt;em&gt;require&lt;/em&gt; is good version control support. And by good version control support i mean that you can diff between two versions of the application and get a meaningful result from the diff.&lt;/p&gt;  &lt;p&gt;A system for paradeveloper, however, is going to be so choke full of metadata describing what is going on that even if the metadata is in a format that is possible to diff (and all too often it is located in some database, in a format that make it utterly impossible to work with using source control tools). &lt;/p&gt;  &lt;p&gt;Paradeveloper systems encourage you to write what amounts to Bottun1_Click handlers, if they give you even that. Because the paradevelopers that they are meant for have no notion about things like architecture. The problem with that approach when developers do that is that it is obviously one that is unmaintainable.&lt;/p&gt;  &lt;p&gt;And so on, and so on.&lt;/p&gt;  &lt;p&gt;Whenever I see a new system cropping up in a field that I am familiar with, I evaluate it based on the tradeoffs that it must have made. And that is why I tend to be suspicious of the claims made about the new tool around the block, whatever that tool is at any given week. &lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11526.aspx" width="1" height="1" /&gt;&lt;p&gt;&lt;a target="_blank" href="http://theloungenet.com/feeds/redirect/DOTNETRSS/AYENDE/29AD3FC1B26350229C9C94B67D10D743FB13F8EB"&gt;&lt;img src="http://theloungenet.com/feeds/img/DOTNETRSS/AYENDE/29AD3FC1B26350229C9C94B67D10D743FB13F8EB"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AyendeRahien/~4/IyHKrwDb_s8" height="1" width="1"/&gt; &lt;hr /&gt;Read more: &lt;a href="http://feedproxy.google.com/~r/AyendeRahien/~3/IyHKrwDb_s8/the-law-of-conservation-of-tradeoffs.aspx"&gt;The Law of Conservation of Tradeoffs&lt;/a&gt; | &lt;a href="http://feeds.feedburner.com/AyendeRahien"&gt;Subscribe&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/icoBQFCFVAm3LSUjUB6s--5hdyI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/icoBQFCFVAm3LSUjUB6s--5hdyI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/icoBQFCFVAm3LSUjUB6s--5hdyI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/icoBQFCFVAm3LSUjUB6s--5hdyI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 03 Sep 2010 13:00:00 GMT</pubDate>
      <guid>http://feedproxy.google.com/~r/AyendeRahien/~3/IyHKrwDb_s8/the-law-of-conservation-of-tradeoffs.aspx</guid>
    </item>
 
    <item>
      <title>How far can you push commercialization?</title>
      <author>Oren Eini</author>
      <link>http://feedproxy.google.com/~r/AyendeRahien/~3/5Ar0BjD8kvI/how-far-can-you-push-commercialization.aspx</link>
      <description>&lt;p&gt;I was recently at a private company event (not my company, I was invited, along with others, because we have a close association to that company). The event itself wasn’t notable, but there was one thing that &lt;em&gt;really &lt;/em&gt;bothered me, before the event actually started, there was the usual phase when everyone is munching on the snacks and mingling. The food was some sort of green cupcakes with inspirational messages on them: “think positive”, “fitting the world to you”, etc. &lt;/p&gt;  &lt;p&gt;All in all, I found that somewhat strange, but I didn’t really care, but I was talking with a few friends when a woman walked up to us and started handing out coupons for some free demo courses using a whole new technique, etc. I was quite taken aback. I am used to stuff like that on conferences floors, where you have booth babes doing stuff like that, but that was a private meeting of less than fifty people, and I couldn’t understand what was going on.&lt;/p&gt;  &lt;p&gt;It helped that the woman kept dropping the same phrases that appeared on the cupcakes. That was later confirmed at the beginning of the meeting, where the presenter stood up and started by thanking the sponsors for bringing the food, etc.&lt;/p&gt;  &lt;p&gt;Looking back at this, I am both appalled, amazed and utterly unsurprised (you can be both at the same time, it seems). That company actually sold sponsorship for an internal, private, meeting. I don’t really know what was the point, if they were trying to save money on the food or they were actually &lt;em&gt;making&lt;/em&gt; money out of this, but that behavior really bother me. &lt;/p&gt;  &lt;p&gt;I am absolutely &lt;em&gt;for&lt;/em&gt; commercialization, if only because the bank would otherwise object, but I was utterly stunned by how crass it was. &lt;/p&gt;  &lt;p&gt;What is next? Hiring employees for the express purpose of watching commercials while the company is getting paid for that?&lt;/p&gt;  &lt;p&gt;More to the point, there is some expectation about how such functions are going to be, and stunts like that are leaving very bad impression.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11492.aspx" width="1" height="1" /&gt;&lt;p&gt;&lt;a target="_blank" href="http://theloungenet.com/feeds/redirect/DOTNETRSS/AYENDE/2A992300207B2CCA809328C6734F8F768B6BBA9F"&gt;&lt;img src="http://theloungenet.com/feeds/img/DOTNETRSS/AYENDE/2A992300207B2CCA809328C6734F8F768B6BBA9F"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AyendeRahien/~4/5Ar0BjD8kvI" height="1" width="1"/&gt; &lt;hr /&gt;Read more: &lt;a href="http://feedproxy.google.com/~r/AyendeRahien/~3/5Ar0BjD8kvI/how-far-can-you-push-commercialization.aspx"&gt;How far can you push commercialization?&lt;/a&gt; | &lt;a href="http://feeds.feedburner.com/AyendeRahien"&gt;Subscribe&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NuboEj2meRPxuuD0gY1yUmUu5pM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NuboEj2meRPxuuD0gY1yUmUu5pM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NuboEj2meRPxuuD0gY1yUmUu5pM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NuboEj2meRPxuuD0gY1yUmUu5pM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 02 Sep 2010 13:00:00 GMT</pubDate>
      <guid>http://feedproxy.google.com/~r/AyendeRahien/~3/5Ar0BjD8kvI/how-far-can-you-push-commercialization.aspx</guid>
    </item>
 
    <item>
      <title>NHibernate Quick-start Workshop - November 1th</title>
      <author>Oren Eini</author>
      <link>http://feedproxy.google.com/~r/AyendeRahien/~3/_lcg6yXdMkc/nhibernate-quick-start-workshop-november-1th.aspx</link>
      <description>&lt;p&gt;Tikal is delighted to invite you to join our &lt;a href="http://www.tikalk.com/net/tikal-offering/net-open-source-quick-start-workshop-november-1th"&gt;.NET open source workshop&lt;/a&gt; on November 1&lt;sup&gt;th&lt;/sup&gt; , lead by Oren Eini (Ayende Rahien) and other Tikal .NET experts.&lt;/p&gt;  &lt;p&gt;Tikal offers a set of software development tools and methodologies that enable .NET developers to integrate open source software modules into their native .Net environment.&lt;/p&gt;  &lt;p&gt;We invite you to join our .NET open source workshop, which will equip you all the knowledge required for using open source tools to develop excellent .NET applications quickly and effectively.&lt;/p&gt;  &lt;p&gt;The workshop will include diverse topics such as:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;NHibernate hands on training, covering assimilation of the ORM framework to your product.&lt;/li&gt;    &lt;li&gt;S#harp Architecture introduction.&lt;/li&gt;    &lt;li&gt;Assessment of your application development needs and where open source tools can fit in.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Read more about the workshop &lt;a href="http://www.tikalk.com/net/tikal-offering/net-open-source-quick-start-workshop-november-1th"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11550.aspx" width="1" height="1" /&gt;&lt;p&gt;&lt;a target="_blank" href="http://theloungenet.com/feeds/redirect/DOTNETRSS/AYENDE/01FBB00822FA6523FA932B4F41AECCC2365C67D5"&gt;&lt;img src="http://theloungenet.com/feeds/img/DOTNETRSS/AYENDE/01FBB00822FA6523FA932B4F41AECCC2365C67D5"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AyendeRahien/~4/_lcg6yXdMkc" height="1" width="1"/&gt; &lt;hr /&gt;Read more: &lt;a href="http://feedproxy.google.com/~r/AyendeRahien/~3/_lcg6yXdMkc/nhibernate-quick-start-workshop-november-1th.aspx"&gt;NHibernate Quick-start Workshop - November 1th&lt;/a&gt; | &lt;a href="http://feeds.feedburner.com/AyendeRahien"&gt;Subscribe&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kjvmwoKV1omYLGWQwv0eBfPfFgY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kjvmwoKV1omYLGWQwv0eBfPfFgY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kjvmwoKV1omYLGWQwv0eBfPfFgY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kjvmwoKV1omYLGWQwv0eBfPfFgY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 01 Sep 2010 13:16:00 GMT</pubDate>
      <guid>http://feedproxy.google.com/~r/AyendeRahien/~3/_lcg6yXdMkc/nhibernate-quick-start-workshop-november-1th.aspx</guid>
    </item>
 
    <item>
      <title>Don&amp;rsquo;t TOUCH that debugger, you moron, READ the exception stack</title>
      <author>Oren Eini</author>
      <link>http://feedproxy.google.com/~r/AyendeRahien/~3/0TmdJieMr2M/donrsquot-touch-that-debugger-you-moron-read-the-exception-stack.aspx</link>
      <description>&lt;p&gt;There is a tendency to reach the debugger for every error that you run, but in most cases, it is the exception (and the exception stack) that provides enough to solve the problem in 99% of the cases.&lt;/p&gt;  &lt;p&gt;Case in point, I made some changes to Uber Prof and run the tests. For various reasons, I had to reinstall SQLExpress, and all the Java related tests failed, throwing up copious amount of error text in my lap. I cringe when they do that, because it means having to setup the Java environment and having to check how to do things like real debugging in Java (something I have &lt;em&gt;very&lt;/em&gt; little knowledge of).&lt;/p&gt;  &lt;p&gt;I did just that, spending over an hour getting things to a position where I could run everything properly. Then I run a scenario and got an error, then I looked at the exception stack:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/DontTOUCHthatdebuggeryoumoronREADtheexce_B88F/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/DontTOUCHthatdebuggeryoumoronREADtheexce_B88F/image_thumb.png" width="1235" height="418" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Moron, did I mention already?&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11499.aspx" width="1" height="1" /&gt;&lt;p&gt;&lt;a target="_blank" href="http://theloungenet.com/feeds/redirect/DOTNETRSS/AYENDE/17719D352D79B040617F792B5FABB14AFA117958"&gt;&lt;img src="http://theloungenet.com/feeds/img/DOTNETRSS/AYENDE/17719D352D79B040617F792B5FABB14AFA117958"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AyendeRahien/~4/0TmdJieMr2M" height="1" width="1"/&gt; &lt;hr /&gt;Read more: &lt;a href="http://feedproxy.google.com/~r/AyendeRahien/~3/0TmdJieMr2M/donrsquot-touch-that-debugger-you-moron-read-the-exception-stack.aspx"&gt;Don&amp;rsquo;t TOUCH that debugger, you moron, READ the exception stack&lt;/a&gt; | &lt;a href="http://feeds.feedburner.com/AyendeRahien"&gt;Subscribe&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XBGDfxk9hwenYylmo7AndGDOUjU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XBGDfxk9hwenYylmo7AndGDOUjU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XBGDfxk9hwenYylmo7AndGDOUjU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XBGDfxk9hwenYylmo7AndGDOUjU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 01 Sep 2010 13:00:00 GMT</pubDate>
      <guid>http://feedproxy.google.com/~r/AyendeRahien/~3/0TmdJieMr2M/donrsquot-touch-that-debugger-you-moron-read-the-exception-stack.aspx</guid>
    </item>
 
    <item>
      <title>Applying Interface Segregation to Configuration Files</title>
      <author>Steve Smith</author>
      <link>http://stevesmithblog.com/blog/applying-interface-segregation-to-configuration-files/</link>
      <description>&lt;p&gt;In .NET, it’s very easy to set up &lt;a href="http://stevesmithblog.com/blog/custom-configuration-section-handlers/"&gt;custom configuration section handlers&lt;/a&gt; to handle your application or component’s configuration needs.&amp;#160; As my previous post shows, it’s also very easy to configure these with attributes that enforce required fields and other validation.&amp;#160; However, over time it’s very easy to create fairly large configuration sections that violate the &lt;a href="http://en.wikipedia.org/wiki/Interface_segregation_principle" rel="nofollow"&gt;Interface Segregation Principle&lt;/a&gt;, which states that classes shouldn’t be forced to depend on things they don’t need.&lt;/p&gt;  &lt;p&gt;Consider this relatively simple configuration section:&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;configSections&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;section&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;ConfigurationSettings&amp;quot;&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #ff0000"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;InterfaceSegregation.Configuration1.ConfigurationSettings, InterfaceSegregation&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;configSections&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ConfigurationSettings&lt;/span&gt; &lt;br /&gt;  &lt;span style="color: #ff0000"&gt;ApplicationName&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Interface Segregation&amp;quot;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #ff0000"&gt;AuthorName&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Steve Smith&amp;quot;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #ff0000"&gt;CacheDuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;60&amp;quot;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #ff0000"&gt;DatabaseServerName&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;localhost&amp;quot;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #ff0000"&gt;DatabaseName&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Northwind&amp;quot;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #ff0000"&gt;DatabaseUserName&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;ssmith&amp;quot;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #ff0000"&gt;DatabasePassword&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;secret&amp;quot;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #ff0000"&gt;WebServiceBaseUri&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://localhost/&amp;quot;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;I’ve intentionally made it a bit more verbose than needed (obviously the database settings could be combined into a connection string, etc), but the intent is to show that my relatively generic Settings section has completely lost its &lt;em&gt;cohesion&lt;/em&gt;.&amp;#160; Let’s look at an interface that we’ve created to support these settings (because we don’t want to have an &lt;a href="http://stevesmithblog.com/blog/insidious-dependencies/"&gt;Insidious Dependency On Our Configuration File&lt;/a&gt; in our code):&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;interface&lt;/span&gt; IConfigurationSettings : IApplicationIdentitySettings&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000"&gt;// application identity settings&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; ApplicationName { get; }&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; AuthorName { get; }&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: #008000"&gt;// performance tuning settings&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; CacheDuration { get; }&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: #008000"&gt;// data access settings&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; DatabaseServerName { get; }&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; DatabaseName { get; }&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; DatabaseUserName { get; }&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; DatabasePassword { get; }&lt;br /&gt;        &lt;br /&gt;    &lt;span style="color: #008000"&gt;// web service api settings&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; WebServiceBaseUri { get; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;div id="codeSnippetWrapper"&gt;From the comments I’ve included in this interface, it’s clear that there are four different kinds of settings grouped together by this interface.&amp;#160; With only 8 properties, it has already become an example of a “fat” interface.&amp;#160; Now let’s look at one of the clients of this interface, a simple AboutPage file (that isn’t an ASP.NET page, but could be):&lt;/div&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; AboutPage&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; IConfigurationSettings _configurationSettings;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; AboutPage(IConfigurationSettings configurationSettings)&lt;br /&gt;    {&lt;br /&gt;        _configurationSettings = configurationSettings;&lt;br /&gt;    }&lt;br /&gt;        &lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; AboutPage() : &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;(ConfigurationSettings.Settings)&lt;br /&gt;    {}&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Render(TextWriter writer)&lt;br /&gt;    {&lt;br /&gt;        writer.Write(&lt;span style="color: #006080"&gt;&amp;quot;{0} By {1}&amp;quot;&lt;/span&gt;, &lt;br /&gt;            _configurationSettings.ApplicationName, &lt;br /&gt;            _configurationSettings.AuthorName);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;This class takes advantage of Dependency Injection to eliminate a direct dependency on the ConfigurationSettings class/file, through the use of the IConfigurationSettings interface.&amp;#160; However, it’s still depending on a much larger interface than it needs, and thus is violating ISP.&amp;#160; Fortunately, there’s a very easy fix for this that will let us ensure this class only depends on what it needs, without breaking anything else in our application.&amp;#160; The refactoring involves creating a new interface for AboutPage to depend upon, that is more cohesive and only includes things AboutPage (and perhaps other classes that require the same things) requires.&amp;#160; First, we need to identify these settings and come up with a name for the new interface:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;interface&lt;/span&gt; IApplicationIdentitySettings&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; ApplicationName { get; }&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; AuthorName { get; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Next, we need to modify the IConfigurationSettings interface so that it no longer has these settings, but inherits them from the newly created IApplicationIdentitySettings interface:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;interface&lt;/span&gt; IConfigurationSettings : IApplicationIdentitySettings&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000"&gt;// performance tuning settings&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; CacheDuration { get; }&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: #008000"&gt;// data access settings&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; DatabaseServerName { get; }&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; DatabaseName { get; }&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; DatabaseUserName { get; }&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; DatabasePassword { get; }&lt;br /&gt;        &lt;br /&gt;    &lt;span style="color: #008000"&gt;// web service api settings&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; WebServiceBaseUri { get; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;Finally, the AboutPage class can be modified to use the new, more focused interface.&amp;#160; In its default constructor, though, it can still use the ConfigurationSettings.Settings class, as this implements IConfigurationSettings, which now automatically implements IApplicationIdentitySettings:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; AboutPage&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; IApplicationIdentitySettings _applicationIdentitySettings;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; AboutPage(IApplicationIdentitySettings applicationIdentitySettings)&lt;br /&gt;    {&lt;br /&gt;        _applicationIdentitySettings = applicationIdentitySettings;&lt;br /&gt;    }&lt;br /&gt;        &lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; AboutPage()&lt;br /&gt;        : &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;(ConfigurationSettings.Settings)&lt;br /&gt;    { }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Render(TextWriter writer)&lt;br /&gt;    {&lt;br /&gt;        writer.Write(&lt;span style="color: #006080"&gt;&amp;quot;{0} By {1}&amp;quot;&lt;/span&gt;,&lt;br /&gt;            _applicationIdentitySettings.ApplicationName,&lt;br /&gt;            _applicationIdentitySettings.AuthorName);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Interface Segregation Principle states that classes should not be forced to depend on things they do not use.&amp;#160; By refactoring “fat” interfaces into smaller, more focused and cohesive interfaces defined by the clients that use them, we can reduce the coupling in our code.&amp;#160; This results in code that is easier to change, maintain, and test, not to mention being much more fun to work with.&amp;#160; Be breaking up the fat interface but using interface inheritance to ensure the original interface remains unchanged, this refactoring can be done to existing codebases without requiring extensive changes that spider through every class that touches the original interface.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/P2_deile2pFyr9JjCs2MM3n0VX0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P2_deile2pFyr9JjCs2MM3n0VX0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/P2_deile2pFyr9JjCs2MM3n0VX0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P2_deile2pFyr9JjCs2MM3n0VX0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.stevesmithblog.com/~ff/StevenSmith?a=V57Ojmpxxlo:_DamYfjNYI0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StevenSmith?i=V57Ojmpxxlo:_DamYfjNYI0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.stevesmithblog.com/~ff/StevenSmith?a=V57Ojmpxxlo:_DamYfjNYI0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StevenSmith?i=V57Ojmpxxlo:_DamYfjNYI0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.stevesmithblog.com/~ff/StevenSmith?a=V57Ojmpxxlo:_DamYfjNYI0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StevenSmith?i=V57Ojmpxxlo:_DamYfjNYI0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StevenSmith/~4/V57Ojmpxxlo" height="1" width="1"/&gt; &lt;hr /&gt;Read more: &lt;a href="http://stevesmithblog.com/blog/applying-interface-segregation-to-configuration-files/"&gt;Applying Interface Segregation to Configuration Files&lt;/a&gt; | &lt;a href="http://feeds.stevesmithblog.com/StevenSmith"&gt;Subscribe&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RSvaX7qduooZCpxNDcSmhds8Bg0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RSvaX7qduooZCpxNDcSmhds8Bg0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RSvaX7qduooZCpxNDcSmhds8Bg0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RSvaX7qduooZCpxNDcSmhds8Bg0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 01 Sep 2010 04:22:00 GMT</pubDate>
      <guid>http://stevesmithblog.com/blog/applying-interface-segregation-to-configuration-files/</guid>
    </item>
 
    <item>
      <title>It is an issue of traffic</title>
      <author>Oren Eini</author>
      <link>http://feedproxy.google.com/~r/AyendeRahien/~3/NKrOlThpZz0/it-is-an-issue-of-traffic.aspx</link>
      <description>&lt;p&gt;I just had to respond to &lt;a href="http://davybrion.com/blog/2010/08/first-impressions-of-the-ruby-community/"&gt;this post&lt;/a&gt;, Davy Brion talks about the Ruby community, and he had the following to say:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;When i asked them about interesting resources to follow as a newbie Rubyist, they all gladly shared their suggestions. When i thanked them for it, they all replied stating that i should feel free to contact them if i had any more questions about whatever Ruby related. Seriously, can you imagine the few .NET heroes that we have responding to questions through email from people they don’t even know like that? I can’t. Hell, &lt;em&gt;i know&lt;/em&gt; most of them don’t respond like that. The few that do are still trying to earn their MVP award or are too worried about renewing their MVP status.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Ignoring the MVP dig, allow me to explain exactly what is going on.&lt;/p&gt;  &lt;p&gt;In the &lt;em&gt;last 48 hours&lt;/em&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itisanissueoftraffic_25D6/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itisanissueoftraffic_25D6/image_thumb.png" width="772" height="100" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itisanissueoftraffic_25D6/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itisanissueoftraffic_25D6/image_thumb_1.png" width="768" height="95" /&gt;&lt;/a&gt;  &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p /&gt;  &lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itisanissueoftraffic_25D6/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itisanissueoftraffic_25D6/image_thumb_2.png" width="766" height="88" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itisanissueoftraffic_25D6/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itisanissueoftraffic_25D6/image_thumb_3.png" width="767" height="71" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itisanissueoftraffic_25D6/image_10.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itisanissueoftraffic_25D6/image_thumb_4.png" width="764" height="103" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itisanissueoftraffic_25D6/image_12.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itisanissueoftraffic_25D6/image_thumb_5.png" width="761" height="107" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itisanissueoftraffic_25D6/image_14.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itisanissueoftraffic_25D6/image_thumb_6.png" width="755" height="120" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Those are all cold requests, from people I have never met, and all to my private email. Note that in most cases, there is a dedicated mailing list for the topic in question.&lt;/p&gt;  &lt;p&gt;For that matter, the last two days has been decidedly quiet in the NHibernate front, this represent a more realistic sample of what is going on:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itisanissueoftraffic_25D6/image_16.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itisanissueoftraffic_25D6/image_thumb_7.png" width="576" height="107" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And those are in addition to the business, private, mailing list and other stuff that I do in email.&lt;/p&gt;  &lt;p&gt;Putting it simply, there is too much traffic for me to welcome most cold questions with anything more than a direction to the appropriate mailing list. This isn’t about being rude, or uncaring, this is about actually being able to do any work at all.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11548.aspx" width="1" height="1" /&gt;&lt;p&gt;&lt;a target="_blank" href="http://theloungenet.com/feeds/redirect/DOTNETRSS/AYENDE/C5700EEF262683E5EF4F2244BF8E7374F27D24DF"&gt;&lt;img src="http://theloungenet.com/feeds/img/DOTNETRSS/AYENDE/C5700EEF262683E5EF4F2244BF8E7374F27D24DF"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AyendeRahien/~4/NKrOlThpZz0" height="1" width="1"/&gt; &lt;hr /&gt;Read more: &lt;a href="http://feedproxy.google.com/~r/AyendeRahien/~3/NKrOlThpZz0/it-is-an-issue-of-traffic.aspx"&gt;It is an issue of traffic&lt;/a&gt; | &lt;a href="http://feeds.feedburner.com/AyendeRahien"&gt;Subscribe&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/11SadW5nC_Sx9Jazqv8NpIayGqY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/11SadW5nC_Sx9Jazqv8NpIayGqY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/11SadW5nC_Sx9Jazqv8NpIayGqY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/11SadW5nC_Sx9Jazqv8NpIayGqY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 01 Sep 2010 03:41:00 GMT</pubDate>
      <guid>http://feedproxy.google.com/~r/AyendeRahien/~3/NKrOlThpZz0/it-is-an-issue-of-traffic.aspx</guid>
    </item>
 
    <item>
      <title>It really happened, legacy programmers tales</title>
      <author>Oren Eini</author>
      <link>http://feedproxy.google.com/~r/AyendeRahien/~3/LO-tOg4L5Yw/it-really-happened-legacy-programmers-tales.aspx</link>
      <description>&lt;p&gt;Fairy tales always start with “Once upon a time”, and programmers tales starts with “when I was at a client”…&lt;/p&gt;  &lt;p&gt;Two days ago I was a client, and the discussion turned to bad code bases, as it often does. One story that I had hard time understanding was the Super If.&lt;/p&gt;  &lt;p&gt;Basically, it looked like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itreallyhappenedlegacyprogrammerstales_AAE/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itreallyhappenedlegacyprogrammerstales_AAE/image_thumb_2.png" width="328" height="99" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I had a hard time accepting that someone could write an if &lt;em&gt;condition &lt;/em&gt;that long. I kept assuming that they meant that the if &lt;em&gt;statements&lt;/em&gt; were 50 lines long, but that wasn’t the case.&lt;/p&gt;  &lt;p&gt;And then yesterday I had an even more horrifying story. A WCF service making a call to the database always timed out on the first request, but worked afterward. What would be your first suspicion? Mine was that it took time to establish the database connection, and that after the first call the connection resided in the connection pool. &lt;/p&gt;  &lt;p&gt;They laughed at my naivety, for it wasn’t connecting to the database that caused the timeout, it was JITting the method that the WCF service ended up calling.&lt;/p&gt;  &lt;p&gt;Yep, you got that right, JITting a single method (because the runtime only JIT a single method at a time). I had even harder time believing that, until they explained to me how that method was built: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itreallyhappenedlegacyprogrammerstales_AAE/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Itreallyhappenedlegacyprogrammerstales_AAE/image_thumb.png" width="484" height="150" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p /&gt;  &lt;p /&gt;  &lt;p&gt;Some interesting stats:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;It had a Cyclomatic Complexity of either 4,000 or 8,000, the client couldn’t remember.&lt;/li&gt;    &lt;li&gt;The &lt;em&gt;entire&lt;/em&gt; Rhino Mocks codebase fits in 13,000 LOC, so this single method could contain it several times over.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;But you know what the &lt;em&gt;really&lt;/em&gt; scary part is?&lt;/p&gt;  &lt;p&gt;I upgraded from Super If to Black Hole Methods, and I am afraid to see what happen today, because if I get something that top the Black Hole Method, I may have to hand back my keyboard and go raise olives.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11522.aspx" width="1" height="1" /&gt;&lt;p&gt;&lt;a target="_blank" href="http://theloungenet.com/feeds/redirect/DOTNETRSS/AYENDE/83F7DA2B46223084843FF951D0BFDF3DA99F0C78"&gt;&lt;img src="http://theloungenet.com/feeds/img/DOTNETRSS/AYENDE/83F7DA2B46223084843FF951D0BFDF3DA99F0C78"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AyendeRahien/~4/LO-tOg4L5Yw" height="1" width="1"/&gt; &lt;hr /&gt;Read more: &lt;a href="http://feedproxy.google.com/~r/AyendeRahien/~3/LO-tOg4L5Yw/it-really-happened-legacy-programmers-tales.aspx"&gt;It really happened, legacy programmers tales&lt;/a&gt; | &lt;a href="http://feeds.feedburner.com/AyendeRahien"&gt;Subscribe&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rMkMiE6AGYNgonoVyxsUro9NEE8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rMkMiE6AGYNgonoVyxsUro9NEE8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rMkMiE6AGYNgonoVyxsUro9NEE8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rMkMiE6AGYNgonoVyxsUro9NEE8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 31 Aug 2010 13:00:00 GMT</pubDate>
      <guid>http://feedproxy.google.com/~r/AyendeRahien/~3/LO-tOg4L5Yw/it-really-happened-legacy-programmers-tales.aspx</guid>
    </item>
 
    <item>
      <title>Entity != Table</title>
      <author>Oren Eini</author>
      <link>http://feedproxy.google.com/~r/AyendeRahien/~3/HdqLRwTm02k/entity-table.aspx</link>
      <description>&lt;p&gt;I recently had a chance to work on an interesting project, doing a POC of moving from a relational model to RavenDB. And one of the most interesting hurdles along the way wasn’t technical at all, it was trying to decide what an entity &lt;em&gt;is. &lt;/em&gt;We are so used to make the assumption that Entity == Table that we started to associate the two together. With a document database, an entity is a document, and that map much more closely to a root aggregate than to a RDMBS entity.&lt;/p&gt;  &lt;p&gt;That gets very interesting when we start looking at tables and having to decide if they represent data that is stand alone (and therefore deserve to live is separate documents) or whatever they should be embedded in the parent document. That led to a very interesting discussion on each table. What I found remarkable is that it was partly a discussion that seem to come directly from the DDD book, about root aggregates, responsibilities and the abstract definition of an entity and partly a discussion that focused on meeting the different modeling requirement for a document database.&lt;/p&gt;  &lt;p&gt;I think that we did a good job, but I most valued the discussion and the insight. What was most interesting to me was how &lt;em&gt;right&lt;/em&gt; was RavenDB for the problem set, because a whole &lt;em&gt;range&lt;/em&gt; of issues just went away when we started to move the model over.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/11521.aspx" width="1" height="1" /&gt;&lt;p&gt;&lt;a target="_blank" href="http://theloungenet.com/feeds/redirect/DOTNETRSS/AYENDE/E30E27B3E97036E14F5B57AE14244C99343C5A9A"&gt;&lt;img src="http://theloungenet.com/feeds/img/DOTNETRSS/AYENDE/E30E27B3E97036E14F5B57AE14244C99343C5A9A"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AyendeRahien/~4/HdqLRwTm02k" height="1" width="1"/&gt; &lt;hr /&gt;Read more: &lt;a href="http://feedproxy.google.com/~r/AyendeRahien/~3/HdqLRwTm02k/entity-table.aspx"&gt;Entity != Table&lt;/a&gt; | &lt;a href="http://feeds.feedburner.com/AyendeRahien"&gt;Subscribe&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/48UJHXZpd4AxK1SbeAgY8dySDGo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/48UJHXZpd4AxK1SbeAgY8dySDGo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/48UJHXZpd4AxK1SbeAgY8dySDGo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/48UJHXZpd4AxK1SbeAgY8dySDGo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 30 Aug 2010 13:00:00 GMT</pubDate>
      <guid>http://feedproxy.google.com/~r/AyendeRahien/~3/HdqLRwTm02k/entity-table.aspx</guid>
    </item>
 
    <item>
      <title>August 29th Links: .NET, ASP.NET, IIS Express, Silverlight, Windows Phone 7</title>
      <author>Scott Guthrie</author>
      <link>http://weblogs.asp.net/scottgu/archive/2010/08/29/august-29th-links-net-asp-net-iis-express-silverlight-windows-phone-7.aspx</link>
      <description>&lt;font size="2" face="arial"&gt;   &lt;p&gt;Here is the latest in my &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/07/09/july-9th-links-asp-net-asp-net-mvc-jquery-silverlight-wpf-vs-2010.aspx" target="_blank"&gt;link-listing series&lt;/a&gt;.&amp;#160; Also check out my &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/08/25/vs-2010-and-net-4-series.aspx" target="_blank"&gt;VS 2010 and .NET 4 series&lt;/a&gt; and &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2.aspx" target="_blank"&gt;ASP.NET MVC 2 series&lt;/a&gt; for other on-going blog series I’m working on.&lt;/p&gt;    &lt;p&gt;&lt;em&gt;[In addition to blogging, I am also now using Twitter for quick updates and to share links. Follow me at: &lt;a href="http://twitter.com/scottgu" target="_blank"&gt;twitter.com/scottgu&lt;/a&gt;]&lt;/em&gt;&lt;/p&gt;    &lt;h3&gt;&lt;u&gt;.NET/WPF/EF&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://geekswithblogs.net/BlackRabbitCoder/archive/2010/08/26/c.net-five-little-wonders-that-make-code-better-1-of.aspx" target="_blank"&gt;5 Little C#/.NET Wonders that Make Code Better&lt;/a&gt;: Nice blog post from James that highlights 5 nice language/framework tips you can take advantage of within your apps.&amp;#160; I’m betting a lot of people didn’t know about the StopWatch class.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://10rem.net/blog/2010/08/02/announcing-microsoft-ribbon-for-wpf-rtw" target="_blank"&gt;WPF Ribbon Control Released&lt;/a&gt;: The WPF team recently released the final V1 release of the WPF Ribbon control.&amp;#160; This makes it easy to build ribbon-based applications. Also read this &lt;a href="http://blogs.msdn.com/b/wpf/archive/2010/08/03/introducing-microsoft-ribbon-for-wpf.aspx" target="_blank"&gt;WPF team blog post&lt;/a&gt; for lots of great details on what it enables.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://romiller.com/2010/07/14/ef-ctp4-tips-tricks-include-with-lambda/" target="_blank"&gt;EF4 .Include() Method w/ Lambda Support&lt;/a&gt;: Ever wanted to use a Lambda expression instead of a string parameter when eagerly loading associations in EF4 using the Include() method?&amp;#160; This blog post shows you how you can.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;h3&gt;&lt;u&gt;ASP.NET&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://madskristensen.net/post/Performance-tuning-tricks-for-ASPNET-and-IIS-7-part-1.aspx" target="_blank"&gt;Performance Tuning tricks for ASP.NET and IIS7 Part 1&lt;/a&gt; and &lt;a href="http://madskristensen.net/post/Performance-tuning-tricks-for-ASPNET-and-IIS-7-e28093-part-2.aspx" target="_blank"&gt;Part 2&lt;/a&gt;: Mads has a nice set of posts that detail some great performance optimization tips you can use with ASP.NET and IIS7.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://www.4guysfromrolla.com/articles/071410-1.aspx" target="_blank"&gt;Better ViewState Management in ASP.NET 4 with the ViewStateMode Property&lt;/a&gt;: Scott Mitchell has a good article that discusses the new ViewStateMode property supported on ASP.NET 4 controls. This provides much more control over how viewstate is used within a page.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://www.4guysfromrolla.com/articles/081110-1.aspx" target="_blank"&gt;Filtering Data using ASP.NET 4’s QueryExtender Control&lt;/a&gt;: Scott Mitchell has a nice article that talks about the new &amp;lt;asp:QueryExtender&amp;gt; control in ASP.NET 4 that makes enabling dynamic querying against a LinqDataSource or EntityDataSource really easy.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://www.4guysfromrolla.com/articles/072810-1.aspx" target="_blank"&gt;Techniques to Avoid Duplicate URLs&lt;/a&gt;: Scott Mitchell has another great article that discusses techniques you can use within ASP.NET to avoid exposing duplicate URLs to the same content within your web-sites.&amp;#160; These can help improve your search engine traffic.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/scothu/archive/2010/08/26/automatically-prepopulate-fields-for-insert-in-net-4.aspx" target="_blank"&gt;Automatically pre-populate fields for Insert in ASP.NET 4&lt;/a&gt;: Scott Hunter has a nice blog post that discusses how to specify default values for insert with data controls in ASP.NET 4.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;h3&gt;&lt;u&gt;ASP.NET MVC&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://mvccontribgallery.codeplex.com/" target="_blank"&gt;MvcContrib Template Gallery&lt;/a&gt;: Download 58 pre-built ASP.NET MVC Template Gallery styles that you can use to customize the look and feel of your applications. All available under a Community Commons license.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://weblogs.asp.net/gunnarpeipman/archive/2010/07/04/stepping-into-asp-net-mvc-source-code-with-visual-studio-debugger.aspx" target="_blank"&gt;Step into the ASP.NET MVC Source Code with the VS Debugger&lt;/a&gt;: Nice blog post by Gunnar that describes how to use VS 2010’s built-in symbol server support to enable you to step into the ASP.NET MVC Framework source code when debugging.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://weblogs.asp.net/jgalloway/archive/2010/07/13/server-installation-options-for-asp-net-mvc-2.aspx" target="_blank"&gt;Installation Options for ASP.NET MVC&lt;/a&gt;: Jon has a good post that describes how to install ASP.NET MVC 2 on a server. There are a couple of options you can use for servers that don’t already have ASP.NET MVC installed – the easiest is to just enable the “Copy Local” flag on System.Web.Mvc.dll and install it in the \bin directory.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;h3&gt;&lt;u&gt;IIS Developer Express&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/Glucose/Hanselminutes-on-9-Razor-IIS-Express-SQL-4-Compact-Edition-and-VS2010-Tooling-with-Damien-Edwards/" target="_blank"&gt;Visual Studio Support for IIS Express, SQL 4 Compact Edition, and Razor syntax&lt;/a&gt;: Channel 9 video with Damian Edwards and Scott Hanselman that discusses the support coming to enable IIS Express, SQL 4 CE, and Razor syntax support within Visual Studio 2010.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://www.intrepidstudios.com/blog/2010/7/11/debug-your-net-web-project-with-iis-express-t.aspx" target="_blank"&gt;How to Use IIS Express with VS today&lt;/a&gt;: Kamran has a nice blog post that describes how you can use IIS Express with Visual Studio today – without having to wait for the official Visual Studio patch to enable it.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;h3&gt;&lt;u&gt;Silverlight and Windows Phone 7&lt;/u&gt;&lt;/h3&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://windowsteamblog.com/windows_phone/b/wpdev/archive/2010/08/23/a-developer-s-roadmap-to-windows-phone-7-launch-timing.aspx" target="_blank"&gt;Developers Roadmap for Windows Phone 7&lt;/a&gt;: The Windows Phone 7 team blogs about the release timeframe for Windows Phone 7 and the Visual Studio and Expression Blend tools for targeting it.&amp;#160; The official developer release will be on September 16th.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://www.msdev.com/Directory/SeriesDescription.aspx?CourseId=158" target="_blank"&gt;Windows Phone 7 in 7 Minutes&lt;/a&gt;: Really nice set of 7 minute videos that enable you to quickly understand and learn Windows Phone 7 and the development fundamentals behind it.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/mikeormond/archive/2010/08/19/windows-phone-7-jumpstart-training-on-demand.aspx" target="_blank"&gt;Windows Phone 7 Jumpstart Training&lt;/a&gt;: Nice list of free training sessions you can watch online to learn how to build Windows Phone 7 applications using Silverlight and XNA.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://www.jeff.wilcox.name/2010/08/looking-ahead-at-panorama-and-pivot/" target="_blank"&gt;Silverlight Panorama and Pivot Controls for Windows Phone 7&lt;/a&gt;: Jeff has a great post that discusses the awesome new Panorama and Pivot controls for Silverlight that will be part of the final Windows Phone 7 developer release.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/mikeormond/archive/2010/08/27/xna-from-silverlight-on-windows-phone-7-the-microphone.aspx" target="_blank"&gt;Using XNA from Silverlight on Windows Phone 7&lt;/a&gt;: Good blog post from Mike that demonstrates how to use XNA APIs from Silverlight applications on Windows Phone 7.&amp;#160; This post demonstrates how to use the XNA audio framework from Silverlight.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=3a8636bf-185f-449a-a0ce-83502b9ec0ec" target="_blank"&gt;Creating High Performance Silverlight Applications for Windows Phone 7&lt;/a&gt;: This is a great whitepaper written by my team that discusses best practices for building Silverlight applications that run well on Windows Phone 7.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/HanselminutesPodcast228PerformanceOfSilverlightOnWindowsPhone7.aspx" target="_blank"&gt;Performance of Silverlight on Windows Phone 7&lt;/a&gt;: A nice podcast with Scott Hanselman that discusses tips and techniques to enable smooth applications and great experiences on Windows Phone 7.&lt;/p&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;h3&gt;&lt;u&gt;Book Recommendation&lt;/u&gt;&lt;/h3&gt;    &lt;p&gt;People often ask me for .NET book recommendations. Below is one book I always keep close by and find super-useful.&amp;#160; If you are looking for a good one-volume C# and .NET Base Class Library reference, &lt;a href="http://www.amazon.com/gp/product/0596800959?ie=UTF8&amp;amp;tag=scoblo04-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0596800959" target="_blank"&gt;C# 4.0 in a Nutshell&lt;/a&gt; a great one:&lt;/p&gt;    &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/scottgu/ir1_42589914.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ir[1]" border="0" alt="ir[1]" src="http://weblogs.asp.net/blogs/scottgu/ir1_thumb_5671B59D.gif" width="1" height="1" /&gt;&lt;/a&gt;&lt;a href="http://www.amazon.com/gp/product/0596800959?ie=UTF8&amp;amp;tag=scoblo04-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0596800959" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="nutshell" border="0" alt="nutshell" src="http://weblogs.asp.net/blogs/scottgu/nutshell_79BEAA42.jpg" width="109" height="161" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;Hope this helps,&lt;/p&gt;    &lt;p&gt;Scott&lt;/p&gt; &lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7601960" width="1" height="1"&gt; &lt;hr /&gt;Read more: &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/08/29/august-29th-links-net-asp-net-iis-express-silverlight-windows-phone-7.aspx"&gt;August 29th Links: .NET, ASP.NET, IIS Express, Silverlight, Windows Phone 7&lt;/a&gt; | &lt;a href="http://weblogs.asp.net/scottgu/rss.aspx"&gt;Subscribe&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/v4sFvwUVphQz82nPFjdQLMN01zI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v4sFvwUVphQz82nPFjdQLMN01zI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/v4sFvwUVphQz82nPFjdQLMN01zI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v4sFvwUVphQz82nPFjdQLMN01zI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 30 Aug 2010 10:23:36 GMT</pubDate>
      <guid>http://weblogs.asp.net/scottgu/archive/2010/08/29/august-29th-links-net-asp-net-iis-express-silverlight-windows-phone-7.aspx</guid>
    </item>
 
    <item>
      <title>Patch for VS 2010 Find and Replace Dialog Growing</title>
      <author>Scott Guthrie</author>
      <link>http://weblogs.asp.net/scottgu/archive/2010/08/29/patch-for-vs-2010-find-and-replace-dialog-growing.aspx</link>
      <description>&lt;font size="2" face="arial"&gt;   &lt;p&gt;One of the top reported Microsoft Connect issues with VS 2010 has been an issue with the Find and Replace dialog – which grows 16px each time you use it (which is pretty annoying).&lt;/p&gt;    &lt;p&gt;The Visual Studio team recently &lt;a href="http://blogs.msdn.com/b/visualstudio/archive/2010/08/12/patch-available-for-the-growing-find-and-replace-dialog.aspx" target="_blank"&gt;released a patch&lt;/a&gt; that fixes this issue. You can download and apply it &lt;a href="https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=30518&amp;amp;wa=wsignin1.0" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;Hope this helps,&lt;/p&gt;    &lt;p&gt;Scott&lt;/p&gt;    &lt;p&gt;P.S. A few people reported issues installing the patch if they had an older version of the Silverlight 4 tools installed.&amp;#160; If you see an error message that says you need an update to Visual Studio to support Silverlight 4, you can fix it by installing the latest &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=40ef0f31-cb95-426d-9ce0-00dcfabf3df5&amp;amp;displaylang=en" target="_blank"&gt;Silverlight 4 tools release&lt;/a&gt;.&lt;/p&gt; &lt;/font&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7601935" width="1" height="1"&gt; &lt;hr /&gt;Read more: &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/08/29/patch-for-vs-2010-find-and-replace-dialog-growing.aspx"&gt;Patch for VS 2010 Find and Replace Dialog Growing&lt;/a&gt; | &lt;a href="http://weblogs.asp.net/scottgu/rss.aspx"&gt;Subscribe&lt;/a&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nKG2FgNReB-hQDYd9mDpDmLfW7Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nKG2FgNReB-hQDYd9mDpDmLfW7Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nKG2FgNReB-hQDYd9mDpDmLfW7Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nKG2FgNReB-hQDYd9mDpDmLfW7Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 30 Aug 2010 08:57:22 GMT</pubDate>
      <guid>http://weblogs.asp.net/scottgu/archive/2010/08/29/patch-for-vs-2010-find-and-replace-dialog-growing.aspx</guid>
    </item>
 
  </channel>
</rss>
