<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gabriel Rodriguez Plancarte &#187; .NET</title>
	<atom:link href="http://gabrielrodriguez.net/tag/net/feed/" rel="self" type="application/rss+xml" />
	<link>http://gabrielrodriguez.net</link>
	<description>Tecnologia, Diseño, Negocios y Desarrollo</description>
	<lastBuildDate>Mon, 23 Jan 2012 16:29:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Como ayudar a mejorar el .NET Framework</title>
		<link>http://gabrielrodriguez.net/como-ayudar-a-mejorar-el-net-framework/</link>
		<comments>http://gabrielrodriguez.net/como-ayudar-a-mejorar-el-net-framework/#comments</comments>
		<pubDate>Sun, 24 Apr 2011 05:01:59 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=951</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/como-ayudar-a-mejorar-el-net-framework/' addthis:title='Como ayudar a mejorar el .NET Framework '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>Últimamente, Microsoft ha dado mucho peso a las opiniones y sugerencias de los desarrolladores que usan el .NET Framework. Varios líderes de equipo de los diferentes bloques que componen el framework (ASP.NET, Entity Framework, WCF, WPF, etc) han utilizado redes sociales, blog posts y varios otros medios para solicitar retroalimentación de los usuarios de .NET [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/como-ayudar-a-mejorar-el-net-framework/' addthis:title='Como ayudar a mejorar el .NET Framework ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/como-ayudar-a-mejorar-el-net-framework/' addthis:title='Como ayudar a mejorar el .NET Framework '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p><a href="http://gabrielrodriguez.net/wp-content/uploads/2009/07/net-logo.png"><img class="size-full wp-image-381 alignnone" title=".NET" src="http://gabrielrodriguez.net/wp-content/uploads/2009/07/net-logo.png" alt="" width="240" height="74" /></a></p>
