<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">.NET Brisbane, Australia</title><subtitle type="html" /><id>http://weblogs.asp.net/edgepereira/atom.aspx</id><link rel="alternate" type="text/html" href="http://weblogs.asp.net/edgepereira/default.aspx" /><link rel="self" type="application/atom+xml" href="http://weblogs.asp.net/edgepereira/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20510.895">Community Server</generator><updated>2008-03-11T04:53:00Z</updated><entry><title>Issues between HTTPS, IIS and Sharepoint </title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/edgepereira/archive/2009/03/08/issues-between-https-iis-and-sharepoint.aspx" /><id>http://weblogs.asp.net/edgepereira/archive/2009/03/08/issues-between-https-iis-and-sharepoint.aspx</id><published>2009-03-08T15:49:00Z</published><updated>2009-03-08T15:49:00Z</updated><content type="html">&lt;P&gt;Hi guys, I want to share with you a discussion that I’ve participated recently.&lt;/P&gt;
&lt;P&gt;Consider this: you are a a host provider and your company will offer Sharepoint support to the public so they can pay you a monthly fee and then they setup a Sharepoint site with you.&lt;/P&gt;
&lt;P&gt;You go for a simplistic and cheap design. You have IIS, Sharepoint installed, and you create a web application on the port 80. Within this web app you create multiple site collections. They are the sites your clients will have control for their own setups.&lt;/P&gt;
&lt;P&gt;And how do you host multiple websites on the port 80 with a single IP address? Easy. I will use host headers – you say.&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://lh4.ggpht.com/_embTfvHYYPE/SbPodRO3BWI/AAAAAAAAC-c/0dy2wkwLtng/s1600-h/a%5B3%5D.jpg" mce_href="http://lh4.ggpht.com/_embTfvHYYPE/SbPodRO3BWI/AAAAAAAAC-c/0dy2wkwLtng/s1600-h/a%5B3%5D.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=a border=0 alt=a src="http://lh5.ggpht.com/_embTfvHYYPE/SbPofELtUiI/AAAAAAAAC-g/D3qPiHoxmF4/a_thumb%5B1%5D.jpg?imgmax=800" width=607 height=484 mce_src="http://lh5.ggpht.com/_embTfvHYYPE/SbPofELtUiI/AAAAAAAAC-g/D3qPiHoxmF4/a_thumb%5B1%5D.jpg?imgmax=800"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://lh5.ggpht.com/_embTfvHYYPE/SbPogjD38LI/AAAAAAAAC-k/jq-1RKDCYr0/s1600-h/b%5B3%5D.jpg" mce_href="http://lh5.ggpht.com/_embTfvHYYPE/SbPogjD38LI/AAAAAAAAC-k/jq-1RKDCYr0/s1600-h/b%5B3%5D.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=b border=0 alt=b src="http://lh5.ggpht.com/_embTfvHYYPE/SbPoiHtNATI/AAAAAAAAC-o/t_LxUtLKQoY/b_thumb%5B1%5D.jpg?imgmax=800" width=593 height=484 mce_src="http://lh5.ggpht.com/_embTfvHYYPE/SbPoiHtNATI/AAAAAAAAC-o/t_LxUtLKQoY/b_thumb%5B1%5D.jpg?imgmax=800"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;And you think: I should be fine. I will setup in away so each client will have their own separate database, they will redirect to the given URL I will provide them and according to the hosting plan I enable disk quotas for each case. For instance, if my client pays me some little money and he is a ’silver client’ I offer them 10MB; if they are ‘platinum client’ and pay me some more I give them 50MB.&lt;/P&gt;
&lt;P&gt;All goes fine and well. You see everybody joining your company, the clients keep coming and your setup is totally independent.&lt;/P&gt;
&lt;P&gt;so, what’s the problem here? &lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://lh3.ggpht.com/_embTfvHYYPE/SbPojaIirvI/AAAAAAAAC-s/UpGFLitgYrY/s1600-h/1%5B7%5D.gif" mce_href="http://lh3.ggpht.com/_embTfvHYYPE/SbPojaIirvI/AAAAAAAAC-s/UpGFLitgYrY/s1600-h/1%5B7%5D.gif"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; MARGIN: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=1 border=0 alt=1 src="http://lh5.ggpht.com/_embTfvHYYPE/SbPok_Jad-I/AAAAAAAAC-w/9LCvbXFtAU4/1_thumb%5B5%5D.gif?imgmax=800" width=640 height=465 mce_src="http://lh5.ggpht.com/_embTfvHYYPE/SbPok_Jad-I/AAAAAAAAC-w/9LCvbXFtAU4/1_thumb%5B5%5D.gif?imgmax=800"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You are unable to offer HTTPS in that setup. If one of your clients wants to add a shopping cart area and want it to be secure, you can’t help them with that model.&lt;/P&gt;
&lt;P&gt;The thing is, IIS can not resolve an incoming HTTPS request like that. ISS will hold the request and it is going to ask himself: ok, to which website should I give this request? Unfortunately IIS as of now can not address this question following that setup. Everybody is under the same IP.&lt;/P&gt;
&lt;P&gt;To fix that one of the recommended approaches is to follow the diagram below:&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://lh6.ggpht.com/_embTfvHYYPE/SbPomwJ3yQI/AAAAAAAAC-0/D3lr1hk4bJ0/s1600-h/2%5B8%5D.gif" mce_href="http://lh6.ggpht.com/_embTfvHYYPE/SbPomwJ3yQI/AAAAAAAAC-0/D3lr1hk4bJ0/s1600-h/2%5B8%5D.gif"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=2 border=0 alt=2 src="http://lh4.ggpht.com/_embTfvHYYPE/SbPooFRw_MI/AAAAAAAAC-4/NURZ2mvOb08/2_thumb%5B4%5D.gif?imgmax=800" width=640 height=474 mce_src="http://lh4.ggpht.com/_embTfvHYYPE/SbPooFRw_MI/AAAAAAAAC-4/NURZ2mvOb08/2_thumb%5B4%5D.gif?imgmax=800"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;On your IIS you will create multiple web applications, then for each web application you will want to give separate IPs and then host sites on these IPs, and then these web applications are the ones you will offer to your clients.&lt;/P&gt;
&lt;P&gt;That’s a little bit more elaborated solution, a little bit more expensive but the gains in scalability will overcome the headaches you might have in the future with an atomic structure that at some point needs to be flexible.&lt;/P&gt;
&lt;P&gt;And on that model IIS can finally then fix the SSL dilemma. Because then you will assign the applications to independent IP addresses on the ISS Manager.&lt;/P&gt;
&lt;P&gt;Sometimes it takes more than a quick and simplistic approach to design a solution if you only know partially the products involved. Once you have the proposed design please be aware of the issues that are basic in the parts involved. In our case, a knowledge of IIS would have avoided a big trouble in the beginning.&lt;/P&gt;
&lt;P&gt;See you later.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6948126" width="1" height="1"&gt;</content><author><name>superedge</name><uri>http://weblogs.asp.net/members/superedge.aspx</uri></author><category term=".net" scheme="http://weblogs.asp.net/edgepereira/archive/tags/.net/default.aspx" /><category term="general software development" scheme="http://weblogs.asp.net/edgepereira/archive/tags/general+software+development/default.aspx" /><category term="Sharepoint" scheme="http://weblogs.asp.net/edgepereira/archive/tags/Sharepoint/default.aspx" /><category term="IIS" scheme="http://weblogs.asp.net/edgepereira/archive/tags/IIS/default.aspx" /></entry><entry><title>Filling the SOA gap</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/edgepereira/archive/2009/03/04/filling-the-soa-gap.aspx" /><id>http://weblogs.asp.net/edgepereira/archive/2009/03/04/filling-the-soa-gap.aspx</id><published>2009-03-04T13:35:00Z</published><updated>2009-03-04T13:35:00Z</updated><content type="html">&lt;p align="justify"&gt;Hi guys, &lt;/p&gt;  &lt;p align="justify"&gt;Let's talk architecture again, reference architecture, more &lt;/p&gt;  &lt;p align="justify"&gt;specifically SOA, and how can we map the available products and resources available from Microsoft given a SOA project?&lt;/p&gt;  &lt;p align="justify"&gt;Before I start, let me make a statement here: I will talk this from the Microsoft's point of view, since this is a blog about Microsoft technologies. &lt;/p&gt;  &lt;p align="justify"&gt;In any case, it doesn't matter what's your preferred provider as long as you are able to correctly do the mapping of functionalities to better fit your business' plans, budget and SLA. And just to revisit: SOA is an architecture where the functionalities of existing business applications are exposed and published as services. &lt;/p&gt;  &lt;p align="justify"&gt;And what would be a service? Services are software components that expose application functionalities in a given SOA architecture and they are: &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;em&gt;- self-manageable;        &lt;br&gt;- message-based oriented;         &lt;br&gt;- can handle and support many protocols;         &lt;br&gt;- can be published on a myriad of hosts;         &lt;br&gt;- implement operational contracts, interfaces and message types;&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Of course you can design some service that doesn't follow these rules, but let me tell you: Rules are made with a purpose and in our case the purpose is to design a solution where clients and services are highly decoupled, thus paving the way for the reuse of functionalities. One of the goals is to maximize the resource utilization in our project. &lt;/p&gt;  &lt;p align="justify"&gt;I won't talk here about governance, granularity, message routing, service level control etc. I won't go there for it is a much larger topic, so this post is about the technical view. Now, let's make our first diagram given what we've seen so far: &lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/_embTfvHYYPE/Sa6DL2ayHtI/AAAAAAAAC-M/yoOoGirO5XU/s1600-h/1%5B10%5D.gif" mce_href="http://lh4.ggpht.com/_embTfvHYYPE/Sa6DL2ayHtI/AAAAAAAAC-M/yoOoGirO5XU/s1600-h/1%5B10%5D.gif" target="_blank"&gt;&lt;img src="http://lh4.ggpht.com/_embTfvHYYPE/Sa6DNIoRixI/AAAAAAAAC-Q/R_fffImXLyg/1_thumb%5B6%5D.gif?imgmax=800" title="1" style="border: 0px none ; display: inline;" alt="1" mce_src="http://lh4.ggpht.com/_embTfvHYYPE/Sa6DNIoRixI/AAAAAAAAC-Q/R_fffImXLyg/1_thumb%5B6%5D.gif?imgmax=800" border="0" height="226" width="500"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;As we can see, we have here the common services of a SOA architecture such as the presentation services, collaboration, systems integration, orchestration services etc. &lt;/p&gt;  &lt;p align="justify"&gt;Looking at this diagram we can identify the aspects that we really want to map in our solution to be successful. Note that in some scenarios sometimes the security is critical, sometimes the orchestration is paramount, sometimes the platform integration is more important. &lt;/p&gt;  &lt;p align="justify"&gt;Now, visualize this filling the gaps with the products that Microsoft has to offer.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/_embTfvHYYPE/Sa6DOh3sd-I/AAAAAAAAC-U/JoUqW1gY5DA/s1600-h/2%5B7%5D.gif" mce_href="http://lh5.ggpht.com/_embTfvHYYPE/Sa6DOh3sd-I/AAAAAAAAC-U/JoUqW1gY5DA/s1600-h/2%5B7%5D.gif"&gt;&lt;img src="http://lh6.ggpht.com/_embTfvHYYPE/Sa6DPt5Ji6I/AAAAAAAAC-Y/ZHKAYkvtIUs/2_thumb%5B3%5D.gif?imgmax=800" title="2" style="border: 0px none ; display: inline;" alt="2" mce_src="http://lh6.ggpht.com/_embTfvHYYPE/Sa6DPt5Ji6I/AAAAAAAAC-Y/ZHKAYkvtIUs/2_thumb%5B3%5D.gif?imgmax=800" border="0" height="219" width="500"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;An interesting conclusion we can take at first sight is that some products can cross domain frontiers and can handle various capacities at once, such as the Windows Workflow Foundation, which can be used for interoperability services and orchestration at the same time with BizTalk Server. &lt;/p&gt;  &lt;p align="justify"&gt;What's the best option to choose? Well, to be able to see this big picture and to choose the best piece in the puzzle is your job as architect. Unfortunately many architects fall in the problem to overkill the solution. &lt;/p&gt;  &lt;p align="justify"&gt;Also important is to choose not to overkill the solution. Sometimes a simple custom application can fill the gap enough to not require a bigger solution like Windows Workflow Foundation, for example. Otherwise the whole project just becomes harder to handle and to maintain...thus increasing the ROI overtime...and the developers patience. &lt;/p&gt;  &lt;p align="justify"&gt;The message to keep in mind: any good architecture is composed by many capacities. To identify these capacities and which one of them are important for our solution is as critical as choosing the technology provider.&lt;/p&gt;  &lt;p align="justify"&gt;See you later.&lt;/p&gt;  &lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6937373" width="1" height="1"&gt;</content><author><name>superedge</name><uri>http://weblogs.asp.net/members/superedge.aspx</uri></author><category term=".net" scheme="http://weblogs.asp.net/edgepereira/archive/tags/.net/default.aspx" /><category term="sql server" scheme="http://weblogs.asp.net/edgepereira/archive/tags/sql+server/default.aspx" /><category term="general software development" scheme="http://weblogs.asp.net/edgepereira/archive/tags/general+software+development/default.aspx" /><category term="web services" scheme="http://weblogs.asp.net/edgepereira/archive/tags/web+services/default.aspx" /><category term="Sharepoint" scheme="http://weblogs.asp.net/edgepereira/archive/tags/Sharepoint/default.aspx" /><category term="visual studio" scheme="http://weblogs.asp.net/edgepereira/archive/tags/visual+studio/default.aspx" /></entry><entry><title>The perfect entity model development framework</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/edgepereira/archive/2008/08/06/the-perfect-entity-model-development-framework.aspx" /><id>http://weblogs.asp.net/edgepereira/archive/2008/08/06/the-perfect-entity-model-development-framework.aspx</id><published>2008-08-06T06:08:00Z</published><updated>2008-08-06T06:08:00Z</updated><content type="html">&lt;p&gt;&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5Cepereira%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" mce_href="file:///C:%5CDOCUME%7E1%5Cepereira%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" rel="File-List"&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5Cepereira%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" mce_href="file:///C:%5CDOCUME%7E1%5Cepereira%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" rel="themeData"&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5Cepereira%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" mce_href="file:///C:%5CDOCUME%7E1%5Cepereira%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" rel="colorSchemeMapping"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:DontVertAlignCellWithSp/&gt;
   &lt;w:DontBreakConstrainedForcedTables/&gt;
   &lt;w:DontVertAlignInTxbx/&gt;
   &lt;w:Word11KerningPairs/&gt;
   &lt;w:CachedColBalance/&gt;
  &lt;/w:Compatibility&gt;
  &lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val="Cambria Math"/&gt;
   &lt;m:brkBin m:val="before"/&gt;
   &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;
   &lt;m:smallFrac m:val="off"/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val="0"/&gt;
   &lt;m:rMargin m:val="0"/&gt;
   &lt;m:defJc m:val="centerGroup"/&gt;
   &lt;m:wrapIndent m:val="1440"/&gt;
   &lt;m:intLim m:val="subSup"/&gt;
   &lt;m:naryLim m:val="undOvr"/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267"&gt;
  &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;
  &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;
  &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;
  &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;
  &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;
  &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;
  &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt;
