<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-24933107</id><updated>2012-02-16T15:45:54.865Z</updated><category term='Microsoft'/><category term='Architecture'/><category term='Project Management'/><category term='Languages'/><category term='SQL'/><category term='Operations'/><category term='Career'/><category term='History'/><category term='Humor'/><category term='Human Resources'/><category term='Strategy'/><category term='Events'/><category term='Blog'/><category term='Google'/><category term='Programming'/><category term='.NET'/><title type='text'>André Silva Cardoso</title><subtitle type='html'>Opinions on Architecture, .NET &amp; SQL</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>50</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-24933107.post-2677048728837969193</id><published>2010-11-15T01:27:00.001Z</published><updated>2010-11-15T01:28:30.231Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Online Events</title><content type='html'>&lt;p&gt;The last couple of weeks were full of events. Although I dind’t attended any of them in person, I could get some of their essence online, in between work (or after it).&lt;/p&gt;  &lt;p&gt;The first event was &lt;a href="http://www.microsoftpdc.com"&gt;PDC2010&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt;. Even though it has always been an american and the main MS developer event, this year the keynote was broadcasted live throughout the world. I attended at the MS auditory in TagusPark (Portugal), and the keynote main themes were:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Azure &lt;/strong&gt;(PaaS, Market place, VM role, Server App Virtualization, SQL Azure reporting, Application Fabric and composition, TFS, extra small instances)&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;IE9 &lt;/strong&gt;(HTML5, hardware acceleration, pinned sites)&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;WP7 &lt;/strong&gt;(many demos, developer tools, and a WP7 phone for every PDC 2010 attendee!)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;But besides all the clouds, demos and TLAs (or Four LAs), the main reason I had to watch PDC sessions was the future of C#. And even though the keynote didn’t have any hints on this regard, the sessions with Hejlsberg (FT09) and with Bart De Smet (FT10) were very good.&lt;/p&gt;  &lt;p&gt;So as the theme in C# 4 was Dynamic, the theme in C# &lt;em&gt;Next &lt;/em&gt;will be Asynchronous Programming, keeping with the trend of Declarative and Concurrent. The presentation demoed the async modifier and the await operator, resulting in an easier model of composition of asynchronous methods.&lt;/p&gt;  &lt;p&gt;It was a bit disapointing seeing that “Compiler as a Service”, is in the makes, but apparently only for an even future version. So all the possibilities of architectural refactoring, DSL embeding, and meta-programming won’t be possible in the near future.&lt;/p&gt;  &lt;p&gt;The presentation on Linq to everything (FT10) was very good, focusing on some advanced and possible uses of Linq, Providers, Rx and the dual of IQueryable ~ IQbservable.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The other event (of relevance to me) was the &lt;strong&gt;PASS Summit 2010&lt;/strong&gt;, also available through &lt;a href="http://www.sqlpass.org/summit/na2010/livekeynotes.aspx"&gt;live streaming&lt;/a&gt;. As it occurred during work hours, I had to watch it with interruptions, but from what I saw, the main announcements were:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;SQL Server &lt;/strong&gt;11(?) – &lt;strong&gt;&lt;a href="http://www.microsoft.com/sqlserver/en/us/product-info/future-editions.aspx"&gt;Denali CTP&lt;/a&gt; &lt;/strong&gt;(column based query accelerator, round-trip refactoring, deployment improvements, sequences, paging, FileTable – WinFS back?, Full-Text Search improvements)&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;SQL 2008 R2 Parallel DataWarehouse&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;MS Atlanta &lt;/strong&gt;(cloud service for configuration problems and other issues)&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;MCM for SQL Server changes&lt;/strong&gt; (the program will be avaible worldwide outside Redmond, more affordable, and the training will be available through &lt;a href="http://www.sqlskills.com/BLOGS/PAUL/post/Big-changes-to-the-MCM-program-and-how-SQLskills-can-help-you.aspx"&gt;SQL Skills&lt;/a&gt;, with many training videos available for free)&lt;/p&gt; &lt;/blockquote&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f523d705-ae96-4f0a-b75f-4eec4e05127d" class="wlWriterEditableSmartContent"&gt;Marcas Technorati: &lt;a href="http://technorati.com/tags/SQL" rel="tag"&gt;SQL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Events" rel="tag"&gt;Events&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-2677048728837969193?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/2677048728837969193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=2677048728837969193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/2677048728837969193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/2677048728837969193'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2010/11/online-events.html' title='Online Events'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-6442457943158332739</id><published>2009-11-16T14:10:00.001Z</published><updated>2009-11-16T14:16:52.092Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>TechEd Europe 2009</title><content type='html'>&lt;p&gt;Well TechEd Europe 2009 held in Berlim, finished yesterday. It was another great experience, where I learned some stuff that I was eager to get my hands on (VS 2010 Architecture), contacted some Portuguese fellows and MS gurus, and discovered a little (not much time available, and at 4PM it’s completely dark) of Berlim. Also received a free copy of Win7 and some kits (SQL 2008, Win 2008), which will come handy.&lt;/p&gt;  &lt;p&gt;There were also some missteps:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;On arrival, all of the bags that came from Lisbon didn’t make it to the airplane and were left in Madrid. Not very pleasant, arriving at 22:45 at Berlim and not having any more clothes when the temperature is 2ºC. &lt;/li&gt;    &lt;li&gt;The wireless/Internet on the hotel was not free, and very expensive: 9,95 €/hour, or 19,95 €/day. &lt;/li&gt;    &lt;li&gt;The logistics around the event had some problems, namely with the check-in, and the cloakroom (huge lines). But, for a first event (for Berlim) and with &amp;gt; 7.000 people attending, it sould be expected. According to some powerpoints of the sessions, there will be no DVD with the sessions recordings and powerpoints available for the attendees (but the e-mail with the TechEd offers, mentions the MMS 2009 DVDs Breakout recordings and HOLs, so I don’t know what to make of it). &lt;/li&gt;    &lt;li&gt;Almost nobody speaks English in Berlim, so we were on our own. The younger people speak a little English (but one person from the hotel confused “no problem” with “not possible”, making for a very strange conversation). &lt;/li&gt;    &lt;li&gt;The flight back was at 7:30 AM so waking up and checking-out between 4:30 AM and 5:30 AM was a bit tough. Also some confusions with the credit card payment of the hotel (it was just reserved, apparently), made for a tought day (not over yet). &lt;/li&gt;    &lt;li&gt;The connection flight is only at 15:45, so we have to wait out in the aeroport for more than 4 hours and are already very tired. Also the WI-FI at the airport is not free, so no Internet. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;But back to the event. Microsoft grouped the IT sessions with the Developer sessions, which has its pros and cons. On the upside, I was able to assist some very good and on-time sessions on “Virtualization and Consolidation” (Gopal Ashok), “Upgrading to SQL 2008” (Dandy Wein), and two very good sessions from Russinovich (from SysInternals fame) “Pushing the limits of Windows”, “Windows Troubleshooting”.&lt;/p&gt;  &lt;p&gt;On the downside, the keynote was more IT oriented (Exchange 2010, a new efficiency debate – which was a bit boring, and Windows 2008 R2 and Hyper-V).&lt;/p&gt;  &lt;p&gt;For me, the best sessions on the Architecture Track were David Chappell “IT Innovation”, Rafal Lucawiecki “Predictive Programming”, and Don Smith “Application Architecture Guide”. On the Development Track, I really enjoyed the ones around VS2010 Architecture Tools: Peter Provost “Architecture Discovery and Validation”, and Doug Seven “TFS: Become productive in under 30 minutes”.&lt;/p&gt;  &lt;p&gt;A bit of a let down were the sessions from Tess Fernandez “Debugging ASP.NET” and Brian Keller “SW Testing in VS 2010”. Not that they were bad, on the contrary, but I was expecting more (maybe it was the expectations).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The post was written on Saturday, 14 November on the airport, so the event finished 13 November. The post was done today because there was no free wireless on the airport and the remainder of the weekend was just family time.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ca17b0f8-1d00-4a50-a2c3-47284c135ed5" class="wlWriterEditableSmartContent"&gt;Marcas Technorati: &lt;a href="http://technorati.com/tags/Events" rel="tag"&gt;Events&lt;/a&gt;,&lt;a href="http://technorati.com/tags/TechEd" rel="tag"&gt;TechEd&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Architecture" rel="tag"&gt;Architecture&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SQL" rel="tag"&gt;SQL&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-6442457943158332739?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/6442457943158332739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=6442457943158332739' title='38 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/6442457943158332739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/6442457943158332739'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2009/11/teched-europe-2009.html' title='TechEd Europe 2009'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>38</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-4483607649944145312</id><published>2009-11-16T13:24:00.001Z</published><updated>2009-11-16T13:24:25.856Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>SQL Tips/Tricks 2</title><content type='html'>&lt;p&gt;Excel is an excellent tool for generating sql scripts of reference tables. Besides being easy to generate the scripts, it’s also easy for the client to manipulate and update the reference information (almost always, it’s the format used for database like information for clients).&lt;/p&gt;  &lt;p&gt;So for an excel with the following structure&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td width="64"&gt;TableX&lt;/td&gt;        &lt;td width="64"&gt;&amp;#160;&lt;/td&gt;        &lt;td width="73"&gt;&amp;#160;&lt;/td&gt;        &lt;td width="64"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;ID&lt;/td&gt;        &lt;td&gt;Name&lt;/td&gt;        &lt;td&gt;Date1&lt;/td&gt;        &lt;td&gt;UserId&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;1&lt;/td&gt;        &lt;td&gt;Abc&lt;/td&gt;        &lt;td&gt;10-01-2009&lt;/td&gt;        &lt;td&gt;Alc&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;2&lt;/td&gt;        &lt;td&gt;Def&lt;/td&gt;        &lt;td&gt;10-01-2009&lt;/td&gt;        &lt;td&gt;Xyz&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;where the $A$1 is the table name and the columns name are on row 2 (ID, Name, Date1, UserId), inserting the formula on column 6 (or bigger) without newlines: &lt;/p&gt;  &lt;p&gt;=CONCATENATE(&amp;quot;INSERT INTO &amp;quot;;$A$1;&amp;quot;(&amp;quot;;A$2;&amp;quot;,&amp;quot;;B$2;&amp;quot;,&amp;quot;;C$2;&amp;quot;,&amp;quot;;D$2;&amp;quot;) VALUES(&amp;quot;;A3;&amp;quot;, '&amp;quot;;B3;&amp;quot;', '&amp;quot;;TEXT(C3;&amp;quot;aaaa-mm-dd&amp;quot;);&amp;quot;', '&amp;quot;;D3;&amp;quot;')&amp;quot;)&lt;/p&gt;  &lt;p&gt;yields the following result:&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="0" width="291"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td width="289"&gt;INSERT INTO TableX(ID,Name,Date1,UserId) VALUES(1, 'Abc', '2009-01-10', 'Alc')&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;What the formula&amp;#160; is doing is concatenating “INSERT INTO”, the table name ($A$1), the parentesis, column names (A$2, B$2, …), the string VALUES, and the actual values separated by commas and delimited with ‘ when appropriate (string or date values).&lt;/p&gt;  &lt;p&gt;So to generate the script is just a matter of copying the formula for all the rows with values (double clicking the cross symbol on the right lower corner of the cell, and it repeats itself according to the adjacent cell, or pulling down the intended number of rows):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/__-kebdy0UzY/SwFSAejPTbI/AAAAAAAAAIo/sGELGpeOm4U/s1600-h/image20.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/__-kebdy0UzY/SwFSMMt9X8I/AAAAAAAAAIs/Aa8BSxeQxPU/image_thumb21.png?imgmax=800" width="244" height="111" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;And the end result is this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/__-kebdy0UzY/SwFSOoaougI/AAAAAAAAAIw/7cEWbY8IueM/s1600-h/image37.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/__-kebdy0UzY/SwFShNiUfoI/AAAAAAAAAI0/lPrWhcdmh8s/image_thumb41.png?imgmax=800" width="404" height="149" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And that’s it. A script ready for pasting in a SQL file and applying to a DB.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a4cbd4e3-9c6a-4cb5-96b9-5c213d5a61be" class="wlWriterEditableSmartContent"&gt;Marcas Technorati: &lt;a href="http://technorati.com/tags/SQL" rel="tag"&gt;SQL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Programming" rel="tag"&gt;Programming&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-4483607649944145312?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/4483607649944145312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=4483607649944145312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/4483607649944145312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/4483607649944145312'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2009/11/sql-tipstricks-2.html' title='SQL Tips/Tricks 2'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/__-kebdy0UzY/SwFSMMt9X8I/AAAAAAAAAIs/Aa8BSxeQxPU/s72-c/image_thumb21.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-8496223234241271335</id><published>2009-07-15T00:17:00.001+01:00</published><updated>2009-07-15T00:17:26.792+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Strategy'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Google Chrome OS</title><content type='html'>&lt;p&gt;Google has made the announcement of the Chrome OS and has been riding the wave of free publicity on every blog and tech site. &lt;/p&gt;  &lt;p&gt;So what to make of it? &lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=262565"&gt;Bruce Eckel&lt;/a&gt; (from Thinking in Java fame) thinks it’s another nail in Microsoft’s coffin, the timing is perfect (because of netbooks and Vista failure), and Microsoft is too big to react rapidly. &lt;/p&gt;  &lt;p&gt;But many think that Google has lost it’s mind, operating systems are too complex, it’s Microsoft and Apple territory, and 2H 2010 is too late (Ted Neward’s &lt;a href="http://blogs.tedneward.com/2009/07/11/Thoughts+On+The+Chrome+OS+Announcement.aspx"&gt;Thoughts on the Chrome OS announcement&lt;/a&gt; and Fake Steve’s &lt;a href="http://fakesteve.blogspot.com/2009/07/lets-all-take-deep-breath-and-get-some.html"&gt;Let's all take a deep breath and get some perspective&lt;/a&gt;). &lt;a href="http://minimsft.blogspot.com/2009/07/microsoft-has-turned-corner.html"&gt;Mini Msft&lt;/a&gt; already sees Microsoft turning the corner with Windows 7 and Bing, while Google&amp;#160; is loosing steam and facing some of Miscrosoft problems.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;But to me the most correct analysis is made in &lt;a href="http://mashable.com/2009/07/11/google-equation/"&gt;The Google Revenue Equation, and Why Google’s Building Chrome OS&lt;/a&gt;, that puts the focus on the strategy, that for Google is to center the User Experience on the Web (as it monetizes online ads), while for Microsoft is to center the User Experience on the Desktop (because of Windows and Office). So each player is reaching out to maximize, consolidate and uniformize that experience. For Google it means reaching out to Mobile, Browsers and Operating Systems (that focus on the Web). On the other hand, for Microsoft the center is the Desktop, so RIA and it’s online offers exist primarily to focus and integrate well with Windows and Office Desktop.&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f0afc14f-7e1e-4f95-a7b2-9b6ee840a8bb" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Marcas Technorati: &lt;a href="http://technorati.com/tags/Micorosoft" rel="tag"&gt;Micorosoft&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Google" rel="tag"&gt;Google&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Strategy" rel="tag"&gt;Strategy&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-8496223234241271335?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/8496223234241271335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=8496223234241271335' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/8496223234241271335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/8496223234241271335'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2009/07/google-chrome-os.html' title='Google Chrome OS'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-5346161890412457223</id><published>2009-06-24T17:56:00.001+01:00</published><updated>2009-06-24T17:56:10.590+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>VS 2010</title><content type='html'>&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3a54d64b-b6d9-4c32-aaf1-3c4aa94fdb28" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Marcas Technorati: &lt;a href="http://technorati.com/tags/Programming" rel="tag"&gt;Programming&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Visual+Studio+2010" rel="tag"&gt;Visual Studio 2010&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;There’s some great stuff coming up with VS2010. First, there’s a focus on performance (probably because Rico Mariani is for some time the &lt;a href="http://blogs.msdn.com/ricom/archive/2007/07/12/news-about-me.aspx"&gt;chief&amp;#160; architect of Visual Studio&lt;/a&gt;, so &lt;a href="http://blogs.msdn.com/ricom/archive/2009/05/31/visual-studio-2010-performance-part-1-startup.aspx"&gt;startup should improve&lt;/a&gt; as well as the &lt;a href="http://blogs.msdn.com/ricom/archive/2009/06/05/visual-studio-2010-performance-part-2-text-editor.aspx"&gt;text editor&lt;/a&gt;), but no plans for &lt;a href="http://blogs.msdn.com/ricom/archive/2009/06/10/visual-studio-why-is-there-no-64-bit-version.aspx"&gt;a 64 bit version&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Another area getting a lot of attention (that is deserved) is parallel computing, with some new patterns and librarys (thanks for the &lt;a href="http://managed-world.com/archive/2009/06/09/parallel-computing-with-visual-studio-2010-beta-1.aspx"&gt;post&lt;/a&gt;, &lt;a href="http://devcatharsis.blogspot.com/2009/06/parallel-computing-with-visual-studio.html"&gt;Mário&lt;/a&gt;):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd460693(VS.100).aspx"&gt;Managed - Parallel Programming in the .NET Framework&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/pfxteam/archive/2009/04/29/9576291.aspx"&gt;What’s New in Beta 1 for Parallel LINQ (PLINQ)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/pfxteam/archive/2009/03/27/9514938.aspx"&gt;What’s New in Beta 1 for the Task Parallel Library (part 1/3)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/pfxteam/archive/2009/04/06/9534426.aspx"&gt;What’s New in Beta 1 for the Task Parallel Library (part 2/3)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/pfxteam/archive/2009/04/14/9549246.aspx"&gt;What’s New in Beta 1 for the Task Parallel Library (part 3/3)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/pfxteam/archive/2009/05/22/9635790.aspx"&gt;.NET Framework 4 Cancellation Framework&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://code.msdn.microsoft.com/ParExtSamples"&gt;Samples for Parallel Programming with the .NET Framework 4&lt;/a&gt;       &lt;ul&gt;&lt;/ul&gt;      &lt;ul&gt;&lt;/ul&gt;      &lt;ul&gt;&lt;/ul&gt;      &lt;ul&gt;&lt;/ul&gt;      &lt;ul&gt;&lt;/ul&gt;      &lt;ul&gt;&lt;/ul&gt;      &lt;ul&gt;&lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;An area that I’m especially eager to really discover is debugging/profiling with VS2010. According to one &lt;a href="http://blogs.msdn.com/ms_joc/archive/2009/05/27/dev10-beta1-free-at-last.aspx"&gt;Dev Manager&lt;/a&gt;, the Beta 1 already has: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Historical Debugging (collecting events, parameters, performance monitor) &lt;/li&gt;    &lt;li&gt;Test impact Analysis &lt;/li&gt;    &lt;li&gt;Tier profiling (DB calls) &lt;/li&gt;    &lt;li&gt;Parallel performance analyzer &lt;/li&gt;    &lt;li&gt;Performance rules&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Which is very good, and John Robbin already &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/06/16/how-does-vs2010-historical-debugging-work.aspx"&gt;dived deep&lt;/a&gt; and poked with the feature.&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:54fc0558-4420-4f4f-aca1-f7d374792fa0" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Marcas Technorati: &lt;a href="http://technorati.com/tags/Programming" rel="tag"&gt;Programming&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Visual+Studio+2010" rel="tag"&gt;Visual Studio 2010&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-5346161890412457223?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/5346161890412457223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=5346161890412457223' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/5346161890412457223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/5346161890412457223'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2009/06/vs-2010.html' title='VS 2010'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-114864402032609093</id><published>2009-01-27T16:25:00.001Z</published><updated>2009-01-27T16:25:18.474Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Career'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Management'/><title type='text'>Top 100 Books of SW Engineering</title><content type='html'>&lt;p&gt;I just found out a great compilation of the top 100 books of Software Engineering. The method for computing the list involves Amazon ratings, Jolt Awards and Google hits, so it's as scientific as it can get...&lt;/p&gt; &lt;p&gt;Looking at the list makes for a tremendous wish-list/bookshelf:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;#&lt;br&gt;Author(s) / Title&lt;/p&gt; &lt;p&gt;1&lt;br&gt;Steve McConnell &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0735619670?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0735619670"&gt;Code Complete: A Practical Handbook of Software Construction (2nd Edition)&lt;/a&gt; &lt;p&gt;2&lt;br&gt;Elisabeth Freeman, etc. &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0596007124?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596007124"&gt;Head First Design Patterns&lt;/a&gt; &lt;p&gt;3&lt;br&gt;Steve McConnell &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0072850604?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0072850604"&gt;Rapid Development&lt;/a&gt; &lt;p&gt;4&lt;br&gt;Erich Gamma &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0201633612?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201633612"&gt;Design Patterns: Elements of Reusable Object-Oriented Software&lt;/a&gt; &lt;p&gt;5&lt;br&gt;Bruce Schneier &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0471128457?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0471128457"&gt;Applied Cryptography: Protocols, Algorithms, and Source Code (2nd Edition)&lt;/a&gt; &lt;p&gt;6&lt;br&gt;Robert C. Martin &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0135974445?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0135974445"&gt;Agile Software Development: Principles, Patterns and Practices&lt;/a&gt; &lt;p&gt;7&lt;br&gt;Joel Spolsky &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/1590593898?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1590593898"&gt;Joel on Software&lt;/a&gt; &lt;p&gt;8&lt;br&gt;Tom DeMarco, Timothy Lister &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0932633439?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0932633439"&gt;Peopleware: Productive Projects and Teams (2nd Edition)&lt;/a&gt; &lt;p&gt;9&lt;br&gt;Frederick P. Brooks &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0201835959?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201835959"&gt;The Mythical Man-Month, Anniversary Edition (2nd Edition)&lt;/a&gt; &lt;p&gt;10&lt;br&gt;Martin Fowler &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0201485672?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201485672"&gt;Refactoring: Improving the Design of Existing Code&lt;/a&gt; &lt;p&gt;11&lt;br&gt;Mike Cohn &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0131479415?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0131479415"&gt;Agile Estimating and Planning&lt;/a&gt; &lt;p&gt;12&lt;br&gt;Alistair Cockburn &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0201702258?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201702258"&gt;Writing Effective Use Cases&lt;/a&gt; &lt;p&gt;13&lt;br&gt;Bertrand Meyer &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0136291554?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0136291554"&gt;Object-Oriented Software Construction (2nd Edition)&lt;/a&gt; &lt;p&gt;14&lt;br&gt;Steve McConnell &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/B0019ORAR2?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B0019ORAR2"&gt;Software Estimation: Demystifying the Black Art&lt;/a&gt; &lt;p&gt;15&lt;br&gt;Mike Cohn &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0321205685?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321205685"&gt;User Stories Applied: For Agile Software Development&lt;/a&gt; &lt;p&gt;16&lt;br&gt;Donald E. Knuth &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0201485419?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201485419"&gt;The Art of Computer Programming, Volumes 1-3 Boxed Set (2nd Edition)&lt;/a&gt; &lt;p&gt;17&lt;br&gt;Martin Fowler &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0321127420?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321127420"&gt;Patterns of Enterprise Application Architecture&lt;/a&gt; &lt;p&gt;18&lt;br&gt;Jeffrey Friedl &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0596528124?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596528124"&gt;Mastering Regular Expressions&lt;/a&gt; &lt;p&gt;19&lt;br&gt;Andrew Hunt, David Thomas &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/020161622X?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=020161622X"&gt;The Pragmatic Programmer: From Journeyman to Master&lt;/a&gt; &lt;p&gt;20&lt;br&gt;Karl E. Wiegers &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0735618798?ie=UTF8&amp;amp;tag=noopnl-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0735618798"&gt;Software Requirements (2nd Edition)&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The full article is at &lt;a title="Compartilhar" href="http://knol.google.com/k/jurgen-appelo/top-100-best-software-engineering-books/z7e4mx2g6lir/3#"&gt;Top 100 Best Software Engineering Books, Ever&lt;/a&gt;.&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:424e84ce-b53f-4cdc-a8fd-101048f2b328" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Marcas Technorati: &lt;a href="http://technorati.com/tags/Architecture" rel="tag"&gt;Architecture&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Programming" rel="tag"&gt;Programming&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Project%20Management" rel="tag"&gt;Project Management&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Books" rel="tag"&gt;Books&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-114864402032609093?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/114864402032609093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=114864402032609093' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/114864402032609093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/114864402032609093'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2009/01/top-100-books-of-sw-engineering.html' title='Top 100 Books of SW Engineering'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-2992412095284344433</id><published>2008-12-12T14:55:00.001Z</published><updated>2008-12-12T14:58:02.109Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><title type='text'>Architecture again</title><content type='html'>&lt;p&gt;Right after my last post (which I was on my mind because it happened to me a couple of times this year and the last year), I discovered (thanks to a post from a friend &lt;a title="patterns &amp;amp; practices- App Arch Guide Pocket Guides" href="http://devcatharsis.blogspot.com/2008/12/patterns-practices-app-arch-guide.html"&gt;patterns &amp;amp; practices- App Arch Guide Pocket Guides&lt;/a&gt;) that MS PnP has some interesting stuff on this topic (shame for not looking recently on PnP).&lt;/p&gt; &lt;p&gt;Apart from the pocket guides, that I haven't looked into, what I found were some cheat sheets and diagrams.&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.codeplex.com/AppArch/Wiki/View.aspx?title=Cheat%20Sheet%20-%20Application%20Architecture%20Frames&amp;amp;referringTitle=Home" href="http://www.codeplex.com/AppArch/Wiki/View.aspx?title=Cheat%20Sheet%20-%20Application%20Architecture%20Frames&amp;amp;referringTitle=Home"&gt;PnP Application Architecture Frame Cheat Sheet&lt;/a&gt; describes architecture frames (authentication, caching, ... and 14 others), quality attributes (14) and the mapping between application types, architecture styles and the architecture frames (and the common issues). It's great stuff, and should be mandatory read for every developper. Shame that Microsoft only has teaching offerings around products (maybe that's what the industry cares about).&lt;/p&gt; &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="150" alt="ArchMetaFrame" src="http://lh5.ggpht.com/__-kebdy0UzY/SUJ7eVt1ZWI/AAAAAAAAAFM/TkQs-gzrggw/ArchMetaFrame%5B6%5D.png?imgmax=800" width="256" border="0"&gt; &lt;/p&gt; &lt;p&gt;Another one is &lt;a href="http://www.codeplex.com/AppArch/Wiki/View.aspx?title=Cheat%20Sheet%20-%20Application%20Types%20Matrix&amp;amp;referringTitle=Home"&gt;PnP Application Type Matrix Cheat Sheet&lt;/a&gt; that summarizes the main application types, their benefits, considerations, scenarios and solutions.&lt;/p&gt; &lt;p&gt;The last one is &lt;a href="http://www.codeplex.com/AppArch/Wiki/View.aspx?title=Visio%20Index&amp;amp;referringTitle=Home"&gt;PnP Visio index Diagrams&lt;/a&gt; that MS makes available for modification and use to document our architectures. Even if only used for proposals, it's very good and allows reuse.&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:97abc056-812c-4c1e-aa09-1e400dda7241" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Marcas Technorati: &lt;a href="http://technorati.com/tags/Architecture" rel="tag"&gt;Architecture&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Programming" rel="tag"&gt;Programming&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-2992412095284344433?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/2992412095284344433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=2992412095284344433' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/2992412095284344433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/2992412095284344433'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2008/12/architecture-again.html' title='Architecture again'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/__-kebdy0UzY/SUJ7eVt1ZWI/AAAAAAAAAFM/TkQs-gzrggw/s72-c/ArchMetaFrame%5B6%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-3296971685807635220</id><published>2008-12-05T18:43:00.001Z</published><updated>2008-12-05T18:57:39.132Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><title type='text'>Architecture &amp; Process</title><content type='html'>&lt;p&gt;Lately, I've been surprised by how little attention some developers pay to application architecture. By architecture here, I mean to say the high level decisions that crosscut all the application code.&lt;/p&gt; &lt;p&gt;Recently, during the transfer of an application from another team, I was shocked that there was no clear vision of the main decisions regarding some fundamental aspects of a web application (I don't mean documented, just a clear definition of the decision or the approaches taken in the implementation). Every web application should make explicit the major decisions (and the reasioning behind them) regarding:&lt;/p&gt; &lt;ul&gt; &lt;ul&gt; &lt;li&gt;Logging (policy - how, when; and tools/code)  &lt;li&gt;Exception Handling  &lt;li&gt;Data Acess (ADO.NET, ORM, Linq)  &lt;ul&gt; &lt;ul&gt; &lt;li&gt;Transaction Management (sharing the same transaction, creating and commiting transactions)&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt; &lt;li&gt;Session Management (asp.net memory, DB, custom)  &lt;li&gt;Security (low-level - sql injection, cross scripting; high-level - isolate data between different users/entitys/geographically)  &lt;li&gt;Profiles and Permissions (management of users/groups and the corresponding permissions on application functionalities)  &lt;li&gt;Operation Auditing (especially in financial systems) &lt;li&gt;Composition (tiers, layers, service oriented)  &lt;li&gt;Dependencies (3rd party tools, components, services)  &lt;li&gt;Patterns used (MVC, Singleton, Composite)  &lt;li&gt;Naming conventions  &lt;li&gt;Configuration management (reference tables, configuration values, connection strings, etc)  &lt;li&gt;Concurrency (synchronizatios, async callbacks, threading)  &lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;There's also other important stuff, more on the process/principles side, that gain by being defined:&lt;/p&gt; &lt;ul&gt; &lt;ul&gt; &lt;li&gt;Planning, prioritization &amp;amp; risk management  &lt;li&gt;Organization (teams, projects)  &lt;li&gt;Tools  &lt;li&gt;Automation of tasks (building, testing, importing reference data)  &lt;li&gt;Testing and Coverage (unit testing, integration testing, coverage of significant program states)  &lt;li&gt;Refactoring  &lt;li&gt;Documentation (design, architecture, glossary, major entities, workarounds to problems)  &lt;li&gt;Bug/Incident tracking  &lt;li&gt;Version Control (tool, policy)  &lt;li&gt;Communication  &lt;li&gt;DRY  &lt;li&gt;Responsabilities (code &amp;amp; people) and Separation of concerns  &lt;li&gt;Coupling &amp;amp; Cohesion  &lt;li&gt;Done?&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;As with everything, there's also the risk of overdoing stuff, or doing it as an end (and not as mean to an end).&lt;/p&gt; &lt;p&gt;If just 1/3 of the list were implemented, maintenance would be such an easier job...&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:44e1aa4f-39d5-4be5-8cda-d9cc8a99718a" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Marcas Technorati: &lt;a href="http://technorati.com/tags/Architecture" rel="tag"&gt;Architecture&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Programming" rel="tag"&gt;Programming&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-3296971685807635220?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/3296971685807635220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=3296971685807635220' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/3296971685807635220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/3296971685807635220'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2008/12/architecture-process.html' title='Architecture &amp;amp; Process'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-1499873491295327540</id><published>2008-08-01T00:01:00.001+01:00</published><updated>2008-08-01T00:01:16.966+01:00</updated><title type='text'>SQL set approach</title><content type='html'>&lt;p&gt;SQL is a powerful tool that can be a great help for solving some problems. You just have to think in a set oriented approach (Thinking in Sets by Joe Celko comes to mind). I just hope thinking this way doesn't transform me into some uptight person that thinks less of everyone else, just because they don't understand it initially. And this approach must not be taken as a dogma, or an end in itself. If a solution doesn't appear in some reasonable time, I resort to iterative approaches. Better not even get into primary keys discussion and business identifiers... (end of rant)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Today, during the implementation of an algorithm for shift atribution, the client asked for the implementation of some exceptions when there wasn't anyone available in the specified region. After some discussion, the algorithm should cope with this situation by looking up in the neighbour regions, then in a larger area, and finally the whole country. As the algorithm isn't just a select (it has more rules), I didn't want to replicate the whole algorithm for each universe or apply the algorithm iteratively for each region (that would also distort the ordering and equity of the algorithm).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;After some brainstorming, the problem was how to change the universe in which to look by joining to the region table. And as I was to give up, the solution became evident: what was needed was filtering the universe. But how if the table doesn't have in itself all the attributes to determine the regions? &lt;/p&gt;  &lt;p&gt;One way would be to compute the regions with a function and using a dynamic query with an in filter. Something like:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;regionId&amp;#160;&amp;#160; IN&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; dbo.fnComputeRegions(regionId, coverage)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;But that forced us to use dynamic querys and the in could become quite big (there are a couple hundred regions).&lt;/p&gt;  &lt;p&gt;Then, a better solution came to my mind: the problem was in the join, so the query should join with a table valued function that returns a table with the regions to lookup. This solution didn't force the use of dynamic queries and allowed us to reuse the whole algorithm just changing the join, surrounding the algorithm with a while that changes the coverage:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;while (coverageId &amp;lt; numberOf Coverages)&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (algorithm)&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; select ...&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; from &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Region R&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; inner join dbo.fnComputeRegions(regionId,      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; coverageId) CR on R.regionId = CR.regionId&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;With this approach we gain abstraction and independence of the computation of regions (it can return a table with one record, the neighbour regions, the neighbour neighbour regions, all the regions within an hierarchy, or all the regions), without changing the algorithm. And what's best is that these computation of regions is reusable in other areas and algorithms.&lt;/p&gt;  &lt;p&gt;Now the toughest part is convince the client that this is the best solution and that to these rules there must be no exception :)&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:496d0d51-17ac-443e-a30c-3d7a7ef6d052" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Marcas Technorati: &lt;a href="http://technorati.com/tags/Programming" rel="tag"&gt;Programming&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SQL" rel="tag"&gt;SQL&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-1499873491295327540?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/1499873491295327540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=1499873491295327540' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/1499873491295327540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/1499873491295327540'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2008/08/sql-set-approach.html' title='SQL set approach'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-6235196805281637414</id><published>2008-02-27T14:26:00.001Z</published><updated>2008-02-27T15:02:37.018Z</updated><title type='text'>Lang.NET Videos</title><content type='html'>&lt;p&gt;The videos (require SilverLight 1.0) from the Lang.NET conference are available at: &lt;a title="http://langnetsymposium.com/talks.asp" href="http://langnetsymposium.com/talks.asp"&gt;http://langnetsymposium.com/talks.asp&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[Update]&lt;/strong&gt; The one that I was most eager to see &lt;a title="3-09 - Intentional - Magnus Christerson" href="http://langnetsymposium.com/talks/3-09%20-%20Intentional%20-%20Magnus%20Christerson.html"&gt;3-09 - Intentional - Magnus Christerson&lt;/a&gt; is great, and represents what future IDEs could be in some time.&lt;/p&gt;  &lt;p&gt;Can't also wait to watch:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Static Analysis&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://langnetsymposium.com/talks/3-04 - NStatic - Wesner Moise - SoftPerson.html"&gt;3-04 - NStatic - Wesner Moise - SoftPerson&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://langnetsymposium.com/talks/2-11 - CodeIt - Serge Baranovsky - submain.html"&gt;2-11 - CodeIt - Serge Baranovsky - submain&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://langnetsymposium.com/talks/2-08 - Pex - Peli de Halleux.html"&gt;2-08 - Pex - Peli de Halleux&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Languages and Features&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://langnetsymposium.com/talks/2-10 - remotion Mixins - Stefan Wenig and Fabian Schmied - rubicon.html"&gt;2-10 - remotion Mixins - Stefan Wenig and Fabian Schmied - rubicon&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://langnetsymposium.com/talks/2-01 - Newspeak - Gilad Braha - Cadence.html"&gt;2-01 - Newspeak - Gilad Braha - Cadence&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://langnetsymposium.com/talks/3-02 - FSharp - Luke Hoban.html"&gt;3-02 - FSharp - Luke Hoban&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://langnetsymposium.com/talks/3-07 - Modeling and Languages - Don Box.html"&gt;3-07 - Modeling and Languages - Don Box&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://langnetsymposium.com/talks/3-07 - Modeling and Languages - Don Box_1.html"&gt;3-07 - Modeling and Languages - Don Box_1&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://langnetsymposium.com/talks/3-08 - Cobra - Chuck Esterbrook.html"&gt;3-08 - Cobra - Chuck Esterbrook&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;(read it on &lt;a href="http://blogs.tedneward.com/2008/02/27/LangNET+Videos+Are+Now+Online.aspx"&gt;Lang.NET videos are now online&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;   &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7b751033-9dd5-423c-8699-bc29aa98ae7b" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Marcas Technorati: &lt;a href="http://technorati.com/tags/Languages" rel="tag"&gt;Languages&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-6235196805281637414?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/6235196805281637414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=6235196805281637414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/6235196805281637414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/6235196805281637414'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2008/02/langnet-videos.html' title='Lang.NET Videos'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-7866045408204955087</id><published>2008-02-14T19:13:00.001Z</published><updated>2008-02-14T19:13:25.418Z</updated><title type='text'>Classic Books</title><content type='html'>&lt;p&gt;I really like reading, specially blogs, because of their small format (one can read a couple of entries in a couple of minutes). Nowadays, I don't really buy that many books as much of the information is available on the web. The exception to this is some classic books or intemporal books (Patterns, Methodology, Usability, ...) that I buy and try to read (usually takes me a long time because of interruptions, priorities, certifications, ...).&lt;/p&gt;  &lt;p&gt;But recently there's been a trend on releasing classic books and articles free on the web:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.mcjones.org/dustydecks/archives/2008/01/15/66/"&gt;ACM Classic Books Series&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.mcjones.org/dustydecks/archives/2005/07/10/44/"&gt;Classic LISP books online&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;b&gt;&lt;a href="http://www.paulgraham.com/onlisp.html"&gt;On Lisp&lt;/a&gt;&lt;/b&gt; (Paul Graham)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.iam.unibe.ch/~ducasse/FreeBooks.html"&gt;Stef's Free Online Smalltalk Books&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.onlinecomputerbooks.com/"&gt;Online Computer Books&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/ricom/archive/2008/02/12/computer-measurement-group-offers-past-papers-to-the-public.aspx"&gt;Computer Measurement Group offers past papers to the public!&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;There are some great gems (Macintosh Human Interface Guidelines, Structured Programming) available, some books related to Lisp, Smalltalk, and other esoteric languages, and CMG papers (mostly performance and ITIL).&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f0e8f0de-4abe-4aeb-8090-0765e2a65296" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Marcas Technorati: &lt;a href="http://technorati.com/tags/Books" rel="tag"&gt;Books&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Programming" rel="tag"&gt;Programming&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-7866045408204955087?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/7866045408204955087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=7866045408204955087' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/7866045408204955087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/7866045408204955087'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2008/02/classic-books.html' title='Classic Books'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-6100580376250459282</id><published>2008-02-06T18:40:00.001Z</published><updated>2008-02-06T18:40:06.126Z</updated><title type='text'>Microsoft and Yahoo</title><content type='html'>&lt;p&gt;It's not the most recent news, as it's been dissected and commented by everyone else, but nonetheless an interesting topic.&lt;/p&gt;  &lt;p&gt;From the MS fan base &lt;a href="http://blogs.guardian.co.uk/technology/2008/02/04/hello_google_can_you_spell_hypocrisy.html"&gt;Hello, Google, can you spell hypocrisy?&lt;/a&gt; to the MS (particulary Ballmer) bashing &lt;a href="http://online.wsj.com/article/SB120192421439737669.html"&gt;A Defining Test for Ballmer&lt;/a&gt;, the most interesting ones were the internal ones &lt;a href="http://minimsft.blogspot.com/2008/02/microsoft-yahoo-microsoft-44600000000.html"&gt;Microsoft + Yahoo! = Microsoft - $44,600,000,000 ?&lt;/a&gt; and &lt;a href="http://minimsft.blogspot.com/2008/02/microsoft-and-yahoo-stay-on-target.html"&gt;Microsoft and Yahoo! -- Stay on Target?&lt;/a&gt;, and Bruce Eckel's &lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=224113"&gt;Should Microsoft Buy Yahoo?&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The internal perspective focus more on the restructuring, layoffs, overlapping of products and foresee the potential problems (culture, technological - spreading MS technology within Yahoo), and possible sinergies, defining the dominant reaction as: &amp;quot;talk to me in a year&amp;quot;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Bruce Eckel focus is on the acquisitions, and the merge failings when two big software/hardware companies try it. I can't really assess if it is truly that bad, but MS and Yahoo should really be on their toes to avoid the problems. Those that don't learn from history are condemned to repeat it (or something similar).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I really think it's impossible to predict the outcome of this. MS and Yahoo should take close attention to the details of the merge (cultural, tecnological, user base), and avoid imploding themselves. &lt;/p&gt;  &lt;p&gt;Google should take attention as MS showed in the past, they can/will use any tactic they can to get back into the game. If MS can leverage their dominant position to spread Silverlight and get control over Web 2.0 content, Google will be in deep trouble. It's not like Google's monopoly generates user lock-in (as MS Windows and Office, and other MS tactics - IE), so they better watch it carefully as changing my search engine is just some clicks away...&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So, in conclusion, I guess only time will tell what the outcome will be. Whoever does the fewest mistakes in this game, will take leadership. Although, for the stake of evolution, I hope that no true winner comes out of it, and competition becomes fiercer...&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a30a0fb8-a058-47b6-9572-692ac86ac5bd" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Marcas Technorati: &lt;a href="http://technorati.com/tags/Microsoft" rel="tag"&gt;Microsoft&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Yahoo" rel="tag"&gt;Yahoo&lt;/a&gt;,&lt;a href="http://technorati.com/tags/merge" rel="tag"&gt;merge&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-6100580376250459282?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/6100580376250459282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=6100580376250459282' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/6100580376250459282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/6100580376250459282'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2008/02/microsoft-and-yahoo.html' title='Microsoft and Yahoo'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-6255810367604130305</id><published>2008-02-01T11:31:00.001Z</published><updated>2008-02-01T11:33:15.512Z</updated><title type='text'>SQL 2008 is late^H^H^H^H on schedule for Q3</title><content type='html'>&lt;p&gt;As Joel Spolsky puts it, &lt;a title="http://www.joelonsoftware.com/items/2008/01/29b.html" href="http://www.joelonsoftware.com/items/2008/01/29b.html"&gt;Microsoft can't speak straight any more&lt;/a&gt;. Instead of coming forward and saying SQL 2008 is late, marketing added it's twist to the message (I don't think an engineer can talk this way), transforming a simple message in a convoluted, positive tone marketing speak.&lt;/p&gt;  &lt;p&gt;It's on par with Dilbert material:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.google.com/andre.silva.cardoso/R6MDKvtkVZI/AAAAAAAAAEE/eHwY4p8ZNp4/dilbert2%5B9%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="149" alt="dilbert2" src="http://lh5.google.com/andre.silva.cardoso/R6MDLftkVaI/AAAAAAAAAEI/D1Wk3nfAMuk/dilbert2_thumb%5B7%5D" width="414" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I think it just transformed an inocuous message of schedule slipage (pretty common in software development) into a comic situation (or patronising, depending on how you take it).&lt;/p&gt;  &lt;p&gt;Phil Factor digged deeper and tried to explain it: &lt;a title="http://www.simple-talk.com/community/blogs/philfactor/archive/2008/01/27/43174.aspx" href="http://www.simple-talk.com/community/blogs/philfactor/archive/2008/01/27/43174.aspx"&gt;Microsoft Boy announces his School Homework&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Oh, here's the &lt;a href="http://blogs.technet.com/dataplatforminsider/archive/2008/01/25/microsoft-sql-server-2008-roadmap-clarification.aspx"&gt;original message&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The past few months have been an amazing time for the SQL Server team as we gear up for the start of the &lt;strong&gt;global launch wave on February 27&lt;/strong&gt;.&lt;/p&gt;    &lt;p&gt;...&lt;/p&gt;    &lt;p&gt;Simply put, SQL Server 2008 is a s&lt;strong&gt;ignificant release for us&lt;/strong&gt; &amp;#8211; one that builds on all of the great things that we were able to deliver in SQL Server 2005. We see it as a critical step forward for our data platform...&lt;/p&gt;    &lt;p&gt;Not surprisingly, one of the top areas of focus for us is always to deliver a &lt;strong&gt;high quality product&lt;/strong&gt;, and in a very predictable manner.&lt;/p&gt;    &lt;p&gt;...&lt;/p&gt;    &lt;p&gt;To continue in this &lt;strong&gt;spirit of open communication&lt;/strong&gt;, we want to provide clarification on the roadmap for SQL Server 2008. Over the coming months, customers and partners can look forward to significant product milestones for SQL Server.&amp;#160; Microsoft is excited to deliver a &lt;strong&gt;feature complete CTP&lt;/strong&gt; during the Heroes Happen Here &lt;strong&gt;launch wave&lt;/strong&gt; and a release candidate (RC) in Q2 calendar year 2008, with final Release to manufacturing (&lt;strong&gt;RTM)&lt;/strong&gt; of &lt;strong&gt;SQL Server 2008&lt;/strong&gt; expected in &lt;strong&gt;Q3&lt;/strong&gt;.&lt;/p&gt;    &lt;p&gt;...&lt;/p&gt;    &lt;p&gt;This &lt;strong&gt;does not in any way change our plans&lt;/strong&gt; for the &lt;strong&gt;February 27 launch&lt;/strong&gt;...&lt;/p&gt; &lt;/blockquote&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:415f5012-abe8-47c5-bfd1-cf6ca6b7afd7" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Marcas Technorati: &lt;a href="http://technorati.com/tags/SQL%202008" rel="tag"&gt;SQL 2008&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Roadmap" rel="tag"&gt;Roadmap&lt;/a&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-6255810367604130305?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/6255810367604130305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=6255810367604130305' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/6255810367604130305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/6255810367604130305'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2008/02/sql-2008-is-latehhhh-on-schedule-for-q3.html' title='SQL 2008 is late^H^H^H^H on schedule for Q3'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-2705536131900475616</id><published>2008-01-24T14:38:00.001Z</published><updated>2008-01-24T14:44:47.980Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Languages'/><title type='text'>Dynamic and Static Languages</title><content type='html'>&lt;p&gt;Ted Neward blogged about the &lt;a href="http://blogs.tedneward.com/2008/01/24/Can+Dynamic+Languages+Scale.aspx"&gt;"Can Dynamic Languages scale"&lt;/a&gt; debate going on &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=48180"&gt;ServerSide&lt;/a&gt;. He discusses the two dimensions of scale that are being debated, namely Size (LOC) and capacity (reqs/sec).&lt;/p&gt;&lt;p&gt;Aside the flamefest that the thread became, I always get the feeling that most arguments are somewhat technically based, but very biased.&lt;/p&gt;&lt;p&gt;I'm not a Dynamic Language Programmer. But as I try to stay current on the evolution of Software Development and Languages, I try to read as much as I can about technology that is being touted as the future, or very promising. Not that I immediatly try to use it in production, as I admit that some corner cases could be tricky (or badly done) because of lack of knowledge or technology imaturity. Beyond that, many hot technologies, while having their merits, are pushed way too much because of the hype (CORBA, XML, EJB, SOAP, anyone?) generated by the BIG (MS, IBM, Sun) companies.&lt;/p&gt;&lt;h2&gt;&lt;/h2&gt;&lt;h3&gt;Refactoring&lt;/h3&gt;&lt;p&gt;Anyway, one of the arguments countering dynamic languages is the ability to refactor it. Namely that the refactoring isn't fullproof and that there can be mistakes. But guess what, Java/.NET because of Reflection, Dependency Injection can also have these mistakes. I agree that tool support is better in Java/.NET, but that's it.&lt;/p&gt;&lt;h3&gt;Conciseness&lt;/h3&gt;&lt;p&gt;Another argument, these time by the other camp (dynamic languages) is that dynamic languages are more concise. And comparing the best known instances (Java, C#) to Ruby or Python, one would have to agree. And no, even if the compiler could generate it, it's still code left to maintain and read, that distracts from the code intent.&lt;/p&gt;&lt;p&gt;But even that is changing, as C# 3.0, with type inference, lambdas, automatic properties, extension methods and Linq, removes or simplifies much of this verbosity. So the conciseness argument doesn't depend on being dynamic or static.&lt;/p&gt;&lt;h3&gt;Speed&lt;/h3&gt;&lt;p&gt;The argument of speed has two meanings: which language/platform executes faster and which language allows the programmer to develop/test faster. The Java/"static" side sits with the faster execution (even though, I still remember when the comparisons to C++ were very bad, this argument was dismissed by the faster programming argument), while the "dynamic" couples to the faster development side.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Even stranger is the bitterness or stuborness of each camp. It's not like the languages/platforms are stagnant. As features are added, and the platforms mature, static languages will get some of the features from the other side (conciseness, interactivity) and dynamic languages will get better tool support and faster platforms. Only by it's evolution will languages stay relevant/dominant. If they don't evolve, they'll lose dominance for the next Big Language (Cobol, C, C++?). &lt;/p&gt;&lt;p&gt;All of this makes sense to me, because as someone said: those that don't learn from history are condmened to repeat it...&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c9fb1605-bd36-40be-9a5e-d321620bb198" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;Marcas Technorati: &lt;a href="http://technorati.com/tags/Languages" rel="tag"&gt;Languages&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Programming" rel="tag"&gt;Programming&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-2705536131900475616?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/2705536131900475616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=2705536131900475616' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/2705536131900475616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/2705536131900475616'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2008/01/dynamic-languages.html' title='Dynamic and Static Languages'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-1350995267266848095</id><published>2008-01-23T00:19:00.001Z</published><updated>2008-01-24T14:40:33.661Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>SQL Tricks/Patterns 0</title><content type='html'>&lt;p&gt;It's been a while since my last post... These last couple of months were full of events for me. The biggest one was the birth of my second child. It changed our routines quite a lot... Right now managing to sleep more than a couple of hours with a baby and a small child is our biggest achievement. But it's full of rewards :)&lt;/p&gt;&lt;p&gt;Getting back to technology, and looking at my last post and some functional programming posts around C#, I came to realize the similarities between SQL and FP. They're both strongly mathematically based, declarative... And both require a change of mindset (I'm still on a very rudimentary level on FP), from what we're used to in imperative programming.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;So the first and most important pattern in SQL, and that is the base for many other patterns and the correct usage, is that &lt;strong&gt;SQL is set based&lt;/strong&gt;, and all&lt;strong&gt; row by row &lt;/strong&gt;processing should be &lt;strong&gt;avoided&lt;/strong&gt; (by principle). Let's be a little more pragmatic, and if it's a quick and dirty solution, for a small problem set, a one shot solution never to be used again, it's ok. But if it's a migration, an operation script, a script for the client, then be very careful... It will be used on increasing larger sets, multiple times and with a diminishing time window.&lt;/p&gt;&lt;p&gt;Only being through a data migration in which a test takes a couple of days, that must be executed multiple times (because of bad data, or bad mappings, or bugs), or having to put up with a client because some job is increasingly taking longer and risking it's time window, or even witnessing data intensive operations being done (excruciatingly slow) on the application client, one understands the problem.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Ok. But to a freshmen/rookie/intern, and unless told otherwise, the imperative solution would be the &lt;strong&gt;only &lt;/strong&gt;solution. And imperative has conditionals, and many other goodies...&lt;/p&gt;&lt;ul&gt;&lt;li&gt;In SQL, we can &lt;strong&gt;simulate conditionals with CASE&lt;/strong&gt;, for example, updating the salary by 1.1 or 1.2 based on the category of the employee:&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p&gt;UPDATE Employees&lt;br /&gt;SET salary = salary *&lt;br /&gt;    CASE categoryId&lt;br /&gt;        WHEN 1 THEN 1.1&lt;br /&gt;        WHEN 2 THEN 1.2&lt;br /&gt;    END&lt;/p&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;But what if it's impossible to do in one query, or better yet to avoid turning the query overly complex?&lt;br /&gt;Then we &lt;strong&gt;use temporary tables &lt;/strong&gt;to hold the &lt;strong&gt;intermediate results&lt;/strong&gt;. But each step of the processing is done on the set and not on a row by row basis. If some step is impossible, or too hard to implement using set operations, then only that step is done row by row, but the remaining steps are set based.&lt;br /&gt;If some task is complex (reading, parsing, validating and loading a file to the DB) or the business allows for it, it can even be done on table using some sort of state identifier (step 1 is reading, or aproving...).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;But what if I have to insert into other tables? Well, insert is also set based so instead of &lt;strong&gt;INSERT (...) VALUES (...)&lt;/strong&gt;, use &lt;strong&gt;INSERT (...) SELECT ...&lt;br /&gt;&lt;/strong&gt;There's another problem, to which I don't have a satisfactory answer. That's when you have a master/detail relationship and the master uses Identity values. In that case, apart from switching the identity property on and off, and defining the max value, it's difficult to insert a batch of these relations (using set based processing). Other possibilities are using triggers or in SQL 2005, the output clause, but they all seem awkward and fragile.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Another problem is &lt;strong&gt;generating a number &lt;/strong&gt;or some kind of &lt;strong&gt;order in the set&lt;/strong&gt;. To that, the &lt;strong&gt;numbers table&lt;/strong&gt; from my &lt;a href="http://andre-silva-cardoso.blogspot.com/2007/11/sql-trickspatterns-1-numbers-table.html"&gt;last post&lt;/a&gt; is the answer. There are some variations and simplifications. If all you need is a sequential number for the data (to order it, or to differentiate it - very good to remove complete duplicates), a &lt;strong&gt;temporary table&lt;/strong&gt; with an &lt;strong&gt;identity column&lt;/strong&gt; might suffice.This is also the principle used in most solutions that paginate result sets (joining the table with itself using some computed number and filtering it).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Well, I must be forgetting a lot more, but as it's already too long, I'll end it here.&lt;/p&gt;&lt;p&gt;Until next time...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-1350995267266848095?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/1350995267266848095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=1350995267266848095' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/1350995267266848095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/1350995267266848095'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2008/01/sql-trickspatterns-0.html' title='SQL Tricks/Patterns 0'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-7783170741073072175</id><published>2007-11-09T15:26:00.001Z</published><updated>2007-11-09T15:26:20.783Z</updated><title type='text'>SQL Tricks/Patterns 1 - Numbers Table</title><content type='html'>&lt;p&gt;One pattern that I found very useful (I think the first time I saw it was on SQL Server Central), is a Numbers Table.&lt;/p&gt; &lt;p&gt;So what is a numbers table? It's a table pre-loaded with numbers :)&lt;br&gt;Literally 1, 2, 3, 4, 5, ..., 100.000 (the upper limit depends on the maximum estimated size of the results).&lt;/p&gt; &lt;p&gt;Ok. So how can it help you? How can it be used? It has many uses, beign the most common ones reporting sheets. &lt;/p&gt; &lt;p&gt;Suppose you have to make a report showing all the orders by day of month (or year). But with a business twist (a requirement), you must show all dates, even if there's not an order for that day. Assuming&amp;nbsp;NorthWind orders table:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;OrderId&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Date&lt;br&gt;10270 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01/08/1996&lt;br&gt;10271&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01/08/1996&lt;br&gt;10272&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;02/08/1996&lt;br&gt;10273&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;05/08/1996&lt;br&gt;10274&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;06/08/1996&lt;br&gt;...&lt;br&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;You want a report that shows the number of orders for every day:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Date&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Orders&lt;br&gt;01/08/1996&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br&gt;02/08/1996&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br&gt;03/08/1996&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br&gt;04/08/1996&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br&gt;05/08/1996&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br&gt;06/08/1996&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;So a simple group by date in the orders date&amp;nbsp;doesn't cut it (we have no orders for some dates).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Enter the&amp;nbsp;Numbers table. In this case, what we want is a table with the dates we want to report (the month, the year) and left join it with the # of orders by day. But we can generalize it, and instead of a table with dates, we can use a Numbers table. Something like:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;declare @date datetime  &lt;p&gt;set @date = '1996-07-31'  &lt;p&gt;select &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dateadd(day, N.number, @date) as Date,&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;isnull(O.NumOrders, 0)&lt;br&gt;from&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Numbers N &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left outer join (&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select OrderDate, COUNT(*) as NumOrders&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from Orders&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group by OrderDate&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) O on dateadd(day, N.number, @date) = &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; O.OrderDate&lt;/p&gt; &lt;p&gt;where N.number &amp;lt;= 31&lt;br&gt;order by Date&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;And voilá, the report we want comes out. Note also, that with this approach, it's easy to change the granularity of the report (by hour, by month, by year). The number column (of Numbers table) is added as days to the initial date of the report, which acomplishes us a table with 1 month dates&amp;nbsp;(31 days).&lt;/p&gt; &lt;p&gt;If you want to see some other examples (some esoteric), see also:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.sqlservercentral.com/articles/Advanced+Querying/2547/"&gt;The Joy of Numbers&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.simple-talk.com/sql/t-sql-programming/the-helper-table-workbench/"&gt;The Helper Table Workbench&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:3a363699-67de-4758-89bf-0aaabd01c7f7" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/Programming" rel="tag"&gt;Programming&lt;/a&gt;, &lt;a href="http://technorati.com/tags/SQL" rel="tag"&gt;SQL&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Patterns" rel="tag"&gt;Patterns&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-7783170741073072175?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/7783170741073072175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=7783170741073072175' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/7783170741073072175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/7783170741073072175'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2007/11/sql-trickspatterns-1-numbers-table.html' title='SQL Tricks/Patterns 1 - Numbers Table'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-7533286405744164149</id><published>2007-11-08T11:03:00.001Z</published><updated>2007-11-08T17:57:17.821Z</updated><title type='text'>VB Linq Cookbook</title><content type='html'>&lt;p&gt;The VB Team has a great series named Linq Cookbook. In it they show some examples of Linq usage in VB that look great.&lt;/p&gt; &lt;p&gt;Entries so far:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/vbteam/archive/2007/06/22/linq-cookbook-recipe-1-change-the-font-for-all-labels-on-a-windows-form.aspx"&gt;linq cookbook recipe 1 change the font for all labels on a windows form&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/vbteam/archive/2007/06/22/linq-cookbook-recipe-2-find-all-capitalized-words-in-a-phrase-and-sort-by-length-then-alphabetically.aspx"&gt;linq cookbook recipe 2 find all capitalized words in a phrase and sort by length then alphabetically&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/vbteam/archive/2007/06/28/linq-cookbook-recipe-3-find-all-the-prime-numbers-in-a-given-range.aspx"&gt;linq cookbook recipe 3 find all the prime numbers in a given range&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/vbteam/archive/2007/06/27/linq-cookbook-recipe-3-find-all-complex-types-in-a-given-assembly.aspx"&gt;linq cookbook recipe 4 find all complex types in a given assembly&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/vbteam/archive/2007/07/03/linq-cookbook-recipe-5-concatenating-the-selected-strings-from-a-checkedlistbox.aspx"&gt;linq cookbook recipe 5 concatenating the selected strings from a checkedlistbox&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/vbteam/archive/2007/07/11/linq-cookbook-recipe-6-your-first-linq-application-using-northwind.aspx"&gt;linq cookbook recipe 6 your first linq application using northwind&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/vbteam/archive/2007/07/12/linq-cookbook-recipe-7-selecting-pages-of-data-from-northwind.aspx"&gt;linq cookbook recipe 7 selecting pages of data from northwind&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/vbteam/archive/2007/10/01/linq-cookbook-recipe-8-querying-xml-using-linq.aspx"&gt;linq cookbook recipe 8 querying xml using linq&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/vbteam/archive/2007/10/17/linq-cookbook-recipe-9-dynamic-sort-order.aspx"&gt;linq cookbook recipe 9 dynamic sort order&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/vbteam/archive/2007/11/06/linq-cookbook-recipe-10-pre-compiling-queries-for-performance.aspx"&gt;linq cookbook recipe 10 pre compiling queries for performance&lt;/a&gt;&lt;/p&gt; &lt;p&gt;And apparently VB support for Linq&amp;nbsp;seems superior to C#. I had already read about it (&lt;a title="http://diditwith.net/2007/08/17/VisualBasicEnvy.aspx" href="http://diditwith.net/2007/08/17/VisualBasicEnvy.aspx"&gt;VisualBasic Envy&lt;/a&gt;), but the XML syntax seems much terser and cleaner. Just compare:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Dim itemList1 =&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; From item In rss.&amp;lt;rss&amp;gt;.&amp;lt;channel&amp;gt;.&amp;lt;item&amp;gt; _&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Where item.&amp;lt;desc&amp;gt;.Value.Contains("LINQ") Or _&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.&amp;lt;title&amp;gt;.Value.Contains("LINQ")&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="http://blogs.msdn.com/vbteam/archive/2007/10/01/linq-cookbook-recipe-8-querying-xml-using-linq.aspx" href="http://blogs.msdn.com/vbteam/archive/2007/10/01/linq-cookbook-recipe-8-querying-xml-using-linq.aspx"&gt;http://blogs.msdn.com/vbteam/archive/2007/10/01/linq-cookbook-recipe-8-querying-xml-using-linq.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;to&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;var query = from c in xElement.Descendants("book")&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where double.Parse(c.Element("price").Value) &amp;lt; 10 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select new { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; author = c.Element("author").Value, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; title =&amp;nbsp;&amp;nbsp; c.Element("title").Value &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a title="http://blog.adrianroman.ro/post/C-30-Querying-XML-in-C-with-LINQ-to-XML.aspx" href="http://blog.adrianroman.ro/post/C-30-Querying-XML-in-C-with-LINQ-to-XML.aspx"&gt;http://blog.adrianroman.ro/post/C-30-Querying-XML-in-C-with-LINQ-to-XML.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Just found out an example of Linq usage inside Excel (with VSTO). The video is available at: &lt;a title="http://msdn2.microsoft.com/en-us/office/bb879965.aspx" href="http://msdn2.microsoft.com/en-us/office/bb879965.aspx"&gt;How Do I: Use LINQ Against Excel Ranges?&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Looking at the example, two things are missing (that could be implemented):&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Turning an excel range into a list of objects (better yet, mapping the columns into fields of a supplied class)&lt;/li&gt; &lt;li&gt;"Dumping" the results starting on a specified cell&amp;nbsp;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Other than that, just another great example of Linq usage.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:270a4e11-1e2f-46e1-8a1d-f44e0b889607" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/Programming" rel="tag"&gt;Programming&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Linq" rel="tag"&gt;Linq&lt;/a&gt;, &lt;a href="http://technorati.com/tags/SQL" rel="tag"&gt;SQL&lt;/a&gt;, &lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-7533286405744164149?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/7533286405744164149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=7533286405744164149' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/7533286405744164149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/7533286405744164149'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2007/11/vb-linq-cookbook.html' title='VB Linq Cookbook'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-2639570114353729467</id><published>2007-11-02T17:02:00.001Z</published><updated>2007-11-07T18:59:41.589Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>ASP.NET Configuration - "Unable to read the project. The device is not ready"</title><content type='html'>&lt;p&gt;ASP.NET configuration is somewhat an hidden and ancient art. Recently, after setting up my new machine, and while changing projects (reconfiguring IIS home directory), one of my web projects refused to open from within Visual Studio (mind you this is Visual Studio 2003 and all of the projects are still ASP.NET 1.1).&lt;/p&gt;&lt;p&gt;The site was accessible from IE, and worked fine.&lt;/p&gt;&lt;p&gt;The error message isn't very helpful: "&lt;strong&gt;Unable to read the project webxxx. The device is not ready&lt;/strong&gt;". As the machine was new, I thought that I forgot to apply some of the steps while configuring the solution. So I rechecked the entire process:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Validate that the directory configured in IIS is the correct one (very easy to get wrong when changing between multiple solutions, each with a Web project)&lt;/li&gt;&lt;li&gt;Validate that the site is configured for ASP.NET 1.1 &lt;/li&gt;&lt;li&gt;Validate the authentication for the virtual directory (Integrated windows authentication)&lt;/li&gt;&lt;li&gt;Give the apropriate permissions to ASP.NET user in the file system (in despair I even tried giving full permissions to everyone, with no luck)&lt;/li&gt;&lt;li&gt;Remove the project from the solution and re-adding it from the web&lt;/li&gt;&lt;li&gt;Validating the site URL configuration in the webinfo file (local configuration)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;So I resorted to ignorance and re-installed ASP.NET (aspnet_regiis.exe -i).&lt;/p&gt;&lt;p&gt;All to no avail. The web project refused to load. Googling it up, there weren't many answers (I found some forums, but they either wouldn't have any answers or were in an unknown language). &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Until I found this: &lt;a title="http://www.velocityreviews.com/forums/t112064-unable-to-read-the-project-file.html" href="http://www.velocityreviews.com/forums/t112064-unable-to-read-the-project-file.html"&gt;http://www.velocityreviews.com/forums/t112064-unable-to-read-the-project-file.html&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;which resolved my problem. It states the problem and solution (&lt;strong&gt;removing the hidden suo file&lt;/strong&gt;), which I should have tried as it's one of the things I do when the settings and synchronization with VSS start to get all messed up.&lt;br /&gt;&lt;br /&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;ul&gt;After that, you have to reconfigure the settings for the web project, so it's best to: &lt;li&gt;Remove all the files from the local directory mapped by in IIS (and the directory itself)&lt;/li&gt;&lt;li&gt;Accept the setting in VS (which should maintain your original directory and not get you into the _N suffix hell. I have seen developers getting to directory _23 in some projects)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-2639570114353729467?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/2639570114353729467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=2639570114353729467' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/2639570114353729467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/2639570114353729467'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2007/11/aspnet-configuration-to-read-project.html' title='ASP.NET Configuration - &amp;quot;Unable to read the project. The device is not ready&amp;quot;'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-9129378523703860060</id><published>2007-11-01T00:54:00.001Z</published><updated>2007-11-07T18:59:10.234Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Human Resources'/><title type='text'>Programming Languages and People</title><content type='html'>&lt;p&gt;Jeff Atwood posted a thought provoking (and controverse) post: &lt;a title="Embracing Languages Inside Languages" href="http://www.codinghorror.com/blog/archives/000989.html"&gt;Embracing Languages Inside Languages&lt;/a&gt;. In it he argues againts fluent interfaces (APIs that read like English), specifically two examples about SQL and regexes. I agree that those examples add complexity, verbosity and that trying to hide one's ignorance behind an API is not a solution (one of the commenters suggests replacing "a = (b + 1) * a ^ 2" with "a.valueOf(b.plus(1).times(a.pow(2))").&lt;/p&gt;&lt;p&gt;But I also see the power in fluent interfaces, specially in Domain Driven Design. Having a DSL defined on a specific domain, the use of a good fluent interface, could allow business experts to understand code (and ease the translation from the business domain to code). Redefining two clearly established DSLs - SQL and regular expressions - with a more verbose syntax, with new quirks, seems foolish. The stated advantadge of being fully OO, is just people trying to hide or cover the fact that they don't fully understand the syntax or the semantics of the language. The fact that it's more verbose, doesn't imply that it's more readable (to me it's quite the opposite, as I prefer terseness to verboseness). And if you don't understand a subject, instead of covering it up, admit that you are a &lt;a href="http://andre-silva-cardoso.blogspot.com/2007/10/terrible-programmers.html"&gt;terrible programmer&lt;/a&gt; like me, go out, buy a book (try Head First books, as they are really good to learn new &amp;amp; difficult topics) and master the topic.&lt;/p&gt;&lt;p&gt;People embrace ASP.NET (or JSP) programming without question, seeing it's advantadges, conciseness over hand generating HTML. The same happened with High Level Languages and Assembly or recently between VM languages (C# and Java) and native languages (C, C++).&lt;/p&gt;&lt;p&gt;So, I really don't understand people's aversion to SQL. It's one of the oldest, more popular and widely used DSLs. Yet it scares so many people, that is hidden or abstracted away. That way, it's true power is never realized (specially the set oriented paradigm, instead of row based). &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;It must be a human thing like the ones I read in the &lt;a title="Dinosaur Programmers Know More Than You" href="http://kickin-the-darkness.blogspot.com/2007/10/dinosaur-programmers-know-more-than-you.html"&gt;Dinosaur Programmers Know More Than You&lt;/a&gt; blog post. As we stick around and watch technology waves (I've been watching professionally for almost 10 years) we get to know "what programmers forget, screw up, hope won't happen, and ignore" because that's what we did. And we become "Dinosaur Programmers", because we see each new technology as it is (to us), not as it is marketed. And see it transform from the hype of the day (XML can be used everywhere, for everything is one of my favorites) to something usable, stable and mature. To end I must quote the great ending of the post, with which I deeply agree (emphasis added by me):&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:7;"&gt;“&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Every &lt;strong&gt;new technology&lt;/strong&gt; sounds great, and is capable of &lt;strong&gt;great things&lt;/strong&gt; when it's &lt;strong&gt;optimally applied&lt;/strong&gt;. &lt;strong&gt;Which it almost never is&lt;/strong&gt;. And nothing brings out the imperfections of a new technology like real world usage, in a mission critical environment, with money on the line.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;So you'll forgive me when I don't get excited about your new framework/language/architecture/process that's going to change everything/usher in a new paradigm/launch the next Google. As long as people are writing code, and assembling component frameworks, and modeling the business processes, they're going to continue to forget, screw up, hope for the best, and ignore the vague and uncertain parts.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;While a new technology &lt;strong&gt;might eliminate&lt;/strong&gt; a whole species of &lt;strong&gt;software development errors&lt;/strong&gt;, &lt;strong&gt;you'll just discover&lt;/strong&gt;, and now have the opportunity to explore, &lt;strong&gt;a whole new jungle of failure&lt;/strong&gt;.&lt;br /&gt;Dinosaur programmers already know this, it's our home turf.&lt;/p&gt;&lt;/blockquote&gt;&lt;p align="right"&gt;&lt;span style="font-size:7;"&gt;”&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-9129378523703860060?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/9129378523703860060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=9129378523703860060' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/9129378523703860060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/9129378523703860060'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2007/11/programming-languages-and-people.html' title='Programming Languages and People'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-9062783353709364112</id><published>2007-10-31T15:51:00.001Z</published><updated>2007-11-07T18:59:24.569Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Human Resources'/><title type='text'>Terrible Programmer</title><content type='html'>&lt;p&gt;My name is André and I am a terrible programmer (&lt;a href="http://kickin-the-darkness.blogspot.com/2007/09/confessions-of-terrible-programmer.html"&gt;Confessions of a Terrible Programmer&lt;/a&gt;)...&lt;br /&gt;I think we all are (maybe not Dijkstra, Knuth, Wirth and some few others, that think their programs mathematically and demonstrate them &lt;a title="http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1009.html" href="http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1009.html"&gt;http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1009.html&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;So I try to mitigate my human factor by: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;testing;&lt;/li&gt;&lt;li&gt;reviewing my code carefully;&lt;/li&gt;&lt;li&gt;automating tasks that I'll have to do more than a couple of times (tests, gathering information for monhtly reports, ...);&lt;/li&gt;&lt;li&gt;investigating new tools and techniques that allow me to do less or with better quality;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;And it's the last point that I think holds more promise. Testing and reviewing code are all a double check (most of the time by the same person) that the code is correct. But it's also subject to error.&lt;/p&gt;&lt;p&gt;Automating tasks also buys us more confidence (especially if the automation is tested and used for a while), but sometimes hard to justify. On a recent project that I manage, I invested a couple of days developing some office automation that allows me to save excel reports received by e-mail, uploading them to a database and importing them to a word table. But I knew that, the monthly task would take me half a day every month for one year. So I got a 4 day savings (more if the contract is renewed), and confidence on the output (at least on what depends on me). Another automation that is a must (ok, I still don't implement it) is build automation. It just eliminates all those problems related to builds (multiple web configs for various environments, flags - Release and authentication, conditional code, ...).&lt;/p&gt;&lt;p&gt;But automating tasks like code reviews or quality assurance is more problematic. That's why I'm longing for static analysis tools powerful enough to catch most problems (code coupling, unnecessary complexity, concurrency problems, finding and eliminating code duplication) and easily extensible so that I can easily implement new rules. &lt;/p&gt;&lt;p&gt;I already posted about some tools (NDepend, nStatic - not released yet, FxCop, Simian), but I still think most have some limitations and don't address many problems. Maybe with .NET 3.5 (and the ability to create Expression Trees), gives way for a new generation of tools more powerful and that don't treat code as text files but as ASTs. That way it should become easiser to find duplicate code (independent of variable names), inject faults in code (Fault Simulation), analyze and compute call graphs based on the arguments of functions (and the opposite, given an exception state, what conditions and call graph could lead to that), and many other that I can't even think of.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-9062783353709364112?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/9062783353709364112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=9062783353709364112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/9062783353709364112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/9062783353709364112'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2007/10/terrible-programmers.html' title='Terrible Programmer'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-2708475959791510762</id><published>2007-10-31T10:55:00.001Z</published><updated>2007-11-07T18:56:53.838Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Blog Voices</title><content type='html'>&lt;p&gt;Congratulations to my friend &lt;a href="http://devcatharsis.blogspot.com/"&gt;Mario Romano&lt;/a&gt; for reaching 100 posts in October. The grand total of my posts from Nov/2006 doesn't reach 50, so it's an impressive figure.&lt;/p&gt;&lt;p&gt;That got me thinking in what I value on blogs, like the update frequency, the voice, and made me evaluate what are the blogs that I read most and that are my biggest influences.&lt;/p&gt;&lt;p&gt;So, here are the bloggers that I can't miss and which posts I value the most:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.joelonsoftware.com/"&gt;Joel on Software&lt;/a&gt; is one of the expert voices that has been around longer. His posts show through his experience, and his opinions on Human Resources (hiring developers, ), Software Development (Process, UI), Project Management and Economics (Buy vs Build) are truly outstanding;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codinghorror.com/blog/"&gt;Coding Horror&lt;/a&gt; is another great blog, with great opinions on Programming, Software Development, Project Management, and some off-topics that appeal to many programmers, that keeps an independent voice (somestimes a bit controverse);&lt;/li&gt;&lt;li&gt;&lt;a href="http://devcatharsis.blogspot.com/"&gt;DevCatharsis&lt;/a&gt;, from my friend Mario Romano is a very good all rounder which has the same main interests that I have right now: Architecture, Functional Programming and Software Development Process;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Some more focusing on a specific area:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;On SQL, there's &lt;a title="Kimberly L. Tripp- Improving -my- SQL skills through your questions!" href="http://www.sqlskills.com/blogs/kimberly/"&gt;Kimberly L. Tripp&lt;/a&gt; and her great posts on index tuning and general SQL tuning. Has many code samples and comparative tests on performance; &lt;/li&gt;&lt;li&gt;&lt;a title="Paul Graham- Unofficial RSS Feed" href="http://www.paulgraham.com/"&gt;Paul Graham- Unofficial RSS Feed&lt;/a&gt; has some great insights on Lisp and recently a focus on startups;&lt;/li&gt;&lt;li&gt;On Functional Programming, with a twist and focus to imperative developers, I really like &lt;a title="defmacro.org" href="http://www.defmacro.org/"&gt;defmacro.org&lt;/a&gt; (great articles on FP for the rest of us) and &lt;a title="Did it with .NET" href="http://diditwith.net/"&gt;Did it with .NET&lt;/a&gt; (with a focus on C# 3.0 and recently F#). See also &lt;a title="The Mechanical Bride" href="http://themechanicalbride.blogspot.com/"&gt;The Mechanical Bride&lt;/a&gt; (C# 3.0, Linq and lots of =&amp;gt; lambdas);&lt;/li&gt;&lt;li&gt;On Performance, &lt;a title="Rico Mariani s Perfor" href="http://www.google.com/reader/view/feed/http%3A%2F%2Fblogs.gotdotnet.com%2Fricom%2Frss.aspx"&gt;&lt;a title="Rico Mariani s Performance Tidbits" href="http://blogs.msdn.com/ricom/default.aspx"&gt;Rico Mariani s Performance Tidbits&lt;/a&gt;,&lt;/a&gt; are a must, although it's been somewhat quiet since he became Chief Architect of Visual Studio (a huge job indeed). It has great analysis on performance from a very high level right down to the bit;&lt;/li&gt;&lt;li&gt;On Microsoft, don't miss &lt;a title="Mini-Microsoft" href="http://minimsft.blogspot.com/"&gt;Mini-Microsoft&lt;/a&gt; to get a feeling on Microsoft internals, Human Resources, shares and profits;&lt;/li&gt;&lt;li&gt;&lt;a title="Creating Passionate Users" href="http://headrush.typepad.com/creating_passionate_users/"&gt;Creating Passionate Users&lt;/a&gt; from Kathy Sierra, which is shutdown due to some creeps that harassed her, has many good points on user focus and learning (she's one of the Head First series editors);&lt;/li&gt;&lt;li&gt;On a fun perspective (or maybe not, as it reflects our reality), I really like &lt;a title="Worse Than Failure" href="http://worsethanfailure.com/"&gt;Worse Than Failure&lt;/a&gt; and &lt;a href="http://www.dilbert.com/"&gt;Dilbert&lt;/a&gt; (Ok, it's not a blog);&lt;/li&gt;&lt;li&gt;There are also some other authors like Martin Fowler, Bruce Eckel that I prefer in book format, and Ted Neward on article format and not so much on blog format;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Ok, the list is getting long but I try to keep up to date on these. So what blogs am I missing and why?&lt;/p&gt;&lt;p&gt;What's on your blog short list? If someone reads this, post your list and the reasons why it's on your list.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-2708475959791510762?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/2708475959791510762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=2708475959791510762' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/2708475959791510762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/2708475959791510762'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2007/10/blog-voices.html' title='Blog Voices'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-5825716153434895443</id><published>2007-10-23T12:15:00.000+01:00</published><updated>2007-10-31T11:10:41.915Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Management'/><title type='text'>Software Estimation</title><content type='html'>&lt;p&gt;So why are software estimates so difficult? I don’t know, but between technical problems, little details that take forever, customers changing requirements and conflicting requirements, estimates are normally way below the real time that takes to do something (a rule of thumb is just doubling your normal estimate just to be safe).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/__-kebdy0UzY/Rx3Y0djdmEI/AAAAAAAAAA4/FPfiUvGwMck/s1600-h/BookEstimation-tn.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5124490346815658050" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp1.blogger.com/__-kebdy0UzY/Rx3Y0djdmEI/AAAAAAAAAA4/FPfiUvGwMck/s320/BookEstimation-tn.jpg" border="0" /&gt;&lt;/a&gt;Steve McConnell just wrote a book (&lt;strong&gt;Software Estimation: Demystifying the Black Art&lt;/strong&gt;), that I recently bought (but still haven’t read –I’m planning to read it soon), that tries to ease this problem and shed some light into the black art. But what can you say, when even someone as knowledgeable as Steve McConnell, misses estimates when building a fort house by 100% (&lt;a href="http://blogs.construx.com/blogs/stevemcc/archive/2007/09/23/building-a-fort-lessons-in-software-estimation.aspx"&gt;http://blogs.construx.com/blogs/stevemcc/archive/2007/09/23/building-a-fort-lessons-in-software-estimation.aspx&lt;/a&gt;). Well, it was just a small construction plan, that most wouldn’t even try to estimate and just plug along.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But there are great lessons to be learned, that apply to software projects: &lt;ul&gt;&lt;li&gt;&lt;em&gt;Numerous unplanned problems collectively added up &lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Underestimation of unfamiliar tasks &lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Not decomposing big tasks into smaller subtasks &lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Using overly round time units &lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Substituting a target for an estimate &lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Sweeping numerous little tasks under the estimation rug &lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Never creating a real estimate &lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;And some differences to SW projects:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;No way to compromise quality for the sake of schedule &lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Schedule overrun was free &lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;The estimation error didn't really matter, because the project would be done regardless of what the estimate turned out to be&lt;/em&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Jeff Atwood analyzes it from a different perspective (&lt;a href="http://www.codinghorror.com/blog/archives/000960.html"&gt;http://www.codinghorror.com/blog/archives/000960.html&lt;/a&gt;), and concludes that it’s very different (and requires a different skillset and discipline) to build a doghouse or a skyscraper. And the same applies to software (building a toy app is very different from an enterprise application). That is a statement that most programmers would agree but something very hard to explain to a customer (that thinks software is easily changeable without causing structural problems or bugs).&lt;/p&gt;&lt;p&gt;&lt;br /&gt;More recently (&lt;a href="http://www.codinghorror.com/blog/archives/000981.html"&gt;http://www.codinghorror.com/blog/archives/000981.html&lt;/a&gt;) Jeff took another look at estimation and current practices (planning poker sounds great) and reviews the &lt;strong&gt;FogBugz &lt;/strong&gt;tool from Joel Spolsky (from the Joel on Software fame). Apparently the tool has evolved from a bug tracker to a project management tool. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;The tool uses a method called &lt;strong&gt;evidence based scheduling&lt;/strong&gt; (a Monte Carlo simulation based on the historical estimates of developers), that predicts when will software ship (not an exact date, but the probability that software will ship on said date). &lt;img id="BLOGGER_PHOTO_ID_5124491527931664482" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp0.blogger.com/__-kebdy0UzY/Rx3Z5NjdmGI/AAAAAAAAABI/k71JR3a5vuE/s320/fogbugz-6-predict-ship-dates.png" border="0" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;You can also see the estimation probabilities for the developers:&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5124491051190294610" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp1.blogger.com/__-kebdy0UzY/Rx3ZddjdmFI/AAAAAAAAABA/Zk4DYr8cxLM/s320/fogbugz-6-developer-ship-dates.png" border="0" /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/__-kebdy0UzY/Rx3aKtjdmHI/AAAAAAAAABQ/IIRp0WkUeeQ/s1600-h/PainlessProjectManagements_FogBugz_TheBook.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5124491828579375218" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://bp2.blogger.com/__-kebdy0UzY/Rx3aKtjdmHI/AAAAAAAAABQ/IIRp0WkUeeQ/s320/PainlessProjectManagements_FogBugz_TheBook.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So how do you know if the tool is any good? Well, I haven’t tried it, but coming from Joel Spolsky's company, it has a good chance of being high quality (attention to detail, good UI). But you can see a video from the new version of the tool &lt;a href="http://www.fogcreek.com/FogBugz/60movie/60movie.html"&gt;FogBuz 6.0 Movie Demo&lt;/a&gt;, &lt;a href="http://www.fogcreek.com/FogBugz/"&gt;try it out&lt;/a&gt; or read abook about it by Mike Gunderloy: &lt;a href="http://www.fogcreek.com/FogBugz/PainlessProjectManagement.html"&gt;Painless Project Management with FogBugz&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-5825716153434895443?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/5825716153434895443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=5825716153434895443' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/5825716153434895443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/5825716153434895443'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2007/10/so-why-are-software-estimates-so.html' title='Software Estimation'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/__-kebdy0UzY/Rx3Y0djdmEI/AAAAAAAAAA4/FPfiUvGwMck/s72-c/BookEstimation-tn.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-1867592738691510227</id><published>2007-10-22T14:44:00.001+01:00</published><updated>2007-11-07T19:00:30.572Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>SQL 2008</title><content type='html'>&lt;p&gt;Well, it looks like SQL 2008 is just around the corner, but it seems rather quiet for a new release. Maybe it's a small release, or MS isn't using all the marketing power.&lt;/p&gt;&lt;p&gt;Anyway, as the end of support for SQL 2000 is just 2 months after, looks like a comppeling reason to upgrade :)&lt;/p&gt;&lt;p&gt;Among the features for development that I like more are:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Auditing data changes (new T-SQL command AUDIT that allows auditing centralization)&lt;/li&gt;&lt;li&gt;Integration with Linq, Entity Framework, .NET 3.0&lt;/li&gt;&lt;li&gt;MERGE statement (allows update, insert and delete in a single statement)&lt;/li&gt;&lt;li&gt;Some general nice additions (that I won't use much, but look good to have), like date and time data types, file streams (uses the file system to store files pointed by the database), table valued parameters and Spatial Data&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In the administration area, there are also some highlights:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Data compression (those that worked with medium databases, know what a hassle it is to manage files with 100 GB in storage with less than 0,5 TB) &lt;/li&gt;&lt;li&gt;Data encryption (columns, database)&lt;/li&gt;&lt;li&gt;Resource Governor (limit resource usage by users or groups)&lt;/li&gt;&lt;li&gt;Hot-plug CPUs!&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;To end the long post, some links about all the new features in more detail:&lt;/ul&gt;&lt;p&gt;&lt;a title="SQL Server 2008 Improvement Pillars" href="https://connect.microsoft.com/SQLServer/content/content.aspx?ContentID=5470&amp;amp;wa=wsignin1.0"&gt;SQL Server 2008 Improvement Pillars&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.databasejournal.com/features/mssql/article.php/3691821"&gt;What's new in SQL 2008 Part 1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.databasejournal.com/features/mssql/article.php/3697056"&gt;What’s new in SQL 2008 Part 2&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.databasejournal.com/features/mssql/article.php/3702381"&gt;What’s New in SQL Server 2008 Part 3&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-1867592738691510227?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/1867592738691510227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=1867592738691510227' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/1867592738691510227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/1867592738691510227'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2007/10/sql-2008.html' title='SQL 2008'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-6955103634468731512</id><published>2007-10-20T16:52:00.001+01:00</published><updated>2007-11-07T19:01:39.890Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Humor'/><title type='text'>Programming Language Humor</title><content type='html'>&lt;p&gt;Great post about programming language (religious) wars with exceptional humor: &lt;a title="Language Trolling Post You'll Ever Need To Read (Hopefully)" href="http://davidrupp.blogspot.com/2007/10/last-language-war-language-trolling.html"&gt;Language Trolling Post You'll Ever Need To Read (Hopefully)&lt;/a&gt;. And don't miss the comments, as some of them are of the same quality :)&lt;/p&gt;&lt;p&gt;In the end, programming languages are just tools and the companies behind them, the supporters. Never quite got it why some people take a critic to a programming language or a company personally...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-6955103634468731512?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/6955103634468731512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=6955103634468731512' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/6955103634468731512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/6955103634468731512'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2007/10/programming-language-humor.html' title='Programming Language Humor'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-9113348835022274001</id><published>2007-10-19T18:50:00.001+01:00</published><updated>2007-11-07T19:01:21.453Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Source Code</title><content type='html'>&lt;p&gt;Scott Hanselman has a new column/category (&lt;a title="http://www.hanselman.com/blog/CategoryView.aspx?category=" href="http://www.hanselman.com/blog/CategoryView.aspx?category=Source+Code"&gt;Hanselman - Weekly Source Code&lt;/a&gt;) based on the tag to be a better developer started by Justice Gray (&lt;a title="Be a Better Developer in 6 Months" href="http://graysmatter.codivation.com/HowIAmBecomingABetterDeveloperPart1OfInfinity.aspx"&gt;Be a Better Developer in 6 Months&lt;/a&gt;). &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Like Justice Gray committed to reading 1 book per week, Scott Hanselman started reading good source code (as it's one of the best ways to be a better programmer, with which I deeply agree - &lt;a title="Reading to Be a Better Developer - The Coding4Fun DevKit" href="http://www.hanselman.com/blog/ReadingToBeABetterDeveloperTheCoding4FunDevKit.aspx"&gt;Reading to Be a Better Developer - The Coding4Fun DevKit&lt;/a&gt;).&lt;br /&gt;In one of the recent blogs in this category, I discovered this post: &lt;a title="LukeH and a fully LINQified RayTracer" href="http://blogs.msdn.com/lukeh/archive/2007/10/01/taking-linq-to-objects-to-extremes-a-fully-linqified-raytracer.aspx"&gt;LukeH and a fully LINQified RayTracer&lt;/a&gt;. It's a LINQified C# ray tracer (in one Linq Expression that extends over 60 lines!!):&lt;/p&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;var pixelsQuery =&lt;br /&gt;    from y in Enumerable.Range(0, screenHeight)&lt;br /&gt;    let recenterY = -(y - (screenHeight / 2.0)) / (2.0 * screenHeight)&lt;br /&gt;   select from x in Enumerable.Range(0, screenWidth)&lt;/p&gt;&lt;p&gt;...&lt;/p&gt;&lt;p&gt;select new { X = x, Y = y, Color = traceRay(new TraceRayArgs(ray, scene, 0)) };&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;He advises against this type of programming (big bang methods/expressions), but it's one heck of an example for Linq.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;In the same vein, he links to a list of Programming Guiding Principles by Patrick Cauldwell (&lt;a title="This I Believe- The Developer Edition" href="http://www.cauldwell.net/patrick/blog/ThisIBelieveTheDeveloperEdition.aspx"&gt;This I Believe- The Developer Edition&lt;/a&gt;), that start with general principles and has good advices on Unit Tests, Test coverage, Buy vs Build, Dependencies, Contracts (code), Visibility, Authentication, Tracing, Error handling and &lt;strong&gt;The definition of done&lt;/strong&gt; (it means different things to every developer that I know).&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Reading all this stuff about code (and the code itself), I started thinking about what are good qualities of Source Code. So, to every beginner (and as a reminder to all senior developers that practices and repetition makes perfection) go [re-]read &lt;a href="http://www.amazon.com/Code-Complete-Second-Steve-McConnell/dp/0735619670/sr=1-1/qid=1169499581?ie=UTF8&amp;amp;s=books"&gt;Code Complete&lt;/a&gt; by Steve McConnell... &lt;/p&gt;&lt;p&gt;To me, the first that comes to mind is:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;stop and think for five minutes before defining the name of a method, variable; &lt;li&gt;think early on on the design of the code (method or class), it's complexity, performance and all other important characteristics; &lt;li&gt;DRY (Don't repeat yourself - don't copy paste code, documentation, use cases, ...) &lt;li&gt;KISS (Keep it Simple ..., the design, the methods) &lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-9113348835022274001?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/9113348835022274001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=9113348835022274001' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/9113348835022274001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/9113348835022274001'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2007/10/source-code.html' title='Source Code'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-9054986414102392794</id><published>2007-10-04T01:31:00.001+01:00</published><updated>2007-10-04T01:31:00.158+01:00</updated><title type='text'>Functional Programming Examples?</title><content type='html'>&lt;p&gt;Recently, &lt;a href="http://devcatharsis.blogspot.com/"&gt;Mario Romano&lt;/a&gt; and me did a presentation about Language Trends, focusing on Linq and the .NET framework. It's clearly a trend in .NET, and there are some great blogs about FP in .NET:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/wesdyer/rss.xml"&gt;Wes Dyer&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://feeds.feedburner.com/smartsoftware"&gt;Wesner Moise nStatic&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://themechanicalbride.blogspot.com/feeds/posts/default"&gt;Mechanical Bride&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="about" href="http://blogs.msdn.com/ericwhite/pages/FP-Tutorial.aspx"&gt;FP Tutorial&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This one focuses more on Lisp, Haskell and other FP languages, but gives an hand to us imperative programmers:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.defmacro.org/rss/news.xml"&gt;http://www.defmacro.org/rss/news.xml&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;p&gt;My main problem is applying this to practical day to day examples. I've seen many examples of the Fibonnaci, Hanoi Towers and others that are great to get your hands on code, and I can relate to the advantadges of FP (composability, restriction on side effects, conciseness/terseness?). &lt;/p&gt;  &lt;p&gt;But I think that to convert more people (or at least look) to FP, there has to be some compelling examples that clearly show the advantadges. Maybe related to Web programming (continuations), or meta-programming (get rid of code generators/copy-paste and with the aid of expression trees and higher order functions, define the basic skeleton of methods - try , validate, call some function passed in, log exception, commit, rollback).&lt;/p&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;p&gt;Any good examples/ideas?&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-9054986414102392794?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/9054986414102392794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=9054986414102392794' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/9054986414102392794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/9054986414102392794'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2007/10/functional-programming-examples.html' title='Functional Programming Examples?'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-1684440200669222702</id><published>2007-10-04T00:47:00.001+01:00</published><updated>2007-10-04T01:32:27.761+01:00</updated><title type='text'>.NET Framework Source Code</title><content type='html'>&lt;p&gt;It's all over the place, but here it goes again: &lt;strong&gt;Microsoft is making available the sources&lt;/strong&gt; of much of the &lt;strong&gt;.NET Libraries&lt;/strong&gt; with Visual Studio 2008. It will allow to step into framework code while debugging!&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.msdn.com/brada/archive/2007/10/03/net-framework-source-code-release.aspx" href="http://blogs.msdn.com/brada/archive/2007/10/03/net-framework-source-code-release.aspx"&gt;http://blogs.msdn.com/brada/archive/2007/10/03/net-framework-source-code-release.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.tedneward.com/2007/10/03/Reports+Of+Snowballs+In+Hell.aspx" href="http://blogs.tedneward.com/2007/10/03/Reports+Of+Snowballs+In+Hell.aspx"&gt;http://blogs.tedneward.com/2007/10/03/Reports+Of+Snowballs+In+Hell.aspx&lt;/a&gt;&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-1684440200669222702?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/1684440200669222702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=1684440200669222702' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/1684440200669222702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/1684440200669222702'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2007/10/net-source-code.html' title='.NET Framework Source Code'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-7720099325283117702</id><published>2007-09-19T23:59:00.001+01:00</published><updated>2007-09-20T00:06:33.042+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='History'/><title type='text'>The Past and the Future</title><content type='html'>&lt;p&gt;Just finished reading two great articles about the past, history, and the future. &lt;/p&gt;  &lt;p&gt;The first article is from Joel Spolsky (&lt;a title="Strategy Letter VI" href="http://www.joelonsoftware.com/items/2007/09/18.html"&gt;Strategy Letter VI&lt;/a&gt;) and how history tends to repeat itself. Starting there, and with some extrapolation from performance considerations in the past (with Excel) and the present (with Ajax and JavaScript), some patterns become apparent (although the actual names could change). But the real kicker is from the comparison between mainframes, CICS and the evolution to microcomputers and Windows to the current state of the Web and it's problems (interoperability between Ajax applications). Very good and thought provoking. It just reminds me of how circular history is: we started with mainframes and dumb terminals, then to client PCs applications (Office, Access, fat clients), then back to big servers and thin clients (with the Web), and with smart clients we are returning the processing power to the client.&lt;/p&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;p&gt;The other great post (more of a link to actual MSDN content - &lt;a title="Finally some news on PLINQ" href="http://themechanicalbride.blogspot.com/2007/09/finally-some-news-on-plinq.html"&gt;Finally some news on PLINQ&lt;/a&gt;), reveals the future after .NET 3.5 and MS solutions to the increasing cores with the same speed problem.&lt;/p&gt;  &lt;p&gt;The &lt;a title="MSDN" href="http://msdn.microsoft.com/msdnmag/issues/07/10/PLINQ/default.aspx"&gt;MSDN&lt;/a&gt; article shows the primitives for concurrency and how easily concurrency can be &amp;quot;added&amp;quot; to a program. The &lt;a title="PTasks" href="http://msdn.microsoft.com/msdnmag/issues/07/10/Futures/default.aspx"&gt;PTasks&lt;/a&gt; article shows it's application to Linq (specially Linq to SQL).&lt;/p&gt;  &lt;p&gt;Just checked the MSDN October cover, and it's mainly about concurrency/threads and multiple cores. I'll put it on my short list of &amp;quot;must read&amp;quot;s.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c6b2102f-647d-4ecd-ae72-16587f306d41" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Marcas Technorati:  		&lt;a href="http://technorati.com/tags/Architecture/" rel="tag"&gt;Architecture&lt;/a&gt; 		,  		&lt;a href="http://technorati.com/tags/History/" rel="tag"&gt;History&lt;/a&gt; 		,  		&lt;a href="http://technorati.com/tags/Programming/" rel="tag"&gt;Programming&lt;/a&gt; 		&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-7720099325283117702?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/7720099325283117702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=7720099325283117702' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/7720099325283117702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/7720099325283117702'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2007/09/past-and-future.html' title='The Past and the Future'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-6594608942522062557</id><published>2007-09-14T00:53:00.001+01:00</published><updated>2007-09-14T01:10:22.966+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Yet another PK debate</title><content type='html'>&lt;p&gt;Recently the article in &lt;a href="http://weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.aspx"&gt;http://weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.aspx&lt;/a&gt; got me thinking again in DB design, especially the PK dilemma (natural or surrogate).&lt;/p&gt;  &lt;p&gt;So i googled around to see the current discussion and came up with some links:&lt;/p&gt;  &lt;p&gt;Articles defending surrogate keys:    &lt;br /&gt;&lt;a href="http://www.4guysfromrolla.com/webtech/110806-1.shtml"&gt;http://www.4guysfromrolla.com/webtech/110806-1.shtml&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://searchsqlserver.techtarget.com/general/0,295582,sid87_gci1156604,00.html"&gt;http://searchsqlserver.techtarget.com/general/0,295582,sid87_gci1156604,00.html&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://r937.com/20020620.html"&gt;http://r937.com/20020620.html&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.bcarter.com/intsurr1.htm"&gt;http://www.bcarter.com/intsurr1.htm&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.aspfaq.com/show.asp?id=2504"&gt;http://www.aspfaq.com/show.asp?id=2504&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://databases.aspfaq.com/database/what-should-i-choose-for-my-primary-key.html"&gt;http://databases.aspfaq.com/database/what-should-i-choose-for-my-primary-key.html&lt;/a&gt;     &lt;br /&gt;Articles defending natural keys:     &lt;br /&gt;&lt;a href="http://www.sqlteam.com/article/identity-and-primary-keys"&gt;http://www.sqlteam.com/article/identity-and-primary-keys&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.solidqualitylearning.com/blogs/Dejan/archive/2005/02/24/434.aspx"&gt;http://www.solidqualitylearning.com/blogs/Dejan/archive/2005/02/24/434.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://groups.google.com/group/microsoft.public.sqlserver.programming/msg/6d61dbf80d6f0fb6?hl=en&amp;amp;lr=&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8&amp;amp;rnum=14"&gt;http://groups.google.com/group/microsoft.public.sqlserver.programming/msg/6d61dbf80d6f0fb6?hl=en&amp;amp;lr=&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8&amp;amp;rnum=14&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;But returning to the initial article, in it, it's argued that in relation tables the PK should be natural (composite of the PKs of the relations). Naturally, it seems right, and it aligns well with the relational theory. Unfortunately, business clients don't align so well ;)&lt;/p&gt;  &lt;p&gt;The initial problem is modeling a CustomerProducts relation table, to which the following two solutions are proposed:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Create table CustomerProducts     &lt;br /&gt;(      &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; CustomerID int references Customers(CustomerID) not null,      &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; ProductID int references Products(ProductID) not null,      &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; OrderLimit int not null,      &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; Primary key (CustomerID, ProductID)      &lt;br /&gt;)&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;Create table CustomerProducts     &lt;br /&gt;(      &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; Customer_ProductID int identity primary key,      &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; CustomerID int references Customers(CustomerID) not null,      &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; ProductID int references Products(ProductID) not null,      &lt;br /&gt;&amp;#xA0;&amp;#xA0;&amp;#xA0; OrderLimit int not null      &lt;br /&gt;)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The exchange of ideas in the comments was good, and it got me thinking how I do design.&lt;/p&gt;  &lt;p&gt;So here are my thoughts (published also in the comments of the initial article).&lt;/p&gt;  &lt;p&gt;One of the downsides of the modeling based on natural keys is it's averse to change. &lt;/p&gt;  &lt;p&gt;Of course with an identity column, the model, the application must be validated, and possibly changed (including migration) to acommodate the change. But the change doesn't ripple throughout the model as with natural keys.&lt;/p&gt;  &lt;p&gt;I honestly can't see the big difference between entity tables and relation tables. I could argue (and many DB purists would) that the PK in an entity table should be a natural key (probably composite). &lt;/p&gt;  &lt;p&gt;And it appears you can relate to the problems it introduces: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;very difficult to change (I can only imagine what must have been the migration of a DB where ISBN was used as a PK, or using the bank filial as part of the PKs of bank cards - imagine changing the account); &lt;/li&gt;    &lt;li&gt;no significant advantadge over the more flexible surrogate model. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;To me the same argument holds with relation tables. It eases future changes. The disadvantages are extra complexity, but the end result is more flexible.&lt;/p&gt;  &lt;p&gt;I haven't seen a solid example of the supposed advantages (in practice) of the composite key approach. The extra space isn't so much as stated if considering that other indexes include the PK. So the wider is the PK, bigger becomes the index. &lt;/p&gt;  &lt;p&gt;I haven't seen any examples or papers that demonstrate in practice that it's more performant to use composite keys (in general).&lt;/p&gt;  &lt;p&gt;Regarding the purity or correctness of the model, I can only say, that it's a model... It can be abused if one tries to be to flexible, but sometimes it's better to be flexible and pragmatic than to be rigid and theoretic. &lt;/p&gt;  &lt;p&gt;This comment generated a response by Jeff Smith, in which he defends his article conclusions.&lt;/p&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Until any of this is refuted, we've clearly established that, for relation tables:      &lt;br /&gt;* using a natural PK uses less space, less resources, since if you use an identity, you MUST also introduce a unique constraint on your true key columns       &lt;br /&gt;* using a natural PK clarifies your data model and makes it easier to read, understand and work with       &lt;br /&gt;* using a natural PK simplifies your SQL statements       &lt;br /&gt;* using a natural PK enforces data integrity without the need for an additional unique constraint       &lt;br /&gt;* using a natural PK results in true normalization, since your attributes are fully dependent on your primary key and not just a meaningless, random number       &lt;br /&gt;* using an identity PK actually complicates things like editing a relation, if you are relying only on the PK, since knowing that you are editing or viewing &amp;quot;CustomerProductID 3922&amp;quot; means nothing, while knowing that you are editing or vewing the relation between &amp;quot;CustomerID 23 and ProductID 4&amp;quot; tells you everything, simplifying your code and your logic.       &lt;br /&gt;I'd write more, but again, I feel as though I am just repeating the same points over and over and no one is specifically addressing them ....       &lt;br /&gt;Let's talk actuals, here, not theory ... can you please give me a simple example where using an identity as a PK for a relation table, instead of a composite PK, makes future changes &amp;quot;easier&amp;quot;? &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#xA0;&lt;/p&gt;  &lt;p&gt;But this got me thinking even more in the merits and shortcomings of each design technique, in primary keys and it's relation with natural keys, business keys/rules, etc.&lt;/p&gt;  &lt;p&gt;So my response headed for evolutive maintenance, change, flexibility:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I just can't run away from a good discussion. :)&lt;/p&gt;    &lt;p&gt;Suppose that the client comes in and wants to introduce some &amp;#x201C;minor&amp;#x201D; changes/improvements.      &lt;br /&gt;First, he wants to keep the history of changes in the CustomerProducts table. So you create a CustomerProductsHistory table with the timestamp of the operation.       &lt;br /&gt;But he also reports that querys to find associations within an OrderLimit range are running very slowly. So you add an index to the OrderLimit. &lt;/p&gt;    &lt;p&gt;These &amp;#x201C;changes&amp;#x201D; compound and the table becomes larger and wider with more indexes. Child tables are added and because we shouldn't use a surrogate as PK, we keep the parent PK and add some other attribute. Using Ids as the PKs from Customer and Products, the effect is lessened (the size of the PK is just double of a surrogate key, but with natural keys the effect is clear), but eventually your indexes start to suffer because the PK is larger, as well as all child tables PKs and indexes.&lt;/p&gt;    &lt;p&gt;Future changes are easier because you get more flexibility in maintenance and with the model.&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;In maintenance: if a mistake was detected and you MUST correct an association (the CustomerId or ProductId), you don&amp;#x2019;t have to mess with the PK. Because you didn&amp;#x2019;t expose the PK of the table to the customer (the surrogate key), you can change the data easily. &lt;/li&gt;      &lt;li&gt;In evolutions: if there&amp;#x2019;s a need to change the CustomerProducts table (you want to turn it into a temporal table, adding a start date and end date), it&amp;#x2019;s much easier if there&amp;#x2019;s a surrogate key, especially if the table has child tables. &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;I think most pragmatic people, having been through similar situations, can see the benefits and flexibility of the surrogate key model. Besides that, there&amp;#x2019;s also the other advantages mentioned like:&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Consistency in the model (easing mapping tools and development), &lt;/li&gt;      &lt;li&gt;Comprehension and usage of the model (this table PK is what 4 columns? And joins this other table with what 3 columns?) because the PK is just TableNameId and joins with the FK named TableNameId &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;The last point I don&amp;#x2019;t understand. You say CustomerProductID 3922 means nothing. Yet CustomerId 23 has meaning? Why? Only if you look it up in the Customers table&amp;#x2026; I just hope you don&amp;#x2019;t show CustomerId 23 in your UI, because then you just exposed the PK, and you can&amp;#x2019;t ever change it easily.&lt;/p&gt;    &lt;p&gt;I&amp;#x2019;ll concede to the argument that it&amp;#x2019;s not completely 3NF. But if you go this way, why not make all the tables 5NF mandatory?&lt;/p&gt;    &lt;p&gt;Just my 0.02 &amp;#x20AC;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;And just to clear Jeff Smith's doubts:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;When you create your tables, and you are adding your identity primary keys, do you also create additional unique constraints to all of your tables to ensure you have data integrity?&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Got me thinking in the design of the models that I currently adhere, and why I like them:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Yes, of course.      &lt;br /&gt;But maybe I wasn't explicit in my last comment (or there's some ambiguity in my terms). To me TableNameId is the PK of the table. It's &amp;quot;private&amp;quot; and not exposed to the business. If the natural key (defined by the business) is just a number, I normally use TableNameNumber (eg: CustomerNumber, ProductNumber). This column is visible to the business, and follows the business rules (no gaps, prefixes, suffixes, etc).       &lt;br /&gt;This way the model is very consistent, predictable, flexible and usable. It may have some overhead (not much), and not be completely normalized, but to me it's a good compromise.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;   &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a1b7e48d-f43b-41b3-9159-47948c46c119" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Marcas Technorati:  		&lt;a href="http://technorati.com/tags/SQL/" rel="tag"&gt;SQL&lt;/a&gt; 		,  		&lt;a href="http://technorati.com/tags/Architecture/" rel="tag"&gt;Architecture&lt;/a&gt; 		&lt;/div&gt;&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-6594608942522062557?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/6594608942522062557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=6594608942522062557' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/6594608942522062557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/6594608942522062557'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2007/09/yet-another-pk-debate.html' title='Yet another PK debate'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-4756327816592405664</id><published>2007-06-06T11:10:00.001+01:00</published><updated>2007-06-12T00:19:54.219+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><title type='text'></title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://andre-silva-cardoso.blogspot.com/2007/06/trends-in-programming-languages.html"&gt;&lt;span style="font-size:180%;"&gt;Trends in Programming Languages&lt;/span&gt;&lt;/a&gt;&lt;p&gt;It’s been a while since my last post, due to work pressure and little spare time. But in between some code analysis for the maintenance projects I’m involved, the preparation of a Linq presentation and some new blogs I discovered, I’ve been thinking about program language evolution. &lt;p&gt;It’s not new that imperative languages are integrating functional characteristics. The novelty is the big push by Microsoft, mainly Anders Helsjberg and the .NET team in that direction. Right now, we have XAML, WPF, WCF, and Linq, SilverLight, Entities, VS Orcas just ahead. I still remember the backlash that Java received because it incorporated Garbage Collection, and a Virtual Machine that run bytecode. Nowadays, the main platforms (C# and Java) all include these characteristics, and the new contenders (Ruby, Python) all incorporate it. &lt;p&gt;Recently I found a great blog that explains the characteristics and advantages of functional programming, in a way that our imperative brains can associate with. In the aptly named article &lt;a href="http://www.defmacro.org/ramblings/fp.html"&gt;Functional Programming For The Rest of Us&lt;/a&gt;, the author presents the following advantages: &lt;ul&gt;&lt;li&gt;&lt;b&gt;Greater Expressiveness&lt;/b&gt;, which equates to less lines of code and less bugs;&lt;u&gt;&lt;/u&gt; &lt;li&gt;&lt;b&gt;Meta-programming&lt;/b&gt; in the &lt;b&gt;same language&lt;/b&gt;, dismissing the need to learn a new languge and displacing many code generators;&lt;u&gt;&lt;/u&gt; &lt;li&gt;&lt;b&gt;Code as Data&lt;/b&gt; (in Lisp, it’s possible to treat code as data, by quoting), opening the door to code manipulation, analysis and generation;&lt;u&gt;&lt;/u&gt; &lt;li&gt;&lt;b&gt;Data as Code&lt;/b&gt; (in Lisp, a data structure can be “executed”);&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;li&gt;&lt;b&gt;Composibility&lt;/b&gt;, or the possibility to change/define an application behaviour by the simple composition of functions;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;li&gt;&lt;b&gt;No SIDE EFFECTS&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;ul&gt;&lt;li&gt;&lt;b&gt;Easier testing &lt;/b&gt;as the result of a function depends only on it’s arguments and produces no side effects. This way a test with the same arguments has always the same behaviour;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;li&gt;&lt;b&gt;Debugging&lt;/b&gt; is simpler as there are no dependencies on Global State;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;li&gt;&lt;b&gt;Concurrency&lt;/b&gt; (with the advent of multi-cores, this is extremely important) scales much better, because locks aren’t necessary because there is no shared state;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;li&gt;&lt;b&gt;Hot code deployment&lt;/b&gt;, without the need to persist and import state (it is passed on the stack in the arguments), it becomes possible to substitute code without stopping the system;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;li&gt;&lt;b&gt;Machine assisted proofs and Optimizations&lt;/b&gt;, without state and side effects, it’s possible to reason about the functions and demonstrate some characteristics about it&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;From my recollections, this blog and some other blogs on Functional Programming, these are the characteristics attributed to Functional Programming Languages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Anonymous Functions&lt;/b&gt; (lambda calculus) &lt;li&gt;&lt;b&gt;Type Inference&lt;/b&gt; &lt;li&gt;&lt;b&gt;Higher Order Functions&lt;/b&gt; (functions as a first citizen language construct. Can receive and apply functions passed as arguments) &lt;li&gt;&lt;b&gt;Currying&lt;/b&gt; (adaptation to an interface, by fixing one or more arguments) &lt;ul&gt;&lt;li&gt;&lt;b&gt;int pow(int i, int j); &lt;/b&gt;&lt;li&gt;&lt;b&gt;square = int pow(int i, 2);&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Lazy Evaluation&lt;/b&gt; allows: &lt;ul&gt;&lt;li&gt;New types of optimization (complex calculations that are not used aren't computed) &lt;li&gt;Creation of new abstract control structures &lt;li&gt;Infinite data structures &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Continuations&lt;/b&gt; (allows the storing of state and the definition of return point or the function to execute)&lt;b&gt;&lt;/b&gt; &lt;li&gt;&lt;b&gt;Pattern Matching &lt;/b&gt;(definition of functions based on types, values and expressions) &lt;li&gt;&lt;b&gt;Closures &lt;/b&gt;(functions that can reference the encompassing environment, typically defined in the body of another function, allowing the association of intermediate set of data with the function: &lt;a title="http://en.wikipedia.org/wiki/Closure_%28computer_science%29" href="http://en.wikipedia.org/wiki/Closure_%28computer_science%29"&gt;http://en.wikipedia.org/wiki/Closure_%28computer_science%29&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;&lt;b&gt;Why does it matter or In what way does it affect me?&lt;/b&gt;&lt;/h4&gt;&lt;p&gt;Due to the natural evolution of micro-processors, the future doesn't hold increases in speed but in integration of multiple cores in the same die. Because of this, it becomes very important to not limit the concurrency, which is simpler in functional programming (because of no shared state and the expressiveness). &lt;p&gt;Also the evolution in the .NET space points in the same direction (transition from imperative to declarative), with the eminent arrival of Linq. It's clear in the .NET evolution the trend to a more declarative style with the incorporation of many characteristics of Functional Programming. &lt;h4&gt;&lt;b&gt;.NET evolution&lt;/b&gt;&lt;/h4&gt;&lt;h2&gt;&lt;b&gt;C# 1.0&lt;/b&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Function Pointers&lt;/b&gt; (&lt;b&gt;delegate&lt;/b&gt;)&lt;b&gt; &lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;&lt;strong&gt;&lt;b&gt;C# 2.0&lt;/b&gt;&lt;/strong&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Limited &lt;strong&gt;Continuations&lt;/strong&gt; (&lt;b&gt;yield&lt;/b&gt;) &lt;li&gt;&lt;b&gt;Closures &lt;/b&gt;(anonymous methods)&lt;b&gt; &lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;&lt;b&gt;C# 3.0&lt;/b&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Expressiviness&lt;/b&gt; &lt;ul&gt;&lt;li&gt;Query expressions: &lt;b&gt;from x in … &lt;/b&gt;&lt;li&gt;Automatic Properties (&lt;b&gt;get; set;&lt;/b&gt;) &lt;li&gt;Partial Methods (“lightweight” event handling) &lt;li&gt;Extension Methods: public static void Print(&lt;b&gt;this string&lt;/b&gt; s) &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Type Inference &lt;/b&gt;for local variables (var) &lt;li&gt;&lt;b&gt;Lambda Expressions/Anonymous functions&lt;/b&gt; (x =&amp;gt; x * x) &lt;li&gt;&lt;b&gt;Anonymous Types&lt;/b&gt; (new {c.name, c.Phone})&lt;b&gt; &lt;/b&gt;&lt;li&gt;&lt;b&gt;Code as Data &lt;/b&gt;(ExpressionTrees) &lt;ul&gt;&lt;li&gt;Func&amp;lt;int, bool&amp;gt; nonExprLambda = x =&amp;gt; (x &amp;amp; 1) == 0; &lt;ul&gt;&lt;li&gt;Initizalizes a delegate: public delegate T Func&amp;lt;T, A&amp;gt;(A a); &lt;li&gt;Expression&amp;lt;Func&amp;lt;int, bool&amp;gt;&amp;gt; exprLambda = x =&amp;gt; (x &amp;amp; 1) == 0; &lt;li&gt;&lt;b&gt;Is equivalent to &lt;/b&gt;&lt;li&gt;ParameterExpression xParam = Expression.Parameter(typeof(int), "x");&lt;br /&gt;Expression&amp;lt;Func&amp;lt;int, bool&amp;gt;&amp;gt; exprLambda = Expression.Lambda&amp;lt;Func&amp;lt;int, bool&amp;gt;&amp;gt;(&lt;br /&gt;Expression.EQ(&lt;br /&gt;Expression.BitAnd(xParam, Expression.Constant(1)),&lt;br /&gt;Expression.Constant(0)),&lt;br /&gt;xParam);&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;References&lt;/h4&gt;&lt;h2&gt;&lt;b&gt;Functional Programming explained&lt;/b&gt;&lt;a href="http://www.defmacro.org/ramblings/fp.html"&gt; &lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="http://www.defmacro.org/ramblings/fp.html"&gt;http://www.defmacro.org/ramblings/fp.html&lt;/a&gt;&lt;a href="http://www.defmacro.org/ramblings/lisp.html"&gt; &lt;/a&gt;&lt;p&gt;&lt;a href="http://www.defmacro.org/ramblings/lisp.html"&gt;http://www.defmacro.org/ramblings/lisp.html&lt;/a&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;h2&gt;&lt;b&gt;Artigo MSDN C# 3.0&lt;/b&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/07/06/CSharp30/default.aspx?loc=en"&gt; &lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/07/06/CSharp30/default.aspx?loc=en"&gt;http://msdn.microsoft.com/msdnmag/issues/07/06/CSharp30/default.aspx?loc=en&lt;/a&gt; &lt;h2&gt;&lt;b&gt;Expression Trees &lt;/b&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="http://www.interact-sw.co.uk/iangblog/2005/09/30/expressiontrees"&gt;http://www.interact-sw.co.uk/iangblog/2005/09/30/expressiontrees&lt;/a&gt; &lt;p&gt;&lt;a href="http://spellcoder.com/blogs/bashmohandes/archive/2006/06/12/143.aspx"&gt;http://spellcoder.com/blogs/bashmohandes/archive/2006/06/12/143.aspx&lt;/a&gt; &lt;h2&gt;&lt;b&gt;Closures &lt;/b&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="http://pluralsight.com/blogs/dbox/archive/2005/04/27/7780.aspx"&gt;http://pluralsight.com/blogs/dbox/archive/2005/04/27/7780.aspx&lt;/a&gt; &lt;p&gt;&lt;a href="http://www.claassen.net/geek/blog/2006/08/c-closures.html"&gt;http://www.claassen.net/geek/blog/2006/08/c-closures.html&lt;/a&gt; &lt;h2&gt;&lt;b&gt;Blogs &lt;/b&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="http://blogs.msdn.com/wesdyer/rss.xml"&gt;http://blogs.msdn.com/wesdyer/rss.xml&lt;/a&gt; &lt;p&gt;&lt;a href="http://themechanicalbride.blogspot.com/feeds/posts/default"&gt;http://themechanicalbride.blogspot.com/feeds/posts/default&lt;/a&gt; &lt;p&gt;&lt;a title="http://wesnerm.blogs.com/net_undocumented/index.rdf" href="http://wesnerm.blogs.com/net_undocumented/index.rdf"&gt;http://wesnerm.blogs.com/net_undocumented/index.rdf&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-4756327816592405664?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/4756327816592405664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=4756327816592405664' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/4756327816592405664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/4756327816592405664'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2007/06/trends-in-programming-languages.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-1520476194182479171</id><published>2007-01-24T23:04:00.002Z</published><updated>2008-02-18T15:58:48.503Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>.NET Tools</title><content type='html'>Recently I've been looking at tools that could alleviate the burden on lead programmers reviewing code produced by junior programmers, measuring it's quality and assisting in finding errors. But to me (and others), the current tools are not up to the task. It seems that the tools I could use with C a decade ago (while studying in the university) were more powerful than the current set of tools available for .NET or Java.&lt;br /&gt;&lt;br /&gt;Only recently I found some tools that can help in this task (and the most promising one isn't yet available) and are affordable or even free (I don't know if many of the commercial tools are better).&lt;br /&gt;&lt;br /&gt;The first tool, known by many programmers, but (in my opinion) used by few (me included) is &lt;a href="http://www.gotdotnet.com/Team/FxCop/"&gt;FxCop &lt;/a&gt;by Microsoft. The tool is a code analysis tool, that does some style checking and validates that software conforms to a set of rules, signaling non conformities as defects. In my experience, if the tool is used from the start of a project, it may succeed. On a project already built, it's difficult to use (on a recent project that I work in, it found over 1000 errors. I didn't check if they were false positives or errors that can be dismissed as minor inconsistencies).&lt;br /&gt;&lt;br /&gt;The next one, is &lt;a href="http://www.ndepend.com/"&gt;nDepend &lt;/a&gt;. It allows the identification of problem areas in the overall architecture of a program (solution), identifying big/complex methods, non-cohesive classes and helps in understanding the program at an higher level. It allows the definition of rules and alerts with a SQL like language. The site has some videos showing its usage.&lt;br /&gt;I haven't tried it yet on a complex project, but if it easily allows to flag calls from one layer to the wrong layer (UI to data, or business to UI) it seems promising. Another feature that I'm eager to try is the generation of metrics (# lines, # methods, # classes, cyclomatic complexity, % comments).&lt;br /&gt;&lt;br /&gt;A little on the side are the "projects" like AspectC# and other languages that allow the separation of concerns and the "injection" of code, that could be used and parametrized to catch some of these errors. But it's a hard task just to get to a point that provides an interesting return on the investment made (in setup and parameterization time).&lt;br /&gt;&lt;br /&gt;The last tool that I read about (this one isn't out yet), is &lt;a href="http://wesnerm.blogs.com/net_undocumented/nstatic/index.html"&gt;nStatic&lt;/a&gt;. Now if this tool does half of what's shown and talked in Wesner Moise's blog, it will be a life saver. Apparently it interprets the program not as lines of code in a text file (like most IDEs do today), but in an functional way in internal memory (maybe those ASTs - syntax trees that we learned in compiler classes). With this representation, and using an AI workbench, it computes the paths in the program that generate errors (and the assumptions for those errors).&lt;br /&gt;&lt;br /&gt;This reminds me of the first time I heard of an internal representation that wasn't the text source file . I think it was Visual Age for Java, that stored the tree representing the program in a DB . This approach (VA failed maybe for being ahead of it's time, and some shortcomings in speed and in error tolerance) has an enormous potential as shown by the current projects by JetBrains with Metaprogramming System and Intentional Software (I haven't tried either and I don't know if Intentional Software has some tool available for test). Just imagine the refactorings possible this way. And if it's possible to plug-in in to this representation, it would be much easier to find coupling mistakes (between layers), copy-pasted code, etc..&lt;br /&gt;&lt;br /&gt;But back to nStatic, one of the features mentioned was finding the possible exceptions for a method and it's assumptions (for the exception). That will assist in finding many subtle errors. I'm just curious to try the tool (I'm thinking in applying for the beta), and have some questions/requests:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;will it allow to detect similar or duplicate code (I found &lt;a href="http://www.redhillconsulting.com.au/products/simian/"&gt;Simian&lt;/a&gt;, but I haven't tried it on my complex project that I know has much similar code, to figure out if the match is by line or by abstract representation of the code)?&lt;/li&gt;&lt;li&gt;will it be extensible, or allow access to the internal representation of the code, or provide an API?&lt;/li&gt;&lt;li&gt;can the scan focus on one particular method (and be completely thorough with that method)?&lt;/li&gt;&lt;li&gt;will it allow a fine grained control over loops (limit the # of times in a particular loop by annotation or coment) and other constructs?&lt;/li&gt;&lt;li&gt;will it allow exporting graphs, assumptions to a XML/text format?&lt;/li&gt;&lt;li&gt;it could be used to track dependencies(?) between assemblies/classes?&lt;/li&gt;&lt;li&gt;could it generate some metrics, and integrate some features from other tools, meaning that it would be the only code analysis tool needed :)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-1520476194182479171?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/1520476194182479171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=1520476194182479171' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/1520476194182479171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/1520476194182479171'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2007/01/blog-post.html' title='.NET Tools'/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-137129442262833062</id><published>2006-11-22T11:21:00.001Z</published><updated>2006-11-22T11:49:23.466Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'></title><content type='html'>&lt;p&gt;&lt;a href="http://andre-silva-cardoso.blogspot.com/2006/11/net-office-interop.html"&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;.NET &amp; Office Interop&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Everyone knows what a pain it is to configure it correctly. Numerous articles try to lay out the possible solutions, workarounds,&lt;/p&gt;&lt;p&gt;Here's what worked for me (it it ever gets there), on a Win XP Pro, Visual Studio 2003, ASP.NET 1.1 configuration:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Install Office Interop DLLs&lt;/li&gt;&lt;li&gt;Add the PIA DLLs to the VS Solution&lt;/li&gt;&lt;li&gt;Add ASP.NET to the Administrators group?&lt;br /&gt;&lt;strong&gt;or&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Create a user with Admininstrator permissions (at least Debugger group or Power User)?&lt;/li&gt;&lt;li&gt;Impersonate the user in Web.Config&lt;/li&gt;&lt;li&gt;Give permissions to the directories to be read and written by the application (in my case read the template directory and write in the directory where the word document is created)&lt;/li&gt;&lt;li&gt;Give permissions in the the registry to the user to the Software Office key (&lt;a title="http://support.microsoft.com/kb/236592" href="http://support.microsoft.com/kb/236592"&gt;http://support.microsoft.com/kb/236592&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Modify COM permissions, allowing the user to launch and activate components (&lt;a title="http://support.microsoft.com/kb/288366/" href="http://support.microsoft.com/kb/288366/"&gt;http://support.microsoft.com/kb/288366/&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Modify Microsoft Word Component in COM+ so the user impersonates it (&lt;a href="http://forums.asp.net/1091578/ShowPost.aspx"&gt;http://forums.asp.net/1091578/ShowPost.aspx&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Reinstall ASP.NET (aspnet_regiis -i, &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=363330&amp;amp;SiteID=1"&gt;http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=363330&amp;SiteID=1&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Reboot the machine&lt;/li&gt;&lt;li&gt;Cross your fingers&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Considerations:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Don't Use It &lt;a href="http://support.microsoft.com/?id=257757"&gt;http://support.microsoft.com/?id=257757&lt;/a&gt;; &lt;a title="http://support.microsoft.com/kb/317316/" href="http://support.microsoft.com/kb/317316/"&gt;http://support.microsoft.com/kb/317316/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Safe Mode &lt;a title="http://support.microsoft.com/kb/827706" href="http://support.microsoft.com/kb/827706"&gt;http://support.microsoft.com/kb/827706&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Errors:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;PIA not found &lt;a title="http://support.microsoft.com/kb/823996" href="http://support.microsoft.com/kb/823996"&gt;http://support.microsoft.com/kb/823996&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Rejected Safe Mode Action:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Terminal Services &amp; Outlook &lt;a title="http://support.microsoft.com/?kbid=" href="http://support.microsoft.com/?kbid=319517"&gt;http://support.microsoft.com/?kbid=319517&lt;/a&gt;&lt;/li&gt;&lt;li&gt;COM+ configuration &lt;a title="http://support.microsoft.com/kb/288366/" href="http://support.microsoft.com/kb/288366/"&gt;http://support.microsoft.com/kb/288366/&lt;/a&gt;; &lt;a title="http://support.microsoft.com/kb/288368/" href="http://support.microsoft.com/kb/288367/"&gt;http://support.microsoft.com/kb/288367/&lt;/a&gt; (verify registry IDs!); &lt;a title="http://support.microsoft.com/kb/288368/" href="http://support.microsoft.com/kb/288368/"&gt;http://support.microsoft.com/kb/288368/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Start Word/Excel in "safe mode", "automation" running as the specified user&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Clean up: Help --&amp;gt; About ... --&amp;gt; Disabled Items --&amp;gt; Enable (&lt;a title="http://support.microsoft.com/kb/813589" href="http://support.microsoft.com/kb/813589"&gt;http://support.microsoft.com/kb/813589&lt;/a&gt;; &lt;a title="http://support.microsoft.com/kb/827706" href="http://support.microsoft.com/kb/827706"&gt;http://support.microsoft.com/kb/827706&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Server Execution Failed&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-137129442262833062?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/137129442262833062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=137129442262833062' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/137129442262833062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/137129442262833062'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/net-office-interop.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-2159379949941867856</id><published>2006-11-22T10:59:00.001Z</published><updated>2006-11-22T11:01:27.416Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'></title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;strong&gt;&lt;a name="2159379949941867856"&gt;&lt;/a&gt;&lt;p&gt;&lt;a href="http://andre-silva-cardoso.blogspot.com/2006/11/running-visual-studio-2003-in-vista.html"&gt;Running Visual Studio 2003 in Vista&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/strong&gt;&lt;/span&gt;Apparently, the best option to run Visual Studio 2003 inside Vista is by using Virtual PC. And the new version of Virtual PC (2007, still in Beta), is the best choice in terms of speed:&lt;/p&gt;&lt;p&gt;&lt;a title="http://codebetter.com/blogs/peter.van.ooijen/archive/2006/11/10/Vista_2C00_-Visual-studio-2003_2C00_-Virtual-PC-2007-_2800_and-the-right-hardware_2900_-.aspx" href="http://codebetter.com/blogs/peter.van.ooijen/archive/2006/11/10/Vista_2C00_-Visual-studio-2003_2C00_-Virtual-PC-2007-_2800_and-the-right-hardware_2900_-.aspx"&gt;http://codebetter.com/blogs/peter.van.ooijen/archive/2006/11/10/Vista_2C00_-Visual-studio-2003_2C00_-Virtual-PC-2007-_2800_and-the-right-hardware_2900_-.aspx&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-2159379949941867856?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/2159379949941867856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=2159379949941867856' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/2159379949941867856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/2159379949941867856'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/running-visual-studio-2003-in-vista.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-2947980511436808121</id><published>2006-11-21T16:29:00.001Z</published><updated>2006-11-21T16:41:48.042Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'></title><content type='html'>&lt;p&gt;&lt;a href="http://andre-silva-cardoso.blogspot.com/2006/11/potentially-dangerous-requestform-value.html"&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;A potentially dangerous Request.Form value was detected&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Some articles related to this error message, and useful for further investigation:&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.madtechnology.net/blogs/chris/archive/2004/03/20/366.aspx"&gt;http://blogs.madtechnology.net/blogs/chris/archive/2004/03/20/366.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;a href="http://www.asp.net/Forums/ShowPost.aspx?tabindex=1&amp;PostID=388929"&gt;http://www.asp.net/Forums/ShowPost.aspx?tabindex=1&amp;amp;PostID=388929&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.asp.net/faq/RequestValidation.aspx"&gt;http://www.asp.net/faq/RequestValidation.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.aspcode.net/articles/l_en-US/t_default/ASP.NET/A-potentially-dangerous-Request.Form-value-was-detected-from-the-client_article_147.aspx"&gt;http://www.aspcode.net/articles/l_en-US/t_default/ASP.NET/A-potentially-dangerous-Request.Form-value-was-detected-from-the-client_article_147.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dotnetjunkies.com/HowTo/3ABCD244-CC7C-4CED-B64E-BCF05191CDAB.dcik"&gt;http://www.dotnetjunkies.com/HowTo/3ABCD244-CC7C-4CED-B64E-BCF05191CDAB.dcik&lt;/a&gt;&lt;br /&gt;&lt;/u&gt;&lt;p&gt;&lt;a href="http://www.mikeschinkel.com/blog/APotentiallyDangerousRequestFormValueWasDetected.aspx"&gt;http://www.mikeschinkel.com/blog/APotentiallyDangerousRequestFormValueWasDetected.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://kbase.vircom.com/Novo/default.asp?id=1041&amp;Lang=1"&gt;http://kbase.vircom.com/Novo/default.asp?id=1041&amp;amp;Lang=1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=743559&amp;SiteID=21"&gt;http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=743559&amp;amp;SiteID=21&lt;/a&gt;&lt;br /&gt;&lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=544937&amp;SiteID=1"&gt;http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=544937&amp;amp;SiteID=1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/821343/"&gt;http://support.microsoft.com/kb/821343/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/PAGHT000003.asp?_r=1"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/PAGHT000003.asp?_r=1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/04/12/WebQA/"&gt;http://msdn.microsoft.com/msdnmag/issues/04/12/WebQA/&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-2947980511436808121?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/2947980511436808121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=2947980511436808121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/2947980511436808121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/2947980511436808121'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/potentially-dangerous-requestform-value.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-3797201299276691447</id><published>2006-11-21T13:02:00.001Z</published><updated>2006-11-21T16:25:13.922Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Debugging JavaScript&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Good article on how to debug JavaScript in Visual Studio, including all the options that need to be activated both in IE and VS.&lt;/p&gt;&lt;p&gt;&lt;a title="http://weblogs.asp.net/pglavich/archive/2006/11/02/Debugging-Javascript-on-a-Live-site-_2D00_-Fun-and-Games.aspx" href="http://weblogs.asp.net/pglavich/archive/2006/11/02/Debugging-Javascript-on-a-Live-site-_2D00_-Fun-and-Games.aspx"&gt;http://weblogs.asp.net/pglavich/archive/2006/11/02/Debugging-Javascript-on-a-Live-site-_2D00_-Fun-and-Games.aspx&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-3797201299276691447?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/3797201299276691447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=3797201299276691447' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/3797201299276691447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/3797201299276691447'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/debugging-javascript.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-5854751686003129050</id><published>2006-11-20T15:32:00.000Z</published><updated>2006-11-21T12:42:11.799Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Career'/><title type='text'></title><content type='html'>&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Does Microsoft Certification Matter?&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;A while ago, I found the following discussion about certification in &lt;a title="blocked::http://www.theserverside.net/news/thread.tss?thread_id=" href="http://www.theserverside.net/news/thread.tss?thread_id=32963"&gt;http://www.theserverside.net/news/thread.tss?thread_id=32963&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;In my opinion, Certification does matter. Of course it doesn't replace real world experience in projects, and it doesn't assure the quality of the certified people. But it does validate some basic knowledge, and gives some new insights in some aspects that aren't often used in a day to day basis.&lt;/p&gt;&lt;p&gt;Another aspect is the recognition/valuation of the certification: as more people get certified and the certification spreads, the less value the certification has (even because some tricks used in the exams are widely known)&lt;/p&gt;&lt;p&gt;Microsoft acknowledges this situation, and launched a new generation of certifications (&lt;a href="http://www.microsoft.com/learning/mcp/newgen/"&gt;http://www.microsoft.com/learning/mcp/newgen/&lt;/a&gt;), topped by the MCA for the top Architects.&lt;/p&gt;&lt;p&gt;Update: A new article (&lt;a href="http://www.infoworld.com/article/06/11/17/47OPanalysts_1.html"&gt;http://www.infoworld.com/article/06/11/17/47OPanalysts_1.html&lt;/a&gt;), questions the value of certifications, as average pay for IT certifications dropped 2% between 1/Jul and 1/Oct.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-5854751686003129050?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/5854751686003129050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=5854751686003129050' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/5854751686003129050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/5854751686003129050'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/does-microsoft-certification-matter.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-417141955586652338</id><published>2006-11-16T11:07:00.000Z</published><updated>2006-11-16T16:30:31.703Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><title type='text'></title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Enterprise Platforms&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Thinking about Enterprise Platforms, I realized what a great platform SQL is. Despite all the hype around other servers, more aligned with the SOA and Web 2.0 trends, SQL Server has become a true Enterprise Platform.&lt;br /&gt;&lt;br /&gt;It's  a great data storage server, and has been constantly gaining ground on the so called big DB Servers (Oracle and IBM DB2), with features like &lt;strong&gt;Online Index Rebuild&lt;/strong&gt;, &lt;strong&gt;Table Partitioning&lt;/strong&gt;, &lt;strong&gt;Mirroring&lt;/strong&gt;, and &lt;strong&gt;Snapshot Isolation&lt;/strong&gt;. On the performance side, it swept the top TPC performance benchmarks.&lt;br /&gt;&lt;br /&gt;But that's the beginning of the story. With SQL 2005, it gained:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Message Queuing &lt;/strong&gt;with &lt;strong&gt;Service Broker&lt;/strong&gt;;&lt;/li&gt;&lt;li&gt;bundled &lt;strong&gt;Reporting Services &lt;/strong&gt;(not only the generation but also the delivery);&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Notification Services &lt;/strong&gt;(and a new mail API);&lt;/li&gt;&lt;li&gt;&lt;strong&gt;CLR&lt;/strong&gt; integration (v2.0), and if the .NET Framework 3.0 is included, we even get &lt;strong&gt;Communications&lt;/strong&gt;, &lt;strong&gt;Workflow &lt;/strong&gt;and &lt;strong&gt;Presentation Foundation&lt;/strong&gt; for free;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Analysis Services &lt;/strong&gt;for BI;&lt;/li&gt;&lt;li&gt;A true &lt;strong&gt;Enterprise ETL &lt;/strong&gt;tool/environment with &lt;strong&gt;Integration Services&lt;/strong&gt;;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;And it’s not just targeting the enterprise, with the Express edition available for free (&lt;a href="http://msdn.microsoft.com/vstudio/express/sql/download/"&gt;http://msdn.microsoft.com/vstudio/express/sql/download/&lt;/a&gt;),  everyone can have a top performing Database server (limited to 4 GB DB, 1 GB of RAM and 1 CPU) with Management Studio Express, Reporting Services and Full-Text Search.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-417141955586652338?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/417141955586652338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=417141955586652338' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/417141955586652338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/417141955586652338'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/enterprise-platforms-thinking-about.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-9080536870911386884</id><published>2006-11-15T14:13:00.000Z</published><updated>2006-11-15T15:15:15.868Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'></title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;strong&gt;ASP.NET Web Application Projects&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;(For internal use&amp;search)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/asp.net/aa336618.aspx"&gt;http://msdn2.microsoft.com/en-us/asp.net/aa336618.aspx&lt;/a&gt; (HomePage)&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/vstudio/default.aspx?pull=/library/en-us/dnvs05/html/WAP.asp"&gt;http://msdn.microsoft.com/vstudio/default.aspx?pull=/library/en-us/dnvs05/html/WAP.asp&lt;/a&gt; (Introduction)&lt;br /&gt;&lt;a href="http://webproject.scottgu.com/"&gt;http://webproject.scottgu.com/&lt;/a&gt; (Scott Guthrie)&lt;br /&gt;&lt;a href="http://webproject.scottgu.com/CSharp/Default.aspx"&gt;http://webproject.scottgu.com/CSharp/Default.aspx&lt;/a&gt; (Tutorial C#)&lt;br /&gt;&lt;a href="http://webproject.scottgu.com/CSharp/Migration2/Migration2.aspx"&gt;http://webproject.scottgu.com/CSharp/Migration2/Migration2.aspx&lt;/a&gt;&lt;br /&gt;(Migration)&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2006/05/08/445742.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2006/05/08/445742.aspx&lt;/a&gt;&lt;br /&gt;(Release)&lt;br /&gt;&lt;a href="http://forums.asp.net/thread/1279716.aspx"&gt;http://forums.asp.net/thread/1279716.aspx&lt;/a&gt;&lt;br /&gt;(FAQ and Known Issues)&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-9080536870911386884?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/9080536870911386884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=9080536870911386884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/9080536870911386884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/9080536870911386884'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/asp.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-6352001516187749928</id><published>2006-11-15T12:34:00.000Z</published><updated>2006-11-17T10:38:36.587Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'></title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;strong&gt;SQL Unused Space problem with heaps&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;SQL overallocates space in heap tables, and doesn't reuses the space.&lt;br /&gt;&lt;a href="http://support.microsoft.com/default.aspx/kb/924947"&gt;http://support.microsoft.com/default.aspx/kb/924947&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-6352001516187749928?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/6352001516187749928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=6352001516187749928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/6352001516187749928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/6352001516187749928'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/sql-unused-space-problem-with-heaps-sql.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-7473575757020247715</id><published>2006-11-15T11:44:00.000Z</published><updated>2006-11-15T11:49:45.964Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Operations'/><title type='text'></title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Operação&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;(for internal use&amp;search)&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;MOF&lt;br /&gt;&lt;a title="blocked::http://www.microsoft.com/technet/itsolutions/cits/mo/mof/moftool.mspx" href="http://www.microsoft.com/technet/itsolutions/cits/mo/mof/moftool.mspx"&gt;http://www.microsoft.com/technet/itsolutions/cits/mo/mof/moftool.mspx&lt;/a&gt;  (MOF Tool)&lt;br /&gt;&lt;a title="blocked::http://www.microsoft.com/technet/itsolutions/cits/mo/mof/default.mspx" href="http://www.microsoft.com/technet/itsolutions/cits/mo/mof/default.mspx"&gt;http://www.microsoft.com/technet/itsolutions/cits/mo/mof/default.mspx&lt;/a&gt;  (MOF Guides)&lt;br /&gt;&lt;a title="http://www.microsoft.com/learning/syllabi/en-us/1737bfinal.mspx" href="http://www.microsoft.com/learning/syllabi/en-us/1737bfinal.mspx"&gt;http://www.microsoft.com/learning/syllabi/en-us/1737bfinal.mspx&lt;/a&gt;  (Cursos)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ITIL&lt;br /&gt;&lt;a title="blocked::http://www.nextslm.org/itil/ebook_archive.htm" href="http://www.nextslm.org/itil/ebook_archive.htm"&gt;http://www.nextslm.org/itil/ebook_archive.htm&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://www.itgovernance.co.uk/products/358" href="http://www.itgovernance.co.uk/products/358"&gt;http://www.itgovernance.co.uk/products/358&lt;/a&gt;&lt;br /&gt;&lt;a title="http://www.kpeak.com/Outlines/ITIL/ITIL-Foundations-and-MOF-Essentials.html" href="http://www.kpeak.com/Outlines/ITIL/ITIL-Foundations-and-MOF-Essentials.html"&gt;http://www.kpeak.com/Outlines/ITIL/ITIL-Foundations-and-MOF-Essentials.html&lt;/a&gt;&lt;br /&gt;&lt;a title="http://www.exin-exams.com/default.asp?menuID=" href="http://www.exin-exams.com/default.asp?menuID=%7BB1D15F54-7154-4B36-A011-FE6BC38AB461%7D"&gt;http://www.exin-exams.com/default.asp?menuID=%7BB1D15F54-7154-4B36-A011-FE6BC38AB461%7D&lt;/a&gt;   (Exames)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-7473575757020247715?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/7473575757020247715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=7473575757020247715' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/7473575757020247715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/7473575757020247715'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/operao-for-internal-use-mof-httpwww.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-1751202890597083249</id><published>2006-11-15T11:41:00.000Z</published><updated>2006-11-16T10:12:25.590Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;SQL Misc articles &lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;(for internal use&amp;search)&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Reporting Services&lt;br /&gt;&lt;a title="blocked::http://www.codeproject.com/books/MSReportingServices.asp" href="http://www.codeproject.com/books/MSReportingServices.asp"&gt;http://www.codeproject.com/books/MSReportingServices.asp&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://www.simple-talk.com/sql/learn-sql-server/beginning-sql-server-2005-reporting-services-part-2/" href="http://www.simple-talk.com/sql/learn-sql-server/beginning-sql-server-2005-reporting-services-part-2/"&gt;http://www.simple-talk.com/sql/learn-sql-server/beginning-sql-server-2005-reporting-services-part-2/&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://www.sqlservercentral.com/columnists/aSayed/2640.asp" href="http://www.sqlservercentral.com/columnists/aSayed/2640.asp"&gt;http://www.sqlservercentral.com/columnists/aSayed/2640.asp&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://www.sqlservercentral.com/columnists/jluetkehoelter/reportingservicespartioverviewarchitectureandinsta.asp" href="http://www.sqlservercentral.com/columnists/jluetkehoelter/reportingservicespartioverviewarchitectureandinsta.asp"&gt;http://www.sqlservercentral.com/columnists/jluetkehoelter/reportingservicespartioverviewarchitectureandinsta.asp&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://www.sqlservercentral.com/columnists/jspink/2585.asp" href="http://www.sqlservercentral.com/columnists/jspink/2585.asp"&gt;http://www.sqlservercentral.com/columnists/jspink/2585.asp&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://msdn.microsoft.com/msdnmag/issues/06/10/SQLServer2005/default.aspx" href="http://msdn.microsoft.com/msdnmag/issues/06/10/SQLServer2005/default.aspx"&gt;http://msdn.microsoft.com/msdnmag/issues/06/10/SQLServer2005/default.aspx&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://www.sqlservercentral.com/columnists/bknight/designingyourfirstreportinreportingservices.asp" href="http://www.sqlservercentral.com/columnists/bknight/designingyourfirstreportinreportingservices.asp"&gt;http://www.sqlservercentral.com/columnists/bknight/designingyourfirstreportinreportingservices.asp&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://www.sqlservercentral.com/columnists/bknight/reportingservicesconditionalformatting.asp" href="http://www.sqlservercentral.com/columnists/bknight/reportingservicesconditionalformatting.asp"&gt;http://www.sqlservercentral.com/columnists/bknight/reportingservicesconditionalformatting.asp&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://www.simple-talk.com/sql/sql-server-2005/business-intelligence-in-sql-server-2005,-part-1/" href="http://www.simple-talk.com/sql/sql-server-2005/business-intelligence-in-sql-server-2005,-part-1/"&gt;http://www.simple-talk.com/sql/sql-server-2005/business-intelligence-in-sql-server-2005,-part-1/&lt;/a&gt; (Reporting Sols)&lt;a title="blocked::http://www.sqlservercentral.com/columnists/drussell/technoteinstallingsqlserver2005andvisualstudio2005.asp" href="http://www.sqlservercentral.com/columnists/drussell/technoteinstallingsqlserver2005andvisualstudio2005.asp"&gt;http://www.sqlservercentral.com/columnists/drussell/technoteinstallingsqlserver2005andvisualstudio2005.asp&lt;/a&gt; (Instalação Reporting Services)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Design&lt;br /&gt;&lt;a title="blocked::http://www.sqlservercentral.com/columnists/nKishore/sqlserver2005bestpractices.asp" href="http://www.sqlservercentral.com/columnists/nKishore/sqlserver2005bestpractices.asp"&gt;http://www.sqlservercentral.com/columnists/nKishore/sqlserver2005bestpractices.asp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Argumentos a favor de surrogate keys:&lt;br /&gt;&lt;a title="blocked::http://searchsqlserver.techtarget.com/general/0,295582,sid87_gci1156604,00.html" href="http://searchsqlserver.techtarget.com/general/0,295582,sid87_gci1156604,00.html"&gt;http://searchsqlserver.techtarget.com/general/0,295582,sid87_gci1156604,00.html&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://r937.com/20020620.html" href="http://r937.com/20020620.html"&gt;http://r937.com/20020620.html&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://www.bcarter.com/intsurr1.htm" href="http://www.bcarter.com/intsurr1.htm"&gt;http://www.bcarter.com/intsurr1.htm&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://www.aspfaq.com/show.asp?id=" href="http://www.aspfaq.com/show.asp?id=2504"&gt;http://www.aspfaq.com/show.asp?id=2504&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Argumentos a favor de natural keys:&lt;br /&gt;&lt;a title="blocked::http://www.solidqualitylearning.com/blogs/Dejan/archive/2005/02/24/434.aspx" href="http://www.solidqualitylearning.com/blogs/Dejan/archive/2005/02/24/434.aspxhttp://groups.google.com/group/microsoft.public.sqlserver.programming/msg/6d61dbf80d6f0fb6?hl=en&amp;amp;amp;amp;lr=&amp;ie=UTF-8&amp;amp;oe=UTF-8&amp;rnum=14"&gt;http://www.solidqualitylearning.com/blogs/Dejan/archive/2005/02/24/434.aspx&lt;br /&gt;http://groups.google.com/group/microsoft.public.sqlserver.programming/msg/6d61dbf80d6f0fb6?hl=en&amp;amp;amp;amp;lr=&amp;ie=UTF-8&amp;amp;oe=UTF-8&amp;rnum=14&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://groups.google.com/group/microsoft.public.sqlserver.programming/msg/6d61dbf80d6f0fb6?hl=" href="http://groups.google.com/group/microsoft.public.sqlserver.programming/msg/6d61dbf80d6f0fb6?hl=en&amp;amp;amp;lr=&amp;amp;ie=UTF-8&amp;oe=UTF-8&amp;amp;rnum=14" oe="UTF-8&amp;rnum=" lr="&amp;amp;amp;ie="&gt;http://groups.google.com/group/microsoft.public.sqlserver.programming/msg/6d61dbf80d6f0fb6?hl=en&amp;amp;lr=&amp;amp;ie=UTF-8&amp;oe=UTF-8&amp;amp;rnum=14&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lógica na BD&lt;br /&gt;&lt;a title="blocked::http://www.sqlsummit.com/Articles/LogicInTheDatabase.HTM" href="http://www.sqlsummit.com/Articles/LogicInTheDatabase.HTM"&gt;http://www.sqlsummit.com/Articles/LogicInTheDatabase.HTM&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Discussão sobre Stored Procedures vs Parameterized Queries&lt;br /&gt;&lt;a title="blocked::http://www.theserverside.net/news/thread.tss?thread_id=" href="http://www.theserverside.net/news/thread.tss?thread_id=31953#218082"&gt;http://www.theserverside.net/news/thread.tss?thread_id=31953#218082&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-1751202890597083249?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/1751202890597083249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=1751202890597083249' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/1751202890597083249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/1751202890597083249'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/sql-misc-articles-for-internal-use.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-5643114577550325924</id><published>2006-11-15T11:25:00.000Z</published><updated>2006-11-21T14:10:19.599Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'></title><content type='html'>&lt;strong&gt;&lt;span style="font-size:130%;"&gt;.NET&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;(for internal use&amp;search)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;.NET Performance Counters&lt;br /&gt;&lt;a title="blocked::http://www.extremeexperts.com/Net/Articles/NetCounters.aspx" href="http://www.extremeexperts.com/Net/Articles/NetCounters.aspx"&gt;http://www.extremeexperts.com/Net/Articles/NetCounters.aspx&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://www.aspheute.com/english/20000809.asp" href="http://www.aspheute.com/english/20000809.asp"&gt;http://www.aspheute.com/english/20000809.asp&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/97d0872a-96b3-41e4-8997-b174a9dbb87f.mspx?mfr=" href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/97d0872a-96b3-41e4-8997-b174a9dbb87f.mspx?mfr=true"&gt;http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/97d0872a-96b3-41e4-8997-b174a9dbb87f.mspx?mfr=true&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://msdn2.microsoft.com/en-us/library/fxk122b4(VS.80).aspx" href="http://msdn2.microsoft.com/en-us/library/fxk122b4(VS.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/fxk122b4(VS.80).aspx&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Debugging&lt;br /&gt;&lt;a href="http://blogs.msdn.com/tess/archive/2006/10/16/net-hang-debugging-walkthrough.aspx"&gt;http://blogs.msdn.com/tess/archive/2006/10/16/net-hang-debugging-walkthrough.aspx&lt;/a&gt;   (Tess Blog)&lt;br /&gt;&lt;a href="http://dotnetdebug.blogspot.com/"&gt;http://dotnetdebug.blogspot.com/&lt;/a&gt;   (Advanced .NET Debugging)&lt;br /&gt;&lt;a href="http://blogs.msdn.com/vancem/"&gt;http://blogs.msdn.com/vancem/&lt;/a&gt;   (Vance Morrison)&lt;br /&gt;&lt;a href="http://blogs.msdn.com/ricom"&gt;http://blogs.msdn.com/ricom&lt;/a&gt;   (Rico Mariani Performance)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-5643114577550325924?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/5643114577550325924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=5643114577550325924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/5643114577550325924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/5643114577550325924'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/blockedhttpwwwextremeexpertscomnetartic.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-7635841633845760176</id><published>2006-11-14T14:57:00.000Z</published><updated>2006-11-17T14:24:47.492Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'></title><content type='html'>&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Generic SQL Articles&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;(For internal use&amp;search)&lt;br /&gt;&lt;br /&gt;&lt;a title="Sort by URL" href="javascript:"&gt;URL&lt;/a&gt;&lt;br /&gt;Notes&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.sql-server-performance.com/vk_sql_best_practices.asp"&gt;SQL Server Database Coding Conventions, Best Practices, and Programming Guidelines&lt;/a&gt;&lt;br /&gt;SQL Server Database Coding Conventions, Best Practices, and Programming Guidelines&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://vyaskn.tripod.com/object_naming.htm"&gt;database object naming conventions&lt;/a&gt;&lt;br /&gt;database object naming conventions&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/sql/default.mspx"&gt;http://www.microsoft.com/sql/default.mspx&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/"&gt;SQL Server Central&lt;/a&gt;&lt;br /&gt;Apresenta bastantes artigos relativos a SQL 2000 (T-SQL, Administração, Optimização, Reporting Services, DTS) e também alguns de SQL 2005.&lt;br /&gt;&lt;br /&gt;Contém foruns de discussão bastante participados e permite testar os conhecimentos de SQL através de perguntas diárias enviadas pela comunidade.&lt;br /&gt;&lt;br /&gt;É ainda possível subscrever a mailing list diária, com os artigos, discussões e pergunta desse dia.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sql-server-performance.com/"&gt;SQL Server Performance&lt;/a&gt;&lt;br /&gt;Site dedicado a questões de perfomance do SQL Server.&lt;br /&gt;&lt;br /&gt;Contém fóruns de discussão bastante activos e mailing list bi-mensal.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.devx.com/dbzone/Article/28047/1954?pf=true"&gt;Generate Ad-hoc Reports with Microsoft Reporting Services 2005&lt;/a&gt;&lt;br /&gt;Generate Ad-hoc Reports with Microsoft Reporting Services 2005&lt;br /&gt;Among the many new features in Microsoft Reporting Services 2005 is one that can truly help reduce the workload for developers—the ability to give end users the power to generate their own ad-hoc reports.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=b352eb1f-d3ca-44ee-893e-9e07339c1f22&amp;amp;displaylang=en"&gt;Best Practices Analyzer Tool for Microsoft SQL Server 2000 1.0&lt;/a&gt;&lt;br /&gt;Microsoft SQL Server Best Practices Analyzer é uma ferramenta de gestão de base de dados que permite verificar a implementação de "Best Practices" comuns nos servidores SQL.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/awarren/worstpracticespart1ofaverylongseries_1.asp"&gt;Worst Practices Part I - Hungarian notation for columns&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/awarren/worstpracticesobjectsnotownedbydbo.asp"&gt;Worst Practices Part II - Objects Not Owned by DBO&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/awarren/worstpracticesnotusingprimarykeysandclusteredindex.asp"&gt;Worst Practices Part III - Not Using Primary Keys and Clustered Indexes&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/awarren/worstpracticesmakingdatabasescasesensitiveoranythi.asp"&gt;Worst Practices Part IV - Making Databases Case Sensitive (Or Anything Else)&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/sjones/worstpracticetriggeringexternalevents.asp"&gt;Worst Practice - Triggering External Events&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/dhatheway/twobestpractices.asp"&gt;Best Practices&lt;/a&gt;&lt;br /&gt;BEST PRACTICE 1 - Use Mnemonic Table Aliases&lt;br /&gt;BEST PRACTICE 2 - Use ANSI JOIN Syntax&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/bkelley/sqlserversecuritydealingwithantivirusprograms.asp"&gt;Dealing with Anti-Virus Programs&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.extremeexperts.com/SQL/Articles/BestPractices.aspx"&gt;SQL Server 2000 Best Practices - Extreme Experts&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/sql/default.aspx?pull=/library/en-us/dnsqlpro04/html/sp04l9.asp"&gt;Brian Walker's T-SQL Coding Standards&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/sjones/examthoughts70441.asp"&gt;Exame 70-441 Beta (Developing Solutions SQL 2005)&lt;/a&gt;&lt;br /&gt;Opinião de Steve Jones (SQL Server Central) sobre o exame 70-441 Beta (Developing Solutions on SQL Server 2005)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/dpoole/canyoucompute.asp"&gt;Exemplo de ROLLUP, CUBE e COMPUTE&lt;/a&gt;&lt;br /&gt;Exemplo prático da utilização de ROLLUPs, CUBEs e COMPUTEs em querys de SQL.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/portugal/techdays/conteudostematicos/basesdados.mspx"&gt;Apresentações TechDays 2005&lt;/a&gt;&lt;br /&gt;Já estão disponíveis as apresentações do evento TechDays 2005.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/technet/prodtechnol/sql/2005/multisec.mspx"&gt;Row &amp; Cell Level Security in SQL 2005&lt;/a&gt;&lt;br /&gt;Implementing Row- and Cell-Level Security in Classified Databases Using SQL Server 2005&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.promptsql.com/"&gt;IntelliSense para SQL Server&lt;/a&gt;&lt;br /&gt;Ferramenta que fornece funções de IntelliSense no SQL Server (Query Analyzer, Enterprise Manager).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/bkelley/sqlserversecuritydealingwithantivirusprograms.asp"&gt;SQL Server Security: Dealing with Anti-Virus Programs&lt;/a&gt;&lt;br /&gt;Bitmap&lt;br /&gt;Recommendations for how to handle SQL Server and anti-virus agents in conjunction&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://support.microsoft.com/Default.aspx?kbid=309422"&gt;Guidelines for choosing antivirus software to run on the computers that are running SQL Server&lt;/a&gt;&lt;br /&gt;Bitmap&lt;br /&gt;This article provides general guidelines to help you decide which type of antivirus software to run on the computers that are running SQL Server in your environment.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/slasham/findinggapsinasequentialnumbersequence.asp"&gt;Finding Gaps in a Sequential Number Sequence&lt;/a&gt;&lt;br /&gt;Bitmap&lt;br /&gt;Finding Gaps in a Sequential Number Sequence&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wmi_tasks_for_scripts_and_applications.asp"&gt;WMI Tasks for Scripts and Applications&lt;/a&gt;&lt;br /&gt;Bitmap&lt;br /&gt;Describes various computer and network administration tasks and provide links to the WMI class or classes used to perform those tasks&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/nboyle/fixingbrokenlogins.asp"&gt;Fixing broken logins and transferring passwords&lt;/a&gt;&lt;br /&gt;Bitmap&lt;br /&gt;When transferring a database to a new server using backup/restore or detaching and re-attaching database files, the link between server logins and database users almost invariably gets broken.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/glarsen/migratingloginstoanotherserver.asp"&gt;Migrating Logins To Another Server&lt;/a&gt;&lt;br /&gt;Bitmap&lt;br /&gt;There are a number of different ways to migrate SQL Server logins. You can manually re-enter all the existing login on the new server. You can used DTS to transfer logins. There are probably a number of other ways to transfer logins. This article will discuss one of those other ways to streamline the migration of SQL Server logins by using the stored procedure (SP) sp_help_revlogin.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/lPeysakhovich/longrunningjobs.asp"&gt;Monitoring Long Running Jobs&lt;/a&gt;&lt;br /&gt;Bitmap&lt;br /&gt;Checks if your job engine is running and how to restart it.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/sdedhiya/databasecommentingguideline.asp"&gt;Guia para comentários em BDs&lt;/a&gt;&lt;br /&gt;Standards para comentários de código SQL&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/jtshyman/usingxp_execresultsettoobtaindatabasesizeinformati.asp"&gt;XP_EXECRESULTSET&lt;/a&gt;&lt;br /&gt;Utilização do Stored Procedure não documentado "XP_EXECRESULTSET" do SQL Server 2000.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlteam.com/item.asp?ItemID=765"&gt;Updating a Sequential Record Number field&lt;/a&gt;&lt;br /&gt;Actualização de um número sequencial numa tabela&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.databasejournal.com/features/mssql/article.php/2244821"&gt;Sequential Numbering/Counting of Records with SQL Server&lt;/a&gt;&lt;br /&gt;Várias soluções para a criação de numeração/contagem de registos em SQL Server, desde cursores, tabelas temporárias a self joins&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/pabdulla/writingmaintainablecode.asp"&gt;Writing Maintainable Code&lt;/a&gt;&lt;br /&gt;Princípios básicos para escrever código SQL fácil de manter e compreender.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/jhall/administeringadevelopmentenvironment.asp"&gt;Administering a Development Environment&lt;/a&gt;&lt;br /&gt;Strategies for administering a successful development environment that will cut development time and ensure properly functioning and performing code.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/awarren/sqlserver2005adventures.asp"&gt;SQL Server 2005 Installation Adventures&lt;/a&gt;&lt;br /&gt;Instalação automática do SQL Server 2005&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.databasejournal.com/features/mssql/article.php/3622746"&gt;Monitoring SQL Servers Availability&lt;/a&gt;&lt;br /&gt;Monitorização e auditoria dos serviços SQL Server e SQL Agent&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/jstokes/singlepointofadministration.asp"&gt;Single Point of Administration&lt;/a&gt;&lt;br /&gt;good development practices and reinforce some good coding practices&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/mcoles/2547.asp"&gt;The Joy of Numbers&lt;/a&gt;&lt;br /&gt;What exactly is a numbers table and more importantly, what can it do for you?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/kbiller/performancemonitoringbyinternalfragmentationmeasur.asp"&gt;Performance Monitoring by Internal Fragmentation Measurement&lt;/a&gt;&lt;br /&gt;According to a research conducted by IDC, a leading consulting firm in the computers industry, the performance degradation caused by disk fragmentation alone, shortens the life of the computer/server by 30% on average. This translates into a direct increase of 30% in the yearly budget for hardware upgrades. It is possible to minimize this significant sum utilizing traditional Defrag and Reorganization utilities. The major setback remains the timing and scheduling of this extremely long and cumbersome process. We propose that this is a management task that can, and should, be undertaken.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/sMcCown/howdoyouspellsql.asp"&gt;Questões de entrevistas SQL&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/sjones/readonlytables.asp"&gt;Read Only Tables&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sommarskog.se/dynamic_sql.html"&gt;The Curse and Blessings of Dynamic SQL&lt;/a&gt;&lt;br /&gt;Discussão das utilizações de SQL dinâmico, mostrando boas e más práticas&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/mnash/monitoringdriveanddatabasefreespace.asp"&gt;Monitoring Drive and Database Free Space&lt;/a&gt;&lt;br /&gt;Scripts para monitorização do espaço livre em disco e nas BDs&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlteam.com/item.asp?ItemID=25496"&gt;Using the OUTPUT Clause to Capture Identity Values on Multi-Row Inserts&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/jdoherty/2577.asp"&gt;Controlar tempo de execução dos Jobs SQL&lt;/a&gt;&lt;br /&gt;Exemplo para controlar o tempo de execução de Jobs SQL&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://simple-talk.com/sql/sql-server-2005/sql-server-2005-common-table-expressions/"&gt;Utilização de CTEs SQL 2005&lt;/a&gt;&lt;br /&gt;Exemplos de utilização de Common Table Expressions no SQL Server 2005&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/cmiller/2586.asp"&gt;Windows Utilities for the SQL Server DBA&lt;/a&gt;&lt;br /&gt;Utilitários Windows (Resource Kit) úteis para tarefas de Administração de Bases de Dados (FOR, FORFILES,Resource Kit, WMIC, Command-Line Scripts)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/kjambu/2677.asp"&gt;Analysis of SQL Server Performance Data&lt;/a&gt;&lt;br /&gt;Recolha e análise de performance counters em SQL&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/jdoherty/2648.asp"&gt;Indexes and Fragmentation in SQL Server 2000 Part 1&lt;/a&gt;&lt;br /&gt;Introdução à análise de fragmentação de índices em SQL 2000 (DBCC SHOWCONTIG; UPDATEUSAGE)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/lPeysakhovich/indexcreationguidelines.asp"&gt;Index Creation Guidelines&lt;/a&gt;&lt;br /&gt;Dicas para a criação de índices (onde e quando utilizar/não utilizar)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.simple-talk.com/sql/sql-server-2005/fine-tuning-your-database-design-in-sql-2005/"&gt;Fine Tuning your Database Design in SQL 2005&lt;/a&gt;&lt;br /&gt;Optimização de BDs SQL 2005 (índices, DTA, XML Statistics e DMVs)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/slasham/reportingamenustructureusingarecursiveudf.asp"&gt;Reporting a menu structure using a recursive UDF&lt;/a&gt;&lt;br /&gt;Função SQL recursiva para construção de menu hierárquico&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms188902.aspx"&gt;RESTORE VERIFYONLY (Transact-SQL)&lt;/a&gt;&lt;br /&gt;Testa a validade de um backup (se é possível restaurar, se está completo, se é legível) sem fazer o RESTORE (SQL 2005)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/abressi/2634.asp"&gt;Stress Testing SQL Server&lt;/a&gt;&lt;br /&gt;Dicas para fazer testes de carga em SQL Server (ambientes, counters e alertas a monitorizar)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/pmu/2644.asp"&gt;A Guide to Application Memory Tuning&lt;/a&gt;&lt;br /&gt;Guia para optimização da memória em SQL (switches /3GB, /PAE e opção AWE)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.devx.com/dbzone/Article/32474/1954?pf=true"&gt;Simple Database Monitoring in a Windows Environment&lt;/a&gt;&lt;br /&gt;Construção de uma pequena ferramenta para monitorizar a disponibilidade de um servidor SQL (conectividade)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/lPeysakhovich/howtofindthatjobisrunning.asp"&gt;How to find that job is running?&lt;/a&gt;&lt;br /&gt;T-SQL para verificar se um determinado job está em execução ou não.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/nKishore/sqlserver2005bestpractices.asp"&gt;SQL Server 2005 Best Practices&lt;/a&gt;&lt;br /&gt;Dicas e questões a rever num upgrade para SQL 2005&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/jdoherty/2629.asp"&gt;Deploying Scripts To Multiple Instances&lt;/a&gt;&lt;br /&gt;Instalação de Scripts para múltiplas instâncias/servidores&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlis.com/default.aspx?23"&gt;File Watcher Task&lt;/a&gt;&lt;br /&gt;SQL SSIS - Tarefa para detecção de ficheiros e alterações&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/rVasant/manipulatingtextvariables.asp"&gt;Manipulating Text Columns&lt;/a&gt;&lt;br /&gt;Manipulação de Colunas do tipo TEXT (READTEXT, WRITETEXT, UPDATETEXT)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/dcorey/exploringsqlserver2000configurationproperties.asp"&gt;Exploring SQL Server 2000 Configuration Properties&lt;/a&gt;&lt;br /&gt;Descrição das propriedades de configuração do SQL 2000 (Enterprise Manager’s SQL Server Configuration Properties)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/jsack/storedprocedurenamingconventions.asp"&gt;Stored Procedure Naming Conventions&lt;/a&gt;&lt;br /&gt;Convenções de nomenclatura para Stored Procedures&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/rfarley/2633.asp"&gt;Ownership Chaining&lt;/a&gt;&lt;br /&gt;Ownership Chaining&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/awarren/loginsusersandrolesgettingstarted.asp"&gt;Logins, Users, and Roles - Getting Started&lt;/a&gt;&lt;br /&gt;Formas de gestão de Logins&amp;Roles - Enterprise Manager, T-SQL e SQL-DMO&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/jhummer/2611.asp"&gt;XML Argument Protocols for SQL 2005 Stored Procedures&lt;/a&gt;&lt;br /&gt;Utilização de argumentos do tipo XML em Stored procedures SQL 2005&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/yShlafman/queryanalyzerextended.asp"&gt;Query Analyzer Extended&lt;/a&gt;&lt;br /&gt;Definição dos formatos/templates utilizados pelo Query Analyzer para gerar scripts&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://support.microsoft.com/?kbid=892451"&gt;"EXCEPTION_ACCESS_VIOLATION" error message when you use a RIGHT OUTER JOIN&lt;/a&gt;&lt;br /&gt;Problemas na utilização de RIGHT OUTER JOINS em SQL 2000 (até SP4)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/rcarlson/nooutlookforalerts.asp"&gt;No Outlook for Alerts&lt;/a&gt;&lt;br /&gt;Envio de e-mails (CDO) em SQL sem utilização de Outlook&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/cmiller/conductingasqlserveroperationalaudit.asp"&gt;Conducting a SQL Server Operational Audit&lt;/a&gt;&lt;br /&gt;Auditoria Operacional a Servidores SQL&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/cmiller/usesqldmoandexceltoquicklycreatereportsforauditors.asp"&gt;Use SQL-DMO and Excel to Quickly Create Reports for Auditors&lt;/a&gt;&lt;br /&gt;Utilização de SQL-DMO e Excel para construir relatórios&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/cmiller/cannotgeneratesspicontext.asp"&gt;Troubleshooting Cannot Generate SSPI Context Errors&lt;/a&gt;&lt;br /&gt;Motivos de aparecimento de erros "Cannot Generate SSPI Context"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/rcarlson/scriptedserversnapshot.asp"&gt;Scripted Server Snapshot&lt;/a&gt;&lt;br /&gt;Script para obtenção de snapshots da actividade da BD (sp_who2) para Excel&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/dpoole/2559.asp"&gt;The Enterprise Library for .NET Framework 2.0&lt;/a&gt;&lt;br /&gt;Introdução à utilização da Ent Lib para .NET 2.0 (Stored Procedures com valores opcionais e retorno)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://builder.com.com/5100-6388_14-6102265.html?part=rss&amp;amp;tag=feed&amp;subj=bldr"&gt;How do I… install SQL Server 2005 Express Edition and SQL Server Management Studio Express?&lt;/a&gt;&lt;br /&gt;Instalação de SQL 2005 Express Edition (Full-Text, Reporting Services) e Management Studio Express.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlsummit.com/Articles/LogicInTheDatabase.HTM"&gt;SOA, Multi-Tier Architectures and Logic in the Database&lt;/a&gt;&lt;br /&gt;Artigo controverso sobre utilização da BD para armazenar lógica de negócio.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/asobati/2561.asp"&gt;The Pitfall of "Not Equal To"&lt;/a&gt;&lt;br /&gt;Problemas com a utilização de NOT EQUAL&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/dasanka/callingcomfromtsql.asp"&gt;Calling COM From T-SQL&lt;/a&gt;&lt;br /&gt;Invocação de Objectos COM a partir de T-SQL&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/rScholl/findingthenextbusinessdayrecursively.asp"&gt;Finding the Next Business Day Recursively&lt;/a&gt;&lt;br /&gt;Função SQL para encontrar o próximo dia útil (utiliza módulo do dia).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/jthomson/thenewetlparadigm.asp"&gt;The New ETL Paradigm&lt;/a&gt;&lt;br /&gt;Diferenças entre o paradigma ETL do SSIS e o antigo DTS.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://download.microsoft.com/download/2/B/5/2B5E5D37-9B17-423D-BC8F-B11ECD4195B4/WhatsNewSQL2005SP2.htm"&gt;SQL 2005 SP2 New/Improved features&lt;/a&gt;&lt;br /&gt;In Microsoft SQL Server 2005 Service Pack 2 (SP2), the following components have new or improved features.&lt;br /&gt;&lt;br /&gt;Analysis Services; Database Engine; Integration Services; Reporting Services; Shared Tools&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://download.microsoft.com/download/2/B/5/2B5E5D37-9B17-423D-BC8F-B11ECD4195B4/ReadmeSQL2005SP2.htm"&gt;Readme for Microsoft SQL Server 2005 Service Pack 2&lt;/a&gt;&lt;br /&gt;Readme for Microsoft SQL Server 2005 Service Pack 2&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/rcarlson/2678.asp"&gt;Monitoring file sizes in SQL Part I&lt;/a&gt;&lt;br /&gt;Monitoring the SQL Server mdb and ldb file size with a threshold to produce a visual alert every time you boot you computer (VBScript)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/rcarlson/2679.asp"&gt;Monitoring file sizes in SQL Part II&lt;/a&gt;&lt;br /&gt;Monitoring the SQL Folder size with a threshold to produce a visual alert every time you boot you computer (VBScript)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/rcarlson/2680.asp"&gt;Monitoring file sizes in SQL Part III&lt;/a&gt;&lt;br /&gt;Export of the mdb and ldb file size to excel (VBScript)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/rcarlson/2681.asp"&gt;Monitoring file sizes in SQL Part IV&lt;/a&gt;&lt;br /&gt;Extracting the size information on your SQL server drives and plotting it to a excel spreadsheet (VBScript).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/sjones/performancemonitoringbasiccounters.asp"&gt;Performance Monitoring - Basic Counters&lt;/a&gt;&lt;br /&gt;Process Object, % Processor Time, System Object, Processor Queue Length, Memory Object, Pages/sec, Available MBytes, PhysicalDisk Object, Avg. Disk Queue Length, % Idle Time, Network Interface Object, Bytes Total/Sec, SQL Server Access, Methods Object, Full Scans/Sec, SQL Server Database Object, Transactions/Sec, SQL Server Buffer Manager Object, Buffer Cache Hit Ratio, SQL Server General Statistics Object, User Connections, SQL Server Locks Object, Average Wait Time&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/bknight/2687.asp"&gt;Naming Conventions&lt;/a&gt;&lt;br /&gt;Naming conventions for DBs, Backups, Users, Logins, Tables, Columns, Indexes, Constraints, Views, User-Defined Functions, Triggers&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.devx.com/codemag/Article/32160"&gt;http://www.devx.com/codemag/Article/32160&lt;/a&gt;&lt;br /&gt;Dealing with Database Concurrency Conflicts in the Real World&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/sMcCown/getawayfromconfusingcode.asp"&gt;Overcoming quotes in dynamic queries&lt;/a&gt;&lt;br /&gt;Troubleshooting complex queries with single quotes, using a simple technique&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sql-server-performance.com/da_email_functionality.asp"&gt;E-Mail Functionality in SQL Server 2005&lt;/a&gt;&lt;br /&gt;Database Mail in SQL 2005 and migration from SQL Mail 2000&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/gFritchey/unittestingandcodegeneration.asp"&gt;Unit Testing SQL SPs&lt;/a&gt;&lt;br /&gt;Unit Testing de SPs utilizando TSQLUnit e CodeSmith.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/columnists/gFritchey/2689.asp"&gt;Unit Testing SQL with VSTE DB&lt;/a&gt;&lt;br /&gt;Unit Testing utilizando o Visual Studio Team Edition for Database Developers&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://searchsqlserver.techtarget.com/generic/0,295582,sid87_gci1176816,00.html"&gt;Cursor advantages&lt;/a&gt;&lt;br /&gt;Quando e como considerar cursores em desenvolvimento SQL?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/scripts/viewscript.asp?scriptid=830"&gt;Get all user tables with size&lt;/a&gt;&lt;br /&gt;Script para obter o tamanho de todas as tabelas de utilizador de uma BD&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sql-server-performance.com/dt_dbcc_showcontig.asp"&gt;Understanding SQL Server's DBCC SHOWCONTIG&lt;/a&gt;&lt;br /&gt;Discussão da utilização do comando DBCC SHOWCONTIG e do funcionamento interno do SQL Server&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://searchsqlserver.techtarget.com/general/0,295582,sid87_gci1176819,00.html"&gt;Cursor disadvantages&lt;/a&gt;&lt;br /&gt;Desvantagens da utilização de cursores em SQL&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a onfocus="OnLink(this)" href="http://www.sqlservercentral.com/columnists/cBunch/movingyouruserswiththeirdatabases.asp"&gt;Moving Your Users with Their Databases&lt;/a&gt;&lt;br /&gt;This article deals with moving both the database AND the affected users, along with all their information for that one particular database that you may be interested in moving to a new server.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a onfocus="OnLink(this)" href="http://www.sqlservercentral.com/columnists/pmu/2688.asp"&gt;Moving a Database to a New Server&lt;/a&gt;&lt;br /&gt;Moving a Database to a New Server&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-7635841633845760176?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/7635841633845760176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=7635841633845760176' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/7635841633845760176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/7635841633845760176'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/for-internal-use-generic-sql-articles.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-2836401967393826685</id><published>2006-11-14T14:54:00.000Z</published><updated>2006-11-16T10:14:28.999Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;SQL Performance articles &lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;(For internal use&amp;search)&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Tuning&lt;br /&gt;&lt;a title="blocked::http://www.microsoft.com/technet/prodtechnol/sql/2005/physdbstor.mspx" href="http://www.microsoft.com/technet/prodtechnol/sql/2005/physdbstor.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/2005/physdbstor.mspx&lt;/a&gt; (Physical design)&lt;br /&gt;&lt;a title="blocked::http://www.sqlmag.com/Article/ArticleID/46377/sql_server_46377.html" href="http://www.sqlmag.com/Article/ArticleID/46377/sql_server_46377.html"&gt;http://www.sqlmag.com/Article/ArticleID/46377/sql_server_46377.html&lt;/a&gt; (Performance Tuning)&lt;br /&gt;&lt;a title="blocked::http://www.sql-server-performance.com/ac_filegroup_performance.asp" href="http://www.sql-server-performance.com/ac_filegroup_performance.asp"&gt;http://www.sql-server-performance.com/ac_filegroup_performance.asp&lt;/a&gt; (Optimizing Performance Files&amp;amp;Filegroups)&lt;br /&gt;&lt;a title="blocked::http://msdn.microsoft.com/library/default.asp?url=" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql7/html/msdn_sql7perftune.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql7/html/msdn_sql7perftune.asp&lt;/a&gt; (SQL 7 PerfTune)&lt;br /&gt;&lt;a title="blocked::http://msdn.microsoft.com/library/default.asp?url=" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/optimsql/odp_tun_1_536v.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/optimsql/odp_tun_1_536v.asp&lt;/a&gt; (Query tuning)&lt;br /&gt;&lt;a title="blocked::http://www.microsoft.com/technet/prodtechnol/sql/2000/maintain/rdbmspft.mspx" href="http://www.microsoft.com/technet/prodtechnol/sql/2000/maintain/rdbmspft.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/2000/maintain/rdbmspft.mspx&lt;/a&gt; (SQL 2000 PerfTune DW)&lt;br /&gt;&lt;a title="blocked::http://www.microsoft.com/technet/prodtechnol/sql/2000/maintain/tranrepl.mspx" href="http://www.microsoft.com/technet/prodtechnol/sql/2000/maintain/tranrepl.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/2000/maintain/tranrepl.mspx&lt;/a&gt; (Transact Replic PerfTune)&lt;br /&gt;&lt;a title="blocked::http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/default.mspx" href="http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/default.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/default.mspx&lt;/a&gt; (SQL Server Best Practices)&lt;br /&gt;&lt;a title="blocked::http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/tempdb_capacity_planning_index.mspx" href="http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/tempdb_capacity_planning_index.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/tempdb_capacity_planning_index.mspx&lt;/a&gt; (TEMPDB Cap)&lt;br /&gt;&lt;a title="blocked::http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/loading_bulk_data_partitioned_table.mspx" href="http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/loading_bulk_data_partitioned_table.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/loading_bulk_data_partitioned_table.mspx&lt;/a&gt; (Load Bulk)&lt;br /&gt;&lt;a title="blocked::http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/dbcc_showcontig_improvements.mspx" href="http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/dbcc_showcontig_improvements.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/dbcc_showcontig_improvements.mspx&lt;/a&gt; (DBCC SHOWCONTIG improv)&lt;br /&gt;&lt;a title="blocked::http://www.microsoft.com/technet/prodtechnol/sql/2005/technologies/dbm_best_pract.mspx" href="http://www.microsoft.com/technet/prodtechnol/sql/2005/technologies/dbm_best_pract.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/2005/technologies/dbm_best_pract.mspx&lt;/a&gt; (DB Mirroring Best Pract)&lt;br /&gt;&lt;a title="blocked::http://www.microsoft.com/technet/prodtechnol/sql/2005/tsprfprb.mspx" href="http://www.microsoft.com/technet/prodtechnol/sql/2005/tsprfprb.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/2005/tsprfprb.mspx&lt;/a&gt; (Troubleshotting Performance SQL 2005)&lt;br /&gt;&lt;a title="blocked::http://www.microsoft.com/technet/scriptcenter/scripts/sql/sql2005/default.mspx?mfr=" href="http://www.microsoft.com/technet/scriptcenter/scripts/sql/sql2005/default.mspx?mfr=true"&gt;http://www.microsoft.com/technet/scriptcenter/scripts/sql/sql2005/default.mspx?mfr=true&lt;/a&gt; (Script repository)&lt;br /&gt;&lt;a title="blocked::http://www.microsoft.com/technet/prodtechnol/sql/2005/bestpractice/storage-top-10.mspx" href="http://www.microsoft.com/technet/prodtechnol/sql/2005/bestpractice/storage-top-10.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/2005/bestpractice/storage-top-10.mspx&lt;/a&gt; (Storage 10 Best Pract)&lt;br /&gt;&lt;a title="blocked::http://www.microsoft.com/technet/prodtechnol/sql/2005/bestpractice/oltp-performance-issues.mspx" href="http://www.microsoft.com/technet/prodtechnol/sql/2005/bestpractice/oltp-performance-issues.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/2005/bestpractice/oltp-performance-issues.mspx&lt;/a&gt; (Top SQL 2005 Perf OLTP)&lt;br /&gt;&lt;a title="blocked::http://www.sqlservercentral.com/columnists/jsack/2653.asp" href="http://www.sqlservercentral.com/columnists/jsack/2653.asp"&gt;http://www.sqlservercentral.com/columnists/jsack/2653.asp&lt;/a&gt; (Tuning SQL 2005)&lt;br /&gt;&lt;a title="blocked::http://www.simple-talk.com/sql/sql-server-2005/fine-tuning-your-database-design-in-sql-2005/" href="http://www.simple-talk.com/sql/sql-server-2005/fine-tuning-your-database-design-in-sql-2005/"&gt;http://www.simple-talk.com/sql/sql-server-2005/fine-tuning-your-database-design-in-sql-2005/&lt;/a&gt; (Tuning SQL 2005)&lt;br /&gt;&lt;a title="blocked::http://www.sqlservercentral.com/columnists/pmu/2644.asp" href="http://www.sqlservercentral.com/columnists/pmu/2644.asp"&gt;http://www.sqlservercentral.com/columnists/pmu/2644.asp&lt;/a&gt; (SQL Application memory tuning)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Counters&lt;br /&gt;&lt;a title="blocked::http://www.sqlservercentral.com/columnists/kjambu/2677.asp" href="http://www.sqlservercentral.com/columnists/kjambu/2677.asp"&gt;http://www.sqlservercentral.com/columnists/kjambu/2677.asp&lt;/a&gt; (Performance Counters)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Índices e Planos de Execução&lt;br /&gt;&lt;a title="blocked::http://www.microsoft.com/technet/prodtechnol/sql/2000/maintain/ss2kidbp.mspx" href="http://www.microsoft.com/technet/prodtechnol/sql/2000/maintain/ss2kidbp.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/sql/2000/maintain/ss2kidbp.mspx&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://searchsqlserver.techtarget.com/tip/1,289483,sid87_gci1112905_tax301327,00.html?adg=" href="http://searchsqlserver.techtarget.com/tip/1,289483,sid87_gci1112905_tax301327,00.html?adg=301324&amp;bucket=ETA" bucket="ETA"&gt;http://searchsqlserver.techtarget.com/tip/1,289483,sid87_gci1112905_tax301327,00.html?adg=301324&amp;amp;bucket=ETA&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://www.sql-server-performance.com/sql_server_maintenance.asp" href="http://www.sql-server-performance.com/sql_server_maintenance.asp"&gt;http://www.sql-server-performance.com/sql_server_maintenance.asp&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://www.sqlmag.com/Article/ArticleID/41844/sql_server_41844.html" href="http://www.sqlmag.com/Article/ArticleID/41844/sql_server_41844.html"&gt;http://www.sqlmag.com/Article/ArticleID/41844/sql_server_41844.html&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://www.developersdex.com/sql/message.asp?p=" href="http://www.developersdex.com/sql/message.asp?p=580&amp;r=5117242" r="5117242"&gt;http://www.developersdex.com/sql/message.asp?p=580&amp;amp;r=5117242&lt;/a&gt; (Script)&lt;br /&gt;&lt;a title="blocked::http://education.sqlfarms.com/ShowPost.aspx?PostID=" href="http://education.sqlfarms.com/ShowPost.aspx?PostID=55"&gt;http://education.sqlfarms.com/ShowPost.aspx?PostID=55&lt;/a&gt;&lt;br /&gt;&lt;a title="blocked::http://vyaskn.tripod.com/sql_server_administration_best_practices.htm" href="http://vyaskn.tripod.com/sql_server_administration_best_practices.htm"&gt;http://vyaskn.tripod.com/sql_server_administration_best_practices.htm&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-2836401967393826685?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/2836401967393826685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=2836401967393826685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/2836401967393826685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/2836401967393826685'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/for-internal-use-sql-performance.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-7776706196704465449</id><published>2006-11-14T01:23:00.000Z</published><updated>2006-11-16T10:08:07.588Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'></title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;strong&gt;TechEd 2006 and 2005 Comparison&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In retrospect, and evaluating &lt;strong&gt;TechEd 2006 Barcelona&lt;/strong&gt;, I must say that it was a great event with great speakers, with the high level of quality expected from Microsoft.&lt;br /&gt;But, comparing to Amesterdam 2005, there are some details that were worse:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The corridors and stairs were very narrow (at least for the amount of people present);&lt;/li&gt;&lt;li&gt;The CommNet had very few computers available;&lt;/li&gt;&lt;li&gt;No VOIP phones (that was a major loss!);&lt;/li&gt;&lt;li&gt;Some sessions filled up very easily while others were less than half (the full sessions should all have a repetition);&lt;/li&gt;&lt;li&gt;The week pass from Amesterdam was downgraded to a 10 trips ticket (to visit the city, or even, have dinner, one would have to count the tickets very closely);&lt;/li&gt;&lt;li&gt;There was no major announcement or new (much of the content was based on the TechEd USA);&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-7776706196704465449?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/7776706196704465449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=7776706196704465449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/7776706196704465449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/7776706196704465449'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/in-retrospect-and-evaluating-teched.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-6825689089577425007</id><published>2006-11-13T22:51:00.000Z</published><updated>2006-11-16T10:46:25.404Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'></title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;strong&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0" onclick="BLOG_clickHandler(this)"&gt;TechEd 2006 End&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;color:#ffff00;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="blsp-spelling-error" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" onclick="BLOG_clickHandler(this)"&gt;TechEd&lt;/span&gt;&lt;/span&gt; 2006&lt;/span&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;is officially over (from last &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1" onclick="BLOG_clickHandler(this)"&gt;friday&lt;/span&gt;&lt;/span&gt;, that is), and I'm back to work. Just a recap of the final days:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Day Four&lt;/strong&gt;&lt;/span&gt;, the final day, was a bit weak. It's understandable that, with the speakers tight schedules, most are already on their way home. So I was looking forward to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16" onclick="BLOG_clickHandler(this)"&gt;Ingo&lt;/span&gt;&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17" onclick="BLOG_clickHandler(this)"&gt;Rammer's&lt;/span&gt;&lt;/span&gt; presentation about &lt;strong&gt;Optimizing Performance and Scalability&lt;/strong&gt; as the high point of the day. But, the presentation was very much like &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18" onclick="BLOG_clickHandler(this)"&gt;last's&lt;/span&gt;&lt;/span&gt; year, so I switched to &lt;strong&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19" onclick="BLOG_clickHandler(this)"&gt;SharePoint&lt;/span&gt;&lt;/span&gt; Server 2007 Search&lt;/strong&gt;. The latter suffered from the toy example syndrome. It was easy to follow, but very limited, and looked like the most part was getting around some limitations of the API or model.&lt;br /&gt;&lt;br /&gt;Next, I attended &lt;strong&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20" onclick="BLOG_clickHandler(this)"&gt;MSF&lt;/span&gt;&lt;/span&gt; v4.0 Core&lt;/strong&gt; by &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21" onclick="BLOG_clickHandler(this)"&gt;Rafal&lt;/span&gt;&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22" onclick="BLOG_clickHandler(this)"&gt;Lucawiecki&lt;/span&gt;&lt;/span&gt;. Very good and informative. With the upgrade to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23" onclick="BLOG_clickHandler(this)"&gt;MSF&lt;/span&gt;&lt;/span&gt; 4, and the additions of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24" onclick="BLOG_clickHandler(this)"&gt;MSF&lt;/span&gt;&lt;/span&gt; for agile and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25" onclick="BLOG_clickHandler(this)"&gt;CMMI&lt;/span&gt;&lt;/span&gt; in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26" onclick="BLOG_clickHandler(this)"&gt;VSTS&lt;/span&gt;&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27" onclick="BLOG_clickHandler(this)"&gt;MSF&lt;/span&gt;&lt;/span&gt; has become more than a Framework. The Core, is the Discipline, from which the families derive (Application Development, Infrastructure Deployment and possibly &lt;strong&gt;Consulting &lt;/strong&gt;and &lt;strong&gt;Operations Management - &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28" onclick="BLOG_clickHandler(this)"&gt;MOF&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt; in the future). In it, there's only high level models, with the Team Model revolving around &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29" onclick="BLOG_clickHandler(this)"&gt;Advocacyand&lt;/span&gt;&lt;/span&gt; Architecture becoming a phase in the development life cycle.&lt;br /&gt;The Process Model, introduces Governance and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30" onclick="BLOG_clickHandler(this)"&gt;Enactement&lt;/span&gt;&lt;/span&gt;, catering for various types of projects event small teams, and allowing the start of each phase before the end of the previous one. At Core Discipline, the Project Management Discipline recommended is the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31" onclick="BLOG_clickHandler(this)"&gt;PMI&lt;/span&gt;&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32" onclick="BLOG_clickHandler(this)"&gt;BOK&lt;/span&gt;&lt;/span&gt;. At methodology level, there's support for Agile SD and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33" onclick="BLOG_clickHandler(this)"&gt;CMMI&lt;/span&gt;&lt;/span&gt; PI activities and work streams.&lt;br /&gt;To &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34" onclick="BLOG_clickHandler(this)"&gt;Rafal&lt;/span&gt;&lt;/span&gt;, the &lt;strong&gt;best invention &lt;/strong&gt;in Software Engineering in the &lt;strong&gt;last 20 years&lt;/strong&gt;, was the "&lt;strong&gt;Daily Build&lt;/strong&gt;", because with it, there is no integration (rephrasing, it's done on a daily basis, so it's easier, cheaper, more predictable, and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35" onclick="BLOG_clickHandler(this)"&gt;garantees&lt;/span&gt;&lt;/span&gt; a working product very early on).&lt;br /&gt;&lt;br /&gt;Then there was a session about &lt;strong&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36" onclick="BLOG_clickHandler(this)"&gt;SQL&lt;/span&gt;&lt;/span&gt; 2005 Cache Sync/Query notification in Depth&lt;/strong&gt; by Bob &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37" onclick="BLOG_clickHandler(this)"&gt;Beauchmin&lt;/span&gt;&lt;/span&gt;. To sum it up in one sentence:&lt;br /&gt;&lt;blockquote&gt;"The feature is only useful in very specific scenarios, the drop-down combo box with few items rarely updated."&lt;br /&gt;&lt;/blockquote&gt;Outside that, the feature doesn't scale, or can't be used. The bulk of the session was spent analyzing the limitations imposed on queries, the inner workings of the feature and its integration with ASP.NET Cache. Not very useful.&lt;br /&gt;&lt;br /&gt;The final session of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38" onclick="BLOG_clickHandler(this)"&gt;TechEd&lt;/span&gt;&lt;/span&gt;, and because there were two &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39" onclick="BLOG_clickHandler(this)"&gt;portuguese&lt;/span&gt;&lt;/span&gt; fellows in the draw, was &lt;strong&gt;Iron Architect Finals&lt;/strong&gt;. This was a contest to define the architecture to build up communities around &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40" onclick="BLOG_clickHandler(this)"&gt;TechEd&lt;/span&gt;&lt;/span&gt;, linking to the feedback system. Out of the 5 chosen proposals, 2 were from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41" onclick="BLOG_clickHandler(this)"&gt;portuguese&lt;/span&gt;&lt;/span&gt; people. :)&lt;br /&gt;The jury was composed by Andrew &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42" onclick="BLOG_clickHandler(this)"&gt;Cheeseman&lt;/span&gt;&lt;/span&gt;, Ron Jacobs, Beat &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43" onclick="BLOG_clickHandler(this)"&gt;Schwegler&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;Jürgen Pfeifer (MCA), and clearly favoured "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46" onclick="BLOG_clickHandler(this)"&gt;Jota&lt;/span&gt;&lt;/span&gt;"s ideas. From a presentation point of view, the prize would go to the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47" onclick="BLOG_clickHandler(this)"&gt;belgian&lt;/span&gt;&lt;/span&gt; as he was all around at ease. From a pleasing the jury point of view the prize would go the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48" onclick="BLOG_clickHandler(this)"&gt;finn&lt;/span&gt;&lt;/span&gt;/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_49" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_49" onclick="BLOG_clickHandler(this)"&gt;dannish&lt;/span&gt;&lt;/span&gt; "alpha geek" guy that presented last and tried to score points by pleasing the jury. But judging only the ideas (tag clouds to categorize sessions and attendees), forgetting the nervous presentation, "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_50" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_50" onclick="BLOG_clickHandler(this)"&gt;Jota&lt;/span&gt;&lt;/span&gt;" was better. And so, congratulations to "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_51" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_51" onclick="BLOG_clickHandler(this)"&gt;Jota&lt;/span&gt;&lt;/span&gt;", and I expect that he may become the first &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_52" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_52" onclick="BLOG_clickHandler(this)"&gt;portuguese&lt;/span&gt;&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_53" onclick="BLOG_clickHandler(this)"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_53" onclick="BLOG_clickHandler(this)"&gt;MCA&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Day three&lt;/strong&gt;&lt;/span&gt;, was very varied. To start off, I watched an indepth look at &lt;strong&gt;Linq for SQL&lt;/strong&gt; (that's the current name of DLinq), and it was astonishing. Very easy and very powerful, and overall very well thought out solution. Even the corner cases of ORM tools were covered: identity mapping, lazy loading, optimistic concurrency, paging, batch commands, you name it.&lt;br /&gt;&lt;br /&gt;Then another cool session about &lt;strong&gt;Iron Python&lt;/strong&gt;, and it's fit within .NET. The demos were very impressive (animating Merlin, converting from Ink to text, synthetizing speech, using WPF, with every demo below 5 lines), and there is now support for Iron Python in ASP.NET (not MS PSS support, but community support) and the tools are being extended to support Python (Intelli sense wasn't prime time yet) and other scripting languages.&lt;br /&gt;&lt;br /&gt;After that, I attended a real world usage example of &lt;strong&gt;WPF&lt;/strong&gt; in the &lt;strong&gt;Zurich Airport&lt;/strong&gt; Monitoring system. Very impressive the animation capabilities of WPF. In less than 15 minutes there was a button animated to follow a path (later replaced by an airplane) in the map that represents the airport. From there on, it was just a matter of refinement and linking the actions on event handlers with code from the Expression Designer, to get a fully animated monitoring system (with tracks sensing the number of planes and glowing in red), with zoom, panning, tags on airplanes.&lt;br /&gt;&lt;br /&gt;The presentation of &lt;strong&gt;Team System adoption best practices&lt;/strong&gt; focused on advanced customizations and extensibility possibilities, and that didn't please some of the crowd in the room that were expecting the basics (how to organize SS, work items, ...). But the customizations were very useful (capture the screen and pre-fill a bug with that attachment, to save testers some keystrokes; changing the type of the description field to HTML; searching all pending check-ins from all users; and because of the annoyance from some people in the audience, information about licensing conditions, the reports generated, the off-line scenario).&lt;br /&gt;&lt;br /&gt;Last, Friz Onion compaired the differences between the&lt;strong&gt; Web site&lt;/strong&gt; model and &lt;strong&gt;Web Application Project&lt;/strong&gt;, the strengths and weaknesses of each, with a clear win for Web Application Projects. Very detailed knowledge of the inner workings of ASP.NET, the compilation mechanism and the class model relationships. &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-6825689089577425007?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/6825689089577425007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=6825689089577425007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/6825689089577425007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/6825689089577425007'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/teched-2006-is-officially-over-from.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-403517041032444730</id><published>2006-11-09T06:54:00.000Z</published><updated>2006-11-16T10:41:48.505Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'></title><content type='html'>&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;TechEd 2006 Start&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The first two days of TechEd 2006 Barcelona are over.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;In &lt;strong&gt;&lt;span style="font-size:130%;"&gt;Day two&lt;/span&gt;&lt;/strong&gt;, I focused more on .NET, and enjoyed very much the presentation on &lt;strong&gt;C# 3.0&lt;/strong&gt; (or is it 3.5?) and the innovations brought by &lt;strong&gt;Linq&lt;/strong&gt;, Lambda expressions, Extension methods. To me, Linq raises the abstraction level of the language, giving first class support for queries in .NET. With it, it's possible to very easily query a DB (in a strongly typed fashion), join with a XML source or any other that implements the interfaces (Vista search is expected in the future).&lt;br /&gt;&lt;br /&gt;Also very good were the sessions about &lt;strong&gt;debugging&lt;/strong&gt; outside VS 2005 and the tools available(&lt;strong&gt;Ingo Rammer&lt;/strong&gt; is a very good presenter and his demos are really on topic, not some toy example, that doesn't hold a connection with reality).&lt;br /&gt;&lt;br /&gt;Not so good were the presentations about &lt;strong&gt;Using VS Team System&lt;/strong&gt; - nothing new, just a rehash of last year's examples, and very &lt;em&gt;"toyish"&lt;/em&gt; and about &lt;strong&gt;Windows Vista&lt;/strong&gt; - Catherine Heller, knows the subject, but the notion that to get the Vista native feel in the Open File Dialog one has to tinker with COM+ and it's inner stuff, makes me want to run away from it. Another annoyance comes with the security increase of Vista. From now on, applications can't programmatically determine if a user is an administrator (the security token is stripped from that info). And to run with ellevated privilleges, guess what, it's necessary to invoke a process and the user has to confirm it. I can see, what's coming, every user pressing the yes button every time that annoyance pops up. Even debugging with VS2005, has to be run with ellevated privileges.&lt;br /&gt;&lt;br /&gt;When does MS gets the balance between security and usability right? Why doesn't Vista Home ship with a VM to surf the Net and read mail? And to try out the installation of applications, what best than installing in a VM, and after evaluating or testing, throw it away (if it's a virus or trojan), or installing in the main OS?&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;From the &lt;strong&gt;&lt;span style="font-size:130%;"&gt;first day&lt;/span&gt;&lt;/strong&gt;, the highlights for me were the sessions by&lt;strong&gt; Kimberly Tripp&lt;/strong&gt;. She really knows what she talks about, and makes it sound easy, explaining stuff in non technical ways. On the downside was the session on &lt;strong&gt;VSTO SE&lt;/strong&gt; (Second edition). Basically it was explained that the missing stuff in VSTO 2005 have made it in the 2nd edition, and some stuff that has to be done to get around Word and Office quirks (mainly about closing windows events).&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;keynote&lt;/strong&gt;, was divided in two parts. The first part, was about education, and was in a partenalist tone, ending up with a presentation of 10 year old girl from India that has been certified in C#. The second part was more in the spirit of TechEd, and had some cool demos with SharePoint, Excel, Workflow, Expression Designer and Visual Studio. &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-403517041032444730?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/403517041032444730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=403517041032444730' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/403517041032444730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/403517041032444730'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/first-two-days-of-teched-2006-barcelona.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-436839702371188314</id><published>2006-11-06T01:21:00.001Z</published><updated>2006-11-21T12:42:43.177Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Career'/><title type='text'></title><content type='html'>&lt;strong&gt;&lt;span style="font-size:130%;"&gt;HR and Interviewing&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;IT job market &lt;/strong&gt;is on the rise again. It’s been ramping up for some time, but the clear sign, is the “movement” on the companies, people leaving and new people getting in, and the blogoshpere with articles about interviews.&lt;br /&gt;Employers can no longer be laxist about the employees, or they will leave. And everyone wants to find the best people.&lt;br /&gt;&lt;br /&gt;To Joel Spolsky, from the famous &lt;strong&gt;Joel on Software&lt;/strong&gt;, hiring is about &lt;strong&gt;getting the best people&lt;/strong&gt;. Period. As the gap between excellent and average programmers is 10x, it pays up to find the best. The best people, are not only very smart but people that gets things done (pragmatic). And that’s what his company tries to do. They interview by phone, and the smartest are flown to New York, with everything paid, for a personal interview.&lt;br /&gt;(&lt;a title="http://www.joelonsoftware.com/articles/GuerrillaInterviewing3.html" href="http://www.joelonsoftware.com/articles/GuerrillaInterviewing3.html"&gt;http://www.joelonsoftware.com/articles/GuerrillaInterviewing3.html&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;To Mini (from &lt;strong&gt;Mini-Microsoft &lt;/strong&gt;fame), the solution to overcome the peak in the competition for talents between employers, that leads to hiring of not so good programmers, would be to create a &lt;strong&gt;Microsoft Academy&lt;/strong&gt;, to teach the main technologies used inside MS. That way, people with potential and motivated would graduate and be ready to integrate the team that best fits them, while other people would wash-out (the course would be very hard and intense).&lt;br /&gt;Even to switch groups inside Microsoft, people could get the training and skills from the courses teached, giving microsofties a real chance to control their careers, and Microsoft a chance to internally reorganize, getting people in their correct positions and motivated.&lt;br /&gt;(&lt;a href="http://minimsft.blogspot.com/2006/11/microsoft-academy.html"&gt;http://minimsft.blogspot.com/2006/11/microsoft-academy.html&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;On the employers side, HR is getting even harder.&lt;br /&gt;As the demand goes up, so goes the salary. And with big payments, everyone tries their hardest to make the cut. Embelishing the resumé, or even outright lying! To counter that, employers are paying &lt;strong&gt;detectives &lt;/strong&gt;to &lt;strong&gt;investigate references&lt;/strong&gt;, neighbours and past employers to check CVs, references and even neighbours.&lt;br /&gt;(&lt;a href="http://www.simple-talk.com/opinion/opinion-pieces/the-cv-detectives/"&gt;http://www.simple-talk.com/opinion/opinion-pieces/the-cv-detectives/&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;To end up, here are some links related to &lt;strong&gt;interviewing &lt;/strong&gt;for DBA, &lt;strong&gt;questions&lt;/strong&gt;:&lt;br /&gt;&lt;a title="http://www.sqlservercentral.com/columnists/sjones/2686.asp" href="http://www.sqlservercentral.com/columnists/sjones/2686.asp"&gt;http://www.sqlservercentral.com/columnists/sjones/2686.asp&lt;/a&gt; (interview questions)&lt;br /&gt;&lt;a title="http://www.geekinterview.com/articles/sql-interview-questions-with-answers.html" href="http://www.geekinterview.com/articles/sql-interview-questions-with-answers.html"&gt;http://www.geekinterview.com/articles/sql-interview-questions-with-answers.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-436839702371188314?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/436839702371188314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=436839702371188314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/436839702371188314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/436839702371188314'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/it-job-market-is-on-rise-again.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-5546045674924696389</id><published>2006-11-06T01:07:00.000Z</published><updated>2006-11-16T10:46:06.514Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'></title><content type='html'>&lt;strong&gt;&lt;span style="font-size:130%;"&gt;TechEd 2006 Barcelona Session Schedule&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;It's the final countdowns to TechEd 2006 in Barcelona. Right now, I'm packing up, because tomorrow I'm flying to Barcelona. The conferences only start on Tuesday, but from my company we're going the day before.&lt;br /&gt;&lt;br /&gt;My tentative schedule, is somewhat like this (arranged by timeslot, and inside timeslot sorted by preference):&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Tue Nov 7 11:30 - 12:45&lt;br /&gt;&lt;/strong&gt;DEV230 Developing Rich Web Applications with ASP.NET AJAX&lt;br /&gt;DEV201 Introduction to the .NET Framework 3.0&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Tue Nov 7 14:15 - 15:30&lt;br /&gt;&lt;/strong&gt;SQL408 SQL Server 2005: Advanced Indexing Strategies&lt;br /&gt;ARC207 Introduction to Agile Methodologies and Concepts&lt;br /&gt;DEV225 Windows Presentation Foundation (WPF): Introduction&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Tue Nov 7 16:00 - 17:15&lt;br /&gt;&lt;/strong&gt;SQL409 SQL Server 2005: Advanced Indexing Strategies : Part 2&lt;br /&gt;DEV347 ASP.NET AJAX Tips and Tricks&lt;br /&gt;DEV223 Visual Studio: The .NET Language Integrated Query (LINQ) Framework Overview&lt;br /&gt;ARC305 Connected Systems - Part 2: Communication, Flow, Rules and Logic&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Tue Nov 7 17:45 - 19:00&lt;br /&gt;&lt;/strong&gt;OFF303 Visual Studio Tools for Office (VSTO) - Cypress and ORCAS&lt;br /&gt;ARCWD03 Understanding Service Modeling Language (SML): The SML and Platform&lt;br /&gt;DEV221 A Lap Around the New Enhancements for Web Developers in Visual Studio Orcas&lt;br /&gt;DEV203 ADO.NET - Present and Future&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Wed Nov 8 09:00 - 10:15 &lt;/strong&gt;&lt;br /&gt;DEVWD15 Hardcore .NET Production Debugging&lt;br /&gt;DEV349 ASP.NET: Developing Data-Driven Web Applications with .NET Language Integrated Query (DLINQ)&lt;br /&gt;DEV323 C# 3.0: Future Directions in Language Innovation from Anders Hejlsberg&lt;br /&gt;SQL402 Implementing the Service-Oriented Database Architecture (SODA) with SQL Server&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Wed Nov 8 10:45 - 12:00&lt;br /&gt;&lt;/strong&gt;DEVWD03 Alternative .NET Debugging Facilities&lt;br /&gt;SQL312 T-SQL Querying : Tips and Techniques&lt;br /&gt;DEV217 Introducing Visual Studio (VS) 2005 Team Edition for Database Professionals&lt;br /&gt;ARC304 Connected Systems - Part 3: Data and Transaction Management&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Wed Nov 8 13:30 - 14:45&lt;br /&gt;&lt;/strong&gt;DEVWD12 Explore C# 3.0 with Anders Hejlsberg&lt;br /&gt;DEV305 Garbage Collection - How to Make it Work for You&lt;br /&gt;ARC301 Connected Systems - Part 4: Presentation and Interactivity&lt;br /&gt;DEV002 DEMO: 10 Undiscovered features of ASP.NET 2.0&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Wed Nov 8 15:15 - 16:30 &lt;/strong&gt;&lt;br /&gt;DEV219 Using the Essential Unified Process with Visual Studio Team System (VSTS)&lt;br /&gt;DEV315 Scalability, Reliability and Maintainability of Internet Information Services (IIS)-hosted Workflows&lt;br /&gt;ARCWD02 Enterprise Library for .NET Framework 3.0&lt;br /&gt;DEVWD28 Exploring New Functionality in Internet Explorer (IE) 7&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Wed Nov 8 17:00 - 18:15&lt;br /&gt;&lt;/strong&gt;DEV317 Integrating the Visual Studio (VS) Team Edition for Database Professional into your Software Development Lifecycle&lt;br /&gt;DEV325 Windows Vista: Tips &amp; Tricks for Targeting Key Native Application Program Interfaces (APIs) from Managed Code&lt;br /&gt;ARC201 Patterns and Anti-Patterns for Service-Oriented Architectures (SOA)&lt;br /&gt;DEVWD18 Why is Essential Unified Process (EssUp) a Next Generation Process?&lt;br /&gt;Cheeseman?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Thu Nov 9 09:00 - 10:15&lt;br /&gt;&lt;/strong&gt;DEV306 Using the .NET Language Integrated Query Framework with Relational Data&lt;br /&gt;DEV345 Asynchronous ASP.NET Programming&lt;br /&gt;DEV321 Delving into Visual Studio 2005 Team Edition for Software Developers&lt;br /&gt;ARC307 Adding Value to Message-based SOAs with Workflow&lt;br /&gt;Vista?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Thu Nov 9 10:45 - 12:00&lt;br /&gt;&lt;/strong&gt;DEV206 Common Language Runtime (CLR): IronPython and .NET Scripting Languages&lt;br /&gt;DEV229 ASP.NET: End-to-End - Building a Complete Web Application using ASP.NET 2.0, Visual Studio 2005, and Internet Information Services (IIS) 7 (Part 1)&lt;br /&gt;SQL403 Understanding Interactions of Transactions, Batches, Nested Procedures, MARS (Multiple Active Result Sets), and SQLCLR (Common Language Runtime) in SQL Server 2005&lt;br /&gt;DEV308 Proven Practices for Implementing Services&lt;br /&gt;ARC302 Connected Systems - Part 5: Identity and Access Management&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Thu Nov 9 13:30 - 14:45&lt;br /&gt;&lt;/strong&gt;DEV227 Windows Presentation Foundation (WPF) in the Real World: Zürich Airport Monitoring System&lt;br /&gt;DEVWD27 "Scripting ASP.NET AJAX": Deep Dive into ASP.NET AJAX, Scripting &amp;amp; Debugging&lt;br /&gt;ARC205 Connected Systems - Part 6: The Future of the Microsoft Application Server Platform&lt;br /&gt;SQL406 Developing SQL Server 2005 Analysis Services Powered Applications&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Thu Nov 9 15:45 - 17:00 &lt;/strong&gt;&lt;br /&gt;DEV243 Implementing Continuous Integration: With and Without Team System&lt;br /&gt;DEVWD17 Team System Adoption Best Practices&lt;br /&gt;DEV359 .NET Hidden Treasures&lt;br /&gt;SQLWD04 The Query Governor: SQL CLR in Action&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Thu Nov 9 17:30 - 18:45&lt;br /&gt;&lt;/strong&gt;DEV322 Unit Testing Best Practices With Visual Studio 2005 Team System&lt;br /&gt;DEVWD24 Converting Existing ASP.NET Applications to Visual Studio 2005 Web Application Projects&lt;br /&gt;SQL301 Coding SQL Server 2005: Plan Guides and Plan Forcing&lt;br /&gt;ARC309 Security is a Feature - Best Practices for Designing Secure Distributed .NET Applications&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Fri Nov 10 09:00 - 10:15 &lt;/strong&gt;&lt;br /&gt;DEV403 Optimizing Performance and Scalability of Distributed .NET Applications&lt;br /&gt;DEV360 Windows Powershell - Building Next Generation Command Line And GUI Applications On Windows&lt;br /&gt;DEV338 Windows Vista for Managed Developers: Beyond NetFx3&lt;br /&gt;DEVWD14 Test Driven Development: Myths and Misconceptions&lt;br /&gt;DEV346 Attack and Defense: Securing ASP.NET 2.0 Applications&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Fri Nov 10 10:45 - 12:00&lt;br /&gt;&lt;/strong&gt;ARC209 Microsoft Solutions Framework 4.0 Core and its Family&lt;br /&gt;DEV405 BizTalk Server 2006 - Internals&lt;br /&gt;SQLWD06 Best Practices for architecting Reporting Services Report Models for Ad-hoc Reporting&lt;br /&gt;DEV218 Developing and Designing Standard Based Web Applications with Expression Web Designer&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Fri Nov 10 13:30 - 14:45 &lt;/strong&gt;&lt;br /&gt;SQL404 SQL Server 2005 Cache Sync/Query Notifications in Depth&lt;br /&gt;DEV411 AJAX Patterns with the Microsoft AJAX Library&lt;br /&gt;DEV004 DEMO: Technology in Action! Building a Distributed Solution with .NET Framework 3.0&lt;br /&gt;SQLWD01 SQL Server Integration Services (SSIS) – The Top 10 Tips&lt;br /&gt;ARC206 Abstract Concepts: Architecting Applications for a Service-Oriented World&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Fri Nov 10 15:15 - 16:30&lt;br /&gt;&lt;/strong&gt;DEV319 Visual Studio 2005 – Advanced Data Access Techniques&lt;br /&gt;DEV358 New Cryptography: Algorithms, APIs and Architecture&lt;br /&gt;DEV366 Boost Your Data-Driven Application Development Using SQL Server Centric .NET Code Generator [OlyMars Refresh]&lt;br /&gt;DEVWD25 IIS 6.0 Programming Interfaces and Architectural Drill Down&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Planning to learn some interesting stuff, either new or very specialized. From my schedule, it's obvious that my main interests are Architecture, SQL, Development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-5546045674924696389?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/5546045674924696389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=5546045674924696389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/5546045674924696389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/5546045674924696389'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/11/its-final-countdowns-to-teched-2006-in.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24933107.post-116230312866637778</id><published>2006-10-31T11:35:00.000Z</published><updated>2006-11-16T10:51:45.231Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><title type='text'></title><content type='html'>&lt;strong&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Rereading No Silver Bullet&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;While re-reading "No Silver Bullet" (&lt;a href="http://www-inst.eecs.berkeley.edu/~maratb/readings/NoSilverBullet.html"&gt;http://www-inst.eecs.berkeley.edu/~maratb/readings/NoSilverBullet.html&lt;/a&gt;), I was amazed by the intemporality of the article. It was published in April 1987 (Computer, Vol. 20, No. 4) and written by Frederick P. Brooks, and as it's almost TWENTY years old it feels more actual than ever.&lt;br /&gt;&lt;br /&gt;In the article, Brooks divides the difficulties in Software Engineering between Essence and Accidental.&lt;br /&gt;&lt;br /&gt;On the side of the essential difficulties, are the complexity, conformity, changeability and invisibility of software. Meaning that software is inherently complex as it is an abstract entity that represents complex interactions (business rules) and interfaces with complex systems/processes/procedures. Not only that, but generally it's the software that must change to accomodate the business process and frequently the client doesn't know what he wants/needs (funny to see how something never changes J).&lt;br /&gt;&lt;br /&gt;The past breakthroughs (and some current silver bullets, in my opinion) only solve accidental difficulties. These are difficulties not inherent to building software, but with the way it was done.&lt;br /&gt;Among these are: High-level Languages (raises the expressive power of the language, but doesn’t attack the complexity of software), Time-Sharing (reduces the time gap between code, build and execution) and Unified Programming Environments (back then Unix and Interlisp, J).&lt;br /&gt;&lt;br /&gt;Among the hopes, there is ADA, OO programming, Artificial Intelligence, Graphical Programming, Environments and Tools and Workstations, all with marginal increment.&lt;br /&gt;&lt;br /&gt;The possible breakthroughs must come from:&lt;br /&gt;Buy vs Build (if one builds a system from bought components and minimal adjustments, the cost can be much lower, because it’s already tested, the delivery is immediate)&lt;br /&gt;Requirements refinement and rapid prototyping (most agile methodologies revolve around the iterative construction of a system. Considering the first iterations of a system, as a prototype that evolves to the final system, this point%2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24933107-116230312866637778?l=andre-silva-cardoso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://andre-silva-cardoso.blogspot.com/feeds/116230312866637778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24933107&amp;postID=116230312866637778' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/116230312866637778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24933107/posts/default/116230312866637778'/><link rel='alternate' type='text/html' href='http://andre-silva-cardoso.blogspot.com/2006/10/while-re-reading-no-silver-bullet.html' title=''/><author><name>André Cardoso</name><uri>http://www.blogger.com/profile/05662724011839538489</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://bp2.blogger.com/__-kebdy0UzY/Rv2UhnihYgI/AAAAAAAAAAo/P-KQP9FtSgA/s320/teched_2006_small.JPG'/></author><thr:total>0</thr:total></entry></feed>