<p>Últimamente, <strong>Microsoft ha dado mucho peso a las opiniones y sugerencias de los desarrolladores que usan el .NET Framework</strong>. Varios líderes de equipo de los diferentes bloques que componen el framework (<strong>ASP.NET, Entity Framework, WCF, WPF</strong>, etc) han <strong>utilizado redes sociales, blog posts y varios otros medios para solicitar retroalimentación de los usuarios de .NET </strong>sobre las nuevas funcionalidades del framework que han liberado, o sobre ideas y solicitudes para futuras funcionalidades.</p>
<p>Aquí les dejo las ligas a las <strong>páginas donde pueden votar por ideas o solicitudes de funcionalidades nuevas</strong> hechas por otros usuarios, o donde hasta ustedes mismos pueden crear una nueva solicitud. Esto ayuda a Microsoft a enterarse de cuales funcionalidades o cualidades nuevas los programadores desean que estén incluidas en el framework.</p>
<ul>
<li><a title="Votar sobre funcionalidades o bug fixes para WCF" href="https://connect.microsoft.com/wcf/feedback">Votar sobre funcionalidades o bug fixes para WCF</a></li>
<li><a title="Votar sobre funcionalidades o bug fixes para Windows Workflow Foundation" href="https://connect.microsoft.com/wf/feedback">Votar sobre funcionalidades o bug fixes para Windows Workflow Foundation (WF)</a></li>
<li><a title="Votar sobre funcionalidades o bug fixes para Windows Phone Platform" href="http://wpdev.uservoice.com/forums/110705-app-platform">Votar sobre funcionalidades o bug fixes para Windows Phone Platform</a></li>
<li><a title="Votar sobre funcionalidades o bug fixes para Windows Phone 7" href="https://windowsphone7community.uservoice.com/forums/84435-feature-feedback">Votar sobre funcionalidades o bug fixes para Windows Phone 7</a></li>
<li><a title="Votar sobre funcionalidades o bug fixes para ADO.NET Entity Framework" href="http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions">Votar sobre funcionalidades o bug fixes para ADO.NET Entity Framework</a></li>
<li><a title="Votar sobre funcionalidades o bug fixes para Silverlight" href="http://dotnet.uservoice.com/forums/4325-silverlight-feature-suggestions">Votar sobre funcionalidades o bug fixes para Silverlight</a></li>
<li><a title="Votar sobre funcionalidades o bug fixes para ASP.NET en general" href="http://aspnet.uservoice.com/forums/41199-general">Votar sobre funcionalidades o bug fixes para ASP.NET en general</a></li>
<li><a title="Votar sobre funcionalidades o bug fixes para ASP.NET MVC" href="http://aspnet.uservoice.com/forums/41201-asp-net-mvc">Votar sobre funcionalidades o bug fixes para ASP.NET MVC</a></li>
<li><a title="Votar sobre funcionalidades o bug fixes para ASP.NET WebForms" href="http://aspnet.uservoice.com/forums/41202-asp-net-webforms">Votar sobre funcionalidades o bug fixes para ASP.NET WebForms</a></li>
<li><a title="Votar sobre funcionalidades o bug fixes para WCF Data Services" href="http://data.uservoice.com/forums/72027-wcf-data-services-feature-suggestions">Votar sobre funcionalidades o bug fixes para WCF Data Services</a></li>
<li><a title="Votar sobre funcionalidades o bug fixes para WPF" href="http://dotnet.uservoice.com/forums/40583-wpf-feature-suggestions">Votar sobre funcionalidades o bug fixes para WPF</a></li>
<li><a title="Votar sobre funcionalidades o bug fixes para WCF RIA Services" href="http://dotnet.uservoice.com/forums/57026-wcf-ria-services">Votar sobre funcionalidades o bug fixes para WCF RIA Services</a></li>
<li><a title="Votar sobre funcionalidades o bug fixes para Windows Azure" href="http://www.mygreatwindowsazureidea.com/pages/34192-windows-azure-feature-voting">Votar sobre funcionalidades o bug fixes para Windows Azure</a></li>
<li><a title="Votar sobre funcionalidades o bug fixes para SQL Azure" href="http://www.mygreatwindowsazureidea.com/forums/34685-sql-azure-feature-voting">Votar sobre funcionalidades o bug fixes para SQL Azure</a></li>
<li><a title="Votar sobre funcionalidades o bug fixes para ASP.NET and Web Stack Performance" href="http://aspnet.uservoice.com/forums/100405-performance">Votar sobre funcionalidades o bug fixes para ASP.NET and Web Stack Performance</a></li>
<li><a title="Votar sobre funcionalidades o bug fixes para Visual Studio Performance" href="http://aspnet.uservoice.com/forums/41233-visual-studio-performance-feedback">Votar sobre funcionalidades o bug fixes para Visual Studio Performance</a></li>
</ul>
<p>A votar!</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/como-ayudar-a-mejorar-el-net-framework/' addthis:title='Como ayudar a mejorar el .NET Framework ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/como-ayudar-a-mejorar-el-net-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Libros gratis de Visual Studio 2010 y SQL Server 2008 R2</title>
		<link>http://gabrielrodriguez.net/libros-gratis-de-visual-studio-2010-y-sql-server-2008-r2/</link>
		<comments>http://gabrielrodriguez.net/libros-gratis-de-visual-studio-2010-y-sql-server-2008-r2/#comments</comments>
		<pubDate>Sat, 12 Mar 2011 16:17:58 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[Recursos Gratis]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Ebooks]]></category>
		<category><![CDATA[Libros]]></category>
		<category><![CDATA[Recursos]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=893</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/libros-gratis-de-visual-studio-2010-y-sql-server-2008-r2/' addthis:title='Libros gratis de Visual Studio 2010 y SQL Server 2008 R2 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>Hace unos días me topé con 2 posts en el blog de Microsoft Press, en el cual publicaron 2 libros totalmente gratis para que cualquier persona pueda descargarlos. Moving to Microsoft Visual Studio 2010 &#8211; Descarga Directa en: PDF o XPS y Introducing Microsoft SQL Server 2008 R2 &#8211; Descarga Directa en PDF o XPS [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/libros-gratis-de-visual-studio-2010-y-sql-server-2008-r2/' addthis:title='Libros gratis de Visual Studio 2010 y SQL Server 2008 R2 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/libros-gratis-de-visual-studio-2010-y-sql-server-2008-r2/' addthis:title='Libros gratis de Visual Studio 2010 y SQL Server 2008 R2 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p><a href="http://gabrielrodriguez.net/wp-content/uploads/2009/10/visual-studio-2010-logo.PNG"><img class="alignnone size-full wp-image-580" title="Visual Studio 2010 Logo" src="http://gabrielrodriguez.net/wp-content/uploads/2009/10/visual-studio-2010-logo.PNG" alt="Visual Studio 2010 Logo" width="233" height="178" /></a></p>
<p>Hace unos días me topé con 2 posts en el blog de <a title="Microsoft Press" href="http://blogs.msdn.com/b/microsoft_press/">Microsoft Press</a>, en el cual publicaron 2 libros totalmente gratis para que cualquier persona pueda descargarlos.</p>
<p><a title="Moving to Microsoft Visual Studio 2010" href="http://blogs.msdn.com/b/microsoft_press/archive/2010/09/13/free-ebook-moving-to-microsoft-visual-studio-2010.aspx">Moving to Microsoft Visual Studio 2010</a> &#8211; Descarga Directa en: <a title="Moving to Visual Studio 2010 - PDF format" href="http://download.microsoft.com/download/9/0/B/90B96800-6765-4AC2-A79F-A2E9116F2157/Moving%20to%20Microsoft%20Visual%20Studio%202010%20ebook.pdf">PDF</a> o <a title="Moving to Visual Studio 2010 - XPS format" href="http://download.microsoft.com/download/9/0/B/90B96800-6765-4AC2-A79F-A2E9116F2157/Moving%20to%20Microsoft%20Visual%20Studio%202010%20ebook.xps">XPS</a></p>
<p>y</p>
<p><a title="Introducing Microsoft SQL Server 2008 R2" href="http://blogs.msdn.com/b/microsoft_press/archive/2010/04/14/free-ebook-introducing-microsoft-sql-server-2008-r2.aspx">Introducing Microsoft SQL Server 2008 R2</a> &#8211; Descarga Directa en <a title="Introducing Microsoft SQL Server 2008 R2 - PDF format" href="http://go.microsoft.com/fwlink/?LinkId=189147">PDF</a> o <a title="Introducing Microsoft SQL Server 2008 R2 - XPS Format" href="http://go.microsoft.com/fwlink/?LinkId=189148">XPS</a></p>
<p>Los libros, como los mismos títulos indican, son <strong>orientados a introducir solamente las nuevas cualidades y habilidades</strong> de Visual Studio 2010 y SQL Server 2008 R2, no tanto de educar totalmente sobre features que ya existían, pero aún así, <strong>definitivamente útiles para cualquier persona que esté por empezar a utilizar estas nuevas versiones de ambos programas</strong>.</p>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">
<h3 class="post-name">Moving to Microsoft Visual Studio 2010</h3>
</div>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/libros-gratis-de-visual-studio-2010-y-sql-server-2008-r2/' addthis:title='Libros gratis de Visual Studio 2010 y SQL Server 2008 R2 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/libros-gratis-de-visual-studio-2010-y-sql-server-2008-r2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Links del dia #1</title>
		<link>http://gabrielrodriguez.net/links-del-dia-1/</link>
		<comments>http://gabrielrodriguez.net/links-del-dia-1/#comments</comments>
		<pubDate>Sat, 22 Jan 2011 22:59:18 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[Links del Dia]]></category>
		<category><![CDATA[Mejores Practicas]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=814</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/links-del-dia-1/' addthis:title='Links del dia #1 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>Ya que de perdido paso 2 horas al día leyendo artículos técnicos sobre desarrollo de software o cosas relacionadas a sistemas, y durante los últimos 5 años la mayoría de lo que he aprendido ha sido en base a blog posts, he decido empezar una serie de posts recomendado uno o más artículo/posts que haya [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/links-del-dia-1/' addthis:title='Links del dia #1 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/links-del-dia-1/' addthis:title='Links del dia #1 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Ya que de perdido paso 2 horas al día leyendo artículos técnicos sobre desarrollo de software o cosas relacionadas a sistemas, y durante los últimos 5 años la mayoría de lo que he aprendido ha sido en base a blog posts, he decido empezar una serie de posts recomendado uno o más artículo/posts que haya leído durante ese día, categorizados por tecnología o área.</p>
<p>No se si logre hacer esto diariamente, pero al menos el intento se hará. Aquí estan los primeros artículos interesantes que he leído el día de hoy:</p>
<p><strong>SQL</strong></p>
<p><a title="SQL - Introduction to JOINS - Basic of JOINS" href="http://blog.sqlauthority.com/2009/04/13/sql-server-introduction-to-joins-basic-of-joins/">Introduction to JOINS &#8211; Basic of JOINS</a>: Escrito por Pinal Dave, un experto de SQL. Mucha gente no sabe explicar los JOINS en SQL o la diferencia exacta entre ellos, buen artículo.</p>
<p><strong>Personal Improvement</strong></p>
<p><a title="Basic Presentation Skills Training - Notes from Joel Abrahamsson" href="http://joelabrahamsson.com/entry/notes-from-basic-presentation-skills-training">Basic Presentation Skills Training &#8211; Notes from Joel Abrahamsson</a>: Parte de mi rol de trabajo es dar algunas presentaciones técnicas, y la verdad es que la mayoría de la gente no somos buenos para esto. Buenas notas y tips de este desarrollador que está tomando un curso al respecto.</p>
<p><strong>.NET / C# / ASP.NET</strong></p>
<p><a title="The State of the ALT.NET Movement" href="http://codebetter.com/iancooper/2011/01/16/alt-next/">ALT.Next</a> &#8211; ALT.NET es un &#8220;movimiento&#8221; o &#8220;corriente&#8221; integrado por varios desarrolladores enfocados en traer las mejores prácticas y herramientas de otras comunidades de desarrollo (Java, Ruby, Python, etc) a la comunidad de Microsoft y .NET en general. Aunque su auge más fuerte ya pasó, este artículo da una idea de hacia donde van.</p>
<p><strong>Desarrollo de Sistemas en General</strong></p>
<p><a title="Software Development Metodologies at a Glance" href="http://blogs.msdn.com/b/jmeier/archive/2011/01/21/methodologies-at-a-glance.aspx">Metodologies at a Glance</a><strong> &#8211; </strong>J.D. Meier, un Principal Program Manager de Microsoft, en el equipo de Patterns &amp; Practices, escribe posts muy útiles constantemente. Este post es un mapa de algunas actividades/artefactos clave en varios procesos de desarrollo de software.</p>
<p>That&#8217;s it. Read on.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/links-del-dia-1/' addthis:title='Links del dia #1 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/links-del-dia-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automapper y un buen articulo de diseño de software</title>
		<link>http://gabrielrodriguez.net/automapper-y-un-buen-articulo-de-diseno-de-software/</link>
		<comments>http://gabrielrodriguez.net/automapper-y-un-buen-articulo-de-diseno-de-software/#comments</comments>
		<pubDate>Sat, 20 Mar 2010 06:36:38 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Arquitectura]]></category>
		<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[Mejores Practicas]]></category>
		<category><![CDATA[AutoMapper]]></category>
		<category><![CDATA[Patrones de Diseño]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=716</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/automapper-y-un-buen-articulo-de-diseno-de-software/' addthis:title='Automapper y un buen articulo de diseño de software '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>La semana pasada descubrí AutoMapper, que es un proyecto de .NET gratis y open-source de Jimmy Bogard. Un desarrollador de la oficina me preguntó si había una manera integrada en el framework de transformar las clases generadas por LINQ-To-SQL en clases sencillas (DTOs). No creí que lo hubiera&#8230;pero le comenté que seguramente lo podía hacer [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/automapper-y-un-buen-articulo-de-diseno-de-software/' addthis:title='Automapper y un buen articulo de diseño de software ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/automapper-y-un-buen-articulo-de-diseno-de-software/' addthis:title='Automapper y un buen articulo de diseño de software '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p><img class="alignnone size-full wp-image-728" title="Logo AutoMapper" src="http://gabrielrodriguez.net/wp-content/uploads/2010/03/automapper-logo.png" alt="Logo AutoMapper" width="480" height="49" /></p>
<p>La semana pasada descubrí <a title="AutoMapper" href="http://automapper.codeplex.com/">AutoMapper</a>, que es un proyecto de .NET gratis y open-source de <a title="Jimmy Bogard" href="http://www.lostechies.com/blogs/jimmy_bogard/default.aspx">Jimmy Bogard</a>.</p>
<p>Un desarrollador de la oficina me preguntó si había una manera integrada en el framework de transformar las clases generadas por LINQ-To-SQL en clases sencillas (DTOs). No creí que lo hubiera&#8230;pero le comenté que seguramente lo podía hacer por Reflection. Yo ya habia hecho eso antes, pero supuse que debía haber alguna mejor manera. Después de buscar un poco en StackOverflow.com, alguna de las respuestas linkeaba a AutoMapper y descubrí que era exactamente lo que aquel desarrollador estaba buscando.</p>
<p><strong>AutoMapper </strong>es descrito en su página principal de la siguiente manera:</p>
<p><em>AutoMapper uses a fluent configuration API to define an object-object  mapping strategy.  AutoMapper uses a convention-based matching algorithm  to match up source to destination values.  Currently, AutoMapper is  geared towards model projection scenarios to flatten complex object  models to DTOs and other simple objects, whose design is better suited  for serialization, communication, messaging, or simply an  anti-corruption layer between the domain and application layer.</em></p>
<p>Excelente&#8230;no solo utiliza <a title="Fluent Interfaces" href="http://en.wikipedia.org/wiki/Fluent_interface"><strong>interfaces fluidas</strong></a>, sino que también se basa en <a title="Convention over Configuration" href="http://en.wikipedia.org/wiki/Convention_over_configuration"><strong>Convention Over Configuration</strong></a>. Es decir&#8230;solo tenemos que (y podemos!) configurar las situaciones excepcionales. Las <strong>ventajas </strong>que le veo a utilizar AutoMapper (a pesar de estar incorporando una referencia más a nuestros proyectos) es que es un proyecto público (de open source) y que además tiene a un muy buen desarrollador respaldándolo, que por ser su proyecto, se enfoca en mejorarlo y perfeccionarlo con nuevas funcionalidades, haciéndolo más eficiente, etc. Además, debido a que ya tiene una considerable base de usuarios (3,702 downloads), la mayoría de los bugs que pudiéramos toparnos, ya han sido resueltos.</p>
<p>Un <strong>ejemplo </strong>exagerádamente básico del uso de AutoMapper:</p>
<pre class="brush: csharp; title: ; notranslate">

public class Class1
 {
   public string FullName { get; set; }
   public int Age { get; set; }
   public char Gender { get; set; }
   public void DoIt()
   {
     Console.WriteLine(&quot;Test&quot;);
   }

   public List&lt;string&gt; Addresses { get; set; }

   public Class1()
   {
     Addresses = new List&lt;string&gt;();
   }
 }

 public class Class2
 {
   public string FullName { get; set; }
   public int Age { get; set; }
   public char Gender { get; set; }
 }

private void Form1_Load(object sender, EventArgs e)
{
   Mapper.CreateMap&lt;Class1, Class2&gt;();

   var c2 = Mapper.Map&lt;Class1, Class2&gt;(c1);
   MessageBox.Show(c2.FullName);
}
</pre>
<p>Ok, de este ejemplo podemos ver:</p>
<ul>
<li>Class1 es poco más compleja que Class2, ya que tiene una List&lt;string&gt; y un método definido (DoIt())</li>
<li>Class2 es una versión simple de Class1, con el objetivo de funcionar como un <a title="Data Transfer Object" href="http://en.wikipedia.org/wiki/Data_transfer_object"><strong>Data Transfer Object</strong></a>.</li>
</ul>
<p>Como pueden ver, con la instrucción:</p>
<pre class="brush: csharp; title: ; notranslate">
Mapper.CreateMap&lt;Class1, Class2&gt;();
</pre>
<p>estamos indicándole a AutoMapper que la Class1 y Class2 están relacionadas (mappeadas). Y la siguiente línea de código:</p>
<pre class="brush: csharp; title: ; notranslate">
var c2 = Mapper.Map&lt;Class1, Class2&gt;(c1);&lt;/pre&gt;
</pre>
<p>está creando una instancia de tipo Class2, basada en la instancia de c1 que ya teníamos, inicializada y asignando dinámicamente los valores de dicha instancia (c1) a la nueva instancia c2.</p>
<p>Class1, en este caso, sería un ejemplo de una clase de LINQ-To-SQL, mientras que Class2 sería la clase que queremos usar como DTO.</p>
<p><strong>Esta funcionalidad es sólamente la más básica de AutoMapper (flattening</strong>). También soporta <strong>proyecciones </strong>(utilizar ciertas propiedades o sub-sets de un valor para mapear a otra propiedad), <strong>Listas y Arrays</strong>, etc. Para más información, visisten la <a title="Documentacion de AutoMapper" href="http://automapper.codeplex.com/documentation">documentación de AutoMapper</a>.</p>
<p>Y sobre el buen artículo de diseño&#8230;para mi sorpresa lo encontré 2 dias después de haber descubierto AutoMapper, y el artículo lo escribió Jimmy Bogard.</p>
<p>El artículo se llama originalmente &#8220;<a title="Strengthening your domain: Encapsulated collections" href="http://www.lostechies.com/blogs/jimmy_bogard/archive/2010/03/10/strengthening-your-domain-encapsulated-collections.aspx">Strengthening your domain: Encapsulated collections</a>&#8220;. Jimmy habla de como debemos de diseñar nuestras clases para <strong>no exponer inadvertidamente funcionalidad de más (extra, innecesaria) que podría permitir operaciones no lógicas sobre nuestras entidades</strong>, y enfocarnos en <strong>soportar exclusiva y claramente sólo las operaciones que el dominio de negocio debe permitir sobre las entidades de nuestro proyecto</strong>. El artículo también me hizo pensar que <strong>los accesors son algo que mucha gente no considera</strong> a la hora de exponer sus propiedades. Léanlo y si gustan dejar sus comentarios&#8230;adelante.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/automapper-y-un-buen-articulo-de-diseno-de-software/' addthis:title='Automapper y un buen articulo de diseño de software ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/automapper-y-un-buen-articulo-de-diseno-de-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como formatear una cantidad a currency en .NET controlando el numero de decimales</title>
		<link>http://gabrielrodriguez.net/como-formatear-una-cantidad-a-currency-en-net-controlando-el-numero-de-decimales/</link>
		<comments>http://gabrielrodriguez.net/como-formatear-una-cantidad-a-currency-en-net-controlando-el-numero-de-decimales/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 19:08:44 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=701</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/como-formatear-una-cantidad-a-currency-en-net-controlando-el-numero-de-decimales/' addthis:title='Como formatear una cantidad a currency en .NET controlando el numero de decimales '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>Tantas opciones que hay para formatear strings en.NET, que es difícil memorizar todas. Hoy tuve que formatear una cifra numérica que en la base de datos está como decimal, pero en el UI no quería desplegar ninguno de los decimales. Casi todo el mundo ha utilizado el string.Format(&#8220;{0:C&#8221;), el cual formatearía como si la cantidad [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/como-formatear-una-cantidad-a-currency-en-net-controlando-el-numero-de-decimales/' addthis:title='Como formatear una cantidad a currency en .NET controlando el numero de decimales ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/como-formatear-una-cantidad-a-currency-en-net-controlando-el-numero-de-decimales/' addthis:title='Como formatear una cantidad a currency en .NET controlando el numero de decimales '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><div id="attachment_381" class="wp-caption alignnone" style="width: 250px"><a href="http://gabrielrodriguez.net/wp-content/uploads/2009/07/net-logo.png"><img class="size-full wp-image-381" title=".NET" src="http://gabrielrodriguez.net/wp-content/uploads/2009/07/net-logo.png" alt="" width="240" height="74" /></a><p class="wp-caption-text">.NET</p></div>
<p>Tantas opciones que hay para <strong>formatear strings en.NET</strong>, que es difícil memorizar todas.</p>
<p>Hoy tuve que <strong>formatear una cifra numérica</strong> que en la base de datos está como <strong>decimal</strong>, pero <strong>en el UI no quería desplegar ninguno de los decimales</strong>. Casi todo el mundo ha utilizado el <strong>string.Format(&#8220;{0:C&#8221;)</strong>, el cual formatearía como si la cantidad fuera una <strong>cifra monetaria</strong>, pero eso implica tener decimales.</p>
<p>Algua persona <strong>podría pensar en realizar esto desde el stored procedure</strong> o el query que trae la información, pero personalmente<strong> creo que eso es un error</strong>, ya que <strong>los datos deben estar siempre  intactos</strong> y <strong>lo unico que debemos modificar es el formato </strong>en el que los queremos desplegar. Además, eso implicaría tener que estar controlando también el formato del símbolo separador de miles. Esto es algo que simplemente no se debe hacer en base de datos.</p>
<p>Googleando, encontré en los forums de ASP.NET<strong> la siguiente manera de hacerlo, pero tampoco es la más correcta</strong>:</p>
<pre class="brush: csharp; title: ; notranslate">

System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();
nfi.CurrencyDecimalDigits = 0;
nfi.CurrencySymbol =&quot;$&quot;;
myLabel.Text =string.Format(nfi,&quot;{0:C}&quot;, ad.Price);
</pre>
<p>Ya que estoy utilizando esto en un control Repeater, tendría que crear un método con las primeras 3 líneas de texto anteriores, y eso implicaría estar generando varias instancias de NumberFormatInfo.</p>
<p>Para ya no hacer más largo este post, <strong>les dejo la solución correcta</strong>.</p>
<pre class="brush: csharp; title: ; notranslate">

string.Format(&quot;0:C0&quot;, ad.Price);
</pre>
<p>Así de sencillo&#8230;y no lo especifican en ningun lugar de MSDN&#8230;lo vine a encontrar aqui: <a title=".NET Format String 101" href="http://blogs.msdn.com/kathykam/archive/2006/03/29/564426.aspx">.NET Format String 101</a>. Obvio decirlo, basta cambiar el C0 por C1, C2, C3 o Cx para<strong> determinar el número de decimales que queremos desplegar</strong>. Esto también hace mucho más facil <strong>poner ese format string en el archivo de configuración y poder reutilizarlo</strong> en varias pantallas sin tener que estar cambiando código.</p>
<p>Les dejo también otra buena referencia de string.Format: <a title="String Formatting in C#" href="http://blog.stevex.net/string-formatting-in-csharp/">String Formatting in C#</a></p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/como-formatear-una-cantidad-a-currency-en-net-controlando-el-numero-de-decimales/' addthis:title='Como formatear una cantidad a currency en .NET controlando el numero de decimales ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/como-formatear-una-cantidad-a-currency-en-net-controlando-el-numero-de-decimales/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Aplicar formatos condicionales a numeros con string.Format</title>
		<link>http://gabrielrodriguez.net/aplicar-formatos-condicionales-a-numeros-con-string-format/</link>
		<comments>http://gabrielrodriguez.net/aplicar-formatos-condicionales-a-numeros-con-string-format/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 06:13:10 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=693</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/aplicar-formatos-condicionales-a-numeros-con-string-format/' addthis:title='Aplicar formatos condicionales a numeros con string.Format '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>Esto es algo que descubrí hoy referente a formateo de números en .NET y que por más simple que parezca, tiene mucha utilidad, ya que puede reducir un bloque de 3 o 6 líneas de código, a una sola línea. En lugar de necesitar varios if&#8217;s para evaluar el valor del número que vamos a [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/aplicar-formatos-condicionales-a-numeros-con-string-format/' addthis:title='Aplicar formatos condicionales a numeros con string.Format ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/aplicar-formatos-condicionales-a-numeros-con-string-format/' addthis:title='Aplicar formatos condicionales a numeros con string.Format '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><div id="attachment_381" class="wp-caption alignnone" style="width: 250px"><a href="http://gabrielrodriguez.net/wp-content/uploads/2009/07/net-logo.png"><img class="size-full wp-image-381" title=".NET" src="http://gabrielrodriguez.net/wp-content/uploads/2009/07/net-logo.png" alt="" width="240" height="74" /></a><p class="wp-caption-text">.NET</p></div>
<p>Esto es algo que descubrí hoy referente a <strong>formateo de números en .NET</strong> y que por más simple que parezca, tiene mucha utilidad, ya que puede reducir un bloque de 3 o 6 líneas de código, a una sola línea.</p>
<p>En lugar de necesitar varios if&#8217;s para evaluar el valor del número que vamos a formatear y poder determinar el formato que se va a aplicar (desplegar el número entre paréntesis si es negativo, desplegar la palabra Cero si el número es 0, etc), se puede hacer todo el una sola línea, ya que el metodo <strong>ToString()</strong> permite formatos condicionales de 2 o 3 condiciones&#8230;es decir, podemos hacer esto:</p>
<pre class="brush: csharp; title: ; notranslate">

const string formato = &quot;000;(##);Cero&quot;;

 Console.WriteLine(7.ToString(formato)); // va a desplegar &quot;007&quot;
 Console.WriteLine((-5).ToString(formato)); // va a desplegar &quot;(5)&quot;
 Console.WriteLine(0.ToString(formato)); // va a desplegar &quot;Cero&quot;
</pre>
<div id="attachment_695" class="wp-caption alignnone" style="width: 357px"><img class="size-full wp-image-695" title="Formatos condicionales en .NET usando ToString()" src="http://gabrielrodriguez.net/wp-content/uploads/2010/01/net-formatos-condicionales-strings.png" alt="Formatos condicionales en .NET usando ToString()" width="347" height="129" /><p class="wp-caption-text">Formatos condicionales en .NET usando ToString()</p></div>
<p>El formato entonces es: <strong> &#8220;positivo;negativo;cero&#8221;</strong>.</p>
<p>También es posible especificar solo el formato positivo y negativo.</p>
<p>Espero les sirva.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/aplicar-formatos-condicionales-a-numeros-con-string-format/' addthis:title='Aplicar formatos condicionales a numeros con string.Format ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/aplicar-formatos-condicionales-a-numeros-con-string-format/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usar el operator ternario de C# con nullables</title>
		<link>http://gabrielrodriguez.net/usar-el-operator-ternario-de-c-con-nullables/</link>
		<comments>http://gabrielrodriguez.net/usar-el-operator-ternario-de-c-con-nullables/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 07:39:15 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=677</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/usar-el-operator-ternario-de-c-con-nullables/' addthis:title='Usar el operator ternario de C# con nullables '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>Todos los días se aprende algo&#8230; Desde hace mucho tenemos disponible el operador ternario (o condicional) en C#, también conocido como el operador &#8220;?&#8220;. El operador ternario sirve para regresar/usar uno de dos posibles valores, dependiendo de una condición boleana. La estructura es: condicion-boleana ? valor-si-se-cumple : valor-si-no-se-cumple Es decir, permite reducir de esto: a [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/usar-el-operator-ternario-de-c-con-nullables/' addthis:title='Usar el operator ternario de C# con nullables ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/usar-el-operator-ternario-de-c-con-nullables/' addthis:title='Usar el operator ternario de C# con nullables '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><div id="attachment_381" class="wp-caption alignnone" style="width: 250px"><img class="size-full wp-image-381" title=".NET" src="http://gabrielrodriguez.net/wp-content/uploads/2009/07/net-logo.png" alt=".NET" width="240" height="74" /><p class="wp-caption-text">.NET</p></div>
<p>Todos los días se aprende algo&#8230;</p>
<p>Desde hace mucho tenemos disponible el <a title="Operador Ternario o condicional en C#" href="http://msdn.microsoft.com/en-us/library/ty67wk28.aspx"><strong>operador ternario (o condicional) en C#</strong></a>, también conocido como el operador &#8220;<strong>?</strong>&#8220;.</p>
<p>El operador ternario <strong>sirve para regresar/usar uno de dos posibles valores, dependiendo de una condición boleana</strong>.</p>
<p>La estructura es:</p>
<p><strong>condicion-boleana ? valor-si-se-cumple : valor-si-no-se-cumple</strong></p>
<p>Es decir, permite reducir de esto:</p>
<pre class="brush: csharp; title: ; notranslate">

int? myVar; //variable int nullable

if(string.IsNullOrEmpty(textbox1.Text))

{ myVar = null; }

else

{ myVar = Convert.ToInt32(textbox1.Text); }
</pre>
<p>a esto:</p>
<pre class="brush: csharp; title: ; notranslate">

myVar =string.IsNullOrEmpty(textbox1.Text) ? null : Convert.ToInt32(textbox1.Text);
</pre>
<p>Y uno esperaría que el código del segundo bloque compile, pero no es así. En lugar de que funcione, el compilador nos marca el siguiente error:</p>
<p><strong> Type of conditional expression cannot be determined because there is no implicit conversion between &#8216;&lt;null&gt;&#8217; and &#8216;int&#8217; </strong></p>
<p>Yo llevaba años usando el operador ternario y siempre me pareció ilógico que no se permitiera esto. Y probablemente fue más ilógico el hecho de nunca haber googleado como solucionar esto..ya que la solución es simple.</p>
<pre class="brush: csharp; title: ; notranslate">

myVar =string.IsNullOrEmpty(textbox1.Text) ? (int?)null : Convert.ToInt32(textbox1.Text);
</pre>
<p>o</p>
<pre class="brush: csharp; title: ; notranslate">

myVar =string.IsNullOrEmpty(textbox1.Text) ? null : (int?)Convert.ToInt32(textbox1.Text);
</pre>
<p>Simple&#8230;el compilador tenía razon. No hay una conversión implícita entre null e int, <strong>pero sí entre null y Nullable&lt;int&gt; (a.k.a. int?)</strong>. Casteando cualquiera de los lados de la expresión, va a compilar sin problemas.</p>
<p>Espero les sirva.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/usar-el-operator-ternario-de-c-con-nullables/' addthis:title='Usar el operator ternario de C# con nullables ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/usar-el-operator-ternario-de-c-con-nullables/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cursos de Visual Studio 2010 y .NET Framework 4.0 gratis</title>
		<link>http://gabrielrodriguez.net/cursos-de-visual-studio-2010-y-net-framework-4-0-gratis/</link>
		<comments>http://gabrielrodriguez.net/cursos-de-visual-studio-2010-y-net-framework-4-0-gratis/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 04:54:25 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[.NET 4.0]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=577</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/cursos-de-visual-studio-2010-y-net-framework-4-0-gratis/' addthis:title='Cursos de Visual Studio 2010 y .NET Framework 4.0 gratis '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>La gente de Channel 9, uno de los mejores sites para aprender de desarrollo y especificamente de .NET, acaba de abrir una sección nueva llamada Channel 9 Learning Center. Para inaugurar la sección, publicaron dos cursos iniciales: Visual Studio 2010 and .NET Framework 4.0 Windows 7 Online Training La calidad del contenido que este site [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/cursos-de-visual-studio-2010-y-net-framework-4-0-gratis/' addthis:title='Cursos de Visual Studio 2010 y .NET Framework 4.0 gratis ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/cursos-de-visual-studio-2010-y-net-framework-4-0-gratis/' addthis:title='Cursos de Visual Studio 2010 y .NET Framework 4.0 gratis '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><div id="attachment_579" class="wp-caption alignnone" style="width: 306px"><img class="size-full wp-image-579" title="Channel 9 Logo" src="http://gabrielrodriguez.net/wp-content/uploads/2009/10/channel-9-logo.PNG" alt="Channel 9 Logo" width="296" height="126" /><p class="wp-caption-text">Channel 9 Logo</p></div>
<p>La gente de <a title="Channel 9" href="http://channel9.msdn.com/"><strong>Channel 9</strong></a>, uno de los<strong> mejores sites para aprender de desarrollo y especificamente de .NET</strong>, acaba de abrir una <strong>sección nueva</strong> llamada <a title="Channel 9 Learning Center" href="http://channel9.msdn.com/learn/"><strong>Channel 9 Learning Center</strong></a>.</p>
<p>Para inaugurar la sección, publicaron dos cursos iniciales:</p>
<ul>
<li><a title="Visual Studio 2010 and .NET Framework 4 Training Course" href="http://channel9.msdn.com/learn/courses/VS2010/">Visual Studio 2010 and .NET Framework 4.0</a></li>
<li><a title="Windows 7 Online Training" href="http://channel9.msdn.com/learn/courses/Windows7/">Windows 7 Online Training</a></li>
</ul>
<div id="attachment_580" class="wp-caption alignnone" style="width: 243px"><img class="size-full wp-image-580" title="Visual Studio 2010 Logo" src="http://gabrielrodriguez.net/wp-content/uploads/2009/10/visual-studio-2010-logo.PNG" alt="Visual Studio 2010 Logo" width="233" height="178" /><p class="wp-caption-text">Visual Studio 2010 Logo</p></div>
<p>La <strong>calidad del contenido</strong> que este site genera es <strong>buenísima</strong>. Los videos siempre son <strong>interesantes</strong>, y las personas que conducen y son entrevistadas en los videos siempre es <strong>gente importante y muy conocedora de la industria</strong>.</p>
<p>Algunos de los <strong>temas del curso de Visual Studio 2010</strong> son:</p>
<ul>
<li>ASP.NET 4.0</li>
<li>Data Platform</li>
<li>Application Lifecycle Management</li>
<li>Windows Communication Foundation and Workflow</li>
<li>Managed Languages</li>
</ul>
<p>Así que si no se quieren quedar obsoletos&#8230;vayan a aprovechar este material.<strong> Las mejoras en el .NET Framework 4.0 son muchas</strong>, y <strong>esta version implica cambio de CLR</strong>&#8230;así que hay mucho que aprender.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/cursos-de-visual-studio-2010-y-net-framework-4-0-gratis/' addthis:title='Cursos de Visual Studio 2010 y .NET Framework 4.0 gratis ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/cursos-de-visual-studio-2010-y-net-framework-4-0-gratis/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Platicas de .NET del LinkedIn .NET Users Group</title>
		<link>http://gabrielrodriguez.net/platicas-de-net-del-linkedin-net-users-group/</link>
		<comments>http://gabrielrodriguez.net/platicas-de-net-del-linkedin-net-users-group/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 00:01:03 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[LIDNUG]]></category>
		<category><![CDATA[ScreenCasts]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=502</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/platicas-de-net-del-linkedin-net-users-group/' addthis:title='Platicas de .NET del LinkedIn .NET Users Group '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>Hace poco me uni al grupo de LinkedIn .NET Users Group (mejor conocido como LIDNUG) en el site de LinkedIn. El grupo tiene 29,427 miembros hasta el día de hoy, con origenes muy variados. Hay desarrolladores, managers y hasta recruiters para trabajos relacionados con .NET La gente de LIDNUG ha tenido la suerte de poder [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/platicas-de-net-del-linkedin-net-users-group/' addthis:title='Platicas de .NET del LinkedIn .NET Users Group ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/platicas-de-net-del-linkedin-net-users-group/' addthis:title='Platicas de .NET del LinkedIn .NET Users Group '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p style="text-align: center;">
<div id="attachment_503" class="wp-caption aligncenter" style="width: 266px"><img class="size-full wp-image-503 " title="LinkedIn .NET Users Group" src="http://gabrielrodriguez.net/wp-content/uploads/2009/08/lidnug-logo.png" alt="LinkedIn .NET Users Group" width="256" height="101" /><p class="wp-caption-text">LinkedIn .NET Users Group</p></div>
<p>Hace poco me uni al grupo de <a title="Linked .NET Users Group" href="http://www.linkedin.com/groups?home=&amp;gid=43315">LinkedIn .NET Users Group</a> (mejor conocido como <strong>LIDNUG</strong>) en el site de <a title="LinkedIn" href="http://www.linkedin.com">LinkedIn</a>.</p>
<p><strong>El grupo tiene 29,427 miembros</strong> hasta el día de hoy, con origenes muy variados. Hay desarrolladores, managers y hasta recruiters para trabajos relacionados con .NET</p>
<p>La gente de LIDNUG ha tenido la suerte de poder tener <strong>sesiones de platicas </strong>(y grabadas en LiveMeeting) con gente muy importante de la comunidad de .NET, entre los principales:</p>
<ul>
<li> <a title="ScottGu's Blog" href="http://weblogs.asp.net/scottgu/"><strong>Scott Guthrie</strong></a> &#8211; Corporate VicePresident de .NET Developer Platform y persona clave en la creación y desarrollo de .NET</li>
<li><strong><a title="Scott Hanselman's Computer Zen" href="http://www.hanselman.com/blog/">Scott Hanselman</a> </strong>- Senior Project Manager en la Developer Division, conocidísimo blogger. Tiene su propio podcast de .NET llamado <a title="Hanselminutes - Excelente podcast de desarrollo de software y .NET" href="http://www.hanselminutes.com/archives.aspx">Hanselminutes </a>donde trata temas de todo tipo relacionados en su mayoria con desarrollo de software y .NET</li>
<li><a title="Sara Ford's Weblog" href="http://blogs.msdn.com/saraford/"><strong>Sara Ford</strong></a> &#8211; Software Design Engineer de Microsoft, antes del Visual Studio Core Team, ahora en el proyecto de CodePlex.</li>
</ul>
<p>Lo mejor de estas platicas es que, como ya dije, el grupo de LIDNUG las graba y las pone disponibles para que cualquier persona interesada las baje.</p>
<p>La liga es esta: <a title="Linked .NET Users Group Presentations" href="http://www.lidnug.org/Presentations.aspx">LinkedIn .NET Users Group Presentations</a></p>
<p>Si les interesa <strong>aprender .NET </strong>de la gente que lo creó y lo entiende mejor que nadie, bajen las sesiones.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/platicas-de-net-del-linkedin-net-users-group/' addthis:title='Platicas de .NET del LinkedIn .NET Users Group ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/platicas-de-net-del-linkedin-net-users-group/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como medir tiempo de ejecucion de codigo en C# y .NET</title>
		<link>http://gabrielrodriguez.net/como-medir-tiempo-de-ejecucion-de-codigo-en-c-y-net/</link>
		<comments>http://gabrielrodriguez.net/como-medir-tiempo-de-ejecucion-de-codigo-en-c-y-net/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 05:14:04 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Mejores Practicas]]></category>
		<category><![CDATA[Diagnostics]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[StopWatch]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=492</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/como-medir-tiempo-de-ejecucion-de-codigo-en-c-y-net/' addthis:title='Como medir tiempo de ejecucion de codigo en C# y .NET '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>Proximamente voy a hacer un comparativo de performance entre Entity Framework y Subsonic, así que se me ocurrió de una vez escribir este post sobre la manera correcta en que se debe medir el tiempo de ejecución de un cierto bloque de código utilizando C# y .NET. La medición del tiempo se hace usando una [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/como-medir-tiempo-de-ejecucion-de-codigo-en-c-y-net/' addthis:title='Como medir tiempo de ejecucion de codigo en C# y .NET ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://gabrielrodriguez.net/como-medir-tiempo-de-ejecucion-de-codigo-en-c-y-net/' addthis:title='Como medir tiempo de ejecucion de codigo en C# y .NET '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Proximamente voy a hacer un comparativo de performance entre Entity Framework y Subsonic, así que se me ocurrió de una vez escribir este post sobre la manera correcta en que se debe<strong> medir el tiempo de ejecución de un cierto bloque de código </strong>utilizando C# y .NET.</p>
<p>La medición del tiempo se hace usando una instancia de la clase <strong>StopWatch</strong>, que se encuentra en el namespace de <strong>System.Diagnostics</strong>. La clase <strong>StopWatch </strong>provee un conjunto de métodos y propiedades que pueden ser usados <strong>para medir con alta precisión el tiempo transcurrido entre intervalo</strong>s.</p>
<p>Los <strong>métodos disponibles </strong>sobre esta instancia serían:</p>
<ul>
<li> <strong>Start() </strong>- inicia el contador a partir del último lapso. La cuenta es acumulativa, es decir, si se verifica la propiedad <strong>ElapsedMilliseconds </strong>después de 4 llamadas a los métodos de Start y Stop, <strong>el tiempo desplegado será el acumulado de los 4 intervalos</strong>.</li>
<li><strong>Stop() </strong>- detiene momentaneamente el timer.</li>
<li><strong>Reset() </strong>- reinicia los valores almacenados del timer</li>
</ul>
<p>Las <strong>propiedades </strong>disponibles, que usaríamos para desplegar el tiempo que tomó alguna rutina, serían:</p>
<ul>
<li> <strong>Elapsed </strong>- Regresa una instancia de tipo TimeSpan que determina el tiempo que ha transcurrido desde que se llamó al método Start() por primera vez.</li>
<li><strong>ElapsedMilliseconds &#8211; </strong>Regresa un valor de tipo <strong>long </strong>que indica los milisegundos transcurridos desde la primera vez que se llamó al método Start().</li>
<li><strong>ElapsedTicks </strong>- Regresa un valor de tipo <strong>long</strong>, que indica los Ticks que han pasado desde la primera vez que se llamó al método Start(). <strong>Nota importante</strong> respecto a esta propiedad:<strong> Los ticks de un StopWatch no son iguales a los ticks de un DateTime</strong>.<span> <em>En <strong>DateTime</strong>, cada tick representa un intervalo de 100 nanosegundos. En <strong>StopWatch</strong>, un tick representa un intervalo de tiempo equivalente a 1 segundo dividido entre la propiedad Frequency</em></span><em><span><span> </span></span></em><span><em>del StopWatch. </em><span> </span></span></li>
<li><strong>IsRunning </strong>- determina si el timer está activo y contando Ticks.</li>
</ul>
<p>Las propiedades <strong>IsHighResolution </strong>y <strong>Frequency </strong>no son propias de una instancia StopWatch, sino de la clase StopWatch.</p>
<p><a title="Stopwatch.IsHighResolution Field" href="http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.ishighresolution.aspx"><strong>IsHighResolution</strong></a><strong> </strong>indica si el timer utilizado está basado en un contador de performance de alta resolución. Esto depende del procesador/arquitectura de la computadora en la que está corriendo el código</p>
<p><span><span><strong><a id="ctl00_MTContentSelector1_mainContentContainer_ctl50_ctl00_ctl15" title="Stopwatch.Frequency Field" onclick="javascript:Track('ctl00_MTContentSelector1_mainContentContainer_ctl50_ctl00_contenthere|ctl00_MTContentSelector1_mainContentContainer_ctl50_ctl00_ctl15',this);" href="http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.frequency.aspx">Frequency</a></strong> representa el numero de StopWatch ticks por segundo.</span></span></p>
<p>Ahora, un poco de código de ejemplo:</p>
<pre class="brush: csharp; title: ; notranslate">

Console.WriteLine(string.Format(&quot;IsHighResolution: {0}&quot;, Stopwatch.IsHighResolution ? &quot;Yes&quot; : &quot;No&quot;));
Console.WriteLine(string.Format(&quot;Frequency: {0}&quot;, Stopwatch.Frequency));
Console.WriteLine(&quot;----------------------&quot;);

var dos = &quot;2&quot;;
var suma = 0;

//Medir int.Parse
var timer = Stopwatch.StartNew();

for (var i = 1; i &lt;= 1000; i++)
{
suma += int.Parse(dos) * i;
}

timer.Stop();
Console.WriteLine(string.Format(&quot;Suma: {0}&quot;, suma));
Console.WriteLine(string.Format(&quot;Elapsed para int.Parse: {0}&quot;, timer.Elapsed));
Console.WriteLine(string.Format(&quot;ElapsedMilliseconds para int.Parse: {0}&quot;, timer.ElapsedMilliseconds));
Console.WriteLine(string.Format(&quot;ElapsedTicks para int.Parse: {0}&quot;, timer.ElapsedTicks));
Console.WriteLine(&quot;----------------------&quot;);

suma = 0;

//Medir Convert.ToInt32()
timer = Stopwatch.StartNew();

for (var i = 1; i &lt;= 1000; i++)
{
suma += Convert.ToInt32(dos) * i;
}

timer.Stop();
Console.WriteLine(string.Format(&quot;Suma: {0}&quot;, suma));
Console.WriteLine(string.Format(&quot;Elapsed para Convert.ToInt32: {0}&quot;, timer.Elapsed));
Console.WriteLine(string.Format(&quot;ElapsedMilliseconds para Convert.ToInt32: {0}&quot;, timer.ElapsedMilliseconds));
Console.WriteLine(string.Format(&quot;ElapsedTicks para Convert.ToInt32: {0}&quot;, timer.ElapsedTicks));
</pre>
<p><span><span>da el siguiente resultado:</span></span></p>
<p><span><span> </span></span></p>
<div id="attachment_498" class="wp-caption aligncenter" style="width: 463px"><img class="size-full wp-image-498" title="Midiendo intervalos de tiempo con la clase StopWatch" src="http://gabrielrodriguez.net/wp-content/uploads/2009/08/stopwatch-measure-code.png" alt="Midiendo intervalos de tiempo con la clase StopWatch" width="453" height="227" /><p class="wp-caption-text">Midiendo intervalos de tiempo con la clase StopWatch</p></div>
<p><span><span>Como se puede apreciar, int.Parse es ligeramente más rapido que Convert.ToInt32().<br />
</span></span></p>
<p><strong>De manera simplemente informativa</strong>&#8230;hay otra manera de medir intervalos de tiempo que mucha gente usa, y NO es correcto ni recomendable. Lo hacen asignando el valor de <strong>DateTime.Now</strong> a una variable de tipo DateTime y luego lo resta al valor de DateTime.Now en el momento que quieren dejar de medir.</p>
<p>Hay todavía otra manera similar al uso de DateTimes, que es usando la propiedad <strong>Environment.TickCount</strong>.Esto es incorrecto por tres razones:</p>
<p>1. Si existe una clase especializada para hacer esto en el framework, digase StopWatch, hay que usarla.<br />
2. <strong>Environment.TickCount es <a title="Signedness - Wikipedia" href="http://en.wikipedia.org/wiki/Signedness">signed</a></strong><a title="Signedness - Wikipedia" href="http://en.wikipedia.org/wiki/Signedness"> </a>(puede representar valores negativos también) lo cual implica que después de 25 dias, se va a entrar al rango negativo y se tendría que eliminar el bit del símbolo para poder hacer calculos correctos. Después de 50 dias, se llenarían todos los bits de la variable y la cuenta se reiniciaría. <a title="Environment.TickCount vs DateTime.Now - StackOverflow.com" href="http://stackoverflow.com/questions/243351/environment-tickcount-vs-datetime-now">Ver discusión en StackOverflow.com donde se menciona esto</a>.<br />
3. En palabras del mismo <strong>Scott Hanselman</strong>, y mencionado en el mismo link de la razon #2: <em>As an unrelated aside, if you DO use DateTime for Date-related math calculations, always use DateTime.UtcNow as DateTime.Now is susceptible to Daylight Savings Time&#8230;your calculations could be off by a hour, or worse, negative numbers.</em></p>
<p>Es decir, es muy facil que a la gente se le olvide que si va a cronometrar de esta manera, usar DateTimes para medir intervalos puede ser susceptible a los conocidos &#8220;horarios de verano&#8221;, que desfazan por temporadas el reloj por +- 1 hora.<em> </em><strong>Cualquiera de las dos alternativas a StopWatch</strong> (DateTime o Environment.Ticks)<strong> es relativamente riesgosa para ser útil.</strong><em><br />
</em></p>
<p>Links de Referencia:</p>
<p><a title="Stopwatch Class" href="http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx">Clase StopWatch @ MSDN</a></p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://gabrielrodriguez.net/como-medir-tiempo-de-ejecucion-de-codigo-en-c-y-net/' addthis:title='Como medir tiempo de ejecucion de codigo en C# y .NET ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/como-medir-tiempo-de-ejecucion-de-codigo-en-c-y-net/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