&lt;!--
 /* Font Definitions */
 @font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1107304683 0 0 159 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:10.0pt;
	margin-left:0cm;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
.MsoPapDefault
	{mso-style-type:export-only;
	margin-bottom:10.0pt;
	line-height:115%;}
@page Section1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
--&gt;
&lt;/style&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-qformat:yes;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin-top:0cm;
	mso-para-margin-right:0cm;
	mso-para-margin-bottom:10.0pt;
	mso-para-margin-left:0cm;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:"Times New Roman";
	mso-fareast-theme-font:minor-fareast;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;}
&lt;/style&gt;
&lt;![endif]--&gt;





&lt;/p&gt;&lt;p class="MsoNormal"&gt;The Entity Framework is out there and it is common term already
in the framework talks. There are hundreds of sites dedicated to &lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;its
best applications and best architectures tactics.&lt;/p&gt;



&lt;p class="MsoNormal"&gt;When an architect is involved in these talks the good ones
always bring the discussion up to a helicopter view, since the discussion will
inevitably move towards the best model and to comparisons against the
'what-would-be-the-perfect'.&lt;/p&gt;



&lt;p class="MsoNormal"&gt;Now seriously, is there any perfect framework model?&lt;/p&gt;



&lt;p class="MsoNormal"&gt;The purists’ attacks against the Microsoft EF always say
that "EF is not an independent layer neither multiplatform oriented",
so it can't be reused and integrated with ease across the other systems in the
enterprise, for that would be the dreams of any architects.&lt;/p&gt;



&lt;p class="MsoNormal"&gt;Since the introduction of shared folders you could easily
for example place a text file in some URI and use it shared across many
systems. Obviously as we can see the data would not be cached and few few
mechanisms were available to raise a notification to the data holders about
that update. The EF is not supposed to accomplish that task as it is a
framework to access data using objects.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;So here it comes another point: should we put a data access
layer above it?&lt;/p&gt;







&lt;p class="MsoNormal"&gt;Remember, Microsoft data access methodologies have been
changing dramatically over the last 5 years, which paves the way and gives us
hints that in a near future it will change again. Legacy systems will be always
a reality of the high paced IT market. The arguments against it is that having so many layers in an
application will over-engineer the problem and will affect the performance and
maybe the final costs rather than a simple refactoring. Remember the discussion
about table normalization and de-normalization? It is pretty much the same
here. These people are the same that advocate it is better to achieve the application's
ROI before any major refactoring. And honestly, 5 years is not enough time for many application to break even the ROI.&lt;br&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;Here's a scenario for discussion: A programmer decides to
use EF and he maps a common class against the database. He notices that it is
very simple IF ONLY he follows 'the yellow-brick-road'. For what I have seen he must follow the EF rules;
he must inherit and implement mandatory interfaces dictated by the EF so
everything falls right in place. If not, the EF will be just one big expensive
fancy feature. Yeah, there is a term for this: Persistence Ignorant. In a
glance is like the EF do no adapt to the model, you have to make the model
adapt to the EF.&lt;/p&gt;





&lt;p class="MsoNormal"&gt;A model should be model ignorant especially nowadays where
test-driven development is becoming common in the companies. You can actually
test business rules in a higher level. That's why we start to see things like
Linq for SQL and binding interfaces. They want to cover the gap left by the persistence
ignorance.&lt;/p&gt;&lt;p class="MsoNormal"&gt;The consequence of this is that more and more people are
using EF as a data access tool and left to using Linq in the business layer.
The business layers will then return datasets within structures called
ObjectContext. And good news, the ObjectContext is transactional meaning that
you can use System.Transaction to keep the data update rules properties. &lt;span style="font-size: 11pt; line-height: 115%; font-family: 'Calibri','sans-serif';"&gt;EF, Linq and ObjectContext: Is this a new
implementation being born? Only time will tell but at least they are simple to
use, have good performance and gives the programmer good deliverable
times...long gone are the days when developers wanted to stay long hours at the
office.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5Cepereira%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" rel="File-List"&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5Cepereira%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" rel="themeData"&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5Cepereira%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" rel="colorSchemeMapping"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:DontVertAlignCellWithSp/&gt;
   &lt;w:DontBreakConstrainedForcedTables/&gt;
   &lt;w:DontVertAlignInTxbx/&gt;
   &lt;w:Word11KerningPairs/&gt;
   &lt;w:CachedColBalance/&gt;
  &lt;/w:Compatibility&gt;
  &lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val="Cambria Math"/&gt;
   &lt;m:brkBin m:val="before"/&gt;
   &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;
   &lt;m:smallFrac m:val="off"/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val="0"/&gt;
   &lt;m:rMargin m:val="0"/&gt;
   &lt;m:defJc m:val="centerGroup"/&gt;
   &lt;m:wrapIndent m:val="1440"/&gt;
   &lt;m:intLim m:val="subSup"/&gt;
   &lt;m:naryLim m:val="undOvr"/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267"&gt;
  &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;
  &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;
  &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;
  &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;
  &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;
  &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;
  &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt;
&lt;!--
 /* Font Definitions */
 @font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1107304683 0 0 159 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:10.0pt;
	margin-left:0cm;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
.MsoPapDefault
	{mso-style-type:export-only;
	margin-bottom:10.0pt;
	line-height:115%;}
@page Section1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:35.4pt;
	mso-footer-margin:35.4pt;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
--&gt;
&lt;/style&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-qformat:yes;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin-top:0cm;
	mso-para-margin-right:0cm;
	mso-para-margin-bottom:10.0pt;
	mso-para-margin-left:0cm;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:"Times New Roman";
	mso-fareast-theme-font:minor-fareast;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;}
&lt;/style&gt;
&lt;![endif]--&gt;

&lt;/p&gt;&lt;p class="MsoNormal"&gt;Strong points for the EF:&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;All the query results are objects and you can parse and
traverse them in memory without any cost;&lt;/li&gt;&lt;li&gt;There is an embedded conceptual layer where you can do
things like denormalize the data structure without affecting much the
application.&lt;/li&gt;&lt;li&gt;Linq can be restricted to be used ONLY when needed; Linq is
great but it is no silver bullet and people are tempted to overusing it&lt;/li&gt;&lt;/ul&gt;&lt;p class="MsoNormal"&gt;







&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;In a way, these properties are familiar to the typed
dataset, aren't they? If you started programming with typed datasets, to
migrate to EF is almost natural and has the advantage that now you can isolate
a business logic layer with contracts. Translating: gives you scalability&lt;o:p&gt;. &lt;/o:p&gt;Another good thing is the EF's capacity when compared
against other great frameworks like nHibernate.&lt;/p&gt;&lt;p class="MsoNormal"&gt;But it is perfect? IMHO, it is not... and afterall, what is perfection anyway?&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6489074" width="1" height="1"&gt;</content><author><name>superedge</name><uri>http://weblogs.asp.net/members/superedge.aspx</uri></author><category term=".net" scheme="http://weblogs.asp.net/edgepereira/archive/tags/.net/default.aspx" /><category term="sql server" scheme="http://weblogs.asp.net/edgepereira/archive/tags/sql+server/default.aspx" /><category term="general software development" scheme="http://weblogs.asp.net/edgepereira/archive/tags/general+software+development/default.aspx" /></entry><entry><title>Talking about reasons</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/edgepereira/archive/2008/08/05/talking-about-reasons.aspx" /><id>http://weblogs.asp.net/edgepereira/archive/2008/08/05/talking-about-reasons.aspx</id><published>2008-08-05T04:03:00Z</published><updated>2008-08-05T04:03:00Z</updated><content type="html">&lt;p&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5Cepereira%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" rel="File-List"&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5Cepereira%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" rel="themeData"&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5Cepereira%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" rel="colorSchemeMapping"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:DontVertAlignCellWithSp/&gt;
   &lt;w:DontBreakConstrainedForcedTables/&gt;
   &lt;w:DontVertAlignInTxbx/&gt;
   &lt;w:Word11KerningPairs/&gt;
   &lt;w:CachedColBalance/&gt;
  &lt;/w:Compatibility&gt;
  &lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val="Cambria Math"/&gt;
   &lt;m:brkBin m:val="before"/&gt;
   &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;
   &lt;m:smallFrac m:val="off"/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val="0"/&gt;
   &lt;m:rMargin m:val="0"/&gt;
   &lt;m:defJc m:val="centerGroup"/&gt;
   &lt;m:wrapIndent m:val="1440"/&gt;
   &lt;m:intLim m:val="subSup"/&gt;
   &lt;m:naryLim m:val="undOvr"/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267"&gt;
  &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;
  &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;
  &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;
  &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;
  &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;
  &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;
  &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt;
