<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Guillermo G. Blog</title><link>http://weblogs.asp.net/guillermo/default.aspx</link><description>Software Architect &lt;br/&gt;
ASP.NET MCP &lt;br/&gt;
&lt;i&gt;"The best way to predict the future is to invent it"&lt;/i&gt;</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/GuillermoG" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>Tool: Balsamiq Mockups Review</title><link>http://feedproxy.google.com/~r/GuillermoG/~3/oU-WdGVsj-4/tool-balsamiq-mockups-review.aspx</link><pubDate>Mon, 31 Aug 2009 23:58:50 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7187081</guid><dc:creator>gugonzar</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/guillermo/rsscomments.aspx?PostID=7187081</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guillermo/commentapi.aspx?PostID=7187081</wfw:comment><comments>http://weblogs.asp.net/guillermo/archive/2009/08/31/tool-balsamiq-mockups-review.aspx#comments</comments><description>&lt;p align="justify"&gt;One of the most recurrent activities in the Software Development Process, is create prototypes to represent client’s wishes for their application’s appearance. Normally (&lt;em&gt;before I know Balsamiq Mockups&lt;/em&gt;) I created a presentation-only solution in Visual Studio to draw the forms, then dragging and organized controls, or creating a drawing in Visio to achieve the same result.&lt;/p&gt;  &lt;p align="justify"&gt;But frequently the client forgets that this images are prototypes, and wants some functional action, because the application is “ready” and looks like a final version app, the client creates a wrong idea of that's the definitive application’s appearance.&lt;/p&gt;  &lt;p align="justify"&gt;Some days ago, a friend (&lt;a href="http://www.gabrielizalo.com/" target="_blank"&gt;Gabriel Porras&lt;/a&gt;) sent me a prototype of one of their applications, and requested me a short review. I asked him what kind of tool he used to create this prototypes and the answer was: &lt;a href="http://www.balsamiq.com/products/mockups" target="_blank"&gt;Balsamiq Mockups&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Balsamiq Mockups is an &lt;a href="http://www.adobe.com/products/air/" target="_blank"&gt;Adobe Air&lt;/a&gt; application which you can use to quickly develop mockups using its 75 pre-built controls.&amp;#160; It feels like you are drawing, but it's digital, so you can tweak and rearrange controls easily, and the end result is much cleaner. When you are done with the mockup, you have the option to export your work as an image (PNG file) or an XML file.&lt;/p&gt;  &lt;p align="justify"&gt;Some Image Samples (taken from Balsamiq site):&lt;/p&gt;  &lt;table border="0" cellspacing="2" cellpadding="2" width="500"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td width="166" align="center"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="mytube Mockups" border="0" alt="mytube Mockups" src="http://weblogs.asp.net/blogs/guillermo/mytube_tn_16AC90D9.gif" width="179" height="165" /&gt; &lt;/td&gt;        &lt;td width="166" align="center"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Maps Mockup" border="0" alt="Maps Mockup" src="http://weblogs.asp.net/blogs/guillermo/bahoomaps_tn_7861D9E2.gif" width="176" height="145" /&gt; &lt;/td&gt;        &lt;td width="166" align="center"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Search Mockup" border="0" alt="Search Mockup" src="http://weblogs.asp.net/blogs/guillermo/boogle_tn_281F8262.gif" width="168" height="125" /&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p align="justify"&gt;And this is a Mockup for a real web application that I made:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://weblogs.asp.net/blogs/guillermo/image_10F407E4.png" width="280" height="236" /&gt; &lt;/p&gt;  &lt;p align="justify"&gt;In conclusion, the interface of Balsamiq Mockups is very easy to use, it has a toolbar with all the “controls” and all you have to do is just drag and drop onto the design place. You can create a lot of prototypes quickly and with a appearance of hand made mockups.&lt;/p&gt;  &lt;p align="justify"&gt;A short &lt;a href="http://www.balsamiq.com/videos/intro.mov" target="_blank"&gt;demo video&lt;/a&gt; to learn to use the tool, and quickly you can convert in a mockup master.&lt;/p&gt;  &lt;p align="justify"&gt;Thanks to &lt;strong&gt;Gabriel Porras&lt;/strong&gt; for share with me this excellent tool, and special thanks to &lt;strong&gt;Valerie Liberty&lt;/strong&gt; for your support!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7187081" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/GuillermoG/~4/oU-WdGVsj-4" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/guillermo/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/Tool/default.aspx">Tool</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/Balsamiq/default.aspx">Balsamiq</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/Mockups/default.aspx">Mockups</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/Software/default.aspx">Software</category><feedburner:origLink>http://weblogs.asp.net/guillermo/archive/2009/08/31/tool-balsamiq-mockups-review.aspx</feedburner:origLink></item><item><title>Tool: A Free Online JavaScript Compression Tool</title><link>http://feedproxy.google.com/~r/GuillermoG/~3/B4-LuRr11gc/tool-a-free-online-javascript-compression-tool.aspx</link><pubDate>Wed, 04 Mar 2009 23:15:18 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6937807</guid><dc:creator>gugonzar</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://weblogs.asp.net/guillermo/rsscomments.aspx?PostID=6937807</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guillermo/commentapi.aspx?PostID=6937807</wfw:comment><comments>http://weblogs.asp.net/guillermo/archive/2009/03/04/tool-a-free-online-javascript-compression-tool.aspx#comments</comments><description>&lt;p align="justify"&gt;I was testing a web page using Microsoft Visual Studio 2008 Test Suite, when I saw the final report, it shows me that this page have big size (aprox. 800 Kb); wow it's a big web page, but it's a page that don't contains large images or other graphical elements, but have a lot of JavaScript code included.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://www.bananascript.com/index.php?home" target="_blank"&gt;&lt;img style="margin: 0px 15px 0px 0px" src="http://www.bananascript.com/images/monkey.gif" align="left" /&gt;&lt;/a&gt;Searching for a tool to minimize those javascript files, I found this site &lt;a href="http://www.bananascript.com/" target="_blank"&gt;Bananascript.com&lt;/a&gt;, that's a free online tool to compress javascript files into very small and self extracting files.&lt;/p&gt;  &lt;p align="justify"&gt;I uploaded the biggest JavaScript file that was 600 Kb aprox, and clicked the compress button, the result .... a new compressed file of 300 Kb aprox, working without problems in my web project.&lt;/p&gt;  &lt;p align="justify"&gt;Then if you need to minimize a JavaScript file you can use this free tool, thanks to &amp;quot;wildcard_swe&amp;quot; for this work!.&lt;/p&gt;  &lt;p align="justify"&gt;Enjoy It!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6937807" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/GuillermoG/~4/B4-LuRr11gc" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/guillermo/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/Tool/default.aspx">Tool</category><feedburner:origLink>http://weblogs.asp.net/guillermo/archive/2009/03/04/tool-a-free-online-javascript-compression-tool.aspx</feedburner:origLink></item><item><title>Info: Running WcfTestClient Tool in a PC without VS.Net 2008</title><link>http://feedproxy.google.com/~r/GuillermoG/~3/FRyBsmvUfe4/info-running-wcftestclient-tool-in-a-pc-without-vs-net-2008.aspx</link><pubDate>Mon, 23 Feb 2009 17:09:05 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6924286</guid><dc:creator>gugonzar</dc:creator><slash:comments>5</slash:comments><wfw:commentRss>http://weblogs.asp.net/guillermo/rsscomments.aspx?PostID=6924286</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guillermo/commentapi.aspx?PostID=6924286</wfw:comment><comments>http://weblogs.asp.net/guillermo/archive/2009/02/23/info-running-wcftestclient-tool-in-a-pc-without-vs-net-2008.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/guillermo/WindowsLiveWriter/ToolRunningWcfTestClientinaPCwit.Net2008_9C13/image_2.png" mce_href="http://weblogs.asp.net/blogs/guillermo/WindowsLiveWriter/ToolRunningWcfTestClientinaPCwit.Net2008_9C13/image_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 0px 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="WcfTestClient" align="left" src="http://weblogs.asp.net/blogs/guillermo/WindowsLiveWriter/ToolRunningWcfTestClientinaPCwit.Net2008_9C13/image_thumb.png" width="200" height="117" mce_src="http://weblogs.asp.net/blogs/guillermo/WindowsLiveWriter/ToolRunningWcfTestClientinaPCwit.Net2008_9C13/image_thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Microsoft Visual Studio .Net 2008 comes with a tool to test our WCF services called &lt;b&gt;&lt;i&gt;WcfTestClient&lt;/i&gt;&lt;/b&gt;, you can run it from &amp;quot;&lt;i&gt;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\WcfTestClient.exe&lt;/i&gt;&amp;quot;. But what happens if you need to run this tool to test a WCF Service in a PC that don't have Microsoft Visual Studio .Net 2008 installed?&lt;/p&gt;  &lt;p align="justify"&gt;Well, you simply need to copy the listed files from the next path &amp;quot;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\&amp;quot;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;i&gt;SvcUtil.exe&lt;/i&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;i&gt;SvcUtil.exe.config&lt;/i&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;i&gt;WcfSvcHost.chm*&lt;/i&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;i&gt;WcfSvcHost.exe&lt;/i&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;i&gt;WcfSvcHost.exe.config&lt;/i&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;i&gt;WcfTestClient.chm*&lt;/i&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;i&gt;WcfTestClient.exe&lt;/i&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;i&gt;WcfTestClient.exe.config&lt;/i&gt;&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&lt;i&gt;*Files marked with an asterisk are optional.&lt;/i&gt;&lt;/p&gt;  &lt;p align="justify"&gt;But if you run the app shows you the next error:&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="5" width="533"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="531"&gt;         &lt;p align="left"&gt;&lt;i&gt;&lt;font size="2"&gt;Assembly Microsoft.VisualStudio.VirtualTreeGrid, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f7f11d50a3a was not found. Reinstall the assembly or Visual Studio. The application cannot continue and will exit.&lt;/font&gt;&lt;/i&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p align="justify"&gt;And now you need to add to the previous files the next file that resides in the GAC:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Microsoft.VisualStudio.VirtualTreeGrid.dll&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Maybe you're thinking right now ... hmm? How I can get a file from the GAC? ... It's easy!&lt;/p&gt;  &lt;p align="justify"&gt;Press the Windows Key + R, and then the Run Window appears, just copy the next path:&lt;/p&gt;  &lt;p align="justify"&gt;%windir%\assembly\GAC_MSIL\Microsoft.VisualStudio.VirtualTreeGrid\ &lt;/p&gt;  &lt;p align="justify"&gt;... and you will find a folder with the VirtualTreeGrid assembly inside. Copy this file to the same folder where the other files resides and you are ready to use WcfTestClient from a PC that don't have Microsoft Visual Studio 2008 Installed.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;UPDATED&lt;/strong&gt; April 27, 2009:    &lt;br /&gt;You can download all the files &lt;a href="http://weblogs.asp.net/blogs/guillermo/Code/WcfTestClient.zip" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Enyoy It!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6924286" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/GuillermoG/~4/FRyBsmvUfe4" height="1" width="1"/&gt;</description><feedburner:origLink>http://weblogs.asp.net/guillermo/archive/2009/02/23/info-running-wcftestclient-tool-in-a-pc-without-vs-net-2008.aspx</feedburner:origLink></item><item><title>Tip: System.Data.Entity and ClickOnce Deployment Issue</title><link>http://feedproxy.google.com/~r/GuillermoG/~3/e-Rn0Qz_Qak/tip-system-data-entity-and-clickonce-deployment-issue.aspx</link><pubDate>Wed, 20 Aug 2008 19:59:29 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6543682</guid><dc:creator>gugonzar</dc:creator><slash:comments>7</slash:comments><wfw:commentRss>http://weblogs.asp.net/guillermo/rsscomments.aspx?PostID=6543682</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guillermo/commentapi.aspx?PostID=6543682</wfw:comment><comments>http://weblogs.asp.net/guillermo/archive/2008/08/20/tip-system-data-entity-and-clickonce-deployment-issue.aspx#comments</comments><description>&lt;p align="justify"&gt;I was developing a Windows forms application in .net framework 3.5, and I needed to include &lt;a href="http://msdn.microsoft.com/en-us/library/t71a733d(VS.80).aspx" target="_blank"&gt;ClickOnce Deployment&lt;/a&gt; in my solution project. Recently I downloaded and installed the last Service Pack (SP1) for Microsoft Visual Studio 2008 and .net framework 3.5, so far, everything was normal. The only application setup prerequisite was .net framework 3.5.&lt;/p&gt;  &lt;p align="justify"&gt;I published my application in a web server normally, and when I click the Install button to start the install process, I received the next error message from the ClickOnce Installer:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://weblogs.asp.net/blogs/guillermo/WindowsLiveWriter/System.Data.EntityandClickOnceIssue_C844/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="97" alt="ClickOnce Message" src="http://weblogs.asp.net/blogs/guillermo/WindowsLiveWriter/System.Data.EntityandClickOnceIssue_C844/image_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;The funny thing is that I didn't have any reference to System.Data.Entity in my solution, so? what's wrong? Why was ClickOnce requesting this assembly? &lt;/p&gt;  &lt;p align="justify"&gt;Well, after a quick search in Google, I found and read this &lt;a href="http://blogs.blackmarble.co.uk/blogs/msteeples/archive/2008/08/12/your-clickonce-clients-complain-of-a-missing-system-data-entity-reference-in-the-gac.aspx" target="_blank"&gt;Post&lt;/a&gt; from Mat Steeples, and I understood why ClickOnce was referencing System.Data.Entity assembly, simple!, I included a new feature (Create a Desktop Icon) and that functionality requires the mentioned assembly.&lt;/p&gt;  &lt;p align="justify"&gt;Thanks to &lt;a href="http://blogs.blackmarble.co.uk/members/Mat-Steeples.aspx"&gt;Mat Steeples&lt;/a&gt; for sharing it.    &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6543682" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/GuillermoG/~4/e-Rn0Qz_Qak" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/guillermo/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/Windows+Forms/default.aspx">Windows Forms</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/ClickOnce/default.aspx">ClickOnce</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/Deployment/default.aspx">Deployment</category><feedburner:origLink>http://weblogs.asp.net/guillermo/archive/2008/08/20/tip-system-data-entity-and-clickonce-deployment-issue.aspx</feedburner:origLink></item><item><title>Article: Some Tips for Managing and Motivating Developers...</title><link>http://feedproxy.google.com/~r/GuillermoG/~3/XIgFuB_wS8A/article-some-tips-for-managing-and-motivating-developers.aspx</link><pubDate>Fri, 01 Aug 2008 13:57:04 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6466346</guid><dc:creator>gugonzar</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/guillermo/rsscomments.aspx?PostID=6466346</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guillermo/commentapi.aspx?PostID=6466346</wfw:comment><comments>http://weblogs.asp.net/guillermo/archive/2008/08/01/article-some-tips-for-managing-and-motivating-developers.aspx#comments</comments><description>&lt;p&gt;An interesting article wrote by &lt;a href="http://www.cio.com/author/41421/Esther+Schindler" target="_blank"&gt;Esther Schindler&lt;/a&gt; with some tips for Developer Management and Motivation.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cio.com/article/409063/Managing_and_Motivating_Developers_Tips_for_Management_Cluefulness" target="_blank"&gt;Managing and Motivating Developers: Tips for Management Cluefulness&lt;/a&gt;    &lt;br /&gt;Encouraging productivity from your programming staff--at least in the developers' estimation--requires a few special techniques.&lt;/p&gt;  &lt;p&gt;Enjoy it!   &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6466346" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/GuillermoG/~4/XIgFuB_wS8A" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/guillermo/archive/tags/Development/default.aspx">Development</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/Article/default.aspx">Article</category><feedburner:origLink>http://weblogs.asp.net/guillermo/archive/2008/08/01/article-some-tips-for-managing-and-motivating-developers.aspx</feedburner:origLink></item><item><title>Articulo: Web Application Projects vs Web Site Projects</title><link>http://feedproxy.google.com/~r/GuillermoG/~3/i3wkFn7HxIU/articulo-web-application-projects-vs-web-site-projects.aspx</link><pubDate>Thu, 24 Jul 2008 20:01:28 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6440205</guid><dc:creator>gugonzar</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/guillermo/rsscomments.aspx?PostID=6440205</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guillermo/commentapi.aspx?PostID=6440205</wfw:comment><comments>http://weblogs.asp.net/guillermo/archive/2008/07/24/articulo-web-application-projects-vs-web-site-projects.aspx#comments</comments><description>&lt;p align="justify"&gt;Hace algunos d&amp;#237;as (bueno un par de meses ya), un compa&amp;#241;ero de trabajo me pregunto sobre las consideraciones que deber&amp;#237;a tener, al momento de crear un nuevo proyecto de tipo Web, como saben desde la versi&amp;#243;n 2.0 del .net Framework (y Visual Studio .Net 2005) es posible crear un nuevo tipo de proyectos denominados Web Projects que a diferencia de su antecesor, tiene una serie de caracter&amp;#237;sticas que se deben considerar al momento de su elecci&amp;#243;n.&lt;/p&gt;  &lt;p align="justify"&gt;Expongo algunos &amp;#237;tems sobre ambos tipos de proyecto; consideremos la sigla WSP para &lt;em&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2005/08/21/423201.aspx" target="_blank"&gt;Web Site Projects&lt;/a&gt;&lt;/em&gt; y WAP para &lt;em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa730880.aspx" target="_blank"&gt;Web Application Projects&lt;/a&gt;&lt;/em&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Los WSP a diferencia de los WAP no poseen archivo de proyecto, se basan en el sistema de archivos.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Los WSP trabajan bajo un nuevo &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163675.aspx" target="_blank"&gt;modelo de compilaci&amp;#243;n&lt;/a&gt; diferente al utilizado por los WAP.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Ambos tipos de proyecto soportan su implementaci&amp;#243;n sobre&amp;#160; IIS o el servidor Web incorporado denominado ASP.NET Development Server.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Y &lt;a href="http://maordavid.blogspot.com/2007/06/aspnet-20-web-site-vs-web-application.html" target="_blank"&gt;muchas m&amp;#225;s&lt;/a&gt;...&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Y &lt;a href="http://www.dotnetspider.com/resources/1520-Difference-between-web-site-web-application.aspx" target="_blank"&gt;otras m&amp;#225;s&lt;/a&gt;...&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Ahhh y &lt;a href="http://blogs.vertigosoftware.com/teamsystem/archive/2006/11/03/4057.aspx" target="_blank"&gt;par de consideraciones&lt;/a&gt; cuando se tiene VSTS.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Como ya hay bastante sobre el tema me puse en la tarea de investigar y reunir algunos enlaces donde mencionan sus principales diferencias y &lt;a href="http://maordavid.blogspot.com/2007/06/aspnet-20-web-site-vs-web-application.html" target="_blank"&gt;cuando es mejor usar uno u otro&lt;/a&gt;, yo soy mas dado a utilizar Web Application Projects, cuando necesito incorporar proyectos Web a mis soluciones.&lt;/p&gt;  &lt;p align="justify"&gt;Referencias utilizadas:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://maordavid.blogspot.com/2007/06/aspnet-20-web-site-vs-web-application.html"&gt;ASP.NET 2.0 - Web Site vs Web Application project&lt;/a&gt; por Maor David&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2005/08/21/423201.aspx" target="_blank"&gt;VS 2005 Web Project System: What is it and why did we do it?&lt;/a&gt; por Scott Guthrie&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://www.dotnetspider.com/resources/1520-Difference-between-web-site-web-application.aspx" target="_blank"&gt;Difference between web site and web application in Visual Studio 2005&lt;/a&gt; por Tony John&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://blogs.vertigosoftware.com/teamsystem/archive/2006/11/03/4057.aspx" target="_blank"&gt;Web Site Projects vs. Web Application Projects&lt;/a&gt; por jatwood&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6440205" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/GuillermoG/~4/i3wkFn7HxIU" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/guillermo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/Web+Projects+Application+ASP.Net/default.aspx">Web Projects Application ASP.Net</category><feedburner:origLink>http://weblogs.asp.net/guillermo/archive/2008/07/24/articulo-web-application-projects-vs-web-site-projects.aspx</feedburner:origLink></item><item><title>Quote of the day...</title><link>http://feedproxy.google.com/~r/GuillermoG/~3/bGKmtJOKBvQ/quote-of-the-day.aspx</link><pubDate>Mon, 31 Mar 2008 14:16:40 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6052022</guid><dc:creator>gugonzar</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/guillermo/rsscomments.aspx?PostID=6052022</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guillermo/commentapi.aspx?PostID=6052022</wfw:comment><comments>http://weblogs.asp.net/guillermo/archive/2008/03/31/quote-of-the-day.aspx#comments</comments><description>&lt;p&gt;(English Version)   &lt;br /&gt;Software and cathedrals are very similar. First we built it, then we pray.     &lt;br /&gt;- Anonymous&lt;/p&gt;  &lt;p&gt;(Spanish Version)   &lt;br /&gt;El software y las catedrales se parecen mucho. Primero lo construimos, despu&amp;#233;s rezamos.    &lt;br /&gt;- An&amp;#243;nimo.&lt;/p&gt;  &lt;p&gt; (v&amp;#237;a &lt;a href="http://www.microsiervos.com/archivo/frases-citas/inquietante-similitud.html" target="_blank"&gt;Microsiervos&lt;/a&gt;)&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6052022" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/GuillermoG/~4/bGKmtJOKBvQ" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/guillermo/archive/tags/Quote+Software+Day/default.aspx">Quote Software Day</category><feedburner:origLink>http://weblogs.asp.net/guillermo/archive/2008/03/31/quote-of-the-day.aspx</feedburner:origLink></item><item><title>Tip: ¿Cómo depurar Windows Services?</title><link>http://feedproxy.google.com/~r/GuillermoG/~3/7MVmlnqHi80/tip-191-c-243-mo-depurar-windows-services.aspx</link><pubDate>Mon, 10 Mar 2008 19:46:41 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5946235</guid><dc:creator>gugonzar</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/guillermo/rsscomments.aspx?PostID=5946235</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guillermo/commentapi.aspx?PostID=5946235</wfw:comment><comments>http://weblogs.asp.net/guillermo/archive/2008/03/10/tip-191-c-243-mo-depurar-windows-services.aspx#comments</comments><description>&lt;p align="justify"&gt;Muy seguramente si has construido una aplicaci&amp;#243;n de tipo &lt;strong&gt;Windows Service&lt;/strong&gt; (Servicio de Windows), has tenido que hacerte la siguiente pregunta... &lt;strong&gt;&amp;#191;Bueno y como hago para depurarlo?&lt;/strong&gt;, resulta que la depuraci&amp;#243;n de un Windows Service no es tan &amp;quot;trivial&amp;quot; como la de otras aplicaciones de la plataforma .net, y hay que hacer uno que otro truquito para poder hacer un seguimiento paso a paso por el c&amp;#243;digo del servicio.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://geeks.ms/blogs/rcorral/"&gt;Rodrigo Corral&lt;/a&gt; nos comparte &lt;a href="http://geeks.ms/blogs/rcorral/archive/2008/03/08/depurando-servicios-de-windows-m-225-s-facilmente.aspx"&gt;un par de trucos &amp;#250;tiles&lt;/a&gt; para realizar la depuraci&amp;#243;n de una aplicaci&amp;#243;n de tipo Windows Service.&lt;/p&gt;  &lt;p align="justify"&gt;Muchas gracias a Rodrigo por compartir este par de tips.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5946235" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/GuillermoG/~4/7MVmlnqHi80" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/guillermo/archive/tags/Debug+Windows+Service+Tip/default.aspx">Debug Windows Service Tip</category><feedburner:origLink>http://weblogs.asp.net/guillermo/archive/2008/03/10/tip-191-c-243-mo-depurar-windows-services.aspx</feedburner:origLink></item><item><title>AJAX: How to create a "Processing" modal window using UpdateProgress and ModalPopup ASP.net AJAX controls</title><link>http://feedproxy.google.com/~r/GuillermoG/~3/6f1s3TpP1uM/ajax-how-to-create-a-quot-processing-quot-modal-window-using-updateprogress-and-modalpopup-asp-net-ajax-controls.aspx</link><pubDate>Mon, 25 Feb 2008 00:08:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5856104</guid><dc:creator>gugonzar</dc:creator><slash:comments>27</slash:comments><wfw:commentRss>http://weblogs.asp.net/guillermo/rsscomments.aspx?PostID=5856104</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guillermo/commentapi.aspx?PostID=5856104</wfw:comment><comments>http://weblogs.asp.net/guillermo/archive/2008/02/24/ajax-how-to-create-a-quot-processing-quot-modal-window-using-updateprogress-and-modalpopup-asp-net-ajax-controls.aspx#comments</comments><description>&lt;p align="justify"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="ajax" src="http://weblogs.asp.net/blogs/guillermo/WindowsLiveWriter/AJAXComocrearunaventanamodaldeCargandout_139CA/ajax_3.png" width="529" height="105" mce_src="http://weblogs.asp.net/blogs/guillermo/WindowsLiveWriter/AJAXComocrearunaventanamodaldeCargandout_139CA/ajax_3.png" /&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Originally posted as &amp;quot;&lt;a href="http://weblogs.asp.net/guillermo/archive/2007/12/13/ajax-como-crear-una-ventana-modal-quot-cargando-quot-utilizando-los-controles-updateprogress-y-modalpopup.aspx" mce_href="http://weblogs.asp.net/guillermo/archive/2007/12/13/ajax-como-crear-una-ventana-modal-quot-cargando-quot-utilizando-los-controles-updateprogress-y-modalpopup.aspx"&gt;AJAX: Como crear una ventana ...&lt;/a&gt;&amp;quot; in Spanish on December 13th 2007.&lt;/p&gt;  &lt;p align="justify"&gt;A few days ago I had need to implement some functionality based on AJAX technology in a Web application that I was developing. When a request is sent to the server doing click to some web control in the page, &lt;b&gt;AJAX &amp;quot;hide&amp;quot; the &lt;i&gt;Postback&lt;/i&gt; to our eyes&lt;/b&gt; and sometimes is so difficult to detect, that the page is processing the request based on the click event.&lt;/p&gt;  &lt;p align="justify"&gt;There is an &lt;a href="http://www.asp.net/AJAX/" mce_href="http://www.asp.net/AJAX/"&gt;AJAX&lt;/a&gt; ASP.net Control that provides status information about partial-page updates called &lt;a href="http://www.asp.net/ajax/documentation/live/tutorials/IntroductionUpdateProgress.aspx" mce_href="http://www.asp.net/ajax/documentation/live/tutorials/IntroductionUpdateProgress.aspx"&gt;UpdateProgress&lt;/a&gt;. It's very useful to &amp;quot;control&amp;quot; the user patience &lt;b&gt;but permits that the user continue interacting with other controls&lt;/b&gt; in the application, and rare behaviors can result if the user clicks other button or does other &lt;i&gt;Postback&lt;/i&gt; action.&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;// UpdateProgress Implementation Example &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:UpdateProgress&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;UpdateProg1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;DisplayAfter&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ProgressTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;position: relative; top: 30%; text-align: center;&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;  &lt;/pre&gt;

  &lt;pre class="alt"&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;img&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;loading.gif&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;vertical-align:middle&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;alt&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Processing&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;      Processing ... &lt;/pre&gt;

  &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ProgressTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:UpdateProgress&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p align="justify"&gt;Unfortunately doesn't exists an ASP.net AJAX control that &amp;quot;blocks&amp;quot; the application while a &lt;i&gt;Postback&lt;/i&gt; request is made to the server, but &lt;b&gt;fortunately we can make a powerful combination&lt;/b&gt; using this control in conjunction with an &lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/" mce_href="http://www.asp.net/AJAX/AjaxControlToolkit/"&gt;AJAX Control Toolkit's&lt;/a&gt; called &lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ModalPopup/ModalPopup.aspx" mce_href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ModalPopup/ModalPopup.aspx"&gt;ModalPopup Extender&lt;/a&gt;, that allows a page to display content to the user in a &amp;quot;modal&amp;quot; manner which prevents the user from interacting with the rest of the page.&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;//Modal Popup Extender Implementation Example &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:ModalPopupExtender&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ModalProgress&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;TargetControlID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;panelUpdateProgress&amp;quot;&lt;/span&gt;  &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="attr"&gt;BackgroundCssClass&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;modalBackground&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;PopupControlID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;panelUpdateProgress&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p align="justify"&gt;Now, this is the interesting part, take the power of each one of this controls to create &lt;b&gt;a composite functionality that shows a progress indicator to the user in a modal window way&lt;/b&gt;, blocking the user interaction with the application while it's processing a previous &lt;i&gt;Postback&lt;/i&gt; request. The next code example shows how to do this:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="rem"&gt;// Include this page directives to reference ASP.net AJAX controls&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="rem"&gt;// from AJAX and the Toolkit &lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;lt;%@ Register Assembly=&lt;span class="str"&gt;&amp;quot;System.Web.Extensions, Version=1.0.61025.0, &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;Culture=neutral, PublicKeyToken=31bf3856ad364e35&amp;quot; Namespace=&lt;span class="str"&gt;&amp;quot;System.Web.UI&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;TagPrefix=&lt;span class="str"&gt;&amp;quot;asp&amp;quot;&lt;/span&gt; %&amp;gt; &lt;/pre&gt;

  &lt;pre&gt;&amp;lt;%@ Register Assembly=&lt;span class="str"&gt;&amp;quot;AjaxControlToolkit&amp;quot;&lt;/span&gt; Namespace=&lt;span class="str"&gt;&amp;quot;AjaxControlToolkit&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;TagPrefix=&lt;span class="str"&gt;&amp;quot;ajaxToolkit&amp;quot;&lt;/span&gt; %&amp;gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode"&gt;&amp;#160;&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;// Include ScriptManager tag manages client script for Microsoft&amp;#160; &lt;/pre&gt;

  &lt;pre&gt;// ASP.NET AJAX pages &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ScriptManager&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ScriptManager1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;// Include UpdateProgress Control inside a Panel Control  &lt;/pre&gt;

  &lt;pre&gt;// and then the ModalPopupExtender Control &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Panel&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;panelUpdateProgress&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="attr"&gt;CssClass&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;updateProgress&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:UpdateProgress&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;UpdateProg1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;DisplayAfter&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ProgressTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;position: relative; top: 30%; text-align: center;&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;img&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;loading.gif&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;vertical-align: middle&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;          &lt;span class="attr"&gt;alt&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Processing&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;          Processing ... &lt;/pre&gt;

  &lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ProgressTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:UpdateProgress&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:Panel&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:ModalPopupExtender&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ModalProgress&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="attr"&gt;TargetControlID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;panelUpdateProgress&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;BackgroundCssClass&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;modalBackground&amp;quot;&lt;/span&gt; &lt;br /&gt;&lt;span class="attr"&gt;PopupControlID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;panelUpdateProgress&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p align="justify"&gt;It's necessary to add a pair of &lt;b&gt;javasctript functions&lt;/b&gt; that are executed at the initial and final AJAX requests. &lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="rem"&gt;//JavaScript code included at jsUpdateProgress.js file&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginReq); &lt;/pre&gt;

  &lt;pre class="alt"&gt;Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endReq);    &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; beginReq(sender, args){ &lt;/pre&gt;

  &lt;pre class="alt"&gt;    &lt;span class="rem"&gt;// shows the Popup &lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;    $find(ModalProgress).show();        &lt;/pre&gt;

  &lt;pre class="alt"&gt;} &lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; endReq(sender, args) { &lt;/pre&gt;

  &lt;pre&gt;    &lt;span class="rem"&gt;//  shows the Popup &lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;    $find(ModalProgress).hide(); &lt;/pre&gt;

  &lt;pre&gt;} &lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;You can view that the javascript functions references a variable called ModalProgress, this variable must be created in the ASP.net page's code. The next code shows how to do it:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;language&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;javascript&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;      &lt;span class="kwrd"&gt;var&lt;/span&gt; ModalProgress =&lt;span class="str"&gt;'&amp;lt;%= ModalProgress.ClientID %&amp;gt;'&lt;/span&gt;;         &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span class="str"&gt;&amp;quot;jsUpdateProgress.js&amp;quot;&lt;/span&gt;&amp;gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Finally we add a little CSS code to show a gray contour in the modal window, and a cute format to the image and text.&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;.modalBackground &lt;/pre&gt;

  &lt;pre&gt;{ &lt;/pre&gt;

  &lt;pre class="alt"&gt;    background-color: Gray; &lt;/pre&gt;

  &lt;pre&gt;    filter: alpha(opacity=50); &lt;/pre&gt;

  &lt;pre class="alt"&gt;    opacity: 0.50; &lt;/pre&gt;

  &lt;pre&gt;} &lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;.updateProgress &lt;/pre&gt;

  &lt;pre class="alt"&gt;{ &lt;/pre&gt;

  &lt;pre&gt;    border-width: 1px; &lt;/pre&gt;

  &lt;pre class="alt"&gt;    border-style: solid; &lt;/pre&gt;

  &lt;pre&gt;    background-color: #FFFFFF; &lt;/pre&gt;

  &lt;pre class="alt"&gt;    position: absolute; &lt;/pre&gt;

  &lt;pre&gt;    width: 180px; &lt;/pre&gt;

  &lt;pre class="alt"&gt;    height: 65px; &lt;/pre&gt;

  &lt;pre&gt;} &lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&lt;font size="2" face="Consolas"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="2"&gt;You can download the &lt;a href="http://weblogs.asp.net/blogs/guillermo/Code/modalExample.zip" mce_href="http://weblogs.asp.net/blogs/guillermo/Code/modalExample.zip"&gt;source code&lt;/a&gt; from the above code examples, and include an Update Progress Modal Window in your Web applications. &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Updated &lt;/strong&gt;(Sept 02/2009): The source code includes a Visual Basic example of this implementation.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5856104" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/GuillermoG/~4/6f1s3TpP1uM" height="1" width="1"/&gt;</description><feedburner:origLink>http://weblogs.asp.net/guillermo/archive/2008/02/24/ajax-how-to-create-a-quot-processing-quot-modal-window-using-updateprogress-and-modalpopup-asp-net-ajax-controls.aspx</feedburner:origLink></item><item><title>Tool: RegularExpression FSA Visualizer</title><link>http://feedproxy.google.com/~r/GuillermoG/~3/s_E44_ylEuc/tool-regularexpression-fsa-visualizer.aspx</link><pubDate>Mon, 18 Feb 2008 19:59:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5815653</guid><dc:creator>gugonzar</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/guillermo/rsscomments.aspx?PostID=5815653</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guillermo/commentapi.aspx?PostID=5815653</wfw:comment><comments>http://weblogs.asp.net/guillermo/archive/2008/02/18/tool-regularexpression-fsa-visualizer.aspx#comments</comments><description>&lt;img src="http://osteele.com/images/2006/rematch-small.png" style="margin: 0px 0px 0px 15px;" mce_src="http://osteele.com/images/2006/rematch-small.png" align="right"&gt;  &lt;p align="justify"&gt;Thanks to my friend &lt;a href="http://www.estandaresyaccesibilidad.com/" mce_href="http://www.estandaresyaccesibilidad.com/" target="_blank"&gt;Gabriel Porras&lt;/a&gt; for sharing me this excellent tool intended to demonstrate the implementation of regular expressions AKA regex. It's a graphical tool that shows how regular expressions engines use FSA (Finite State Automata) to match regex patterns against text.&lt;/p&gt;  &lt;p align="justify"&gt;This fabulous tool is called &lt;a href="http://osteele.com/tools/reanimator/" mce_href="http://osteele.com/tools/reanimator/" target="_blank"&gt;Reanimator&lt;/a&gt; was built by &lt;a href="http://osteele.com" mce_href="http://osteele.com" target="_blank"&gt;Oliver Steele&lt;/a&gt;. Thanks to Oliver for share this tool with us. &lt;/p&gt;  &lt;p&gt;How many regex has built today?&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5815653" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/GuillermoG/~4/s_E44_ylEuc" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/guillermo/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/Regular+Expression/default.aspx">Regular Expression</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/RegEx/default.aspx">RegEx</category><feedburner:origLink>http://weblogs.asp.net/guillermo/archive/2008/02/18/tool-regularexpression-fsa-visualizer.aspx</feedburner:origLink></item><item><title>Image: The only valid measurement of code quality</title><link>http://feedproxy.google.com/~r/GuillermoG/~3/9Kirk9zsNWc/image-the-only-valid-measurement-of-code-quality.aspx</link><pubDate>Fri, 15 Feb 2008 20:39:22 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5795815</guid><dc:creator>gugonzar</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/guillermo/rsscomments.aspx?PostID=5795815</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guillermo/commentapi.aspx?PostID=5795815</wfw:comment><comments>http://weblogs.asp.net/guillermo/archive/2008/02/15/image-the-only-valid-measurement-of-code-quality.aspx#comments</comments><description>&lt;table cellspacing="0" cellpadding="2" width="537" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" align="center" width="275" bgcolor="#f5f5f5"&gt;         &lt;br /&gt;          &lt;br /&gt;          &lt;p&gt;&lt;font size="2"&gt;A funny image that shows a &amp;quot;cruel reality&amp;quot; of software development, and a curious form for calculate code quality. &lt;/font&gt;&lt;/p&gt;          &lt;p&gt;&lt;font size="2"&gt;This image was taken from Rodrigo Corral Blog and the original post it's called &amp;quot;&lt;/font&gt;&lt;a href="http://geeks.ms/blogs/rcorral/archive/2008/02/13/m-233-trica-de-calidad-de-c-243-digo.aspx" target="_blank"&gt;&lt;font size="2"&gt;M&amp;#233;trica de calidad de c&amp;#243;digo&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;&amp;quot;. &lt;/font&gt;&lt;/p&gt;          &lt;p&gt;&lt;font size="2"&gt;How many WTFs / min have their revisions of quality control?&lt;/font&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="260"&gt;&lt;img height="318" src="http://geeks.ms/blogs/rcorral/WindowsLiveWriter/Mtricadecalidaddecdigo_13454/wtfm_c51d2623-45d8-4cbe-9398-545de393da87.jpg" width="350" align="right" /&gt; &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5795815" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/GuillermoG/~4/9Kirk9zsNWc" height="1" width="1"/&gt;</description><feedburner:origLink>http://weblogs.asp.net/guillermo/archive/2008/02/15/image-the-only-valid-measurement-of-code-quality.aspx</feedburner:origLink></item><item><title>Tip: Hashtable vs SortedList</title><link>http://feedproxy.google.com/~r/GuillermoG/~3/EZxzqfjmAck/tip-hashtable-vs-sortedlist.aspx</link><pubDate>Tue, 12 Feb 2008 00:12:42 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5763863</guid><dc:creator>gugonzar</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://weblogs.asp.net/guillermo/rsscomments.aspx?PostID=5763863</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guillermo/commentapi.aspx?PostID=5763863</wfw:comment><comments>http://weblogs.asp.net/guillermo/archive/2008/02/11/tip-hashtable-vs-sortedlist.aspx#comments</comments><description>&lt;p align="justify"&gt;I wrote this short tip based in a question made from a workmate about a functionality that he wanted that appears in a Hashtable class. &lt;/p&gt;  &lt;p align="justify"&gt;Remember that a Hashtable represents a collection of key/value pairs that are organized based on the hash code of the key, and when a element is added to the Hashtable it's stored based on the hash code of the key, and the elements don't preserves the order based in their insertion to the Hashtable's &amp;quot;bag&amp;quot;. If I want to retrieve the elements in the same order that they were placed, there's no way to retrieve them (normally). &lt;/p&gt;  &lt;p align="justify"&gt;And, if I want a collection class which can add key/value elements, and it maintains all the items sorted based in the insertion order? This class exists and their name is SortedList. &lt;/p&gt;  &lt;p align="justify"&gt;A SortedList is a collection of key/value pairs that is sorted by the keys and are accessible by key and by index. &lt;/p&gt;  &lt;p align="justify"&gt;If you want that the items contained in a collection always be &amp;quot;sorted&amp;quot; you need to use a SortedList instead a HashTable. If you don need the items sorted then use a HashTable, beacuse it's more faster than a SortedList obtaining a value from their &amp;quot;bag&amp;quot;.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Updated 01-08-2008&lt;/strong&gt;    &lt;br /&gt;An interesting performance test to compare four different implementations of the IDictionary interface posted by Vladimir Bodurov (&lt;a href="http://blog.bodurov.com/blog/Post.aspx?postID=18"&gt;IDictionary options - performance test - SortedList vs. SortedDictionary vs. Dictionary vs. Hashtable&lt;/a&gt;).&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5763863" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/GuillermoG/~4/EZxzqfjmAck" height="1" width="1"/&gt;</description><feedburner:origLink>http://weblogs.asp.net/guillermo/archive/2008/02/11/tip-hashtable-vs-sortedlist.aspx</feedburner:origLink></item><item><title>Artículo: ¿Documentos o Ejecutables?</title><link>http://feedproxy.google.com/~r/GuillermoG/~3/boAGCOY9zMI/art-237-culo-191-documentos-o-ejecutables.aspx</link><pubDate>Mon, 11 Feb 2008 15:41:49 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5760424</guid><dc:creator>gugonzar</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/guillermo/rsscomments.aspx?PostID=5760424</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guillermo/commentapi.aspx?PostID=5760424</wfw:comment><comments>http://weblogs.asp.net/guillermo/archive/2008/02/11/art-237-culo-191-documentos-o-ejecutables.aspx#comments</comments><description>&lt;p align="justify"&gt;Siempre unos de los principales &amp;quot;&lt;em&gt;karmas&lt;/em&gt;&amp;quot; de los desarrolladores ha sido la documentaci&amp;#243;n, &amp;#191;hasta que punto un proyecto de software debe contemplar un excesivo detalle de generaci&amp;#243;n y mantenimiento de documentaci&amp;#243;n y no perder el norte que es la elaboraci&amp;#243;n de un paquete de software funcional que cumpla con los requisitos y necesidades planteados por el cliente? &lt;/p&gt;  &lt;p align="justify"&gt;A continuaci&amp;#243;n les comparto un interesante post publicado por &lt;a href="http://geeks.ms/members/rcorral.aspx"&gt;Rodrigo Corral&lt;/a&gt; denominado &lt;a href="http://geeks.ms/blogs/rcorral/archive/2008/02/10/documentos-o-ejecutables.aspx"&gt;Documentos o Ejecutables&lt;/a&gt; en el cual hace &amp;#233;nfasis a lo indicado en el p&amp;#225;rrafo anterior y que me parece es uno de los eternos dolores de cabeza que se presentan en un grupo de desarrollo de software .&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#191;Buen documentador o buen desarrollador?&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5760424" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/GuillermoG/~4/boAGCOY9zMI" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/guillermo/archive/tags/Article/default.aspx">Article</category><feedburner:origLink>http://weblogs.asp.net/guillermo/archive/2008/02/11/art-237-culo-191-documentos-o-ejecutables.aspx</feedburner:origLink></item><item><title>Tip: DataSet.HasChanges and Windows Form Close Button Strange Behavior</title><link>http://feedproxy.google.com/~r/GuillermoG/~3/fQP9vLXAwDs/tip-dataset-haschanges-and-windows-form-close-button-estrange-behavior.aspx</link><pubDate>Tue, 22 Jan 2008 14:12:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5635180</guid><dc:creator>gugonzar</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://weblogs.asp.net/guillermo/rsscomments.aspx?PostID=5635180</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guillermo/commentapi.aspx?PostID=5635180</wfw:comment><comments>http://weblogs.asp.net/guillermo/archive/2008/01/22/tip-dataset-haschanges-and-windows-form-close-button-estrange-behavior.aspx#comments</comments><description>&lt;P align=justify&gt;I had to write a simple Windows Forms application that haves a form. This form contains a &lt;EM&gt;DataGridView&lt;/EM&gt; control that is binded with a &lt;EM&gt;DataSet&lt;/EM&gt;; this &lt;EM&gt;DataSet&lt;/EM&gt; is filled with data from an XML file. This Windows Forms contains two buttons: "Accept Changes" and "Cancel Changes". &lt;/P&gt;
