<?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.southworks.net/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Jonathan Cisneros</title>
	
	<link>http://blogs.southworks.net/jcisneros</link>
	<description>.net from the trenches</description>
	<pubDate>Fri, 19 Feb 2010 21:09:37 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.southworks.net/jcisneros" /><feedburner:info uri="jcisneros" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item>
		<title>Troubleshooting Windows Azure Deployment</title>
		<link>http://blogs.southworks.net/jcisneros/2010/02/19/troubleshooting-windows-azure-deployment/</link>
		<comments>http://blogs.southworks.net/jcisneros/2010/02/19/troubleshooting-windows-azure-deployment/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 21:09:37 +0000</pubDate>
		<dc:creator>jcisneros</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/jcisneros/2010/02/19/troubleshooting-windows-azure-deployment/</guid>
		<description><![CDATA[Usually, when Windows Azure fails to initialize the services, the portal shows the services cycling between the Initializing, Busy and Stopping states and it gets stuck in an infinite loop between these states. The following list are the most common causes for a deployment to Windows Azure may fail (even if it works locally) and [...]]]></description>
			<content:encoded><![CDATA[<p>Usually, when Windows Azure fails to initialize the services, the portal shows the services cycling between the Initializing, Busy and Stopping states and it gets stuck in an infinite loop between these states. The following list are the most common causes for a deployment to Windows Azure may fail (even if it works locally) and how to fix them:</p>
<ol>
<li><strong>Missing referenced assemblies</strong>: set <b>CopyLocal = True</b> for referenced assemblies not in .NET Framework 3.5 or <i>Microsoft.WindowsAzure.ServiceRuntime</i> (these assemblies are the only ones present in Windows Azure).       <br /><img style="float: none;margin-left: auto;margin-right: auto" border="0" alt="clip_image001" src="http://blogs.southworks.net/jcisneros/files/2010/02/clip-image001.png" width="385" height="656" /> </li>
<li><strong>Project built for 32bits only</strong>: Use <b>Platform target = Any CPU</b> (or x64). Windows Azure runs on 64 bits.&#160; <br /><img style="float: none;margin-left: auto;margin-right: auto" border="0" alt="image" src="http://blogs.southworks.net/jcisneros/files/2010/02/image.png" width="519" height="299" /> </li>
<li><strong>Path too long</strong>: Use project names with less than <b>28</b> characters. Sometimes no exception is shown, to know if this is the issue, exclude all the roles but one from the Cloud Service project and run once each time to be able to view the error details in the output window when running on the Development Fabric. You should see the following error message <em>â€œERR: Failed to complete setup of assembly (hr = 0&#215;8007006f)â€.</em> </li>
<li><strong>Missing files</strong>: Include all the used files in the project. Files that are not included are not published (for instance, images) </li>
</ol>
<p>If you will perform a service upgrade, first suspend it. If you do not suspend the service and you perform an upgrade, it will never end. Apparently, it tries to return to the previous version state as part of the upgrade process, if our new version has the same issue (fails to initialize by iterating between the stopping to initializing states), it will get stuck in the middle of the process and you wonâ€™t be able to perform any action from the Azure portal, you cannot even delete the service. If this happened to you, you can try using the <a href="http://code.msdn.microsoft.com/azurecmdlets">Azures Cmdlets</a> to set the deployment status.</p>
<p>If you continue having issues, the following blog post includes more possible causes and suggestions:</p>
<ul>
<li>
<h5><a href="http://blog.toddysm.com/2010/01/windows-azure-deployment-stuck-in-initializing-busy-stopping-why.html" target="_blank">Windows Azure Deployment Stuck in Initializing, Busy, Stopping â€“ Why?</a></h5>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/jcisneros/2010/02/19/troubleshooting-windows-azure-deployment/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Microsoft Web Platform Installer: Version 2.0 RTW live</title>
		<link>http://blogs.southworks.net/jcisneros/2009/09/25/microsoft-web-platform-installer-version-20-rtw-live/</link>
		<comments>http://blogs.southworks.net/jcisneros/2009/09/25/microsoft-web-platform-installer-version-20-rtw-live/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 16:01:47 +0000</pubDate>
		<dc:creator>jcisneros</dc:creator>
		
		<category><![CDATA[WebPI]]></category>

		<category><![CDATA[Web Platform Installer]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/jcisneros/?p=45</guid>
		<description><![CDATA[The new version 2.0 of the WebPI is now available to download from the Web Platform portal and it includes the following new features:

An options dialog where you can:

Select addition scenarios to see more products for installation (Media, Developer Tools tabs).
Add more product list feeds (You can add your customized feed!)
Select your preferred language from [...]]]></description>
			<content:encoded><![CDATA[<p>The <a title="announcement" href="http://forums.iis.net/t/1161165.aspx" target="_blank">new version</a> 2.0 of the WebPI is now available to <a title="WebPI 2.0 download" href="http://www.microsoft.com/web/downloads/platform.aspx" target="_blank">download</a> from the Web Platform portal and it includes the following new features:</p>
<ul>
<li>An <strong>options</strong> dialog where you can:
<ul>
<li>Select addition scenarios to see more products for installation (Media, Developer Tools tabs).</li>
<li>Add more product list feeds (You can add your customized feed!)</li>
<li>Select your preferred language from a list of 9 supported languages.</li>
<li>Clean the installer cache folder.</li>
</ul>
</li>
<li>Downloads are cached so you don&#8217;t have to re-download when installation fails (then you can clean the cache from the options)</li>
<li>Improved validations for you to get improved error messages.</li>
<li>Includes the no. of downloads and the rating for each product.</li>
<li>Ability to sort alphabetically, by popularity or by rating.</li>
<li>Many bugs fixed.</li>
</ul>
<p><a href="http://blogs.southworks.net/jcisneros/files/2009/09/webpi2.jpg"><img class="alignnone size-medium wp-image-46" src="http://blogs.southworks.net/jcisneros/files/2009/09/webpi2.jpg" alt="" width="555" height="410" /></a></p>
<p><a href="http://blogs.southworks.net/jcisneros/files/2009/09/webpi2options.jpg"><img class="alignnone size-medium wp-image-47" src="http://blogs.southworks.net/jcisneros/files/2009/09/webpi2options.jpg" alt="" width="542" height="389" /></a></p>
<p>Now is not only more easy to install your applications but also to quickly explore and choose the right one!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/jcisneros/2009/09/25/microsoft-web-platform-installer-version-20-rtw-live/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Microsoft Web Platform Installer: Simplifying Installations</title>
		<link>http://blogs.southworks.net/jcisneros/2009/09/17/microsoft-web-platform-installer-simplifying-installations/</link>
		<comments>http://blogs.southworks.net/jcisneros/2009/09/17/microsoft-web-platform-installer-simplifying-installations/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 11:11:23 +0000</pubDate>
		<dc:creator>jcisneros</dc:creator>
		
		<category><![CDATA[WebPI]]></category>

		<category><![CDATA[Web Platform Installer]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/jcisneros/?p=42</guid>
		<description><![CDATA[This is a common scenario:
You need to install the product X, so you go and download it. Once you have executed the installer a warning message is shown about the missing dependency Y, so you search it on internet and when you find it you discover that it requires Z but you don&#8217;t worry because [...]]]></description>
			<content:encoded><![CDATA[<p>This is a common scenario:</p>
<p>You need to install the product X, so you go and download it. Once you have executed the installer a warning message is shown about the missing dependency Y, so you search it on internet and when you find it you discover that it requires Z but you don&#8217;t worry because you already have it installed, moving on, you download and run the installer of Y, but then it comes that it required a newer version of Z&#8230; The never ending story! Your blood pressure raises to the clouds and you crash the keyboard against the screen, kick the box and whatever is under the desk, take the first heavy thing you find and throw it thought the window, and you see your pet on the sofa so you&#8230; relax! Don&#8217;t do it! The Web Platform Installer (Web PI) has come to save your physical integrity and people near you. How?: It greatly eases the entire labor of installing a product including every task that may require to get it to work.</p>
<p>So the Web PI is a sort of:</p>
<ul>
<li><strong>Catalog of free Microsoft applications, frameworks and tools</strong>: you can use it to browse and find a bunch of Microsoft products available to install.</li>
<li><strong>Dependencies checker</strong>: it is capable of checking the supported environment and the entire dependencies tree of a product.</li>
<li><strong>Downloader manager</strong>: it takes care of finding and downloading each of the files needed to install the products you want.</li>
<li><strong>Full installer</strong>: not only installs the product you choose but also all of the required dependencies for it to work and it makes all the job almost unattended.</li>
<li><strong>Setup wrapper</strong>: it can create a facade over the installer process to show its own custom UI for a nice integration between the installer (it could be an EXE, MSI, MSU or ZIP file) and Web PI.</li>
<li><strong>Updater</strong>: Web PI uses an ATOM feed to keep up to date its catalog of products so you can install the newest version of your products.</li>
<li><strong>IIS Configurator</strong>: If you installs a web application that requires installing/enabling certain IIS componentes/roles, Web PI will do it for you.</li>
</ul>
<p>Ohh!&#8230; How I wished to have all of this stuff for installing Team Foundation Server!!!</p>
<p>You can download it at the <a href="http://www.microsoft.com/web/" target="_blank">Microsoft Web Platform</a> portal: <a href="http://www.microsoft.com/web/downloads/platform.aspx" target="_blank">http://www.microsoft.com/web/downloads/platform.aspx</a></p>
<p>Once you have installed the Web PI you can use it to browse the available applications to install. You can also browse the <a href="http://www.microsoft.com/web/gallery/browse.aspx" target="_blank">Web App Gallery</a> and install any application by just clicking on the &#8220;Install&#8221; button which will launch Web PI with the product selected waiting for your confirmation to install.</p>
<p><a href="http://blogs.southworks.net/jcisneros/files/2009/09/webpi.jpg"><img class="alignnone size-medium wp-image-44" src="http://blogs.southworks.net/jcisneros/files/2009/09/webpi.jpg" alt="" width="488" height="360" /></a></p>
<p>Notice that the Web PI is restricted to the currently available Microsoft products (free developer tools and web applications) and is not aimed to be used as an installer for your own products.</p>
<p>Also I&#8217;d recommend to read this <a href="http://weblogs.asp.net/scottgu/archive/2009/06/02/microsoft-web-platform-installer.aspx" target="_blank">post</a> from Scott Guthrie to find more details and screenshots.</p>
<p>I hope you can take advantage of the Web PI as much as I did. I will continue posting about Web PI for you to know how it works and how to get the best from this tool, so be tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/jcisneros/2009/09/17/microsoft-web-platform-installer-simplifying-installations/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Webcast Desarrollando para Office 2007</title>
		<link>http://blogs.southworks.net/jcisneros/2009/06/01/desarrollando-para-office-2007/</link>
		<comments>http://blogs.southworks.net/jcisneros/2009/06/01/desarrollando-para-office-2007/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 21:54:19 +0000</pubDate>
		<dc:creator>jcisneros</dc:creator>
		
		<category><![CDATA[VSTO]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/jcisneros/?p=40</guid>
		<description><![CDATA[El 21 de Mayo expusimos junto a Ezequiel Jadib un Webcast sobre Visual Studio Tools for Office para Microsoft Student Partners de latino america. Agradecemos a Sebastian Renzi, Juan Pablo Garcia y Damian Schenkelman quienes nos brindaron excelentes tips para la presentación.

Lo temas vistos fueron:

Introducción a Visual Studio Tools for Office (VSTO)
Introducción a OpenXML
VSTO para [...]]]></description>
			<content:encoded><![CDATA[<p>El 21 de Mayo expusimos junto a <a href="http://blogs.southworks.net/ejadib/">Ezequiel Jadib</a> un Webcast sobre <a href="http://msdn.microsoft.com/en-us/vsto/default.aspx">Visual Studio Tools for Office</a> para <a href="http://salatam.net/">Microsoft Student Partners</a> de latino america. Agradecemos a <a href="http://blogs.southworks.net/srenzi/">Sebastian Renzi</a>, <a href="http://blogs.southworks.net/jpgarcia">Juan Pablo Garcia</a> y <a href="http://blogs.southworks.net/dschenkelman/">Damian Schenkelman</a> quienes nos brindaron excelentes tips para la presentación.</p>
<p><img src="http://blogs.southworks.net/jcisneros/files/2009/05/vstoslide.png" alt="" width="480" /></p>
<p>Lo temas vistos fueron:</p>
<ul>
<li>Introducción a Visual Studio Tools for Office (VSTO)</li>
<li>Introducción a OpenXML</li>
<li>VSTO para Outlook</li>
<li>VSTO para Excel</li>
<li>Office Ribbon</li>
</ul>
<p>Para descargar el material de la presentación:</p>
<ul>
<li><a href="http://cid-99e3cd967baf3dc7.skydrive.live.com/redir.aspx?page=self&amp;resId=99E3CD967BAF3DC7!245" target="_blank">Presentacion (pptx)</a></li>
<li><a href="http://cid-99e3cd967baf3dc7.skydrive.live.com/redir.aspx?page=self&amp;resId=99E3CD967BAF3DC7!244" target="_blank">Demos</a></li>
<li><a href="https://www.livemeeting.com/cc/microsoft/view?id=QD2QZN" target="_blank">Grabación</a></li>
</ul>
<p>Información adicional sobre VSTO:</p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/vsto/default.aspx" target="_blank">VSTO Developer Center</a></li>
<li><a href="http://msdn.microsoft.com/es-es/library/d2tx7z6d.aspx" target="_blank">VSTO Documentación en MSDN</a></li>
<li><a href="http://msdn.microsoft.com/en-us/office/bb496949.aspx" target="_blank">VSTO “How do I Video”</a></li>
<li><a href="http://blogs.msdn.com/vsto" target="_blank">VSTO Team Blog</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/jcisneros/2009/06/01/desarrollando-para-office-2007/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Windows Azure: Everything in the cloud</title>
		<link>http://blogs.southworks.net/jcisneros/2008/11/03/windows-azure-everything-in-the-cloud/</link>
		<comments>http://blogs.southworks.net/jcisneros/2008/11/03/windows-azure-everything-in-the-cloud/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 02:31:10 +0000</pubDate>
		<dc:creator>jcisneros</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/jcisneros/?p=39</guid>
		<description><![CDATA[These days we are seeing the dawn of a new computing generation, that is the 5th generation of computing. The first one were monolithic applications, then came the Client-Server and tiered applications, and currently we are building Web-based and SOA applications, today, the new buzzwords are Services and Cloud computing.
The past week, on PDC (Professional Developers [...]]]></description>
			<content:encoded><![CDATA[<p>These days we are seeing the dawn of a new computing generation, that is the 5th generation of computing. The first one were <strong>monolithic</strong> applications, then came the <strong>Client-Server</strong> and tiered applications, and currently we are building <strong>Web-based</strong> and <strong>SOA</strong> applications, today, the new buzzwords are <strong>Services</strong> and <strong>Cloud computing</strong>.</p>
<p>The past week, on <a title="Microsoft PDC 2008" href="http://www.microsoftpdc.com/" target="_blank">PDC</a> (Professional Developers Conference) event, Microsoft announced <a title="Windows Azure" href="http://www.microsoft.com/azure/windowsazure.mspx" target="_blank">Windows Azure</a>, a big initiative on the new computing generation. Windows Azure is a &#8220;cloud services operating system&#8221;, this is, a platform for developing, hosting and managing applications and services in the cloud. Being in the <a title="Cloud computing" href="http://en.wikipedia.org/wiki/Cloud_computing" target="_blank">cloud</a>, means that it is hosted on and available from internet, in this case, the hosting service is provided by Microsoft&#8217;s datacenters.</p>
<p>But that is not all, Windows Azure is just the lowest level of the <a title="Azure Service Platform" href="http://www.microsoft.com/azure/default.mspx" target="_blank">Azure Services Platform</a>, this platform includes several services running over Windows Azure, like:</p>
<ul>
<li><strong><a title="Live Services" href="http://dev.live.com/" target="_blank">Live Services</a></strong>: allows to create rich applications to run on a variety of platforms and devices.</li>
<li><strong><a title=".NET Services" href="http://www.microsoft.com/azure/netservices.mspx" target="_blank">.NET Services</a></strong>: includes:
<ul>
<li><strong><a title="Service Bus" href="http://www.microsoft.com/azure/servicebus.mspx" target="_blank">Service Bus</a></strong>: provides a secure, standards-based messaging infrastructure to communicate application components even across organizational boundaries.</li>
<li><strong><a title="Workflow Service" href="http://www.microsoft.com/azure/workflow.mspx" target="_blank">Workflow Service</a></strong>: hosts and runs workflows on the clouds and provides specialized activities for communication using HTTP and Service Bus.</li>
<li><strong><a title="Access Control" href="http://www.microsoft.com/azure/accesscontrol.mspx" target="_blank">Access Control</a></strong>: integrates standards-based identity providers, including enterprise directories and web identity systems such as Windows Live ID.</li>
</ul>
</li>
<li><strong><a title="SQL Services" href="http://www.microsoft.com/azure/sql.mspx" target="_blank">SQL Services</a></strong>: Stores data in the cloud using ACE structure (Authority, Container, Entity), the entities are flexibles and you can access the data using several standards-based interfaces (SOAP, REST, &#8230;).</li>
</ul>
<p><img src="http://www.microsoft.com/azure/images/servicesPlatform.jpg" alt="" /></p>
<p>Being part of this extraordinary family that we call Southworks, gave me the opportunity to learnt about these new technologies and participate in the development of a new set of <strong>Hands-On Labs</strong> about Azure Services Platform for the PDC event. For downloading this HOL go to: <a title="Azure Training Kit" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=413E88F8-5966-4A83-B309-53B7B77EDF78" target="_blank">Azure Services Training Kit - PDC Preview</a>.</p>
<p>For further reading:</p>
<ul>
<li><a href="http://msmvps.com/blogs/lopez/archive/2008/11/03/el-cielo-es-azure.aspx">El Cielo es Azure</a> (spanish) by Angel Lopez </li>
<li><a href="http://blogs.southworks.net/jmmoyano/2008/10/30/introduction-to-live-mesh/">Introduction to Live Mesh</a> by Juan Manuel Moyano</li>
<li><a title="Permanent Link to Microsoft Azure Services Management Tools" rel="bookmark" href="http://blogs.southworks.net/lboffi/2008/11/02/microsoft-azure-services-management-tools/">Microsoft Azure Services Management Tools</a> by Leandro Boffi</li>
</ul>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/jcisneros/2008/11/03/windows-azure-everything-in-the-cloud/feed/</wfw:commentRss>
		</item>
		<item>
		<title>.NET Framework 3.5 and Visual Studio 2008 SP1 released!</title>
		<link>http://blogs.southworks.net/jcisneros/2008/08/13/net-framework-35-and-visual-studio-2008-sp1-released/</link>
		<comments>http://blogs.southworks.net/jcisneros/2008/08/13/net-framework-35-and-visual-studio-2008-sp1-released/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 00:56:21 +0000</pubDate>
		<dc:creator>jcisneros</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[SP1]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/jcisneros/?p=38</guid>
		<description><![CDATA[It&#8217;s awesome how fast time goes, a year ago, I was playing with .bat files (like putting messages in the autoexec.bat file), a month ago, I was building applications to do my accounting homework at highschool using C++ Builder, a week ago, I was making simple games with Visual Basic 6 and then working with [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s awesome how fast time goes, a year ago, I was playing with <strong>.bat</strong> files (like putting messages in the autoexec.bat file), a month ago, I was building applications to do my accounting homework at highschool using <strong>C++ Builder</strong>, a week ago, I was making simple games with <strong>Visual Basic 6</strong> and then working with the same tool, yesterday, I was trying to learn the big <strong>.NET Framework 1.1</strong> and fighting against <strong>ADO.NET</strong> (20 lines to do the same thing that I used to do with three lines in ADO 6!), an hour ago, I was building <strong>ASP.NET 2.0</strong> web sites and <a href="http://www.railsenvy.com/" target="_blank">envying</a> the toys from the <strong>RoR</strong> and <strong>J2EE</strong> guys, now, a minute ago, I helped to create the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=355c80e9-fde0-4812-98b5-8a03f5874e96&amp;displaylang=en" target="_blank">Training Kit</a> for the <a href="http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx" target="_blank">.NET Framework 3.5 SP1</a> that seconds ago was released the final version.</p>
<p><strong>A bunch of exiting things are included in the .NET Framework SP1 like:</strong></p>
<ul>
<li><a href="http://www.asp.net/mvc/" target="_blank">ASP.NET MVC Framework</a></li>
<li><a href="http://www.asp.net/dynamicdata/">ASP.NET Dynamic Data</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/bb399572.aspx" target="_blank">ADO.NET Entity Framework</a></li>
<li><a href="http://codebetter.com/blogs/david.hayden/archive/2008/01/08/getting-started-with-ado-net-data-services.aspx" target="_blank">ADO.NET Data Services</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/bb412169.aspx" target="_blank">WCF Web Programming Model</a> (RESTful services)</li>
<li>Improved AJAX Support</li>
<li>&#8230;<a href="http://www.microsoft.com/net/WhatsNew.aspx" target="_blank">and much more</a></li>
</ul>
<p><strong>You can get the bits at:</strong></p>
<ul>
<li><a href="http://msdn.microsoft.com/es-es/vstudio/cc533448(en-us).aspx" target="_blank">Visual Studio 2008 Service Pack 1 (SP1) and .NET Framework 3.5 SP1 Downloads</a></li>
<li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=355c80e9-fde0-4812-98b5-8a03f5874e96&amp;displaylang=en" target="_blank">.NET Framework 3.5 Enhancements Training Kit</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/jcisneros/2008/08/13/net-framework-35-and-visual-studio-2008-sp1-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ASP.Net Dynamic Data (Scaffolding with .net)</title>
		<link>http://blogs.southworks.net/jcisneros/2008/08/05/aspnet-dynamic-data-scaffolding-with-net/</link>
		<comments>http://blogs.southworks.net/jcisneros/2008/08/05/aspnet-dynamic-data-scaffolding-with-net/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 23:40:49 +0000</pubDate>
		<dc:creator>jcisneros</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[SP1]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[Dynamic Data]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/jcisneros/2008/08/05/aspnet-dynamic-data-scaffolding-with-net/</guid>
		<description><![CDATA[ When you build data centric web applications, a big part of the code is related to the implementation of CRUD (Create, Read, Updated, Delete) operations. Scaffolding is a mechanism to generate fully functional data driven applications based on metadata inferred from a model, basically, all the CRUD operations are implemented by using the metadata [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blogs.southworks.net/jcisneros/files/2008/08/image.png" border="0" alt="image" width="132" height="240" align="right" /> When you build data centric web applications, a big part of the code is related to the implementation of <a href="http://en.wikipedia.org/wiki/Create,_read,_update_and_delete" target="_blank">CRUD</a> (Create, Read, Updated, Delete) operations. <a href="http://en.wikipedia.org/wiki/Scaffold_(programming)" target="_blank">Scaffolding</a> is a mechanism to generate fully functional data driven applications based on metadata inferred from a model, basically, all the CRUD operations are implemented by using the metadata obtained for each entity/table in the model, making it a very useful tool for prototyping.</p>
<p>That is what <a href="http://www.asp.net/dynamicdata/" target="_blank">ASP.Net Dynamic Data</a> does, it is a scaffolding technology that uses templates (ASP.Net Web Pages) to dynamically generate functional CRUD pages. Like <a href="http://www.rubyonrails.org/" target="_blank">Ruby on Rails</a>, Dynamic Data makes a high use of conventions to infer how the results will be rendered, but it can be highly customized in an really easy way by adding metadata to the model or modifying/adding templates. This allows to start with a raw prototype and continue customizing and tuning it &#8217;till a mature application.</p>
<h2>Getting Started</h2>
<p>Once you got the <a href="http://www.asp.net/dynamicdata/" target="_blank">bits</a> installed, you are able to create a new project using one of these two templates:</p>
<ul>
<li><strong>Dynamic Data Web Application</strong>: Creates a Dynamic Data web application using a <strong><a href="http://msdn.microsoft.com/en-us/library/bb386976.aspx" target="_blank">LINQ to SQL</a></strong> data model to generate the scaffolds.</li>
<li><strong>Dynamic Data Entities Web Application</strong>: Creates a Dynamic Data web application using a <strong>Entity Data Model</strong> (<a href="http://msdn.microsoft.com/en-us/library/bb399572.aspx" target="_blank">ADO.NET Entity Framework</a>) to generate the scaffolds.</li>
</ul>
<p>The main difference between both, is the data model that Dynamic Data will use as data source and to infer the metadata needed to do the scaffolding.</p>
<h3>The Data Model</h3>
<p><a href="http://blogs.southworks.net/jcisneros/files/2008/08/image1.png"><img src="http://blogs.southworks.net/jcisneros/files/2008/08/image-thumb.png" border="0" alt="image" width="134" height="244" align="left" /></a> As said before, the data model can be LINQ to SQL or Entity Data Model depending on the project type selected.</p>
<p>While LINQ to SQL is tightly bound to the database schema (each property is bound to a specific field in a table), Entity Framework is more flexible and loosely coupled and you can query for entities using either <a href="http://msdn.microsoft.com/en-us/library/bb308959.aspx" target="_blank">LINQ</a> or <a href="http://msdn.microsoft.com/en-us/library/bb387145.aspx" target="_blank">Entity-SQL</a>.</p>
<p>When creating the data model is recommendable to create a <strong>Model</strong> folder to place the data model file (<strong>.dbml</strong> or <strong>.edmx</strong>) and the additional classes that we will create through the development to enhance the metadata.</p>
<h3>Enabling Scaffolding</h3>
<p>This is the easiest thing, to enable the scaffolding you just need to modify a simple line of code.</p>
<p>In the <strong>global.asax.cs</strong> file is a method named <strong>RegisterRoutes</strong> where you will find a big section of commented description on how to register a data context to be used as the model to generate the scaffolds.</p>
<p>To enable scaffolding for all the classes/tables in the data model, you need to register the model in this way: (un-comment the following line and modify the <strong>bold</strong> parts)</p>
<blockquote><p>model.RegisterContext(typeof(Model.<strong>MyDataModelContext</strong>), new ContextConfiguration() { ScaffoldAllTables = <strong>true</strong> });</p></blockquote>
<p>Just modifying the previous line your application is ready to run, just press F5 and enjoy the magic!</p>
<p>If you want to generate scaffolds for specific classes/tables you have to set the <strong>ScaffoldAllTables</strong> property to <strong>false</strong> and then decorate the classes you want to scaffold with the <strong>[Scaffold(true)]</strong> attribute.</p>
<p><img src="http://blogs.southworks.net/jcisneros/files/2008/08/image2.png" border="0" alt="image" width="470" height="398" /></p>
<h3>Adding Metadata</h3>
<p>The generated scaffolds have all the common functions of a data-driven application, the list are filtered, sorted and paged, the fields in the edit and insert forms are validated according to its data types, etc., but it only does the best it can with all the metadata that can retrieve from the data model, therefore you will find that many things that can be improved or refined.</p>
<p>To add metadata to the model, Dynamic Data provides a full set of attributes under the <strong>System.ComponentModel.DataAnnotations</strong> namespace to be applied to the classes in the data model. But instead of applying the attributes directly over the generated code of the model you have to create partial classes aimed just to add metadata to the model.</p>
<p>Here, we&#8217;ll face a problem since a partial class can not redefine a property, thus we won&#8217;t be able to add metadata to the properties. This problem is solved by using an inner class and associating it to the data model class with the <strong>MetadataType</strong> attribute.</p>
<p>The following is a sample of a data model class using an inner class to refine the model:</p>
<blockquote><p><strong>[MetadataType(typeof(ProductMetadata))] </strong><br />
public partial class Product<br />
{<br />
private class ProductMetadata<br />
{<br />
<strong>[StringLength(30)]<br />
[Required(ErrorMessage = "Product name is required.")]<br />
[DisplayName("Product Name")] </strong><br />
public object Name { get; set; }</p>
<p><strong>[Range(0, 10000, ErrorMessage = "Standard Cost should be between {1} and {2}.")] </strong><br />
public object Price { get; set; }<br />
}<br />
}</p></blockquote>
<p>Since the inner class porpoise is to add meta data, the properties only need to match in name and not in type (in the sample, all the properties are of object type).</p>
<p>In this post by <a href="http://blogs.msdn.com/mairaw/default.aspx" target="_blank">María Wenzel</a> you will find a list with some of the attributes available: <a href="http://blogs.msdn.com/mairaw/archive/2008/04/24/dynamic-data-attributes.aspx" target="_blank">Dynamic Data Attributes</a>.</p>
<h3>Customizing the Templates</h3>
<p>Under the folder <strong>DynamicData</strong> you will find all the templates that Dynamic Data uses to generate the scaffolds. You can modify them to change the look and feel, or to add new functions for all the tables, but if you want to customize the templates for an specific table, you can, just follow these simple steps:<a href="http://blogs.southworks.net/jcisneros/files/2008/08/image3.png"><img src="http://blogs.southworks.net/jcisneros/files/2008/08/image-thumb1.png" border="0" alt="image" width="137" height="244" align="right" /></a></p>
<ol>
<li>Create a new folder with the name of the table you want to customize under the <strong>DynamicData\CustomPages</strong>.</li>
<li>Copy from <strong>DynamicData\PageTemplates</strong> the <strong>aspx</strong> templates you want to customize (i.e. <em>List.aspx</em>) and paste in the new folder.</li>
<li>Delete the code behind file of the new template (i.e. <em>List.aspx.cs</em> and <em>List.aspx.designer.cs</em>).</li>
<li>Customize the new template at your desire and using all of your creativity.</li>
</ol>
<p>Notice the use of conventions in this case that allows a friendly development experience. Dynamic Data will look for the templates, first under <strong>DynamicData\CustomPages\[TableToRender]</strong> and then under <strong>DynamicData\PageTemplates</strong>.</p>
<h2>Conclusions</h2>
<p>With ASP.NET Dynamic Data you can experience a nice development experience, it is easy to learn and to use. Some people may say that scaffolding is just for prototyping, I agree on that, but I found Dynamic Data very flexible and customizable, you may use it for a part of the application (where only CRUD operations are needed) and, for the rest of the application, continue developing as you are used to. Something that I noticed is a little of lack of performance, I think that it is caused by the use of reflection to get the metadata from the model. Anyway, it is a very interesting and nice framework that worth the try.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/jcisneros/2008/08/05/aspnet-dynamic-data-scaffolding-with-net/feed/</wfw:commentRss>
		</item>
		<item>
		<title>.NET Framework 3.5 SP1 - Client Profile</title>
		<link>http://blogs.southworks.net/jcisneros/2008/07/25/net-framework-35-sp1-client-profile/</link>
		<comments>http://blogs.southworks.net/jcisneros/2008/07/25/net-framework-35-sp1-client-profile/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 11:47:11 +0000</pubDate>
		<dc:creator>jcisneros</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[SP1]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/jcisneros/?p=30</guid>
		<description><![CDATA[The .NET Framework 3.5 Client Profile is a lightweight subset of the full .NET Framework 3.5 aimed to be deployed in Client machines. Therefore, it only have the assemblies that are commonly used on client boxes and does not contains any server or development related assemblies.
This framework subset weight just 27Mb against the 200Mb of [...]]]></description>
			<content:encoded><![CDATA[<p>The .NET Framework 3.5 Client Profile is a lightweight subset of the full .NET Framework 3.5 aimed to be deployed in Client machines. Therefore, it only have the assemblies that are commonly used on client boxes and does not contains any server or development related assemblies.</p>
<p>This framework subset weight just 27Mb against the 200Mb of the full framework.</p>
<p>You can get the bits from here: <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=4F7AE6FE-F4D1-4196-A372-80EAB6D56332&amp;displaylang=en">Microsoft .NET Framework 3.5 Client Profile (BETA)</a></p>
<h3>How do you ensure your project will work for the .Net Framework Client Profile?</h3>
<p>It&#8217;s pretty easy, if you have installed the <a href="http://msdn.microsoft.com/en-us/vstudio/cc533448.aspx">Visual Studio 2008 SP1</a> in the project properties you will find a checkbox that allows to target your application to the Client Profile subset.</p>
<p><a href="http://blogs.southworks.net/jcisneros/files/2008/07/image.png"><img src="http://blogs.southworks.net/jcisneros/files/2008/07/image-thumb.png" border="0" alt="image" width="244" height="98" /></a></p>
<p>Visual Studio will verify all the references and will add an exclamation icon on the references that are not available for the client subset, also when building the project, warnings will be displayed for the unavailable assemblies.</p>
<p><a href="http://blogs.southworks.net/jcisneros/files/2008/07/image1.png"><img src="http://blogs.southworks.net/jcisneros/files/2008/07/image-thumb1.png" border="0" alt="image" width="209" height="244" /></a></p>
<p><a href="http://blogs.southworks.net/jcisneros/files/2008/07/image2.png"><img src="http://blogs.southworks.net/jcisneros/files/2008/07/image-thumb2.png" border="0" alt="image" width="244" height="59" /></a></p>
<p>If you got the beta version of the Visual Studio SP1 you have to take in mind that the subset list (Client.xml) that Visual Studio uses to validate the references is out of synch from the actually included assemblies (VS generate warnings for some assemblies that really are in the Client Profile). To solve this issue, you may find useful the Justin Van Patten&#8217;s blog post: <a href="http://blogs.msdn.com/bclteam/archive/2008/05/21/net-framework-client-profile-justin-van-patten.aspx">.NET Framework Client Profile</a>.</p>
<p><a href="http://technorati.com/claim/dfupkzeefw" rel="me">Technorati Profile</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/jcisneros/2008/07/25/net-framework-35-sp1-client-profile/feed/</wfw:commentRss>
		</item>
		<item>
		<title>C# 3.0 new features</title>
		<link>http://blogs.southworks.net/jcisneros/2008/07/24/c-30-new-features/</link>
		<comments>http://blogs.southworks.net/jcisneros/2008/07/24/c-30-new-features/#comments</comments>
		<pubDate>Thu, 24 Jul 2008 14:42:31 +0000</pubDate>
		<dc:creator>jcisneros</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/jcisneros/2008/07/24/c-30-new-features/</guid>
		<description><![CDATA[This post is aimed to be a quick abstract for all the new C# language constructs introduced with the version 3.0.
Implicitly typed local variables
By using var keyword to define a local (does not work at class level) variable is not needed to define its type, the compiler will infer it.
Examples:
var i = 0;   [...]]]></description>
			<content:encoded><![CDATA[<p>This post is aimed to be a quick abstract for all the new C# language constructs introduced with the version 3.0.</p>
<h2>Implicitly typed local variables</h2>
<p>By using <strong>var</strong> keyword to define a local (does not work at class level) variable is not needed to define its type, the compiler will infer it.</p>
<p><strong>Examples:</strong></p>
<p>var i = 0;    <br />var intArr = new[] { 0, 1, 2, 3 };</p>
<h2>Object and Collection Initializers</h2>
<p>Object&#8217;s properties can be initialized when creating the object and also the collection items.</p>
<p><strong>Examples:</strong></p>
<p>TextBox txt = new TextBox() { Text = &quot;John&quot;, Width = 200 };</p>
<p>List&lt;string&gt; colorspaces = new List&lt;string&gt; {&quot;RGB&quot;, &quot;CMYK&quot;, &quot;GreyScale&quot;, &quot;B/W&quot;};</p>
<h2>Anonymous types</h2>
<p>By combining the previous two features (<strong>Implicitly typed variables</strong> and <strong>Object initializers</strong>) you can create anonymous types (statically typed, with no name used in the code).</p>
<p><strong>Example:</strong></p>
<p>var guy = new { FirstName = &quot;John&quot;, LastName = &quot;Doe&quot; };    <br />Console.WriteLine(guy.FirstName);</p>
<h2>Automatically Implemented Properties</h2>
<p>You can create properties with no need for a private member to store its value.</p>
<p><strong>Examples:</strong></p>
<p>public string Name { get; set; } </p>
<p>//read-only property    <br />public byte Age { get; private set; }</p>
<h2>Extension methods</h2>
<p>By using the <strong>this</strong> keyword in a static method argument you can extend another class. You &quot;injects&quot; methods to an existing class from another one.</p>
<p><strong>Example:</strong></p>
<p>public static class ExtensionClass    <br />{     <br />&#160;&#160;&#160; //Extension method     <br />&#160;&#160;&#160; public static byte ToGray(<strong>this</strong> <strong>Color</strong> c)     <br />&#160;&#160;&#160; {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return (byte)(0.3 * c.R + 0.59 * c.G + 0.11 * c.B);     <br />&#160;&#160;&#160; }     <br />}</p>
<p>byte pixelGray = Color.Green.ToGray();</p>
<h2>Lambda Expressions</h2>
<p>Lambda expressions are like pretty simple functions that takes input parameters and evaluates an expression.</p>
<p><strong>Syntax:</strong></p>
<pre>(input parameters) =&gt; expression</pre>
<p><strong>Examples:</strong></p>
<p>int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };<br />
  <br />int oddNumbers = numbers.Count(n =&gt; n % 2 == 1); </p>
<p>Console.WriteLine(oddNumbers.ToString()); </p>
<p>Func&lt;int, int&gt; duplicate = number =&gt; number * 2;<br />
  <br />Console.WriteLine(duplicate.Invoke(2).ToString());</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/jcisneros/2008/07/24/c-30-new-features/feed/</wfw:commentRss>
		</item>
		<item>
		<title>AOP with PostSharp</title>
		<link>http://blogs.southworks.net/jcisneros/2008/06/22/aop-with-postsharp/</link>
		<comments>http://blogs.southworks.net/jcisneros/2008/06/22/aop-with-postsharp/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 04:49:58 +0000</pubDate>
		<dc:creator>jcisneros</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[AOP]]></category>

		<category><![CDATA[PostSharp]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/jcisneros/?p=11</guid>
		<description><![CDATA[PostSharp is a great open-source tool that allows you to encapsulate the non-business logic in custom attributes. That&#8217;s the Aspect Oriented Programming paradigm main goal: the separation of concerns.
This tool heps you to free the business logic from the infrastructure code such as:

Transactions
Logging
Permissions / Security
Exceptions handling
Caching
Settings

Your code will be cleaner than never.
&#8230;and why do I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.postsharp.org/" target="_blank">PostSharp</a> is a great open-source tool that allows you to encapsulate the non-business logic in custom attributes. That&#8217;s the <a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming" target="_blank">Aspect Oriented Programming</a> paradigm main goal: the separation of concerns.</p>
<p>This tool heps you to free the business logic from the infrastructure code such as:</p>
<ul>
<li>Transactions</li>
<li>Logging</li>
<li>Permissions / Security</li>
<li>Exceptions handling</li>
<li>Caching</li>
<li>Settings</li>
</ul>
<p>Your code will be cleaner than never.</p>
<p>&#8230;and why do I call it a &#8220;great tool&#8221;? Because, unlike other tools that uses reflection and other techniques that reduces performance, PostSharp works at <a href="http://en.wikipedia.org/wiki/Common_Intermediate_Language" target="_blank">MSIL</a> level!. It generates MSIL code to be injected in your code at compilation time, in that way it supports any .NET language and get the best performance possible.</p>
<p>Furthermore, this tool is really easy to learn. You can quickly get started by using the basic features, follow this simple quick start:</p>
<ul>
<li><strong><a href="http://www.postsharp.org/about/getting-started/">PostSharp - QuickStart</a></strong></li>
</ul>
<p>The following example shows a simple PostSharp aspect to trace the execution of the methods marked with that attribute:</p>
<p><span style="color: #0000ff">public</span> <span style="color: #0000ff"> class</span> <span style="color: #2b91af">SimplestTraceAttribute</span> : <span style="color: #2b91af">OnMethodBoundaryAspect<br />
</span>{<span style="color: #0000ff"><br />
public</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff"> void</span> OnEntry( <span style="color: #2b91af">MethodExecutionEventArgs</span> eventArgs)<span style="font-size: small"> </span><br />
{<span style="color: #2b91af"><br />
Trace</span>.TraceInformation(<span style="color: #a31515">&#8220;Entering  					{0}.&#8221;</span>, eventArgs.Method);<span style="color: #2b91af"><br />
Trace</span>.Indent();<br />
}  <span style="color: #0000ff"><br />
public</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff"> void</span> OnExit( <span style="color: #2b91af">MethodExecutionEventArgs</span> eventArgs)<br />
{<span style="color: #2b91af"><br />
Trace</span>.Unindent();<span style="color: #2b91af"><br />
Trace</span>.TraceInformation(<span style="color: #a31515">&#8220;Leaving  					{0}.&#8221;</span>, eventArgs.Method);<br />
}<br />
}</p>
<p>&#8230;and it works like a charm!</p>
<p><strong>The evidence:</strong></p>
<p><em>Building the project:</em></p>
<p><a href="http://blogs.southworks.net/jcisneros/files/2008/06/postsharp_build.jpg"><img class="alignnone size-medium wp-image-20" src="http://blogs.southworks.net/jcisneros/files/2008/06/postsharp_build.jpg" alt="" width="300" height="99" /></a></p>
<p><em>Inspecting the binaries:</em></p>
<p><a href="http://blogs.southworks.net/jcisneros/files/2008/06/postsharp_reflector.jpg"><img class="alignnone size-medium wp-image-19" src="http://blogs.southworks.net/jcisneros/files/2008/06/postsharp_reflector.jpg" alt="" width="300" height="208" /></a></p>
<p><em>Results:</em></p>
<p><a href="http://blogs.southworks.net/jcisneros/files/2008/06/postsharp_output.jpg"><img class="alignnone size-medium wp-image-21" src="http://blogs.southworks.net/jcisneros/files/2008/06/postsharp_output.jpg" alt="" width="300" height="108" /></a></p>
<h2>Resources:</h2>
<ul>
<li><a href="http://www.postsharp.org/" target="_blank">PostSharp Official WebSite</a> (see <a href="http://www.postsharp.org/about/" target="_blank">About PostSharp</a>)</li>
<li><a href="http://code.google.com/p/postsharp-user-samples/" target="_blank">Visual Basic PostSharp Samples</a></li>
</ul>
<p>Enjoy it!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.southworks.net/jcisneros/2008/06/22/aop-with-postsharp/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