&lt;!--
 /* Font Definitions */
 @font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1107304683 0 0 159 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:10.0pt;
	margin-left:0cm;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
.MsoPapDefault
	{mso-style-type:export-only;
	margin-bottom:10.0pt;
	line-height:115%;}
@page Section1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
--&gt;
&lt;/style&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-qformat:yes;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin-top:0cm;
	mso-para-margin-right:0cm;
	mso-para-margin-bottom:10.0pt;
	mso-para-margin-left:0cm;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:"Times New Roman";
	mso-fareast-theme-font:minor-fareast;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;}
&lt;/style&gt;
&lt;![endif]--&gt;





&lt;/p&gt;&lt;p class="MsoNormal"&gt;I was talking to some colleagues today when the subject of '&lt;i&gt;I
could be doing something better, I can do so much more than this…&lt;/i&gt;' came up. Of
course we all could be doing more and better things, but sometimes we fail to
see the good around us.&lt;/p&gt;



&lt;p class="MsoNormal"&gt;I recalled something that I've read from the marvelous Argentinean
writer Jorge Luís Borges for he has a impeccable tale about this scenario.&lt;/p&gt;







&lt;p class="MsoNormal"&gt;&lt;i&gt;One day in India, a superior tiger who is born, soon this
tiger is the most feared and respected of all the animals in that area and soon
he rules that domain while he is living there. Then it is captured and taken to a common zoo in Europe.&lt;/i&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;i&gt;Many moons later, on a peaceful Sunday morning, Dante is at
the same zoo and see that tiger. He sees that majestic animal with so much
power and respect and it is caged for entertainment just like any regular
tiger. So he writes a poem dedicated to that tiger and adds it to the
collection called “Divine Comedy”.&lt;/i&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;Borges says: &lt;i&gt;"All the power, respect and majesty of
that tiger, all the knowledge, all the fights he had during his wile life
brought it here to this specific morning at this specific zoo to be seen by
Dante and to inspire him to write an immortal poem."&lt;/i&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;I believe, just like that tiger, we all have a reason to be
something bigger than us to be here where we are today, this specific morning,
at this specific place. For this we just have to continue fighting the good
fight and soon our mission will be unveiled.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br&gt;&lt;/p&gt;

&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6484032" width="1" height="1"&gt;</content><author><name>superedge</name><uri>http://weblogs.asp.net/members/superedge.aspx</uri></author></entry><entry><title>The economics of software performance</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/edgepereira/archive/2008/07/22/the-economics-of-software-performance.aspx" /><id>http://weblogs.asp.net/edgepereira/archive/2008/07/22/the-economics-of-software-performance.aspx</id><published>2008-07-22T05:59:00Z</published><updated>2008-07-22T05:59:00Z</updated><content type="html">&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5Cepereira%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" rel="File-List"&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5Cepereira%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" rel="themeData"&gt;&lt;link href="file:///C:%5CDOCUME%7E1%5Cepereira%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" rel="colorSchemeMapping"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:DontVertAlignCellWithSp/&gt;
   &lt;w:DontBreakConstrainedForcedTables/&gt;
   &lt;w:DontVertAlignInTxbx/&gt;
   &lt;w:Word11KerningPairs/&gt;
   &lt;w:CachedColBalance/&gt;
  &lt;/w:Compatibility&gt;
  &lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val="Cambria Math"/&gt;
   &lt;m:brkBin m:val="before"/&gt;
   &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;
   &lt;m:smallFrac m:val="off"/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val="0"/&gt;
   &lt;m:rMargin m:val="0"/&gt;
   &lt;m:defJc m:val="centerGroup"/&gt;
   &lt;m:wrapIndent m:val="1440"/&gt;
   &lt;m:intLim m:val="subSup"/&gt;
   &lt;m:naryLim m:val="undOvr"/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267"&gt;
  &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;
  &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;
  &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;
  &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;
  &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;
  &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;
  &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt;
&lt;!--
 /* Font Definitions */
 @font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1107304683 0 0 159 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-1610611985 1073750139 0 0 159 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:10.0pt;
	margin-left:0cm;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
p
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-margin-top-alt:auto;
	margin-right:0cm;
	mso-margin-bottom-alt:auto;
	margin-left:0cm;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:"Times New Roman";}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:Calibri;
	mso-fareast-theme-font:minor-latin;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:"Times New Roman";
	mso-bidi-theme-font:minor-bidi;}
.MsoPapDefault
	{mso-style-type:export-only;
	margin-bottom:10.0pt;
	line-height:115%;}
@page Section1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
--&gt;
&lt;/style&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-qformat:yes;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin-top:0cm;
	mso-para-margin-right:0cm;
	mso-para-margin-bottom:10.0pt;
	mso-para-margin-left:0cm;
	line-height:115%;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:"Times New Roman";
	mso-fareast-theme-font:minor-fareast;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;}
&lt;/style&gt;
&lt;![endif]--&gt;

&lt;p&gt;It does not matter the current state in which an application is, everyone
always wants a bigger, better and faster version. Yesterday talking to my peers
we discussed this point: If you have to choose amongst these items, which one
would you leave for last? I said performance.&lt;/p&gt;&lt;p&gt;My point is: To design for high performance is expensive and on these times of
ROI is a good thing to save some for when we need it most.&lt;br&gt;
&lt;br&gt;
In my first job about a decade ago, I had to work with protocols and microchip
programming. In one of those projects I had to implement a little protocol to
communicate 2 heaters. I asked to use C, after all I was studying it at the
Uni.&lt;br&gt;
&lt;br&gt;
At the same time, there was a group of cool people programming in Assembly and
these guys told me to give Assembly a try, for performance reasons. I told
them:"Guys, I do not have experience with this and I prefer to use C. It
will be even better for my grades in the future tests."&lt;br&gt;
&lt;br&gt;
Truth must be said; the prototype was done and indeed it was too slow. Way too
slow.&lt;br&gt;
&lt;br&gt;
It was during my young years and I still remember all the comments I've heard
about this bad performance. Those comments just fired me up! I was in a mission
now to prove them wrong.&lt;br&gt;
&lt;br&gt;
I asked for more time, and with more 2 friends we debugged the code. We were
wasting too much time during the handshake. That's it! we found the bottleneck!
I said. So we implemented just that handshake part in Assembly.&lt;br&gt;
&lt;br&gt;
After some fine tuning: the application was now too fast!&lt;br&gt;
&lt;br&gt;
Nowadays, I see people putting too much effort in new technologies, new
methodologies and focusing too much about performance where is not really
needed. use datasets or use MVC? Use an array list or a generic list? That’s
something like over-engineering an application. IMHO, this can lead to complex
and expensive systems to maintain.&lt;br&gt;
&lt;br&gt;
So, lessons learned from this situation:&lt;br&gt;
First, make sure you have freedom to use your skills in the area you know most.
Sometimes we are forced to follow an already designed specification and there
is not much freedom for our own ideas. The project priorities supersede our own
priorities. If you have this ability then...&lt;br&gt;
&lt;br&gt;
Second, do proof of concepts. When you find a proof that is modular enough to
detach and that works good enough above the average, move on to the next
module...and then...&lt;br&gt;
&lt;br&gt;
Focus the effort in time and money with the most critical parts. &lt;br&gt;
&lt;br&gt;
Be sure of that: Not even Jesus pleased everyone. At the end it does not matter
how effort you placed in the application or how cool you did that module using
a new logical path there is always people telling you it could be done better.&lt;br&gt;
&lt;br&gt;
That's software, that's simple and that's life. &lt;/p&gt;

&lt;p&gt;&lt;i&gt;but hey, these are the sort of comments that makes you want to be better,
to improve and move stronger ahead, aren't they?&lt;/i&gt;&lt;/p&gt;

&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6429696" width="1" height="1"&gt;</content><author><name>superedge</name><uri>http://weblogs.asp.net/members/superedge.aspx</uri></author><category term="general software development" scheme="http://weblogs.asp.net/edgepereira/archive/tags/general+software+development/default.aspx" /></entry><entry><title>The 300 Model</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/edgepereira/archive/2008/05/28/the-300-model.aspx" /><id>http://weblogs.asp.net/edgepereira/archive/2008/05/28/the-300-model.aspx</id><published>2008-05-28T05:36:00Z</published><updated>2008-05-28T05:36:00Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;&lt;em&gt;"Surrender, we are many, you are few. We won't lay down our weapons, you want them? Come get them! The Persians arrows will blot out the sun. Better this way, we will fight in the shadow."&lt;/em&gt;&lt;/strong&gt;

&lt;/p&gt;&lt;p&gt;The movie &lt;strong&gt;‘300’&lt;/strong&gt; is like a big punch in the stomach and you have no time to fall. In '300', you see a comic book story that meets the entrepreneurship that meets the world history about the legendary &lt;strong&gt;battle of Thermopylae&lt;/strong&gt; during the year of 480 BC where only 300 Spartans fought against millions of Persians for the future of Greece. Nobody knows exactly how many were really involved in the war; but everyone agreed: &lt;strong&gt;It was few against many!&lt;/strong&gt;

&lt;/p&gt;&lt;p&gt;Based on &lt;strong&gt;Frank Miller's&lt;/strong&gt; graphic novel, the movie in its first week generated &lt;strong&gt;USD 70 millions in USA alone&lt;/strong&gt;, with no Tom Cruise, Brad Pitt or a big-shot Hollywood star; instead the major roles were &lt;i&gt;'unkowns'&lt;/i&gt;'; a Scottish called &lt;a href="http://imdb.com/name/nm0124930/" mce_href="http://imdb.com/name/nm0124930/"&gt;Gerard Butler &lt;/a&gt;as &lt;strong&gt;King Leonidas&lt;/strong&gt; and a Brazilian called &lt;a href="http://imdb.com/name/nm0763928/" mce_href="http://imdb.com/name/nm0763928/"&gt;Rodrigo Santoro &lt;/a&gt;as &lt;strong&gt;King Xerxes&lt;/strong&gt;.

&lt;/p&gt;&lt;p&gt;Some might say that people go to see this movie because it shows &lt;strong&gt;sexy appealing scenes, rock music, violence and amazing special effects&lt;/strong&gt;.

That's a lie!

&lt;/p&gt;&lt;p&gt;This movie captures the audience because it is about the eternal battle between the &lt;strong&gt;strong and the weak, between heroes and villains, between common people and powerful kings&lt;/strong&gt;. This movie attracts people because every single one wants to know &lt;strong&gt;how to defeat a much powerful competitor when we have only too few resources; how to conquer the market when we have few people; how to make more out of few&lt;/strong&gt;.

&lt;/p&gt;&lt;p&gt;‘300’ is a bloody battle between a little small company carried on the shoulders of very talented warriors committed by the honor and a huge corporation machine maintained by millions of regular employees who, some of them, do not even know what are they doing in the company or why they are doing that.