&lt;P align=justify&gt;The "Accept Changes" and "Cancel Changes" buttons works greatly, the first one writes the content of the &lt;EM&gt;DataGridView&lt;/EM&gt; control in a &lt;EM&gt;XML DataSet&lt;/EM&gt;, and the second one simply cancel the data insertion, delete or modifying operation and shows a message indicating to the user if wants to discard or save all changes made to the &lt;EM&gt;DataGridView&lt;/EM&gt; control. Both the "&lt;EM&gt;Cancel Changes" &lt;/EM&gt;and the standard window close button executes the following method:&lt;/P&gt;
&lt;DIV class=csharpcode&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;1:&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; CloseWindow()&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;2: &lt;/SPAN&gt;{&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;3:&lt;/SPAN&gt;  dvProviders = dgvProviders.DataSource &lt;SPAN class=kwrd&gt;as&lt;/SPAN&gt; DataView;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;4:  &lt;/SPAN&gt;DataSet dsProviders = dvProviders.Table.DataSet;&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;5:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;6:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (dsProviders.HasChanges())&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;7:  &lt;/SPAN&gt;{&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;8:  &lt;/SPAN&gt; DialogResult saveChanges = MessageBox.Show(&lt;SPAN class=str&gt;"¿Save Changes?"&lt;/SPAN&gt;,&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;9:  &lt;/SPAN&gt; &lt;SPAN class=str&gt;"Save"&lt;/SPAN&gt;, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;10:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;11:  &lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; saveChanges == DialogResult.Yes)&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;12:  &lt;/SPAN&gt; {&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;13:  &lt;/SPAN&gt;  &lt;SPAN class=rem&gt;//Save the changes from the DataSet to an XML file&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;14:  &lt;/SPAN&gt;  &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.SaveChanges();&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;15:  &lt;/SPAN&gt; }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;16:  &lt;/SPAN&gt;}&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;17: &lt;/SPAN&gt;}&lt;/PRE&gt;&lt;/DIV&gt;
&lt;STYLE type=text/css&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;
&lt;/DIV&gt;
&lt;STYLE type=text/css&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;P&gt;But &lt;U&gt;what&lt;/U&gt; happens if the user close the window using the standard window's close button and the &lt;EM&gt;DataGridView's&lt;/EM&gt;&amp;nbsp;&lt;EM&gt;DataSource&lt;/EM&gt; (a &lt;EM&gt;DataSet&lt;/EM&gt;) have pending changes? &lt;BR&gt;It is expected that the button execute the &lt;EM&gt;CloseWindow&lt;/EM&gt; method and detect if the &lt;EM&gt;DataSet&lt;/EM&gt; has changes, but in a rare way when the code ask for the result of the &lt;EM&gt;DataSet's&lt;/EM&gt; &lt;EM&gt;HasChanges&lt;/EM&gt; method, it returns a false value and all the changes made in the &lt;EM&gt;DataGridView&lt;/EM&gt; control are lost when the window close. &lt;/P&gt;
&lt;P align=justify&gt;Well, Fortunately with the help of a coworker that told me that it was a "Bug" or better called "Windows Form's rare behavior". He told me that I need to move the focus of the &lt;EM&gt;DataGridView&lt;/EM&gt; control to other control in the form (for example the Accept Changes button) before asking for the &lt;EM&gt;DataSet's HasChanges&lt;/EM&gt; method, this way the &lt;EM&gt;DataGridView&lt;/EM&gt; control apply the changes to the &lt;EM&gt;DataSet&lt;/EM&gt; and the &lt;EM&gt;HasChanges&lt;/EM&gt; return true (if any change is made to the &lt;EM&gt;DataGridView&lt;/EM&gt; control) and the method's execution continues normally.&lt;/P&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE class=alt&gt;  5:     &lt;SPAN class=rem&gt;// Set the focus to other control&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE&gt;  6:      btnAcceptChanges.Focus();&lt;/PRE&gt;&lt;/DIV&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE class=alt&gt;  7:      &lt;/PRE&gt;&lt;/DIV&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE&gt;  8:      &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (dsProviders.HasChanges())&lt;/PRE&gt;&lt;/DIV&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE class=alt&gt;  9:      {&lt;/PRE&gt;&lt;/DIV&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE&gt; 10:      ...&lt;/PRE&gt;&lt;/DIV&gt;
&lt;STYLE type=text/css&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;STYLE type=text/css&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/STYLE&gt;

&lt;P&gt;Thanks to &lt;A href="http://apuyana.no-ip.com/apuyana/" target=_blank mce_href="http://apuyana.no-ip.com/apuyana/"&gt;Alberto Puyana&lt;/A&gt; for help me find the answer to this windows close button strange behavior. &lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5635180" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/GuillermoG/~4/fQP9vLXAwDs" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/guillermo/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/Tip/default.aspx">Tip</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/Windows+Forms/default.aspx">Windows Forms</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/C_2300_/default.aspx">C#</category><feedburner:origLink>http://weblogs.asp.net/guillermo/archive/2008/01/22/tip-dataset-haschanges-and-windows-form-close-button-estrange-behavior.aspx</feedburner:origLink></item><item><title>Articulo: ¿Como saber quien es un buen desarrollador?</title><link>http://feedproxy.google.com/~r/GuillermoG/~3/SSarl0sneM0/articulo-191-como-saber-quien-es-un-buen-desarrollador.aspx</link><pubDate>Mon, 21 Jan 2008 15:10:06 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5629851</guid><dc:creator>gugonzar</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/guillermo/rsscomments.aspx?PostID=5629851</wfw:commentRss><wfw:comment>http://weblogs.asp.net/guillermo/commentapi.aspx?PostID=5629851</wfw:comment><comments>http://weblogs.asp.net/guillermo/archive/2008/01/21/articulo-191-como-saber-quien-es-un-buen-desarrollador.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/guillermo/WindowsLiveWriter/ArticuloComosaberquienesunbuendesarrolla_8C5D/code_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="104" alt="code" src="http://weblogs.asp.net/blogs/guillermo/WindowsLiveWriter/ArticuloComosaberquienesunbuendesarrolla_8C5D/code_thumb.png" width="504" border="0" /&gt;&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;Un interesante post publicado por &lt;a href="http://geeks.ms/members/rcorral.aspx"&gt;Rodrigo Corral&lt;/a&gt; con algunos tips planteados sobre los aspectos que &amp;#233;l considera debe tener &lt;a href="http://geeks.ms/blogs/rcorral/archive/2008/01/15/191-c-243-mo-saber-quien-es-un-buen-desarrollador.aspx"&gt;un buen desarrollador&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#191;Que tan buen desarrollador eres?&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5629851" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/GuillermoG/~4/SSarl0sneM0" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/guillermo/archive/tags/Development/default.aspx">Development</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/Desarrollador/default.aspx">Desarrollador</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/Articulo/default.aspx">Articulo</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/Tips/default.aspx">Tips</category><category domain="http://weblogs.asp.net/guillermo/archive/tags/Buen/default.aspx">Buen</category><feedburner:origLink>http://weblogs.asp.net/guillermo/archive/2008/01/21/articulo-191-como-saber-quien-es-un-buen-desarrollador.aspx</feedburner:origLink></item></channel></rss>