&lt;/p&gt;&lt;p&gt;This movie offers much more insights for your professional life than many MBA courses around there. Save yourself USD 500 and watch the movie for a few dollars.&lt;/p&gt;&lt;p&gt;You will learn :&lt;/p&gt;&lt;ul&gt;&lt;li&gt;a &lt;i&gt;&lt;strong&gt;lesson about the leader who inspired others&lt;/strong&gt;&lt;/i&gt; &lt;em&gt;(even to admire him until his last breath)&lt;/em&gt;, &lt;br&gt;&lt;/li&gt;&lt;li&gt;you will learn about how to start a company where everyone wants to work on 24x7 &lt;em&gt;(until their last moments)&lt;/em&gt;, &lt;br&gt;&lt;/li&gt;&lt;li&gt;How to create a brand, a history, a legend &lt;em&gt;(that will overcome the death)&lt;/em&gt;. &lt;br&gt;&lt;/li&gt;&lt;li&gt;When the captain decides to punish the soldier, &lt;i&gt;&lt;strong&gt;Leonidas&lt;/strong&gt; &lt;/i&gt;- the Spartan King - teaches the manager the value of respect towards the lower ranks.&lt;/li&gt;&lt;li&gt;When in doubt of his own convictions, Leonidas asks his partner’s opinion, wife, and Queen &lt;em&gt;- who always is treated equally as any other man -&lt;/em&gt; about how to deal with the business. &lt;br&gt;&lt;/li&gt;&lt;li&gt;When busy, just a few days before facing millions and certain death, he finds himself quality time to spend with his little son and teach him the secrets of the business world that he knows so well. &lt;br&gt;&lt;/li&gt;&lt;li&gt;When ready for battle, tie, computer and mobile, everything he does is to &lt;i&gt;&lt;strong&gt;KEEP FOCUS ON THE REASON&lt;/strong&gt;&lt;/i&gt; to make the best for the business and his employees.&lt;/li&gt;&lt;li&gt;When King Xerxes, try to seduce Leonidas with the benefits of a possible merge &amp;amp; acquisition of the little Spartan company by the mega-corporation Persia will bring to the shareholders, for him &lt;em&gt;(by becoming CEO of Greece, palaces, women, higher salaries)&lt;/em&gt; and for his employees &lt;em&gt;(who will set themselves free from slavery)&lt;/em&gt;, Leonidas reminds Xerxes that the &lt;i&gt;&lt;strong&gt;true slavery of the human being it is not the economical slavery or social, but is to lose the Spartan life style, their culture, their philosophy and the right to take decisions freely without need to justify to nobody&lt;/strong&gt;&lt;/i&gt;. &lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In every scene you can learn something about you!&lt;/p&gt;&lt;p&gt;Forget the popcorn and the soft drinks, &lt;i&gt;&lt;b&gt;concentrate on the dialogues&lt;/b&gt;&lt;/i&gt;.

&lt;/p&gt;&lt;p&gt;When the Spartan board of directors decides to surrender to Xerxes by not supporting Leonidas, they take the army command out from Leonidas, and tell him to kneel and behold the invisible; Leonidas instead, he does a spin-off in the army, creates himself his &lt;strong&gt;own company&lt;/strong&gt;, he gathers 300 of his best soldiers and go to war against Xerxes' millions. &lt;/p&gt;&lt;p&gt;When he is asked about how he will defeat millions with just 300 soldiers he says &lt;i&gt;&lt;strong&gt;he will use his brain when Xerxes uses his ego&lt;/strong&gt;&lt;/i&gt;. He moves towards &lt;em&gt;&lt;strong&gt;Thermopylae&lt;/strong&gt;&lt;/em&gt;, a narrow passage where it will neutralize the enemy superiority in numbers.

&lt;/p&gt;&lt;p&gt;When an incapable and mediocre Spartan asks him to join the army, Leonidas tells him to go home; in the other hand, Xerxes is sending his mediocre to the front to die first. In Leonidas' small company, &lt;i&gt;&lt;strong&gt;only the best, the braves and the brilliants are accepted&lt;/strong&gt;&lt;/i&gt;. He left out the weak, the average, and the non-team players. &lt;/p&gt;&lt;p&gt;Interesting,&lt;strong&gt; &lt;i&gt;he brings all the married men with at least one son, meaning these are the most committed people when compared against young and singles&lt;/i&gt;&lt;/strong&gt;. He does not want anybody to slow down his bests and show weakness to the enemy. He can not afford it. &lt;/p&gt;&lt;p&gt;During a very important moment of the battle, Leonidas meets Xerxes, the &lt;em&gt;God-King&lt;/em&gt; asks: &lt;strong&gt;&lt;em&gt;"How do you envision defeating me? I would kill anyone of my own men just to have you killed"; "I would die for anyone of my own men" Leonidas says&lt;/em&gt;&lt;/strong&gt;.

&lt;/p&gt;&lt;p&gt;When Leonidas notices that he will not be able anymore to defeat Xerxes' army, he decides to &lt;strong&gt;build a brand!!!&lt;/strong&gt; He sends just one of your soldiers back home with a mission to make sure everyone knows about of what happened there and the history and glory of those 300 Spartans will live forever.

2.500 years later in the other side of the planet here we are talking about those 300 warriors. &lt;strong&gt;&lt;em&gt;"The whole world will know that a handful of free men fought to their death against the tyranny, the whole world will know that few stand against many."&lt;/em&gt;&lt;/strong&gt;

&lt;/p&gt;&lt;p&gt;The &lt;strong&gt;marketing&lt;/strong&gt; started by Leonidas worked. This viral inspired millions of Spartans, and produced the necessary proud to unite the Greek world who later ended the Persian invasion and Greece was never defeated by them in this war. And because of that, a new regime was being born, the &lt;strong&gt;Democracy&lt;/strong&gt;.

&lt;/p&gt;&lt;p&gt;The Spartan society left nothing behind except the stories of their battles. No art, no music, no dance, no knowledge, no invention, no technology to enlighten the path...they left the unconditional dedication and the strong discipline of his people to become the &lt;strong&gt;best warriors ever seen in this world as legacy&lt;/strong&gt;.

Sparta did not produced an Einstein, a Michelangelo, or a Leonardo da Vinci, but they gave birth to the expression &lt;strong&gt;"Spartan Life"&lt;/strong&gt; that is today related to the lifestyle where a person give up privileges and personal benefits to embrace &lt;em&gt;(with body, mind and soul)&lt;/em&gt; and surrender his life to a higher cause. &lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6226333" width="1" height="1"&gt;</content><author><name>superedge</name><uri>http://weblogs.asp.net/members/superedge.aspx</uri></author><category term="team system" scheme="http://weblogs.asp.net/edgepereira/archive/tags/team+system/default.aspx" /><category term="asp.net" scheme="http://weblogs.asp.net/edgepereira/archive/tags/asp.net/default.aspx" /><category term=".net" scheme="http://weblogs.asp.net/edgepereira/archive/tags/.net/default.aspx" /><category term="general software development" scheme="http://weblogs.asp.net/edgepereira/archive/tags/general+software+development/default.aspx" /></entry><entry><title>How to Make Productive Project Meetings ?</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/edgepereira/archive/2008/05/28/how-to-make-productive-project-meetings.aspx" /><id>http://weblogs.asp.net/edgepereira/archive/2008/05/28/how-to-make-productive-project-meetings.aspx</id><published>2008-05-28T05:18:00Z</published><updated>2008-05-28T05:18:00Z</updated><content type="html">
&lt;img src="http://farm3.static.flickr.com/2092/2079782713_e30c5af6ea.jpg" style="margin: 0px auto 10px; display: block; text-align: center;" alt="" mce_src="http://farm3.static.flickr.com/2092/2079782713_e30c5af6ea.jpg" border="0"&gt;
&lt;div align="justify"&gt;&lt;strong&gt;Project Meetings can be very productives&lt;/strong&gt; but also can be a real waste of time and money. &lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;Recently while working on a client where I was responsible to have a project development meeting as meeting coordinator. The group of participants were an heterogeneous group and despite the fact that I did not know some of the atendees, the meeting was a big success.&lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;During a conversation on our coffee break I was asked about meetings strategies and how to conduct them. &lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;So I am going to share with you guys here what I told them, and what I effectivly did during that particular meeting:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="justify"&gt;Every meeting MUST have 3 elements: &lt;strong&gt;purpose, agenda and maximum duration&lt;/strong&gt;. If any of these items is missing, the meeting is meaningless and should not happen.&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div align="justify"&gt;&lt;strong&gt;Make sure you are able to define a purpose for the meeting in a maximum of 2 sentences&lt;/strong&gt;, for instance:&lt;em&gt;"This meeting is to plan the new developments for the project X"&lt;/em&gt;. This way, everyone will know why they are there, what needs to be done and how to proceed in order to well-succeed. &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div align="justify"&gt;&lt;strong&gt;Define a clear agenda in advance&lt;/strong&gt;. Make a list of all the items to be discussed, revised, analysed, displayed etc. When I conduct meetings, my personal strategy is to allocate a time limit for each item in the agenda and to assign the responsability to lead the discussion to someone in the group. Works as a charm. &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div align="justify"&gt;&lt;strong&gt;Define a duration for the meeting&lt;/strong&gt;, how many minutes/hours it should last. From the start make crystal clear to everyone what time the meeting will start and, sometimes more importantly, when it will end. It is amazing the number of managers who have absolutely no control of their meetings and do not know how to enforce the finishing rule. If you think you have this habit...CHANGE THIS !!! &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div align="justify"&gt;&lt;strong&gt;Do not wait for the delayed people&lt;/strong&gt;. Meetings must start on the agreeded time. Do not wait about late arrivals. Do not wait for those who need to be called for the meeting. You just make sure everyone gets notified, then when someone arrives after the meeting have started, DO NOT STOP TO REVIEW WHAT WAS SAID. Do this as a proof of respect to those who arrived on time. &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div align="justify"&gt;&lt;strong&gt;If the meeting's organizer is late, Consider the meeting cancelled&lt;/strong&gt;, and get back to work. How long is considered late? Depends on the company, but I would not wait more than 5 minutes. &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div align="justify"&gt;&lt;strong&gt;Document your meeting&lt;/strong&gt;. What I do is to put someone in charge of writing down the notes. What to put in the meeting notes? Basically the name of the attendants, the discussed subject, the agreed points, the next developments and/or actions with dates and their respective responsibles.&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div align="justify"&gt;&lt;strong&gt;When the meeting is over - do not wait more than 24 hours - the meeting notes must be sent&lt;/strong&gt; to: All the participants, to those who could not make it to the meeting and to those who might be influenced by upcoming decisions.&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div align="justify"&gt;&lt;strong&gt;Keep the focus&lt;/strong&gt;. Every meeting must have a regulator to notify the others when someone is discussing any subject outside the scope of the current topic. Ask one of the presents to volunteer for this task when the meeting is about to start. His/her task is to interrupt the meeting at any given time when the focus is lost and bring back the main subject. This new outside topic can maybe then be noted and even can be discussed in future meetings. In case of doubt regarding a specific topic being in or outside the scope, the meeting organizer has the final word. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p align="justify"&gt;I hope these notes can be of any help in your next meetings. If you have any comments or other meetings ideas, please feel free to leave them here and share as well. &lt;/p&gt;&lt;p align="justify"&gt;See ya later.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6226277" width="1" height="1"&gt;</content><author><name>superedge</name><uri>http://weblogs.asp.net/members/superedge.aspx</uri></author><category term=".net" scheme="http://weblogs.asp.net/edgepereira/archive/tags/.net/default.aspx" /><category term="general software development" scheme="http://weblogs.asp.net/edgepereira/archive/tags/general+software+development/default.aspx" /></entry><entry><title>Why hiding my wireless Internet SSID will not make my connection safer ?</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/edgepereira/archive/2008/05/21/why-hiding-my-wireless-internet-ssid-will-not-make-my-connection-safer.aspx" /><id>http://weblogs.asp.net/edgepereira/archive/2008/05/21/why-hiding-my-wireless-internet-ssid-will-not-make-my-connection-safer.aspx</id><published>2008-05-21T04:10:00Z</published><updated>2008-05-21T04:10:00Z</updated><content type="html">&lt;p align="justify"&gt;This weekend I went to a friend's house and we talked a lot about photography, another passion of mine. So I decided to use my iTouch to show him my online portfolio: &lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;- sorry man - he said - I have to tell you my home network name. Otherwise you won't see it available to connect.&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;- what do you mean? Do you hide your wireless SSID?&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;i&gt;- Yeah, I do this for security reasons.&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;And yet again here we go, another old security myth: Hiding your wireless SSID makes your home network safer.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;b&gt;First of all, what is this ?&lt;/b&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/superedge/SDLYoaGkRWI/AAAAAAAABeQ/rECT6wf2vac/s1600-h/DSC09008a%5B3%5D.png"&gt;&lt;img src="http://lh4.ggpht.com/superedge/SDLYpaGkRXI/AAAAAAAABeY/jC2hY4w5xeY/DSC09008a_thumb%5B3%5D.png?imgmax=800" style="border: 0px none ;" alt="DSC09008a" border="0" height="161" width="550"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;In your house you may have Internet access. If you have a laptop what the people normally do is to buy a router, then connect the Internet cable to the router and then the router will 'emit' the signal to the air. This will allow you to connect to your Internet from your bedroom, kitchen, talk to your mother over MSN while walking around your house etc. Everything wirelessly, as long as you can still get the signal. And for that we give a friendly name to this signal called SSID, so you know where to connect.&lt;/p&gt;  &lt;p align="justify"&gt;The thing is, everyone who has a computer with wireless connection also sees your signal. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;b&gt;So how to avoid them to connect to your Internet and make them surf by stealing your connection?&lt;/b&gt; Well, you set a password to connect to your router, so when anyone try to connect they will be asked for it.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/superedge/SDLYqKGkRYI/AAAAAAAABeg/rSUsFQMXjLY/s1600-h/DSC09008b%5B9%5D.png"&gt;&lt;img src="http://lh3.ggpht.com/superedge/SDLYrKGkRZI/AAAAAAAABeo/mfdsrEzoz2M/DSC09008b_thumb%5B9%5D.png?imgmax=800" alt="DSC09008b" border="0" height="191" width="550"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;And here we get to the point: &lt;b&gt;the SSID is not a password&lt;/b&gt;. As a matter of fact, the SSID was designed to be public, yes. So by making it public or hidden it really does not change much the security scenario. And besides remember what all the security experts say: there is no security by obscurity. Just because it's hidden it does not mean that it is safe.&lt;/p&gt;  &lt;p align="justify"&gt;So he decided to hide the SSID. Ok. It does not matter, it is not much hidden anyway. Let's see.&lt;/p&gt;  &lt;p align="justify"&gt;The wireless network that you have at home send packages of data-to-air, some are encrypted, some are not, and inside those who are not encrypted they also contain your SSID name. Simple like that and written in plain-text.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;b&gt;So if I am a hacker&lt;/b&gt;, I could use a sniffer program to capture the packages and open up to see what's inside. A lot of them I would see crazy stuff, those are encrypted; but in some of them I would see things of the like: trying to connect to SSID name 'myhomenetwork'.&lt;/p&gt;  &lt;p align="justify"&gt;So there we go, our secret is now gone. Do you still think you're safer after that?&lt;/p&gt;  &lt;p align="justify"&gt;&lt;b&gt;Can you reduce the amount of packages without encrypted information?&lt;/b&gt; Yes, but you can not stop them 100%, so at some point they will be sent.&lt;/p&gt;  &lt;p align="justify"&gt;Another thing to worry about. If you use Windows XP we can observe an interesting behaviour. If your SSID is hidden, but the laptop is connected to the Internet, XP still apparently keeps sending requests to join the network, continuously. And guess what? The router will reply to your requests using non-encrypted messages.&lt;/p&gt;  &lt;p align="justify"&gt;Funny thing. If we think about it what we are doing here is make our hidden network sends over and over and over again a bunch of replies with not encrypted data with your so-cool-and-hidden SSID. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;b&gt;Why Windows XP and Windows Vista behave like this by default?&lt;/b&gt; because SSIDs were, as I mentioned before, designed to be public and I my guess is that Microsoft did this to comply with some governments cyber-laws. I've heard that in some countries, like the USA, it is a crime to keep your SSID hidden and to use hidden identities and hidden networks... all that stuff. I can't confirm that, so it is a guess, but it makes sense to me.&lt;/p&gt;  &lt;p align="justify"&gt;Hiding the SSID won't hide you from the wireless world. Unfortunately people still relates hidden things with secure things.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;b&gt;So how to make my wireless Internet at home more secure?&lt;/b&gt; Use something called WPA/WPA2. That's good enough mostly the times. If you are using WEP, change to WPA2. If you are running Windows XP and you have applied all the updates, you are safe. For Windows Vista is even easier because WPA2 comes with it out-of-the-box.&lt;/p&gt;  &lt;p align="justify"&gt;Here some stuff about securing your &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=269902e8-fc41-4eb1-9374-44612e64f0fb&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=269902e8-fc41-4eb1-9374-44612e64f0fb&amp;amp;displaylang=en"&gt;wireless internet&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;See you later &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6206287" width="1" height="1"&gt;</content><author><name>superedge</name><uri>http://weblogs.asp.net/members/superedge.aspx</uri></author><category term="general software development" scheme="http://weblogs.asp.net/edgepereira/archive/tags/general+software+development/default.aspx" /></entry><entry><title>What do you do after speaking to a client or customer?</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/edgepereira/archive/2008/05/21/what-do-you-do-after-speaking-to-a-client-or-customer.aspx" /><id>http://weblogs.asp.net/edgepereira/archive/2008/05/21/what-do-you-do-after-speaking-to-a-client-or-customer.aspx</id><published>2008-05-21T01:57:00Z</published><updated>2008-05-21T01:57:00Z</updated><content type="html">&lt;p&gt;I am an IT guy. That's clear but often I think about many situations from a salesman's point of view, trying to view the world from another angle that I sometimes have no idea how it could be. &lt;/p&gt;&lt;p&gt;What do I mean by that? I'll explain but before please let me share with you this.&lt;br&gt; &lt;/p&gt;&lt;p&gt;I must recognize, even thou IT is a really cool area to work and even thou because the pace it is so demanding we must run everyday just to remain in the same place, unfortunately not always we have the chance to deal with cool and state-of-the-art technology. Yes, sometimes we have to deal with repetitive tasks, sometimes boring tasks, sometimes old products etc. If you are an IT person you know that and might agree with me. Legacy base is a consequence of this fast paced world, as well.&lt;br&gt;&lt;/p&gt;&lt;p&gt;In those situations we wonder: Mate, I am doing this because it was handed over to me out of nowhere and I know this is no rocket-science and despite that I must finish it by tomorrow. I bet we all at some point of our carreers dealt with this scenario, which normally leaves a strange taste in our mouth telling us there is nothing new to be learn from that experience.&lt;/p&gt;&lt;p&gt;Fear not my friends, there is always something to learn does not matter the scenario.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Now, let's get back to the sales person thing I was talking about.&amp;nbsp;&lt;/p&gt;&lt;p&gt;The sales guy after a contact, client visit, sales performed, email delivered to a potential customer, whatever the reason, there is something they must do which is ask himself : &lt;b&gt;What could I have done better ?&lt;/b&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Sounds easy and trivial but that's a hard thing to do and as a matter of fact that's something I am trying to do with myself: &lt;b&gt;What have I done today that I've could do better ? What I've done wrong today ? &lt;/b&gt;&lt;br&gt;&lt;br&gt;As the time goes by this becomes a habit just like drinking coffee at 3pm and soon you'll picture yourself in a state of eternal improvement, or at least awareness of it. I am not telling you this is a magic rule to follow in order to achieve the perfection, far from it; but it certainly does something to us which IMHO is a must for a better version of ourselves: &lt;b&gt;It takes us out of our confort zone.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Yet there are people out there who pay for this kind of professional service, Personal Coaching. Honestly, would be great to pay for one of those but I still prefer to put my hard earned money into my mortgage or my kid's school fees. So why not we become our own Personal Coach?&lt;/p&gt;&lt;p&gt;&lt;b&gt;How do I do?&lt;/b&gt;&lt;br&gt;I ask myself: What could I have done better? and I write them on paper. I make a list. I put them on paper because I want that document to be a reminder, and you know what? writing it's free and doesn't hurt, specially the bad things and mistakes we made. Yes, the mistakes are important also because they will be like beacons in this dark ocean of our tries, but I try not to concentrate too much on them after all mistakes are consequences of tries. If you do not do many mistakes it means you haven't tried enough.&lt;br&gt;&lt;br&gt;Just to illustrate look at our mailboxes with lots of emails trying to sell us stuff. Pay attention to them, I could say that the vast majority is really badly written, from the sales point of view of course. Lots of information about the product requirements, features and prices but very few information about how it would make my life easier or things like why I should buy it now and save effectively&amp;nbsp; 1 hour of coding everyday.&lt;br&gt;&lt;br&gt;The truth is: very few of them talk about benefits. Very few of them mention how their product will help the customer with its problems.&lt;br&gt;&lt;br&gt;So, here it goes a good exercise: Try to find out what else that message wants to say in the email selling you stuff. Why I should go for this product instead the competition? How would you write the message to appeal to people like yourself. And how to put yourself ni other situations out of your comfort zone? Try to think about markets you don't know much about, like think how would you manage that coffee shop. If you were an attendant how would you receive a client like yourself looking for a good coffee during the working day?&lt;br&gt;&lt;/p&gt;&lt;p&gt;Excellence is not a point to reach, it is a trajectory made up of very very small baby steps. Hundreds of them taken one at a time, one each day.&lt;br&gt;&lt;/p&gt;&lt;p&gt;See you later.&amp;nbsp;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5866445" width="1" height="1"&gt;</content><author><name>superedge</name><uri>http://weblogs.asp.net/members/superedge.aspx</uri></author><category term="general software development" scheme="http://weblogs.asp.net/edgepereira/archive/tags/general+software+development/default.aspx" /></entry><entry><title>File Upload and Canonical Issues</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/edgepereira/archive/2008/05/02/file-upload-and-canonical-issues.aspx" /><id>http://weblogs.asp.net/edgepereira/archive/2008/05/02/file-upload-and-canonical-issues.aspx</id><published>2008-05-02T03:57:00Z</published><updated>2008-05-02T03:57:00Z</updated><content type="html">&lt;p align="justify"&gt;Never trust the user input. The incoming data can be the source of many devils and a security flaw can be there just waiting for the right moment and the right person to break your application.&lt;/p&gt;  &lt;p align="justify"&gt;After finishing &lt;a href="http://weblogs.asp.net/edgepereira/archive/2008/04/19/uploading-files-and-raising-events.aspx" mce_href="http://weblogs.asp.net/edgepereira/archive/2008/04/19/uploading-files-and-raising-events.aspx"&gt;my upload control&lt;/a&gt; I finally did the integration with the website. Now the users can select the files and send it to the website to be processed.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/superedge/SCB9HW3jD_I/AAAAAAAABbI/oPtg2L0_DYo/s1600-h/1%5B6%5D.gif"&gt;&lt;img src="http://lh4.ggpht.com/superedge/SCB9IG3jEAI/AAAAAAAABbQ/6mP14AYyf2k/1_thumb%5B4%5D.gif?imgmax=800" style="border-width: 0px;" alt="1" border="0" height="133" width="336"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;What are the security risks here? Something that can be called 'canonicalization issue'.&lt;/p&gt;  &lt;p align="justify"&gt;For a start all data can be seen on its canonical form. A canonical form is the most simple and most stardard form that any data can be represented, thus canonicalization is the process of converting the data to its canonical form.&lt;/p&gt;  &lt;p align="justify"&gt;Proficient JavaScript programmers are very aware of what I am talking about, and as a matter of fact in our system the user can search for a name using wildcards. So you can ask him: &lt;i&gt;"Retrieve me a list of all the instances where its canonical form includes Bill as mandatory prefix" &lt;/i&gt;The user will probably say: &lt;i&gt;"Retrieve what???"&lt;/i&gt; but if you ask them: &lt;i&gt;"Give me a list of all the users where their names start with Bill"&lt;/i&gt; they will type in the system 'bill*'. The user normally does not know that but he is doing is performing a &lt;i&gt;'type of canonical query'&lt;/i&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Now, back to our file upload issue. A file name is a very common canonical type. You can call the same file as:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;thairecipes.doc&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;c:\recipes\thairecipes.doc&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;c:\\recipes\\thairecipes.doc&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;c:\&amp;nbsp;&amp;nbsp; recipes\thairecipes.doc&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;c:%3A%5Crecipes%5Cthairecipes.doc        &lt;br&gt;&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;As you probably figured the last one is the issue. Your Windows operating system will recognize the symbols %5C and %3A.&lt;/p&gt;  &lt;p align="justify"&gt;You see now because we are giving to the user the option to save in our system just about any file name he wants to at the same time we are also opening a door for a sort of canonical attack. Remember : Never trust the user. And by user I am not only talking about a person. In our context an user is any entity who uses a given resource or service, and for that matter an user indeed can be another system or another application.&lt;/p&gt;  &lt;p align="justify"&gt;A hacker would think: "how can I break into this site? Does it allow any easy access to any of its resources?". In our case, yes our website must allow the user to upload files. &lt;/p&gt;  &lt;p align="justify"&gt;What to do now? How to handle a file upload to a web server?&lt;/p&gt;  &lt;p align="justify"&gt;Well, first as a general rule you must not design a website that accept just about any file names created by the user and save it like that. As a matter of fact, any input must be validated and sanitized&amp;nbsp; if possible, not only in client-side but on the server-side as well. &lt;/p&gt;  &lt;p align="justify"&gt;A better design: Do not allow the user to save the file in the web server with the filename that he wants to use. Accept the file, keep the original filename somewhere and let the application rename that file with another name and then save it. I would suggest you to use a GUID string for that matter. That way you are not only closing the doors for a possible canonical attack but also you do not give a chance to a malicious user to try to find out the filenames you might have in your server. For example, If a hacker knows that there is a file called http:\\mywebsite\mydocs\clientid1\&lt;b&gt;file1.doc&lt;/b&gt; he will try something like http:\\mywebsite\mydocs\clientid1\&lt;b&gt;file2.doc&lt;/b&gt;, and then http:\\mywebsite\mydocs\clientid1\&lt;b&gt;file3.doc&lt;/b&gt; and so on. By using an internal name rule creation you minimize his surface.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/superedge/SCB9JG3jEBI/AAAAAAAABbY/2UWyaE6w8X0/s1600-h/2%5B5%5D.gif"&gt;&lt;img src="http://lh4.ggpht.com/superedge/SCB9KG3jECI/AAAAAAAABbg/xTOfyAorsSg/2_thumb%5B3%5D.gif?imgmax=800" style="border-width: 0px;" alt="2" border="0" height="248" width="491"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Another thing to observe: You don't have to fight against and defeat a malicious user, probably there can be hundreds of hackers trying to break your code and you are just one guy against them &lt;i&gt;( and you don't want to have any sleepless nights during weekends, do you? )&lt;/i&gt; They always find a way to break your code. The best option is to minimize their attack surface. Chances are they are going to move on and concentrate their efforts to break a "weaker website" if your site if strong enough for the first rounds of attack.     &lt;br&gt;    &lt;br&gt;These would be some instinctive considerations and additionally I would suggest to take a look at implementing &lt;a href="http://msdn.microsoft.com/en-us/library/aa302423.aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa302423.aspx"&gt;File I/O guidelines&lt;/a&gt; as well. At the end of the day, it all depends about how secure you want to be, how much time you have available to implement it and how rigid the specifications were given.&lt;/p&gt;  &lt;p&gt;See you later.&lt;/p&gt;  &lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6149205" width="1" height="1"&gt;</content><author><name>superedge</name><uri>http://weblogs.asp.net/members/superedge.aspx</uri></author><category term="asp.net" scheme="http://weblogs.asp.net/edgepereira/archive/tags/asp.net/default.aspx" /><category term=".net" scheme="http://weblogs.asp.net/edgepereira/archive/tags/.net/default.aspx" /><category term="general software development" scheme="http://weblogs.asp.net/edgepereira/archive/tags/general+software+development/default.aspx" /><category term="c#" scheme="http://weblogs.asp.net/edgepereira/archive/tags/c_2300_/default.aspx" /><category term=".net faq" scheme="http://weblogs.asp.net/edgepereira/archive/tags/.net+faq/default.aspx" /></entry><entry><title>The Risk</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/edgepereira/archive/2008/05/01/the-risk.aspx" /><id>http://weblogs.asp.net/edgepereira/archive/2008/05/01/the-risk.aspx</id><published>2008-05-01T04:27:00Z</published><updated>2008-05-01T04:27:00Z</updated><content type="html">&lt;div align="center"&gt;&lt;img src="http://farm1.static.flickr.com/124/410523258_cd42014c41.jpg" mce_src="http://farm1.static.flickr.com/124/410523258_cd42014c41.jpg"&gt;
&lt;/div&gt;&lt;div align="justify"&gt;&amp;nbsp;&lt;/div&gt;&lt;div align="justify"&gt;Last night I had a conversation with some new friends here in the &lt;strong&gt;Beautiful&lt;/strong&gt; &lt;strong&gt;Australia&lt;/strong&gt; and I would like to share something with you guys to reflect upon:

&lt;strong&gt;&lt;em&gt;"Those people you see, on the National Geographic or Discovery Chanel, who try to reach the top of the Everest, are they crazy or what ?" &lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;&amp;nbsp;&lt;/div&gt;&lt;div align="justify"&gt;&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;

Now, picture this. For many decades, many men and women have tried... and there, they lost their lives. As a matter of fact, most of these people were not even able to return to their loved ones. &lt;strong&gt;Despite this tragic statistic, more and more people tried&lt;/strong&gt;... risking... knowing that they probably will die during this journey, leaving family, children, wives behind.

&lt;/div&gt;&lt;div align="justify"&gt;&amp;nbsp;&lt;/div&gt;&lt;div align="justify"&gt;So, &lt;em&gt;why they still did/do this ?&lt;/em&gt; &lt;strong&gt;Because it was worth it doing it. In the very risk, a transformation happens in you, something is born inside you&lt;/strong&gt;. No other experience can give you this. It only can be developed in the risk. That's the beauty of the risk.

&lt;/div&gt;&lt;div align="justify"&gt;&amp;nbsp;&lt;/div&gt;&lt;div align="justify"&gt;So, here we are, talking about the idea of &lt;em&gt;"live your live to the most"&lt;/em&gt;, no regrets, no looking back.

Then another question arise: &lt;em&gt;"Can you remember when did you feel most alive?"&lt;/em&gt;

&lt;/div&gt;&lt;div align="justify"&gt;&amp;nbsp;&lt;/div&gt;&lt;div align="justify"&gt;For some, it was when they managed to speak a second language for first time, for others was when they first did bungie-jumping in New Zealand or Switzerland, for others was when their first child was born.

Now, if you remember &lt;em&gt;"your special moment"&lt;/em&gt;, I bet a shiver will run through your spine and your heartbeat increase. &lt;/div&gt;&lt;div align="justify"&gt;&amp;nbsp;&lt;/div&gt;&lt;div align="justify"&gt;If I ask you to describe this feeling, you will be talking about this moment, proud of yourself and about how cool was it.

I can almost tell a pattern where people will :

&lt;/div&gt;&lt;div align="justify"&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt; Talk about &lt;strong&gt;a scenario in which the risk pushed themselves &lt;/strong&gt;out of their comfort zone and; &lt;br&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;The outcome of the risk is not the main goal, instead &lt;strong&gt;the journey is what they remember most&lt;/strong&gt; and; &lt;br&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;They &lt;strong&gt;finish the story with a big smile &lt;/strong&gt;and sparkling eyes.&amp;nbsp;&amp;nbsp;&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div align="justify"&gt;So, there it goes. Think again about that first question I mentioned. Now, my idea is that the beauty of the risk doesn't lie in the final result - it lies in &lt;strong&gt;who you become in the process&lt;/strong&gt;. Confident. Engaged. Alive. I risk to say more: this is not something you do every summer
- it becomes a habit, and it can be contagious. It gives you a new approach to life. After doing it, your life is just not the same anymore, otherwise you will feel stagnant, bored.

So, just like that famous question:&lt;em&gt;"when was the last time you did something for the first time?"&lt;/em&gt;

&lt;/div&gt;&lt;div align="justify"&gt;&amp;nbsp;&lt;/div&gt;&lt;div align="justify"&gt;See you all later! &lt;/div&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6146884" width="1" height="1"&gt;</content><author><name>superedge</name><uri>http://weblogs.asp.net/members/superedge.aspx</uri></author><category term=".net" scheme="http://weblogs.asp.net/edgepereira/archive/tags/.net/default.aspx" /><category term="general software development" scheme="http://weblogs.asp.net/edgepereira/archive/tags/general+software+development/default.aspx" /></entry><entry><title>Uploading files and raising events</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/edgepereira/archive/2008/04/19/uploading-files-and-raising-events.aspx" /><id>http://weblogs.asp.net/edgepereira/archive/2008/04/19/uploading-files-and-raising-events.aspx</id><published>2008-04-19T12:14:00Z</published><updated>2008-04-19T12:14:00Z</updated><content type="html">&lt;p align="justify"&gt;This week while I was awaiting for a new project confirmation I saw myself doing some code fixing for another project, that's something quite common and I really don't mind that. One of my tasks was to develop a little page to upload images to a server. That's not a problem, so I decided to try something new. Yes, I was very keen to use &lt;a href="http://www.silverlight.net" mce_href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt; for the task, but I used some good old javascript and a very cool concept similar to the called &lt;a href="http://msdn2.microsoft.com/en-us/library/aa719644%28VS.71%29.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa719644(VS.71).aspx"&gt;bubbling events&lt;/a&gt;, which is basically to raise an event from a determined and let it propagate up in the chain until it is captured. &lt;/p&gt;  &lt;p align="justify"&gt;My first idea was : I will create a web user control that can be easily added to a common web page and this guy will pass the list like a &lt;em&gt;bubbled event&lt;/em&gt;. &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/superedge/SAnh7bAXN-I/AAAAAAAABVs/LRscpykO834/s1600-h/1%5B4%5D.gif" mce_href="http://lh6.ggpht.com/superedge/SAnh7bAXN-I/AAAAAAAABVs/LRscpykO834/s1600-h/1%5B4%5D.gif"&gt;&lt;img src="http://lh5.ggpht.com/superedge/SAnh8LAXN_I/AAAAAAAABV0/fE_x4vHhGsw/1_thumb%5B2%5D.gif?imgmax=800" style="border: 0px none ;" alt="1" mce_src="http://lh5.ggpht.com/superedge/SAnh8LAXN_I/AAAAAAAABV0/fE_x4vHhGsw/1_thumb%5B2%5D.gif?imgmax=800" border="0" height="223" width="400"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;This control will implement an interface to select and hold a list of files and will be able to send that list to the page and notify the page the list is ready to upload. Let's call it &lt;em&gt;MyUpload&lt;/em&gt; control.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/superedge/SAnh87AXOAI/AAAAAAAABV8/9dyWOnwH_QE/s1600-h/2%5B3%5D.gif" mce_href="http://lh4.ggpht.com/superedge/SAnh87AXOAI/AAAAAAAABV8/9dyWOnwH_QE/s1600-h/2%5B3%5D.gif"&gt;&lt;img src="http://lh3.ggpht.com/superedge/SAnh9rAXOBI/AAAAAAAABWE/spUTe_wGCPU/2_thumb%5B1%5D.gif?imgmax=800" style="border: 0px none ;" alt="2" mce_src="http://lh3.ggpht.com/superedge/SAnh9rAXOBI/AAAAAAAABWE/spUTe_wGCPU/2_thumb%5B1%5D.gif?imgmax=800" border="0" height="109" width="240"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;being a user control any programmer can then drag and drop this guy to any page and it must be atomic enough to not be too attached to the parent. So it inherits from &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.usercontrol.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.web.ui.usercontrol.aspx"&gt;usercontrol&lt;/a&gt;, and will have, at least for now, 2 methods called upload and a click. Here the things are getting cool. This click event is an &lt;a href="http://msdn2.microsoft.com/en-us/library/edzehd2t.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/edzehd2t.aspx"&gt;event raiser&lt;/a&gt;.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/superedge/SAnh-rAXOCI/AAAAAAAABWM/IFYIrV3F0KM/s1600-h/3%5B3%5D.gif" mce_href="http://lh3.ggpht.com/superedge/SAnh-rAXOCI/AAAAAAAABWM/IFYIrV3F0KM/s1600-h/3%5B3%5D.gif"&gt;&lt;img src="http://lh6.ggpht.com/superedge/SAnh_bAXODI/AAAAAAAABWU/JNQI5gJ5S4I/3_thumb%5B1%5D.gif?imgmax=800" style="border: 0px none ;" alt="3" mce_src="http://lh6.ggpht.com/superedge/SAnh_bAXODI/AAAAAAAABWU/JNQI5gJ5S4I/3_thumb%5B1%5D.gif?imgmax=800" border="0" height="96" width="240"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;When a programmer use this control, by calling the click method it will pass the selected file collection to the page. How? sending the list as arguments of the call.&lt;/p&gt;  &lt;p align="justify"&gt;The upload method must then be responsible populate the list and send this list to the caller.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/superedge/SAniALAXOEI/AAAAAAAABWc/OeR8567Jk_Y/s1600-h/4%5B3%5D.gif" mce_href="http://lh5.ggpht.com/superedge/SAniALAXOEI/AAAAAAAABWc/OeR8567Jk_Y/s1600-h/4%5B3%5D.gif"&gt;&lt;img src="http://lh4.ggpht.com/superedge/SAniA7AXOFI/AAAAAAAABWk/el2gv-WioAo/4_thumb%5B1%5D.gif?imgmax=800" style="border: 0px none ;" alt="4" mce_src="http://lh4.ggpht.com/superedge/SAniA7AXOFI/AAAAAAAABWk/el2gv-WioAo/4_thumb%5B1%5D.gif?imgmax=800" border="0" height="155" width="240"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Once the event is triggered in the webpage this page will loop through the items in the received file list and for each instance I will &lt;em&gt;'save file as...'&lt;/em&gt; and provide the path in the web server directory. This will move the file to the desired location as specified in the document request. &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/superedge/SAniBrAXOGI/AAAAAAAABWs/RRcuJ_L8E3w/s1600-h/5%5B3%5D.gif" mce_href="http://lh3.ggpht.com/superedge/SAniBrAXOGI/AAAAAAAABWs/RRcuJ_L8E3w/s1600-h/5%5B3%5D.gif"&gt;&lt;img src="http://lh6.ggpht.com/superedge/SAniCbAXOHI/AAAAAAAABW0/gPjlE-ePtnM/5_thumb%5B1%5D.gif?imgmax=800" style="border: 0px none ;" alt="5" mce_src="http://lh6.ggpht.com/superedge/SAniCbAXOHI/AAAAAAAABW0/gPjlE-ePtnM/5_thumb%5B1%5D.gif?imgmax=800" border="0" height="110" width="240"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Could I save the files in the database? Yes, I could but all the specs for the task are done and that was the mission. So I won't discuss any matters of&amp;nbsp; a better solution for this given scenario.&lt;/p&gt;  &lt;p align="justify"&gt;My upload control will have two buttons add and remove files which will be responsible for maintaining the list of files I want to upload. Why is that? because we want to upload a list of files in one shot and not one by one. Indeed, I'll spend more hours implementing this solution but at the end this will be a reusable control and as I said, any other programmers will then just drag and drop it should they need to implement a similar solution. &lt;/p&gt;  &lt;p align="justify"&gt;How do implement the code for add and remove files? That's the most difficult part and requires a good amount of &lt;a href="http://support.microsoft.com/kb/154585" mce_href="http://support.microsoft.com/kb/154585"&gt;javascript&lt;/a&gt; knowledge. Just this javascript routine can be subject of a post by itself. For now let's say the control has a private method called &lt;em&gt;buildjavascript&lt;/em&gt; which &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.page.clientscript%28VS.80%29.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.web.ui.page.clientscript(VS.80).aspx"&gt;renders in the page all the javascript methods&lt;/a&gt; necessary to maintain this object list.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/superedge/SAniC7AXOII/AAAAAAAABW8/YvepeTsHkbg/s1600-h/6%5B3%5D.gif" mce_href="http://lh4.ggpht.com/superedge/SAniC7AXOII/AAAAAAAABW8/YvepeTsHkbg/s1600-h/6%5B3%5D.gif"&gt;&lt;img src="http://lh3.ggpht.com/superedge/SAniDrAXOJI/AAAAAAAABXE/lA4sLOsoWkI/6_thumb%5B1%5D.gif?imgmax=800" style="border: 0px none ;" alt="6" mce_src="http://lh3.ggpht.com/superedge/SAniDrAXOJI/AAAAAAAABXE/lA4sLOsoWkI/6_thumb%5B1%5D.gif?imgmax=800" border="0" height="115" width="240"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Returning to our code behind, this list will be a collection and the best way to keep it and pass it by posting is to make it inherit from a very cool and useful class for this situation: the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.httpfilecollection%28vs.71%29.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.web.httpfilecollection(vs.71).aspx"&gt;HttpFileCollection&lt;/a&gt;. &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/superedge/SAniELAXOKI/AAAAAAAABXM/cuyuMZTx8Jg/s1600-h/7%5B3%5D.gif" mce_href="http://lh5.ggpht.com/superedge/SAniELAXOKI/AAAAAAAABXM/cuyuMZTx8Jg/s1600-h/7%5B3%5D.gif"&gt;&lt;img src="http://lh4.ggpht.com/superedge/SAniE7AXOLI/AAAAAAAABXU/b9pjFezsuuQ/7_thumb%5B1%5D.gif?imgmax=800" style="border: 0px none ;" alt="7" mce_src="http://lh4.ggpht.com/superedge/SAniE7AXOLI/AAAAAAAABXU/b9pjFezsuuQ/7_thumb%5B1%5D.gif?imgmax=800" border="0" height="128" width="240"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;The upload button in the control will call the upload method which does nothing but raise the event to the page. The page who has the control implements already the method expected to parse the list as an HttpFileCollection object. Now, we only have to save the object as new name, being in a new location.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/superedge/SAniFrAXOMI/AAAAAAAABXc/GEf2NR87loM/s1600-h/8%5B3%5D.gif" mce_href="http://lh3.ggpht.com/superedge/SAniFrAXOMI/AAAAAAAABXc/GEf2NR87loM/s1600-h/8%5B3%5D.gif"&gt;&lt;img src="http://lh6.ggpht.com/superedge/SAniGbAXONI/AAAAAAAABXk/-h5mIdOqe2o/8_thumb%5B1%5D.gif?imgmax=800" style="border: 0px none ;" alt="8" mce_src="http://lh6.ggpht.com/superedge/SAniGbAXONI/AAAAAAAABXk/-h5mIdOqe2o/8_thumb%5B1%5D.gif?imgmax=800" border="0" height="240" width="156"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;My initial design is done and I am doing the javascript side of things. This week was hectic but once things come back to normality and some time is left for me, I will share my code here somewhere.&lt;/p&gt;  &lt;p align="justify"&gt;See you later.&lt;/p&gt;  &lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6112458" width="1" height="1"&gt;</content><author><name>superedge</name><uri>http://weblogs.asp.net/members/superedge.aspx</uri></author></entry><entry><title>Why adding more memory won't fix your Out of Memory error ?</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/edgepereira/archive/2008/04/05/why-add-more-memory-won-t-fix-your-out-of-memory-error.aspx" /><id>http://weblogs.asp.net/edgepereira/archive/2008/04/05/why-add-more-memory-won-t-fix-your-out-of-memory-error.aspx</id><published>2008-04-05T15:52:00Z</published><updated>2008-04-05T15:52:00Z</updated><content type="html">&lt;p align="justify"&gt;Here an interesting case. Consider there 2 scenarios:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://farm3.static.flickr.com/2001/2389271787_9ba084337c.jpg" mce_src="http://farm3.static.flickr.com/2001/2389271787_9ba084337c.jpg"&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Both are running the same website, both have the same amount of users connected.&lt;/p&gt;  &lt;p align="justify"&gt;Now imagine this website has a page to upload pictures, just like any regular photo-album website.&lt;/p&gt;  &lt;p align="justify"&gt;For some reason, at some point the users complain that they see an error page indicating out of memory error. &lt;/p&gt;  &lt;p align="justify"&gt;So, you wonder: &lt;i&gt;How come? they are just uploading a photo to my website, and I still have plenty of memory in my server anyway&lt;/i&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Anyhow, you stop thinking about this and go for the &lt;i&gt;easiest, quick and dirty &lt;/i&gt;solution: If the system tells me that my computer does not have enough memory then &lt;b&gt;I just need to add more memory&lt;/b&gt;. Right?&lt;/p&gt;  &lt;p align="justify"&gt;And guess what? you still will get the error message.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://farm3.static.flickr.com/2220/2390103968_2c86acc65f.jpg" mce_src="http://farm3.static.flickr.com/2220/2390103968_2c86acc65f.jpg"&gt; &lt;/p&gt;  &lt;p align="justify"&gt;That's a very common mistake. Having a machine with 10GB of memory does not mean you will have 10GB of memory available. I explain.&lt;/p&gt;  &lt;p align="justify"&gt;It does not matter if your computer or server has 512 MB, 1 GB, 2 GB, 4 GB or 8 GB of RAM. If your machine is a 32-bit machine it will only be able to see/manage 4 GB. That's mathematics, that's life, that's the way things are and you can't do nothing about it. A 32-bit machine can not do more than that.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://farm4.static.flickr.com/3030/2390103346_8be8580061.jpg" mce_src="http://farm4.static.flickr.com/3030/2390103346_8be8580061.jpg"&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Additional memory may increase your system performance, but it won't increase the memory availability. Sure your computer will use less the hard disk for swapping operations and will be able put more stuff in memory and start some programs faster, but 4GB is the limit; after this point the memory management module will start doing disk swap and to use the famous page file.&lt;/p&gt;  &lt;p align="justify"&gt;And here comes more bad news: Your Windows system on a 32-bit machine requires 2 GB allocated only for it. &lt;/p&gt;  &lt;p align="justify"&gt;So, if you have 4 GB installed, effectively you will have 2 GB only for applications; your windows will be using alone 2 GB.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://farm4.static.flickr.com/3141/2390103884_02673e964a.jpg" mce_src="http://farm4.static.flickr.com/3141/2390103884_02673e964a.jpg"&gt; &lt;/p&gt;  &lt;p align="justify"&gt;So, what does out of memory means?&lt;/p&gt;  &lt;p align="justify"&gt;Well, according to some people at Microsoft, this limit for an average configuration is reached between 600 MB and 800 MB of utilization. That 800 number is NOT A RULE, is a baseline. Generally speaking the largest majority of configurations with website, .NET and SQL Server database might have a problem around this point. Of course, this can vary from system to system...as a matter of fact a system can be out of memory at just 600 MB.&lt;/p&gt;  &lt;p align="justify"&gt;Yes, it does sounds crazy. You look so happy now that you just bought a 4GB RAM notebook and your computer is breaking with just 800MB, hun?&lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://farm3.static.flickr.com/2347/2390103928_2612aa2f3d.jpg" mce_src="http://farm3.static.flickr.com/2347/2390103928_2612aa2f3d.jpg"&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Here is another point for you. Have you ever seen someone bragging that he/she bought a 10-megapixel camera and now he/she believes their pictures are going to be better because of this?&lt;/p&gt;  &lt;p align="justify"&gt;Well, guess what? Just like the number of megapixels in a camera box does not have much to do with picture quality, RAM memory does not have much to do with hard disk space.&lt;/p&gt;  &lt;p align="justify"&gt;That's a common mistake: &lt;b&gt;&lt;i&gt;People buy RAM as if they were buying a hard disk&lt;/i&gt;&lt;/b&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;RAM usage needs to me continuous, unlike hard disk. A simple 5MB Microsoft Word document when saved in a hard disk can be split up in hundreds of pieces; When you open this file in memory, the RAM requires those 5MB to be allocated continuously.&lt;/p&gt;  &lt;p align="justify"&gt;Can you see now the reason for the 'out of memory' message?&lt;/p&gt;  &lt;p align="justify"&gt;Yes, it really means &lt;i&gt;&lt;b&gt;'there is not enough continuous memory to place that file in memory'&lt;/b&gt;&lt;/i&gt;. Your system might have 2GB of RAM but unfortunately it might be too busy with stuff running and there is no enough continuous memory to put the picture you are uploading.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img src="http://farm3.static.flickr.com/2042/2390103910_1bc0b92982.jpg" mce_src="http://farm3.static.flickr.com/2042/2390103910_1bc0b92982.jpg"&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Yeah, you can not do much but you can buy a 64-bit machine then when you add more memory you can really use it more efficiently. And yes, we have &lt;a href="http://www.microsoft.com/windows/" mce_href="http://www.microsoft.com/windows/"&gt;Microsoft Windows systems for 64-bit machines&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;If you do not want to buy a new system of upgrade you current server to a better version then you should think other solutions in the business process, such as to avoid users upload pictures with more than 1 MB in size to be uploaded.&lt;/p&gt;  &lt;p align="justify"&gt;See you later.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6069116" width="1" height="1"&gt;</content><author><name>superedge</name><uri>http://weblogs.asp.net/members/superedge.aspx</uri></author><category term="asp.net" scheme="http://weblogs.asp.net/edgepereira/archive/tags/asp.net/default.aspx" /><category term=".net" scheme="http://weblogs.asp.net/edgepereira/archive/tags/.net/default.aspx" /><category term="general software development" scheme="http://weblogs.asp.net/edgepereira/archive/tags/general+software+development/default.aspx" /><category term=".net faq" scheme="http://weblogs.asp.net/edgepereira/archive/tags/.net+faq/default.aspx" /><category term="vista" scheme="http://weblogs.asp.net/edgepereira/archive/tags/vista/default.aspx" /></entry><entry><title>Tips on how to improve cohesion in a software design</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/edgepereira/archive/2008/03/31/tips-on-how-to-improve-cohesion-in-a-software-design.aspx" /><id>http://weblogs.asp.net/edgepereira/archive/2008/03/31/tips-on-how-to-improve-cohesion-in-a-software-design.aspx</id><published>2008-03-31T13:23:00Z</published><updated>2008-03-31T13:23:00Z</updated><content type="html">&lt;justify&gt;
&lt;/justify&gt;&lt;p&gt;For the novice in object-oriented programming one of the biggest
challenges faced is the new mindset introduced by the OO concept: to be able to think and to model
the world in a set of objects and its respective methods.&lt;/p&gt;

&lt;p&gt;Every time I take part on a project where the people working are not
used to this programming style &lt;i&gt;(using the Microsoft Solution Framework of course)&lt;/i&gt; I notice that the main question marks are: &lt;b&gt;what to aggregate? what to
specialize? What to move to a super-class? what to leave as module
specific operation?&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Why do the people have this problem?&lt;/p&gt;

&lt;p&gt;IMHO and as far as my experience tells
me, I would say 80% of these issues are related to the fact that they are no longer be
using the terrible global variables in their programming. and we know how hard is to let go
this bad habit once you are used to it and specially if they are coming from a language where the untyped variables can be freely used, as in the classic Visual Basic. &lt;/p&gt;

&lt;p&gt;And because those guys now are not using global variables anymore
the first effect we notice in the development metric the &lt;b&gt;low
cohesion&lt;/b&gt;. The cohesion is what is going to bind in the relationship between object and its own operations, making it &lt;i&gt;(the object)&lt;/i&gt; responsible for their actions and at the same time not having to worry about who is going to be calling them &lt;i&gt;(the methods)&lt;/i&gt;. A high cohesion is generally a very nice thing to have, because it introduces a resposability layer that only the methods will be aware of it. For instance: the process of getting a value &lt;i&gt;(i.e.: an account balance)&lt;/i&gt; can introduce a change in other places &lt;i&gt;(i.e.: some internal counter limiting the number of requests per minute)&lt;/i&gt; and the caller should not bear the responsability of this change.&lt;br&gt;&lt;/p&gt;



&lt;p&gt;For these people and these cases I usually show a little trick that now I share with you guys.&lt;/p&gt;&lt;p&gt;1st: Think of the data and its operations like eternal lovers. They are always together in the same domain, they always walk around as a pair no matter where they go. As an exercise take a moment and put everything you are about to develop under a helicopter view, try to draw a diagram grouping the objects and its methods like the one below:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;center&gt;&lt;img src="http://farm3.static.flickr.com/2203/2377364288_0ffefeb0d4_o.gif" mce_src="http://farm3.static.flickr.com/2203/2377364288_0ffefeb0d4_o.gif" height="236" width="500"&gt;&lt;/center&gt;&lt;br&gt;&lt;br&gt;2nd
- if you are using too many nested 'if', you probably should be using
'cases/switches'. If you are using too many 'cases/switches' you
probably should create an enumerator for those values. If a value needs to be accessed from somewhere outside the scope, create a method just to return this value. This technique outlined here in the 2nd rule is proven to be a great public variable killer, thus helping to enforce a good cohesion.&lt;br&gt;
&lt;br&gt;Now, let's go to the cohesion point. Enumerate the objects you are
going to deal. Enumerate the methods you are going to call. Draw a
matrix with them in a way that you can see who &lt;i&gt;(object)&lt;/i&gt; is calling who
&lt;i&gt;(methods)&lt;/i&gt;, like the one below:

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;center&gt;&lt;img src="http://farm3.static.flickr.com/2059/2377364282_dd161c0c55_o.gif" mce_src="http://farm3.static.flickr.com/2059/2377364282_dd161c0c55_o.gif" height="246" width="500"&gt;&lt;/center&gt;&lt;br&gt;
&lt;br&gt;Cool, hun? Now let's analize the data and for that you just have to remember your high school days: That's a
popularity contest. 

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;center&gt;&lt;img src="http://farm3.static.flickr.com/2029/2377364298_fa359bfc00_o.gif" mce_src="http://farm3.static.flickr.com/2029/2377364298_fa359bfc00_o.gif" height="86" width="500"&gt;&lt;/center&gt;

&lt;p&gt;Pick the most popular methods. They will give you a good direction
of the objects that are candidates for high cohesion, and even maybe
to inherit from a future super-class opening a space for a better model abstraction.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;center&gt;&lt;img src="http://farm4.static.flickr.com/3097/2377364294_8ffafa8a4b_o.gif" mce_src="http://farm4.static.flickr.com/3097/2377364294_8ffafa8a4b_o.gif" height="112" width="500"&gt; &lt;/center&gt;



&lt;p&gt;&amp;nbsp;&lt;br&gt;I know this is not a 100% rule but everytime I do this exercise
with my colleagues we always find the light at the end of the
tunnel. If you have other suggestions or if you do this analisys in a different or not usual way, please share with us.&lt;br&gt;
&lt;br&gt;See you later.&lt;/p&gt;
&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6051932" width="1" height="1"&gt;</content><author><name>superedge</name><uri>http://weblogs.asp.net/members/superedge.aspx</uri></author><category term=".net" scheme="http://weblogs.asp.net/edgepereira/archive/tags/.net/default.aspx" /><category term="general software development" scheme="http://weblogs.asp.net/edgepereira/archive/tags/general+software+development/default.aspx" /><category term="agile" scheme="http://weblogs.asp.net/edgepereira/archive/tags/agile/default.aspx" /><category term="c#" scheme="http://weblogs.asp.net/edgepereira/archive/tags/c_2300_/default.aspx" /><category term="visual basic" scheme="http://weblogs.asp.net/edgepereira/archive/tags/visual+basic/default.aspx" /></entry><entry><title>SAFECode and Security Best Practices</title><link rel="alternate" type="text/html" href="http://weblogs.asp.net/edgepereira/archive/2008/03/11/safecode-and-security-best-practices.aspx" /><id>http://weblogs.asp.net/edgepereira/archive/2008/03/11/safecode-and-security-best-practices.aspx</id><published>2008-03-11T03:53:00Z</published><updated>2008-03-11T03:53:00Z</updated><content type="html">&lt;div align="justify"&gt;
&lt;p&gt;hi people,&lt;br&gt;&lt;br&gt;&lt;i&gt;Do you remember the last time you have developed an application with absolutelly no worries about security ? when you could trust the user input? when you were not worried about sql injection attacks? string attacks? dropdown list modifications? &lt;/i&gt;You are right, &lt;i&gt;(if you ever did this)&lt;/i&gt; probably it must have been a long long time ago. &lt;br&gt;&lt;br&gt;Security nowadays IS PART of the regular software development application. It is no more something to worry about only when the application is deployed or attacked. Security is a development-phase concern. Security skills are part of the normal software developer skills and if you are a developer and it is not yours, start learning about security right now. &lt;br&gt;&lt;br&gt;The thing is: How and where to learn about security? What are the best practices for security in software development? What if I am a Java programmer, &lt;a href="http://msdn2.microsoft.com/en-gb/practices/default.aspx" mce_href="http://msdn2.microsoft.com/en-gb/practices/default.aspx"&gt;Microsoft recommendations&lt;/a&gt; apply to me? I use SAP, why should I worry about security?&lt;br&gt;&lt;br&gt;My friends, I present to you&lt;i&gt; (or at least to those who haven't heard of it yet) &lt;/i&gt;&lt;b&gt;SAFECode&lt;/b&gt;.&lt;br&gt;&lt;br&gt;&lt;a href="http://www.safecode.org" mce_href="http://www.safecode.org"&gt;SAFECode or Software Assurance Forum for Excellence in Code&lt;/a&gt; is a consortium formed by many big names in the world, including those I told you before. People like Symantec, SAP, EMC and of course Microsoft are part of it. &lt;br&gt;&lt;br&gt;Together those companies created internal teams and they interact with eachother using SAFECode as an organisational interface and they as a whole share and develop best practices to be recommended to write safer and better products. &lt;br&gt;&lt;br&gt;Last week SAFECode released their first whitepaper with the best practices for a better and more secure software. That's a very interesting document. Why? because if you take your time to read it, you will notice how similar are the methodologies of those companies. &lt;br&gt;&lt;br&gt;Hopefully this initiative will grow better and stronger. Maybe one day we will not talk about &lt;a href="http://msdn2.microsoft.com/en-gb/practices/default.aspx" mce_href="http://msdn2.microsoft.com/en-gb/practices/default.aspx"&gt;Microsoft Recommended Best Practices&lt;/a&gt; but we will start referring to an &lt;b&gt;Universal Recomended Best Practice&lt;/b&gt;? Only time will tell. &lt;i&gt;(and the market forces, of course)&lt;/i&gt;&lt;br&gt;&lt;br&gt;If you are interested &lt;a href="http://www.safecode.org/publications/SAFECode_BestPractices0208.pdf" mce_href="http://www.safecode.org/publications/SAFECode_BestPractices0208.pdf"&gt;take a look at the document here&lt;/a&gt; and let us know your ideas ok?&lt;br&gt;&lt;br&gt;See you later. &lt;br&gt;&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5948070" width="1" height="1"&gt;</content><author><name>superedge</name><uri>http://weblogs.asp.net/members/superedge.aspx</uri></author><category term=".net" scheme="http://weblogs.asp.net/edgepereira/archive/tags/.net/default.aspx" /><category term="general software development" scheme="http://weblogs.asp.net/edgepereira/archive/tags/general+software+development/default.aspx" /><category term="c#" scheme="http://weblogs.asp.net/edgepereira/archive/tags/c_2300_/default.aspx" /><category term=".net faq" scheme="http://weblogs.asp.net/edgepereira/archive/tags/.net+faq/default.aspx" /></entry></feed>