<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>El alegre bandolero...</title><link>http://geeks.ms/blogs/jmtorres/default.aspx</link><description>blog sobre experiencias en .NET Compact Framework y Windows Mobile</description><dc:language /><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>[CatDotNet] Dices tu de nServiceBus…</title><link>http://geeks.ms/blogs/jmtorres/archive/2010/02/24/catdotnet-dices-tu-de-nservicebus.aspx</link><pubDate>Wed, 24 Feb 2010 22:33:36 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:168121</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=168121</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2010/02/24/catdotnet-dices-tu-de-nservicebus.aspx#comments</comments><description>&lt;p align="justify"&gt;Buenas!! Pues el próximo viernes 26 de febrero tendremos el placer de contar en Igualada con &lt;strong&gt;Sergio Bermudez &lt;/strong&gt;quién nos presentará lo bueno y lo malo –si es que lo hay- de &lt;strong&gt;&lt;a href="http://www.nservicebus.com"&gt;nServiceBus&lt;/a&gt;&lt;/strong&gt; del amigo &lt;strong&gt;Udi Dahan, y &lt;/strong&gt;cuyo pretexto utilizaremos para tomar, a posteriori, unos cacharros entre amigos y saber más sobre los &lt;strong&gt;ESB &lt;/strong&gt;(ver foto).&lt;/p&gt;  &lt;p&gt;&lt;img style="display:block;float:none;margin-left:auto;margin-right:auto;" src="http://carbon111.com/brew/redhook_esb.jpg" width="256" height="382" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Así que si estás por las cercanías, ¡¡te esperamos!!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/CatDotNet_5F00_pequec3b1a_5F00_17530497.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="CatDotNet_peque%c3%b1a" border="0" alt="CatDotNet_peque%c3%b1a" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/CatDotNet_5F00_pequec3b1a_5F00_thumb_5F00_15A238C3.jpg" width="162" height="59" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=168121" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Comunidad/default.aspx">Comunidad</category></item><item><title>Virtualización de Servicios con Managed Services Engines</title><link>http://geeks.ms/blogs/jmtorres/archive/2010/02/04/virtualizaci-243-n-de-servicios-con-managed-services-engines.aspx</link><pubDate>Thu, 04 Feb 2010 07:57:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:166630</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=166630</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2010/02/04/virtualizaci-243-n-de-servicios-con-managed-services-engines.aspx#comments</comments><description>&lt;p align="justify"&gt;Desde mis primeras incursiones en el desarrollo de Servicios empresariales, b&amp;aacute;sicamente desde la aparici&amp;oacute;n de las primeras betas de &lt;strong&gt;WCF&lt;/strong&gt;, ha habido un miedo esc&amp;eacute;nico que me ha atormentado y es la programaci&amp;oacute;n d&amp;eacute;spota e incontrolada de servicios, servicios y m&amp;aacute;s servicios, lo que deriva en la producci&amp;oacute;n de 300 servicios, con 300 enlaces distintos (no m&amp;aacute;s de 10 comunes), en 50 endpoints y cuyo valor operativo era equivalente a 50 servicios bien dise&amp;ntilde;ados y gobernados.&amp;nbsp; No conceb&amp;iacute;a una arquitectura s&amp;oacute;lida de servicios sin una &lt;em&gt;&amp;ldquo;torre de control&lt;/em&gt;&amp;rdquo; o una &amp;ldquo;&lt;em&gt;cabina de mando&lt;/em&gt;&amp;rdquo; desde d&amp;oacute;nde poder ver, gestionar y modificar nuestros servicios. &lt;/p&gt;
&lt;p align="justify"&gt;M&amp;aacute;s adelante tuve la oportunidad de trabajar en una arquitectura &lt;strong&gt;SOA&lt;/strong&gt; desarrollada en &lt;strong&gt;J2EE&lt;/strong&gt;, dirigida por un ESB de &lt;strong&gt;Oracle&lt;/strong&gt; y gestionada con herramientas de gobernabilidad SOA, que manejaban m&amp;aacute;s de un centenar de servicios (&lt;em&gt;proxy&lt;/em&gt; y &lt;em&gt;legacy&lt;/em&gt;) y d&amp;oacute;nde la publicaci&amp;oacute;n y consumo de dichos servicios se realizaban a trav&amp;eacute;s de estrictas normas protocolarias (seguridad, documentaci&amp;oacute;n,&amp;hellip;).&lt;/p&gt;
&lt;p align="justify"&gt;Ahora vuelvo, de nuevo, a tener la misma necesidad, dise&amp;ntilde;ar una infraestructura de servicios y cuando hablo de infraestructura hablo de ese tipo de herramientas fundamentales para el control de todos y cada uno de los servicios. Pero ahora (en realidad hace ya un tiempo que existe) me encontr&amp;eacute; con un software, bajo licencia&amp;nbsp; &lt;em&gt;Microsoft Public License&lt;/em&gt; (Ms-PL) y c&amp;oacute;digo abierto, que adopta de forma pr&amp;aacute;ctica la idea de Virtualizaci&amp;oacute;n de Servicios, llamado &lt;strong&gt;&lt;a href="http://www.codeplex.com/servicesengine"&gt;Managed Services Engine&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;h1 align="justify"&gt;Virtualizaci&amp;oacute;n de Servicios&lt;/h1&gt;
&lt;p align="justify"&gt;La idea b&amp;aacute;sica del &lt;strong&gt;patr&amp;oacute;n de Virtualizaci&amp;oacute;n de Servicios&lt;/strong&gt; es el de aislar la complejidad de los servicios expuestos del cliente que los consume ya que&amp;nbsp; tras cada servicio se alberga una gran cantidad de aspectos tales como las localizaciones de los endpoints, las configuraciones de los enlaces, la aplicaci&amp;oacute;n de pol&amp;iacute;ticas, etc. Adem&amp;aacute;s muchas de las adopciones SOA a la practica no ofrecen soluciones sobre versionado de servicios, aplicaci&amp;oacute;n de pol&amp;iacute;ticas de seguridad o cambios operativos sin necesidad volver a codificar el servicio as&amp;iacute; como el cumplimiento del &lt;strong&gt;&lt;a href="http://es.wikipedia.org/wiki/Acuerdo_de_nivel_de_servicio"&gt;SLA&lt;/a&gt;&lt;/strong&gt; entre el proveedor &amp;ndash;nosotros- y el cliente.&lt;/p&gt;
&lt;p align="justify"&gt;Aparece la idea de &lt;strong&gt;Servicio Intermediario&lt;/strong&gt; que desacopla el cliente de la implementaci&amp;oacute;n del servicio. Como tal, podemos ofrece varios servicios virtuales de una misma implementaci&amp;oacute;n para, por ejemplo, utilizarlo en distintos escenarios. Es aqu&amp;iacute; d&amp;oacute;nde encontramos la clave de la virtualizaci&amp;oacute;n, en el servicio intermediario, pues todas las llamadas se realizaran a trav&amp;eacute;s de este y podremos modificar su comportamiento sin comprometer los modelos del servicio.&lt;/p&gt;
&lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 align="justify"&gt;Managed Services Engine&lt;/h1&gt;
&lt;p align="justify"&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/soa/solutions/soi.aspx"&gt;Microsoft Services SOA Infraestructure&lt;/a&gt;&lt;/strong&gt; ofrece una soluci&amp;oacute;n de virtualizaci&amp;oacute;n de servicios a trav&amp;eacute;s de &lt;strong&gt;Managed Services Engine (MSE&lt;/strong&gt;). Como cabe esperar, MSE est&amp;aacute; basado en la plataforma &lt;strong&gt;Windows&lt;/strong&gt;, esto es, &lt;strong&gt;Windows Server 2003/2008&lt;/strong&gt;, &lt;strong&gt;SQL Server 2005/2008&lt;/strong&gt; y &lt;strong&gt;.NET Framework 3.5&lt;/strong&gt;, especialmente con &lt;strong&gt;Windows Communication Foundation&lt;/strong&gt; para la interceptaci&amp;oacute;n de comunicaciones entre servicios virtuales y reales.&lt;/p&gt;
&lt;p align="justify"&gt;MSE puede integrarse tanto con &lt;strong&gt;MS Biztalk Server 2006 R2 / 2009 &lt;/strong&gt;para proporcionar capacidades adicionales tales como la monitorizaci&amp;oacute;n de las actividades de negocio (BAM), el Business Rules Engine o el ESB Toolkit, entre otros. Adem&amp;aacute;s tambi&amp;eacute;n podemos utilizar los servicios &lt;strong&gt;Azure&lt;/strong&gt; a trav&amp;eacute;s de Azure AppFabric, especialmente con &lt;strong&gt;.NET Service Bus&lt;/strong&gt;.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;img height="276" width="362" src="http://i.msdn.microsoft.com/dd727511.fig11_L(en-us).gif" style="display:inline;margin-left:0px;margin-right:0px;" alt="" /&gt;&lt;/p&gt;
&lt;p align="justify"&gt;MSE consiste, b&amp;aacute;sicamente, en tres componentes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="justify"&gt;&lt;em&gt;Messenger&lt;/em&gt;: proporciona la normalizaci&amp;oacute;n del mensaje de entrada a trav&amp;eacute;s de los servicios virtuales. Este componente soporta adem&amp;aacute;s la aplicaci&amp;oacute;n de pol&amp;iacute;ticas (de transformaci&amp;oacute;n por ejemplo, tanto de peticiones como de respuestas) as&amp;iacute; como el mapeo de protocolos.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;&lt;em&gt;Broker&lt;/em&gt;: este componente obtiene el mensaje normalizado y lo reconvierte a la operaci&amp;oacute;n (es decir la implementaci&amp;oacute;n de un m&amp;eacute;todo del servicio) y su respectiva versi&amp;oacute;n (pues podemos tener m&amp;aacute;s de una operaci&amp;oacute;n con distintas versiones).&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;&lt;em&gt;Dispatcher&lt;/em&gt;: una vez se tiene el mensaje y la operaci&amp;oacute;n pertinente, dispatcher invoca el m&amp;eacute;todo del servicio y se transmite dicho mensaje.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p align="justify"&gt;&lt;img height="301" width="459" src="http://i.msdn.microsoft.com/dd727511.fig02_L(ja-jp).gif" alt="" /&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Recalcar que estos tres componentes est&amp;aacute;n &lt;strong&gt;totalmente desacoplados&lt;/strong&gt; unos de otros con lo que podr&amp;iacute;amos distribuirlos de forma que obtendr&amp;iacute;amos una gran cantidad de tipolog&amp;iacute;as del sistema. Todo esto es gracias a la catalogo del servicio (&lt;strong&gt;Service Catalog&lt;/strong&gt;), tambi&amp;eacute;n conocido como repositorio de metadata o simplemente repository o repositorio, ya que contiene todos los modelos de los servicios que hospeda el runtime del MSE &amp;ndash;incorpora asistentes para la importaci&amp;oacute;n de servicios a trav&amp;eacute;s del WSDL y otros mecanismos para servicios POX o REST-. Como dije anteriormente, MSE contiene una implementaci&amp;oacute;n de WCF as&amp;iacute; que es f&amp;aacute;cil intuir que la comunicaci&amp;oacute;n entre ellos se realizan a trav&amp;eacute;s de &lt;strong&gt;canales de mensajer&amp;iacute;a&lt;/strong&gt;. El repositorio, por &amp;uacute;ltimo, utiliza una base de datos &lt;strong&gt;SQL Server &lt;/strong&gt;y la informaci&amp;oacute;n puede ser publicada en un &lt;strong&gt;registry &lt;/strong&gt;externo UDDI 2.0/3.0. &lt;/p&gt;
&lt;p align="justify"&gt;Por &amp;uacute;ltimo, MSE contiene una interfaz para la administraci&amp;oacute;n de los servicios &amp;ndash;&lt;strong&gt;MSE Model Viewer&lt;/strong&gt;- as&amp;iacute; como una herramienta de test &amp;ndash;&lt;strong&gt;MSE Universal Service Tester&lt;/strong&gt;-.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_786F9041.png"&gt;&lt;img height="175" width="244" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_6C3DF04D.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_180E443D.png"&gt;&lt;img height="244" width="244" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_43726537.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;En pr&amp;oacute;ximos posts hablar&amp;eacute; de las diferentes posibilidades que ofrece MSE desde el punto del vista del rol (developer, IT, architect,&amp;hellip;) y como familiarizarse MSE.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=166630" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Managed+Services+Engine/default.aspx">Managed Services Engine</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/SOA/default.aspx">SOA</category></item><item><title>[CatDotNet] Eduard Tomàs hablando sobre ASP.NET MVC en Igualada? Comorrr?</title><link>http://geeks.ms/blogs/jmtorres/archive/2010/01/26/catdotnet-eduard-tom-224-s-hablando-sobre-asp-net-mvc-en-igualada-comorrr.aspx</link><pubDate>Tue, 26 Jan 2010 15:11:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:165968</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=165968</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2010/01/26/catdotnet-eduard-tom-224-s-hablando-sobre-asp-net-mvc-en-igualada-comorrr.aspx#comments</comments><description>&lt;p&gt;Pues s&amp;iacute;, &lt;strong&gt;&lt;a target="_self" href="http://geeks.ms/blogs/etomas"&gt;Eduard Tom&amp;agrave;s&lt;/a&gt;&lt;/strong&gt;,&amp;nbsp;habitual y conocido de&lt;strong&gt; geeks.ms&lt;/strong&gt; y de &lt;strong&gt;&lt;a href="http://www.catdotnet.org"&gt;CatDotNet&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;as&amp;iacute; como en presentaciones &lt;strong&gt;MSDN de Microsoft Ib&amp;eacute;rica&lt;/strong&gt; , nos presenta este viernes en &lt;strong&gt;Igualada&lt;/strong&gt; las bondades de ASP.NET MVC. &lt;/p&gt;
&lt;p&gt;Si est&amp;aacute;is por la zona no dud&amp;eacute;is en asistir!!!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lugar&lt;/strong&gt;: Sala&amp;nbsp;Ig-Nova Tecnospai. Av. Barcelona n&amp;uacute;m. 105 (Igualada) a las 19h.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;iframe scrolling="no" marginwidth="0" width="425" frameborder="0" src="http://maps.google.es/maps?f=q&amp;amp;source=s_q&amp;amp;hl=es&amp;amp;geocode=&amp;amp;q=Av.+Barcelona,+105,+igualada&amp;amp;sll=40.396764,-3.713379&amp;amp;sspn=12.008722,28.45459&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=Avinguda+de+Barcelona,+105,+08700+Igualada,+Barcelona,+Catalu%C3%B1a&amp;amp;ll=41.592723,1.631641&amp;amp;spn=0.005762,0.013894&amp;amp;z=14&amp;amp;output=embed" marginheight="0" height="350"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://maps.google.es/maps?f=q&amp;amp;source=embed&amp;amp;hl=es&amp;amp;geocode=&amp;amp;q=Av.+Barcelona,+105,+igualada&amp;amp;sll=40.396764,-3.713379&amp;amp;sspn=12.008722,28.45459&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=Avinguda+de+Barcelona,+105,+08700+Igualada,+Barcelona,+Catalu%C3%B1a&amp;amp;ll=41.592723,1.631641&amp;amp;spn=0.005762,0.013894&amp;amp;z=14" style="color:#0000FF;text-align:left;"&gt;Ver mapa m&amp;aacute;s grande&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=165968" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Comunidad/default.aspx">Comunidad</category></item><item><title>Inicialización con System.Lazy&lt;T&gt; en .NET Framework 4.0</title><link>http://geeks.ms/blogs/jmtorres/archive/2010/01/21/inicializaci-243-n-con-system-lazy-lt-t-gt-en-net-framework-4-0.aspx</link><pubDate>Thu, 21 Jan 2010 12:11:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:165631</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=165631</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2010/01/21/inicializaci-243-n-con-system-lazy-lt-t-gt-en-net-framework-4-0.aspx#comments</comments><description>&lt;p align="justify"&gt;Una de las novedades de .NET Framework 4.0 es la presentaci&amp;oacute;n de la clase &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd642331(VS.100).aspx"&gt;System.Lazy&amp;lt;T&amp;gt;&lt;/a&gt;. En programaci&amp;oacute;n, una &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Lazy_initialization"&gt;inicializaci&amp;oacute;n Lazy&lt;/a&gt; (el t&amp;eacute;rmino &lt;strong&gt;Lazy&lt;/strong&gt; significa, literalmente, &lt;strong&gt;gandul&lt;/strong&gt; o &lt;strong&gt;retardado&lt;/strong&gt;) es un m&amp;eacute;todo de inicializaci&amp;oacute;n que permite que el objeto no se instancie hasta que se llame por primera vez, es decir hasta que sea utilizado. En el ciclo de vida de una aplicaci&amp;oacute;n, los m&amp;eacute;todos y propiedades de una clase que componen existen, es decir se instancian en memoria y permanecen ah&amp;iacute; desde la creaci&amp;oacute;n&amp;nbsp; hasta que la destrucci&amp;oacute;n de la clase.&lt;/p&gt;
&lt;p align="justify"&gt;Una clase &lt;strong&gt;Customer&lt;/strong&gt; d&amp;oacute;nde el constructor carga una lista gen&amp;eacute;rica de &lt;strong&gt;Order&lt;/strong&gt; &amp;ndash;inicializa un objecto &lt;strong&gt;List&amp;lt;Order&amp;gt;&lt;/strong&gt; &amp;ndash; &amp;eacute;ste permanece en memoria pese a que incluso es posible que ni siquiera lo necesitemos. Hasta &lt;strong&gt;.NET Framework 4.0&lt;/strong&gt; la implantaci&amp;oacute;n de este tipo de inicializaciones se realiza mediante programaci&amp;oacute;n retrasando la inicializaci&amp;oacute;n de un objeto hasta que realmente se necesitara; en el caso de la clase &lt;strong&gt;Customer&lt;/strong&gt;, por ejemplo, instanciar&amp;iacute;amos el objeto&lt;strong&gt; List&amp;lt;Order&amp;gt;&lt;/strong&gt; en un m&amp;eacute;todo &lt;strong&gt;LoadOrders()&lt;/strong&gt; o &lt;strong&gt;GetOrders(),&lt;/strong&gt; por ejemplo. En el caso de &lt;strong&gt;multithreading&lt;/strong&gt;, la cosa se complica a&amp;uacute;n m&amp;aacute;s y a veces el planteamiento o dise&amp;ntilde;o de la clase no es suficiente.&lt;/p&gt;
&lt;p align="justify"&gt;Como novedad esta caracter&amp;iacute;stica ya forma parte en .NET Framework 4.0 a trav&amp;eacute;s de &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd642331(VS.100).aspx"&gt;System.Lazy&amp;lt;T&amp;gt;&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt; y aporta soporte &lt;strong&gt;Thread-Safety&lt;/strong&gt; y una pol&amp;iacute;tica de propagaci&amp;oacute;n de excepciones consistente para dar soporte al &lt;strong&gt;multithreading.&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;A partir de ahora nos olvidaremos de las t&amp;eacute;cnicas anteriores y utilizaremos &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd642331(VS.100).aspx"&gt;System.Lazy&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/strong&gt; para inicializaciones perezosas. Veamos un ejemplo: &lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Main(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     Lazy&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt; cadena = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Lazy&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color:#0000ff;"&gt;delegate&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;                                                 {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;                                                     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#006080;"&gt;&amp;quot;Ejemplo Lazy&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;                                                 });&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;isValueCreated: {0}&amp;quot;&lt;/span&gt;, cadena.IsValueCreated));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//podemos ejecutar cualquier acci&amp;oacute;n y no se ejecutar&amp;aacute; hasta...&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;Value calling: {0}&amp;quot;&lt;/span&gt;, cadena.Value));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//... que no llamemos al valor&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;isValueCreated: {0}&amp;quot;&lt;/span&gt;, cadena.IsValueCreated));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;     Console.Read();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;El constructor de &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd642331(VS.100).aspx"&gt;System.Lazy&amp;lt;T&amp;gt;&lt;/a&gt; soporta las siguientes sobrecargas:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Lazy();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Lazy(Func&amp;lt;T&amp;gt; valueFactory);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Lazy(&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; isThreadSafe);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Lazy(Func&amp;lt;T&amp;gt; valueFactory, &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; isThreadSafe);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;El par&amp;aacute;metro &lt;strong&gt;isThreadSafe&lt;/strong&gt; se establecer&amp;aacute; a true cuando necesitemos utilizar el objeto de forma concurrente por multiples threads, con valor predeterminado a false.&lt;/p&gt;
&lt;p&gt;El par&amp;aacute;metro &lt;strong&gt;valueFactory&lt;/strong&gt; es un delegado del tipo&lt;strong&gt; Func&amp;lt;T&amp;gt;&lt;/strong&gt; y ser&amp;aacute; el encargado de inicializar el valor del objeto &lt;strong&gt;Lazy&lt;/strong&gt;. Un ejemplo, adem&amp;aacute;s del expuesto en el ejemplo anterior, podr&amp;iacute;a ser:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Order {}&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; OrderDb&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; List&amp;lt;Order&amp;gt; GetOrdersBy(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; idCustomer)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;Order&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;                    {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;                        &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Order(),&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;                        &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Order(),&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;                        &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Order()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;                    };&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Customer&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Lazy&amp;lt;List&amp;lt;Order&amp;gt;&amp;gt; _orders;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Customer(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; id)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt;     {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;//inicializaci&amp;oacute;n Lazy&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt;         _orders =&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Lazy&amp;lt;List&amp;lt;Order&amp;gt;&amp;gt;(() =&amp;gt;  OrderDb.GetOrdersBy(id) );&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  24:&lt;/span&gt;     }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  25:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Con el siguiente programa de consola:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Program&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Main(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         Customer customer = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Customer(&lt;span style="color:#006080;"&gt;&amp;quot;10&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;//pese a que customer se ha incializado la Lista de Orders a&amp;uacute;n no:&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;isValueCreated: {0}&amp;quot;&lt;/span&gt;, customer._orders.IsValueCreated));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;//Solicitamos las ordenes&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;         Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;calling Value.Count: {0}&amp;quot;&lt;/span&gt;, customer._orders.Value.Count));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;//Ahora si se han instanciado&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;         Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;isValueCreated: {0}&amp;quot;&lt;/span&gt;, customer._orders.IsValueCreated));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;         Console.Read();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;     }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Cuya salida ser&amp;aacute;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_2534F580.png"&gt;&lt;img height="152" width="407" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_49E60CF7.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Es importante tener en mente este tipo de inicializaciones sobre todo en procesos de mucho consumo de recursos, por ejemplo objetos de la capa de datos que almacenan datos binarios &amp;ndash; imagen, video,-&amp;nbsp; y que muchas veces no necesitamos que consuman memoria si no se van a utilizar. Como este ejemplo, muchos m&amp;aacute;s&amp;hellip;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=165631" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Visual+C_2300_/default.aspx">Visual C#</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category></item><item><title>Ejemplo de Sync entre Oracle y SQL Server Compact</title><link>http://geeks.ms/blogs/jmtorres/archive/2010/01/05/ejemplo-de-sync-entre-oracle-y-sql-server-compact.aspx</link><pubDate>Tue, 05 Jan 2010 11:51:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:164355</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=164355</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2010/01/05/ejemplo-de-sync-entre-oracle-y-sql-server-compact.aspx#comments</comments><description>&lt;p&gt;Publicado en &lt;a target="_blank" title="MSDN Code Gallery" href="http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sync&amp;amp;ReleaseId=3761"&gt;&lt;b&gt;MSDN Code Gallery &lt;/b&gt;&lt;/a&gt;nuevo ejemplo de entorno de sincronizaci&amp;oacute;n para or&amp;iacute;genes de datos &lt;b&gt;Oracle 10g &lt;/b&gt;o superior con SQL Server Compact en &lt;b&gt;modo peer-to-peer&lt;/b&gt;. Lo m&amp;aacute;s destacado de este ejemplo es el modo de creaci&amp;oacute;n &lt;b&gt;del proveedor espec&amp;iacute;fico para Oracle &lt;/b&gt;a trav&amp;eacute;s de la clase &lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/microsoft.synchronization.data.dbsyncprovider.aspx"&gt;&lt;b&gt;DbSyncProvide&lt;/b&gt;&lt;/a&gt;. Peses a que el ejemplo utiliza SQL Server Compact, podemos hace uso tanto del nuevo proveedor espec&amp;iacute;fico para &lt;a href="http://blogs.msdn.com/sync/archive/2009/10/19/sync-framework-2-0-available-for-download.aspx"&gt;&lt;b&gt;SQL Server Express&lt;/b&gt;&lt;/a&gt;, incluido en MS Sync Framework 2.0, como SQL Server.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=164355" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Sync+Services+for+ADO.NET/default.aspx">Sync Services for ADO.NET</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/SQL+Server+Compact/default.aspx">SQL Server Compact</category></item><item><title>Al pan Enum y al vino Flags</title><link>http://geeks.ms/blogs/jmtorres/archive/2009/11/16/al-pan-enum-y-al-vino-flag.aspx</link><pubDate>Sun, 15 Nov 2009 23:06:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:160560</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=160560</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2009/11/16/al-pan-enum-y-al-vino-flag.aspx#comments</comments><description>&lt;p align="justify"&gt;Mientras preparaba el material para el WebCast que di para el dotNet Club de la U. Lleida, me tope con enumeradores como marcadores de bit y quiero comentar lo útil que pueden llegar a ser.&lt;/p&gt;  &lt;p align="justify"&gt;Básicamente tenemos dos opciones o características que determinan el comportamiento de este tipo de dato constante y se basa en el uso o no del atributo &lt;strong&gt;FlagAttribute&lt;/strong&gt; sobre el &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/es-es/library/cc138362.aspx" target="_blank"&gt;Enum&lt;/a&gt;&lt;/strong&gt;. Es importante entender que dicho atributo será especialmente útil cuando necesitemos que los valores del enumerador se combinen a través de operaciones lógicas o bit a bit del tipo AND, OR, NOT y XOR. &lt;/p&gt;  &lt;p align="justify"&gt;Un ejemplo de típica declaración de enumeradores seria:&lt;/p&gt;  &lt;div&gt;   &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;enum&lt;/span&gt; TypicalEnums&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     Option1, &lt;span style="color:#008000;"&gt;// = 0x00&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     Option2, &lt;span style="color:#008000;"&gt;// = 0x01&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     Option3, &lt;span style="color:#008000;"&gt;// = 0x02&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     Option4, &lt;span style="color:#008000;"&gt;// = 0x03&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     Option5, &lt;span style="color:#008000;"&gt;// = 0x04&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     Option6  &lt;span style="color:#008000;"&gt;// = 0x05&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p align="justify"&gt;En este ejemplo, damos por supuesto que una variable de tipo TypicalEnums únicamente podrá contener un único valor, cuyo tipo subyacente es por defecto es &lt;strong&gt;int&lt;/strong&gt;. Sin embargo el siguiente enumerador:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; [Flags]&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;enum&lt;/span&gt; FlagEnums&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     Option0 = 0x00,     &lt;span style="color:#008000;"&gt;// 0 = 0x00&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     Option1 = 0x01,     &lt;span style="color:#008000;"&gt;// 1 = 0x01&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     Option2 = 0x01 &amp;lt;&amp;lt; 1,&lt;span style="color:#008000;"&gt;// 2 = 0x02&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     Option3 = 0x01 &amp;lt;&amp;lt; 2,&lt;span style="color:#008000;"&gt;// 4 = 0x04&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     Option4 = 0x01 &amp;lt;&amp;lt; 3,&lt;span style="color:#008000;"&gt;// 8 = 0x08&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     Option5 = 0x01 &amp;lt;&amp;lt; 4,&lt;span style="color:#008000;"&gt;//16 = 0x16&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     Option6 = 0x01 &amp;lt;&amp;lt; 5 &lt;span style="color:#008000;"&gt;//32 = 0x32&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p align="justify"&gt;Nos permitirá tener varios valores dentro de una misma variable del tipo &lt;em&gt;FlagsEnums&lt;/em&gt;.&lt;/p&gt;

&lt;p align="justify"&gt;En el primer caso podremos hacer por ejemplo:&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;Cliente.Tipo = TypicalEnums.Option1 | TypicalEnums.Option2&lt;/pre&gt;
&lt;/div&gt;

&lt;p align="justify"&gt;Pero no tendrá ninguna repercusión pues Cliente.Tipo almacenará el valor 1 (TypicalEnums.Option1), pero sin embargo la siguiente sentencia:&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;Cliente.Caracteristicas = FlagEnums.Option2 | FlagEnums.Option5,&lt;/pre&gt;
&lt;/div&gt;

&lt;p align="justify"&gt;Si que almacenará ambas opciones.&lt;/p&gt;

&lt;p align="justify"&gt;Fijaros que en la declaración de FlagsEnum hemos indicado explícitamente el valor de las opciones de tres formas, desplazando un bits a la izquierda en base al valor 0x01, con valores numéricos decimales y valores hexadecimales. Todos ellos tendrán la siguiente correspondencia en binario:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;div align="justify"&gt;Option0 = 0000000&lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;div align="justify"&gt;Option1 = 0000001&lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;div align="justify"&gt;Option2 = 0000010&lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;div align="justify"&gt;Option3 = 0000100&lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;div align="justify"&gt;Option4 = 0001000&lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;div align="justify"&gt;Option5 = 0010000&lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;div align="justify"&gt;Option6 = 0100000&lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p align="justify"&gt;A partir de aquí todo lógica. Si en el anterior ejemplo asignamos FlagsEnum.Option2 y FlagsEnum.Option5 al campo Cliente.Característica el valor que almacenará será 7 es decir 2 + 5, y por tanto utilizaremos el operador lógico &lt;strong&gt;OR&lt;/strong&gt;:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; Cliente cliente = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;                       {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;                           IdProvincia = 1,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;                           Tipo = TypicalEnums.Option1, &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;strong&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;                           Caracteristicas = FlagEnums.Option2 | FlagEnums.Option5,&lt;/strong&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;                           &lt;span style="color:#008000;"&gt;//Caracteristicas = 00000010        | 00001000           = 00001010&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;                           Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente 1&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;                           VolumenNegocio = 10.0m&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;                       };&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p align="justify"&gt;Ahora bien,¿cómo podemos sacar el máximo provecho de los enumeradores con marcadores de bit? pues aplicando lógica, es decir, si queremos saber si un marcador se ha establecido utilizaremos &lt;strong&gt;AND&lt;/strong&gt;:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; ((cliente.Caracteristicas &amp;amp; FlagEnums.Option5) == FlagEnums.Option5)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;// (00001010 &amp;amp; 00001000) = 00001000 &lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//             00001000  = 00001000 =&amp;gt; true&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;{0}: \nFlagEnum \t[{1}] \nOption 5 \t[{2}] \nHence: \t\t[{3}]&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;                       cliente.Nombre,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;                       Convert.ToString(((&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;)cliente.Caracteristicas), 2),&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;                       Convert.ToString(((&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;)FlagEnums.Option5), 2),&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;                       Convert.ToString((&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;)(cliente.Caracteristicas &amp;amp; FlagEnums.Option5), 2));&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Como puedes ver, en la condición de la sentencia if estamos comprobando la existencia de FlagsEnums.Option5 de forma lógica. Realizamos la operación lógica a nivel de bit de &lt;strong&gt;Cliente.Característica AND FlagsEnums.Option5&lt;/strong&gt; e igualamos al valor de FlagsEnums.Option5. Por otro lado:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; ((cliente.Caracteristicas &amp;amp; FlagEnums.Option4) != FlagEnums.Option4)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;// (00001010 &amp;amp; 00000100) = 00000100 &lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//             000000000 = 00000100 =&amp;gt; false&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;Cliente with \nFlagEnum \t[{0}] \nhasn&amp;#39;t Option 4 \t[{1}]&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         Convert.ToString(((&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;)cliente.Caracteristicas), 2),&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;         Convert.ToString(((&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;)FlagEnums.Option4), 2));&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Si queremos comprobar FlagsEnums.Option4, el cual no está, el razonamiento será el mismo (fíjate en las líneas 2 y 3). Tras ejecutar ambos Snippets con la clase Cliente definida como:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Cliente&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; IdProvincia { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; TypicalEnums Tipo { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; FlagEnums Caracteristicas { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Nombre { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;decimal&lt;/span&gt; VolumenNegocio { get; set; }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; ToString()&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;Cliente: {0} - Provincia:{1} - \nTipo: {2} - Caract:{3} - Vol.:{4}e\n&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;                              Nombre, IdProvincia, (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;) Tipo,Caracteristicas, VolumenNegocio);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Obtendremos:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_54675A99.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="163" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_3809F2AC.png" width="306" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Por último, si pretendemos quitar un marcador ya establecido utilizaremos un XOR de forma que: &lt;/p&gt;

&lt;div&gt;
  &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;cliente.Caracteristicas = cliente.Caracteristicas ^ FlagEnums.Option5;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Desasignaría &lt;strong&gt;FlagsEnums.Option5&lt;/strong&gt; al campo Cliente.Características.&lt;/p&gt;

&lt;h2&gt;Uso de métodos extensores&lt;/h2&gt;

&lt;p&gt;Soy un auténtico fan de este tipo de característica y no puedo dejar pasar ni un solo enumerador de marcadores de bit sin extender el típico método &lt;em&gt;HasFlag o como_queráis_llamarlo&lt;/em&gt; a la clase que los utiliza, siempre y cuando sea posible, y por tanto una forma de extender la clase Cliente para la comprobación de marcadores seria la que he utilizado para confeccionar el ejemplo de este post, es decir:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; ClienteExtensions&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; HasFlagVerbose(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; Program.Cliente cliente, Program.FlagEnums flag)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;Checking {2} for {0}: \nCaracteristica \t[{1}] \n{2} \t[{3}] \nHence \t\t[{4}]\n&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;                              cliente.Nombre,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;                              Convert.ToString(((&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;)cliente.Caracteristicas), 2).PadLeft(8, &lt;span style="color:#006080;"&gt;&amp;#39;0&amp;#39;&lt;/span&gt;),&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;                              flag,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;                              Convert.ToString(((&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;)flag), 2).PadLeft(8, &lt;span style="color:#006080;"&gt;&amp;#39;0&amp;#39;&lt;/span&gt;),&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;                              Convert.ToString((&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;)(cliente.Caracteristicas &amp;amp; flag), 2).PadLeft(8, &lt;span style="color:#006080;"&gt;&amp;#39;0&amp;#39;&lt;/span&gt;));&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; HasFlag(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; Program.Cliente cliente, Program.FlagEnums flag)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; (cliente.Caracteristicas &amp;amp; flag) == flag;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Con lo que el cuerpo del programa que he ejecutado para mostrar los resultados seria:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Program&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;         &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Main(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;             Cliente cliente = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;                                   {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;                                       IdProvincia = 1,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;                                       Tipo = TypicalEnums.Option1, &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;                                       Caracteristicas = FlagEnums.Option2 | FlagEnums.Option5,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;                                       &lt;span style="color:#008000;"&gt;//Caracteristicas = 00000010        | 00001000           = 00001010&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;                                       Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente 1&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;                                       VolumenNegocio = 10.0m&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;                                   };&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;             &lt;span style="color:#008000;"&gt;//comprobamos q realmente tiene FlagEnums.Option5 &lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; ((cliente.HasFlag(FlagEnums.Option5)))&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;                 Console.WriteLine(cliente.HasFlagVerbose(FlagEnums.Option5));&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt;             &lt;span style="color:#008000;"&gt;//comprobamos q realmente NO tiene FlagEnums.Option4&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!(cliente.HasFlag(FlagEnums.Option4)))&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt;                 Console.WriteLine(cliente.HasFlagVerbose(FlagEnums.Option4));&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  24:&lt;/span&gt;             &lt;span style="color:#008000;"&gt;//quitamos FlagsEnums.Option5&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  25:&lt;/span&gt;             cliente.Caracteristicas = cliente.Caracteristicas ^ FlagEnums.Option5;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  26:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  27:&lt;/span&gt;             &lt;span style="color:#008000;"&gt;//comprobamos q hemos quitado FlagEnums.Option5&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  28:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!(cliente.HasFlag(FlagEnums.Option5)))&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  29:&lt;/span&gt;                 Console.WriteLine(cliente.HasFlagVerbose(FlagEnums.Option5));&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  30:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  31:&lt;/span&gt;             Console.ReadKey();&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  32:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  33:&lt;/span&gt;     }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;A partir de aquí… posibilidades infinitas ;-))&lt;/p&gt;

&lt;p&gt;Más info:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;div align="justify"&gt;&lt;a title="http://msdn.microsoft.com/es-es/library/cc138362.aspx" href="http://msdn.microsoft.com/es-es/library/cc138362.aspx"&gt;http://msdn.microsoft.com/es-es/library/cc138362.aspx&lt;/a&gt;&lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=160560" width="1" height="1"&gt;</description></item><item><title>Actualizando HTC Dream de Movistar a Cupcake (Android 1.5)</title><link>http://geeks.ms/blogs/jmtorres/archive/2009/11/14/actualizando_2D00_htc_2D00_dream_2D00_de_2D00_movistar_2D00_a_2D00_cupcake_2D00_android_2D00_1_2D00_5.aspx</link><pubDate>Sat, 14 Nov 2009 21:58:27 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:160507</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=160507</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2009/11/14/actualizando_2D00_htc_2D00_dream_2D00_de_2D00_movistar_2D00_a_2D00_cupcake_2D00_android_2D00_1_2D00_5.aspx#comments</comments><description>&lt;p align="justify"&gt;Pues ejerciendo el falso y sobrevalorado “derecho” de Canje de Puntos después de contribuir durante más dos años a aumentar las arcas de Telefónica para que, cada vez más vayan subsituyendo mano de obra en los departamentos de atención telefónica por maquinaria automática absurda, adquirí el viernes, y no voy a entrar a explicaros todos los pasos que he realizado para conseguirlo, pues empezaría a blasfemar, un HTC Dream tras pagar 239pavos e hipotecar mi futuro dos años con Movistar. &lt;/p&gt;  &lt;p align="justify"&gt;La decisión de compra se debió a que mi flamante HTC HD con Windows Mobile tuvo un pequeño percance. Mi relación con el soporte técnico de HTC no lo detallaré pues convertiría este post en un manifiesto anti-multinacionales tecnológicas.&lt;/p&gt;  &lt;p align="justify"&gt;La cuestión es que tras empezar a utilizar el HTC Dream de Movistar y familiarizarme un poco con Android (gracias al&amp;#160; Centro de Soporte Telefónico del Maestro Alejandro Mezcua ;-) ) me cercioré de que la versión de Android que suministra este terminal, además de estar basado en Android 1.1, está algo capada. Por ejemplo, no puedo sincronizar contactos. Manda huevos. Buscando, encontré en &lt;a title="http://and.roid.es" href="http://and.roid.es"&gt;http://and.roid.es&lt;/a&gt; un &lt;a href="http://and.roid.es/foro/viewtopic.php?f=13&amp;amp;t=170" target="_blank"&gt;post de un tal Rick&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt; el cual explicaba paso por paso la actualización del HTC Dream de Movistar a Cupcake con lo que me puse manos a la obra.&lt;/p&gt;  &lt;p align="justify"&gt;Escribo este post para animar a los que no están muy seguros de si actualizar o no. En comparación, tras instalar Android 1.5, encuentro, además de la posibilidad de sincronización de Agenda, Contactos y Correo (menos mal), muchas otras aplicaciones que no vienen de serie, como por ejemplo uso de la Videocámara, además de algún Widget que otro. Además en el propio proceso de actualización se actualiza la radio (firmware), lo cual sí he notado, especialmente en cobertura.&lt;/p&gt;  &lt;h2&gt;Actualización&lt;/h2&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;a href="http://androidapps.es/2009/05/21/instalar-android-15-cupcake-en-tu-htc-dream-de-telefonica/" target="_blank"&gt;Seguid los pasos tal y como indica Rick en su post.&lt;/a&gt;&lt;/strong&gt; Únicamente hay una error en la combinación de teclas que enumera para reiniciar el dispositivo en Fastboot, que es Home+Back en lugar de alt + back. Aseguraros de descargaros todos los componentes antes de todo. La guía hace referencia al SDK del Android 1.5 r1 y la última es la r3, pero es trivial. &lt;/p&gt;  &lt;p align="justify"&gt;Recomendable descargarse el &lt;strong&gt;FastBoot&lt;/strong&gt; desde la Web de HTC e instalarla en un directorio de la raíz, al poder ser dentro de un subdirectorio del SDK pues se tiene que ejecutar desde la línea de comandos.&amp;#160; Tras reiniciar el dispositivo en modo FastBoot no te resultará muy difícil seguir las instrucciones pues además de estar en castellano las opciones son claras. Si no quieres reiniciar el dispositivo en varias ocasiones y debido a que tienes que utilizar la SD para copiar los archivos update.zip (del cupcake y del firmware) no estaría de más tener un lector de tarjetas microSD he ir copiando y/o renombrando archivos.&lt;/p&gt;  &lt;p align="justify"&gt;No olvidéis actualizar el firmware. Yo me equivoqué y descargué y renombre un archivo zip de recursos el cual tenia la radio, con lo que tras ejecutarlo con Fastboot me dio un error; únicamente hay que comprimir en update.zip la carpeta radio. &lt;/p&gt;  &lt;p align="justify"&gt;Tras la actualización del cupcake y de la radio, no tuve que hacer nada más si utilizas la &lt;a href="http://androidapps.es/2009/05/21/instalar-android-15-cupcake-en-tu-htc-dream-de-telefonica/" target="_blank"&gt;ROM de Ricky&lt;/a&gt;. El teclado funcionan perfectamente y la conexión APN de movistar viene configurada. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=160507" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Android/default.aspx">Android</category></item><item><title>SQL Server –&gt; Sync &lt;- SQL Azure = Proyecto Huron muestra sus cartas!</title><link>http://geeks.ms/blogs/jmtorres/archive/2009/11/04/sql-server-gt-sync-lt-sql-azure-proyecto-huron-muestra-sus-cartas.aspx</link><pubDate>Wed, 04 Nov 2009 22:19:55 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:159933</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=159933</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2009/11/04/sql-server-gt-sync-lt-sql-azure-proyecto-huron-muestra-sus-cartas.aspx#comments</comments><description>&lt;p&gt; Ayer se &lt;a href="http://blogs.msdn.com/sync/archive/2009/11/04/sql-pass-synchronization-to-sql-azure.aspx" target="_blank"&gt;presentó&lt;/a&gt; en el &lt;strong&gt;SQL Pass Conference&lt;/strong&gt;, en Seattle, las primeras imágenes del proyecto “&lt;strong&gt;&lt;a href="http://geeks.ms/blogs/jmtorres/archive/2009/05/05/proyecto-huron-montacargas-hacia-la-nube.aspx" target="_blank"&gt;Huron&lt;/a&gt;&lt;/strong&gt;” el cual permitirá la sincronización de orígenes de datos &lt;strong&gt;SQL Server&lt;/strong&gt; con &lt;strong&gt;SQL Azure&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;En breve, Microsoft pondrá a disposición del público la primera CTP así como un &lt;strong&gt;add-in para SQL Server Management Studio&lt;/strong&gt;. La idea es proporcionar un &lt;strong&gt;Wizard&lt;/strong&gt; para la creación de un contexto de sincronización para que posteriormente &lt;strong&gt;SQL Agent&lt;/strong&gt; sea el encargado de ejecutar las sincronización de ambos proveedores.&lt;/p&gt;  &lt;p&gt;Probablemente el próximo PDC hayan más noticias.&lt;/p&gt;  &lt;p&gt;Aquí van una imágenes.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://blogs.msdn.com/photos/sync/images/9917425/343x375.aspx" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://blogs.msdn.com/photos/sync/images/9917427/500x343.aspx" alt="" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img src="http://blogs.msdn.com/photos/sync/images/9917429/500x343.aspx" alt="" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img src="http://blogs.msdn.com/photos/sync/images/9917428/365x375.aspx" alt="" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=159933" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Microsoft+Sync+Framework/default.aspx">Microsoft Sync Framework</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Huron/default.aspx">Huron</category></item><item><title>GroupBy con LINQ to Objects</title><link>http://geeks.ms/blogs/jmtorres/archive/2009/10/30/groupby-con-linq-to-objects.aspx</link><pubDate>Thu, 29 Oct 2009 23:05:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:159217</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=159217</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2009/10/30/groupby-con-linq-to-objects.aspx#comments</comments><description>&lt;p&gt;El agrupamiento de un conjunto de datos mediante LINQ, ya sea mediante la extensi&amp;oacute;n de &lt;b&gt;&lt;a href="http://msdn.microsoft.com/es-es/library/9eekhta0%28VS.80%29.aspx" target="_blank"&gt;IEnumerable&lt;/a&gt;&lt;/b&gt; o &lt;a href="http://msdn.microsoft.com/es-es/library/9eekhta0%28VS.80%29.aspx" target="_blank"&gt;IQueryable&lt;/a&gt;, tiene una serie de caracter&amp;iacute;sticas las cuales me gustar&amp;iacute;a comentar aqu&amp;iacute;.&lt;/p&gt;
&lt;p&gt;Para explicar un poco las posibilidades del agrupamiento mediante la extensi&amp;oacute;n &lt;b&gt;GroupBy&lt;/b&gt; voy a exponer un ejemplo con LINQ to Objects y para ello, primero, definiremos una clase sencilla que represente la entidad &lt;i&gt;Cliente&lt;/i&gt;. &lt;/p&gt;
&lt;div&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Cliente&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; IdProvincia { get; set; }&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; Tipo { get; set; }&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Nombre { get; set; }&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;decimal&lt;/span&gt; VolumenNegocio { get; set; }&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; ToString()&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;\t\t-&amp;gt; Cliente: {0} - Provincia:{1} - Tipo: {2} - Vol.:{3}e\n&amp;quot;&lt;/span&gt;,&lt;br /&gt;                                     Nombre, IdProvincia, Tipo,VolumenNegocio);&lt;br /&gt;            }&lt;br /&gt;        }&lt;/pre&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;Como se puede observar no es m&amp;aacute;s que una clase con 4 propiedades impl&amp;iacute;citas y el m&amp;eacute;todo ToString() sobrescrito para poder mostrar por la consola la informaci&amp;oacute;n de un objeto iterado del tipo &lt;i&gt;Cliente&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Vamos a generar una lista de clientes mediante una lista gen&amp;eacute;rica de la siguiente forma:&lt;/p&gt;
&lt;div&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#008000;"&gt;//inicializamos lista de clientes&lt;/span&gt;&lt;br /&gt;var list = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;Cliente&amp;gt;&lt;br /&gt;               {&lt;br /&gt;                   &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente {IdProvincia = 1, Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente1&amp;quot;&lt;/span&gt;, Tipo = 10, VolumenNegocio = 100.00m},&lt;br /&gt;                   &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente {IdProvincia = 2, Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente2&amp;quot;&lt;/span&gt;, Tipo = 20, VolumenNegocio = 20.00m},&lt;br /&gt;                   &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente {IdProvincia = 3, Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente3&amp;quot;&lt;/span&gt;, Tipo = 20, VolumenNegocio = 230.00m},&lt;br /&gt;                   &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente {IdProvincia = 3, Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente4&amp;quot;&lt;/span&gt;, Tipo = 20, VolumenNegocio = 500.00m},&lt;br /&gt;                   &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente {IdProvincia = 1, Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente5&amp;quot;&lt;/span&gt;, Tipo = 30, VolumenNegocio = 10.00m},&lt;br /&gt;                   &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente {IdProvincia = 2, Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente6&amp;quot;&lt;/span&gt;, Tipo = 10, VolumenNegocio = 750.00m},&lt;br /&gt;                   &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente {IdProvincia = 1, Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente7&amp;quot;&lt;/span&gt;, Tipo = 20, VolumenNegocio = 340.00m},&lt;br /&gt;                   &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente {IdProvincia = 1, Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente8&amp;quot;&lt;/span&gt;, Tipo = 20, VolumenNegocio = 170.00m}&lt;br /&gt;               };&lt;/pre&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;La intenci&amp;oacute;n es agrupar esta lista de clientes por la provincia, a la cual pertenecen, a trav&amp;eacute;s de la propiedad &lt;i&gt;IdProvincia&lt;/i&gt; del tipo &lt;b&gt;int&lt;/b&gt;. Para ello, en primer lugar, echaremos un vistazo a la extensi&amp;oacute;n &lt;b&gt;GroupBy&lt;/b&gt; que incorpora la clase &lt;b&gt;System.Linq.Enumerable&lt;/b&gt;. Dicha extensi&amp;oacute;n presenta las siguientes sobrecargas:&lt;/p&gt;
&lt;div&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;IGrouping&amp;lt;TKey, TSource&amp;gt;&amp;gt; GroupBy&amp;lt;TSource, TKey&amp;gt;&lt;br /&gt;    (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; IEnumerable&amp;lt;TSource&amp;gt; source, Func&amp;lt;TSource, TKey&amp;gt; keySelector);&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;TResult&amp;gt; GroupBy&amp;lt;TSource, TKey, TResult&amp;gt;&lt;br /&gt;    (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; IEnumerable&amp;lt;TSource&amp;gt; source, Func&amp;lt;TSource, TKey&amp;gt; keySelector,&lt;br /&gt;     Func&amp;lt;TKey, IEnumerable&amp;lt;TSource&amp;gt;, TResult&amp;gt; resultSelector);&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;IGrouping&amp;lt;TKey, TElement&amp;gt;&amp;gt; GroupBy&amp;lt;TSource, TKey, TElement&amp;gt;&lt;br /&gt;    (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; IEnumerable&amp;lt;TSource&amp;gt; source, Func&amp;lt;TSource, TKey&amp;gt; keySelector,&lt;br /&gt;     Func&amp;lt;TSource, TElement&amp;gt; elementSelector);&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;IGrouping&amp;lt;TKey, TSource&amp;gt;&amp;gt; GroupBy&amp;lt;TSource, TKey&amp;gt;&lt;br /&gt;    (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; IEnumerable&amp;lt;TSource&amp;gt; source, Func&amp;lt;TSource, TKey&amp;gt; keySelector,&lt;br /&gt;     IEqualityComparer&amp;lt;TKey&amp;gt; comparer);&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;TResult&amp;gt; GroupBy&amp;lt;TSource, TKey, TResult&amp;gt;&lt;br /&gt;    (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; IEnumerable&amp;lt;TSource&amp;gt; source, Func&amp;lt;TSource, TKey&amp;gt; keySelector,&lt;br /&gt;     Func&amp;lt;TKey, IEnumerable&amp;lt;TSource&amp;gt;, TResult&amp;gt; resultSelector,&lt;br /&gt;     IEqualityComparer&amp;lt;TKey&amp;gt; comparer);&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;TResult&amp;gt; GroupBy&amp;lt;TSource, TKey, TElement, TResult&amp;gt;&lt;br /&gt;    (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; IEnumerable&amp;lt;TSource&amp;gt; source, Func&amp;lt;TSource, TKey&amp;gt; keySelector,&lt;br /&gt;     Func&amp;lt;TSource, TElement&amp;gt; elementSelector,&lt;br /&gt;     Func&amp;lt;TKey, IEnumerable&amp;lt;TElement&amp;gt;, TResult&amp;gt; resultSelector);&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;IGrouping&amp;lt;TKey, TElement&amp;gt;&amp;gt; GroupBy&amp;lt;TSource, TKey, TElement&amp;gt;&lt;br /&gt;    (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; IEnumerable&amp;lt;TSource&amp;gt; source, Func&amp;lt;TSource, TKey&amp;gt; keySelector,&lt;br /&gt;     Func&amp;lt;TSource, TElement&amp;gt; elementSelector,&lt;br /&gt;     IEqualityComparer&amp;lt;TKey&amp;gt; comparer);&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;TResult&amp;gt; GroupBy&amp;lt;TSource, TKey, TElement, TResult&amp;gt;&lt;br /&gt;    (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; IEnumerable&amp;lt;TSource&amp;gt; source, Func&amp;lt;TSource, TKey&amp;gt; keySelector,&lt;br /&gt;     Func&amp;lt;TSource, TElement&amp;gt; elementSelector,&lt;br /&gt;     Func&amp;lt;TKey, IEnumerable&amp;lt;TElement&amp;gt;, TResult&amp;gt; resultSelector,&lt;br /&gt;     IEqualityComparer&amp;lt;TKey&amp;gt; comparer);&lt;/pre&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;En todas ellas existen un denominador com&amp;uacute;n, el par&amp;aacute;metro &lt;b&gt;keySelector&lt;/b&gt; del tipo &lt;b&gt;&lt;i&gt;Func&amp;lt;TSource, TElement&amp;gt;&lt;/i&gt;&lt;/b&gt; que determina el valor de tipo TKey por el cual se agrupara la lista. Por otro lado GroupBy puede retornar un objeto del tipo &lt;b&gt;IEnumerable&amp;lt;TSource&amp;gt;&lt;/b&gt; si se especifica el par&amp;aacute;metro &lt;b&gt;resultSelector&lt;/b&gt; (tipo &lt;b&gt;Func&amp;lt;TSource, TKey&amp;gt;&lt;/b&gt;) o bien un objeto del tipo &lt;b&gt;IEnumerable&amp;lt;IGroupingKey&amp;lt;TKey, TElement&amp;gt;&amp;gt;&lt;/b&gt; para todos los dem&amp;aacute;s. Vamos&amp;nbsp; centrarnos en &amp;eacute;ste &amp;uacute;ltimo por ahora.&lt;/p&gt;
&lt;h2&gt;Manejando resultados &lt;b&gt;IEnumerable&amp;lt;IGroupingKey&amp;lt;TKey, TElement&amp;gt;&amp;gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p align="justify"&gt;Si el agrupamiento se realiza sobre una lista de elementos iterativos o &amp;ldquo;&lt;i&gt;IEnumerables&lt;/i&gt;&amp;rdquo; es obvio que el resultado, otra lista de subelementos agrupados por una clave del tipo TKey, sea otra lista de elementos iterativos de ah&amp;iacute; que el tipo resultante sea IEnumerable&amp;lt;T&amp;gt;. La singularidad esta en el tipo gen&amp;eacute;rico en la iteraci&amp;oacute;n del valor retornado el cual es del tipo &lt;b&gt;IGroupingKey&amp;lt;TKey,TElement&amp;gt;&lt;/b&gt; y vamos a ver el porqu&amp;eacute;. Lo que LINQ har&amp;aacute; ante un GroupBy es realizar un recorrido completo por la lista y seleccionar&amp;aacute; todos los elementos del tipo TElement de una misma clave (TKey). Por consiguiente el resultado ser&amp;aacute; una lista del agrupamiento de elementos definidos por la interfaz IGroupingKey&amp;lt;TKey,TElement&amp;gt;, en la que almacenar&amp;aacute; la clave y el conjunto de elemento agrupados por el valor de dicha clave, respetivamente en cada tipo gen&amp;eacute;rico. Veamos un ejemplo.&lt;/p&gt;
&lt;p align="justify"&gt;En nuestra lista de clientes vamos a agrupar los elementos por el identificador de provincia definido por &lt;i&gt;Cliente.IdProvincia&lt;/i&gt;.&amp;nbsp; Para ello definiremos una variable del tipo &lt;b&gt;IEnumerable&amp;lt;IGroupingKey&amp;lt;int,Cliente&amp;gt;&lt;/b&gt; pues el tipo de datos de agrupamiento es del tipo &lt;b&gt;int&lt;/b&gt; (propiedad &lt;i&gt;IdProvincia&lt;/i&gt;) y el elemento a agrupar es del tipo &lt;b&gt;&lt;i&gt;Cliente&lt;/i&gt;&lt;/b&gt;, por tanto:&lt;/p&gt;
&lt;div&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;IEnumerable&amp;lt;IGrouping&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;, Cliente&amp;gt;&amp;gt; groupByProv = &lt;br /&gt;    from cliente &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; list group cliente by cliente.IdProvincia;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;O lo que es lo mismo:&lt;/p&gt;
&lt;div&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;var groupByProv = list.GroupBy(cliente =&amp;gt; cliente.IdProvincia);&lt;/pre&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;Ahora la variable groupByProv posee una lista de todas las clave/agrupaciones realizadas. De hecho podemos comprobarlo de la siguiente forma:&lt;/p&gt;
&lt;div&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var cProv &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; groupByProv)&lt;span style="color:#008000;"&gt;//cProv es del tipo IEnumerable&amp;lt;IGrouping&amp;lt;int, Cliente&amp;gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    Console.WriteLine(&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;Provincia {0}, {1} clientes&amp;quot;&lt;/span&gt;, cProv.Key, cProv.Count()));&lt;br /&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Cuyo resultado por pantalla seria:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_4199D05F.png"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_5329BB2A.png" width="244" border="0" height="123" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;La variable impl&amp;iacute;cita cProv posee tanto la clave utilizada (&lt;i&gt;IdProvinicia&lt;/i&gt;) como la iteraci&amp;oacute;n de los clientes agrupados por dicha propiedad, de forma que podr&amp;iacute;a ser recorrida de igual forma.&lt;/p&gt;
&lt;div&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var cProv &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; groupByProv)&lt;span style="color:#008000;"&gt;//cProv es del tipo IEnumerable&amp;lt;IGrouping&amp;lt;int, Cliente&amp;gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    Console.WriteLine(&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;Provincia {0}, {1} clientes&amp;quot;&lt;/span&gt;, cProv.Key, cProv.Count()));&lt;br /&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt;(var cliente &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; cProv)&lt;br /&gt;        Console.WriteLine(cliente.ToString());&lt;br /&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Y el resultado:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_3CF39FD8.png"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_47644E2B.png" width="244" border="0" height="123" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;Sin embargo podr&amp;iacute;amos rizar a&amp;uacute;n m&amp;aacute;s el rizo y agrupar, de nuevo, cada una de las agrupaciones por el tipo de cliente. De esta forma tendr&amp;iacute;amos una primera agrupaci&amp;oacute;n seg&amp;uacute;n la &lt;i&gt;IdProvincia&lt;/i&gt; del cliente y por cada uno, una agrupaci&amp;oacute;n por tipo de cliente de la siguiente forma:&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var cProv &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; groupByProv)&lt;span style="color:#008000;"&gt;//cProv es del tipo IEnumerable&amp;lt;IGrouping&amp;lt;int, Cliente&amp;gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;Provincia {0} &amp;quot;&lt;/span&gt;, cProv.Key));&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     IEnumerable&amp;lt;IGrouping&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;, Cliente&amp;gt;&amp;gt; groupByTipo = cProv.GroupBy(cliente =&amp;gt; cliente.Tipo);&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var cTipo &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; groupByTipo)&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     {&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;         Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;\tTipo {0} \n&amp;quot;&lt;/span&gt;, cTipo.Key));&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var cliente &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; cTipo)&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;             Console.WriteLine(cliente.ToString());&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     }&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;Lo que hemos hecho en el ejemplo anterior es aprovechar la iteraci&amp;oacute;n del primer agrupamiento para volver a generar un extensi&amp;oacute;n GroupBy pero en esta ocasi&amp;oacute;n con la propiedad &lt;i&gt;Cliente.Tipo&lt;/i&gt; (&lt;b&gt;int&lt;/b&gt;) como &lt;b&gt;TKey&lt;/b&gt;. El resultado:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_37E13C5C.png"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_3B32AE37.png" width="244" border="0" height="235" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;Manejando resultados &lt;b&gt;IEnumerable&amp;lt;TSource&amp;gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p align="justify"&gt;Como coment&amp;eacute; anteriormente, GroupBy puede devolver una iteraci&amp;oacute;n de tipo &lt;b&gt;IEnumerable&amp;lt;TSource&amp;gt;&lt;/b&gt; indicando en la sobrecarga el par&amp;aacute;metro &lt;b&gt;resultSelector&lt;/b&gt;. Para ver este ejemplo, en base a la lista de cliente generada anteriormente, vamos a mostrar, por ejemplo, para cada una de las provincias (agrupamiento) el n&amp;uacute;mero total de clientes, el valor m&amp;aacute;ximo, m&amp;iacute;nimo y medio de la propiedad &lt;i&gt;Cliente.VolumenNegocio&lt;/i&gt; (&lt;b&gt;decimal&lt;/b&gt;) de modo que nos ofrecer&amp;aacute; informaci&amp;oacute;n, por cada provincia, de los valores m&amp;aacute;ximo, m&amp;iacute;nimo y medio del volumen de negocio de los clientes.&lt;/p&gt;
&lt;p&gt;Para ello utilizaremos la sobrecarga:&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; System.Linq.Enumerable.GroupBy&amp;lt;TSource, TKey, TResult&amp;gt;(&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; System.Collections.Generic.IEnumerable&amp;lt;TSource&amp;gt;, &lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;    System.Func&amp;lt;TSource,TKey&amp;gt;, &lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;    System.Func&amp;lt;TKey,System.Collections.Generic.IEnumerable&amp;lt;TSource&amp;gt;,TResult&amp;gt;)&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;La implementaci&amp;oacute;n ser&amp;aacute;:&lt;/div&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; var groupByInfo = list.GroupBy(&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     cliente =&amp;gt; cliente.IdProvincia, &lt;span style="color:#008000;"&gt;//seguimos con el agrupamiento por provinicia&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     (provincia, clientes) =&amp;gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#008000;"&gt;//retornamos un tipo an&amp;oacute;nimo&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;         {&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;             &lt;span style="color:#008000;"&gt;//con info sobre el agrupamiento&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;             Key = provincia,&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;             Count = clientes.Count(),&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;             Min = clientes.Min(c =&amp;gt; c.VolumenNegocio),&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;             Max = clientes.Max(c =&amp;gt; c.VolumenNegocio),&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;             Avg = clientes.Average(c =&amp;gt; c.VolumenNegocio)&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;         });&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p align="justify"&gt;El primer lugar, el tipo de la iteraci&amp;oacute;n de retorno es del &lt;b&gt;tipo an&amp;oacute;nimo&lt;/b&gt; y es por ello que nos basamos en una variable impl&amp;iacute;citamente tipada (&lt;b&gt;var&lt;/b&gt;). El primer par&amp;aacute;metro (l&amp;iacute;nea 2) es del tipo &lt;b&gt;keySelector&lt;/b&gt; que vimos anteriormente y como dije es com&amp;uacute;n en todas las sobrecargas pues es el valor clave de agrupamiento. Seguidamente el segundo par&amp;aacute;metro (l&amp;iacute;neas 3-11), del tipo &lt;b&gt;Func&amp;lt;int,IEnumerable&amp;lt;Cliente&amp;gt;,anonymous type&amp;gt;&lt;/b&gt; es donde se proyectar&amp;aacute; el resultado del agrupamiento. &lt;/p&gt;
&lt;p&gt;Iteramos y mostramos los resultados. &lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var res &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; groupByInfo)&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     Console.WriteLine(&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;Provinicia:{0}\n\tCount:{1}\n\tMin Volumen:{2}\n\tMax Volumen:{3}\n\tAvg:{4}&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;                       , res.Key, res.Count, res.Min, res.Max, res.Avg));&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;En total 3 iteraciones con sus respectivas &amp;ldquo;estad&amp;iacute;sticas&amp;rdquo;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_794BC8E8.png"&gt;&lt;img title="image" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_0428AA31.png" width="244" border="0" height="140" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;El c&amp;oacute;digo completo:&lt;/p&gt;
&lt;div style="border:1px solid gray;margin:20px 0px 10px;padding:4px;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;height:288px;background-color:#f4f4f4;"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; LINQGroupingBy&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Program&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Main(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:#008000;"&gt;//Ejemplo para LINQ to Objects&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#008000;"&gt;//inicializamos lista de clientes&lt;/span&gt;&lt;br /&gt;            var list = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;Cliente&amp;gt;&lt;br /&gt;                           {&lt;br /&gt;                               &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente {IdProvincia = 1, Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente1&amp;quot;&lt;/span&gt;, Tipo = 10, VolumenNegocio = 100.00m},&lt;br /&gt;                               &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente {IdProvincia = 2, Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente2&amp;quot;&lt;/span&gt;, Tipo = 20, VolumenNegocio = 20.00m},&lt;br /&gt;                               &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente {IdProvincia = 3, Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente3&amp;quot;&lt;/span&gt;, Tipo = 20, VolumenNegocio = 230.00m},&lt;br /&gt;                               &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente {IdProvincia = 3, Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente4&amp;quot;&lt;/span&gt;, Tipo = 20, VolumenNegocio = 500.00m},&lt;br /&gt;                               &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente {IdProvincia = 1, Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente5&amp;quot;&lt;/span&gt;, Tipo = 30, VolumenNegocio = 10.00m},&lt;br /&gt;                               &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente {IdProvincia = 2, Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente6&amp;quot;&lt;/span&gt;, Tipo = 10, VolumenNegocio = 750.00m},&lt;br /&gt;                               &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente {IdProvincia = 1, Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente7&amp;quot;&lt;/span&gt;, Tipo = 20, VolumenNegocio = 340.00m},&lt;br /&gt;                               &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Cliente {IdProvincia = 1, Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Cliente8&amp;quot;&lt;/span&gt;, Tipo = 20, VolumenNegocio = 170.00m}&lt;br /&gt;                           };&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#008000;"&gt;//obtenemos todos los clientes agrupados por provincias&lt;/span&gt;&lt;br /&gt;            var groupByProv = list.GroupBy(cliente =&amp;gt; cliente.IdProvincia);&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#008000;"&gt;//tambien se puede expresar como:&lt;/span&gt;&lt;br /&gt;            &lt;span style="color:#008000;"&gt;//&lt;/span&gt;&lt;br /&gt;            &lt;span style="color:#008000;"&gt;//IEnumerable&amp;lt;IGrouping&amp;lt;int, Cliente&amp;gt;&amp;gt; groupByProv = &lt;/span&gt;&lt;br /&gt;            &lt;span style="color:#008000;"&gt;//    from cliente in list group cliente by cliente.IdProvincia;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var cProv &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; groupByProv)&lt;span style="color:#008000;"&gt;//cProv es del tipo IEnumerable&amp;lt;IGrouping&amp;lt;int, Cliente&amp;gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine(&lt;br /&gt;                    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;Provincia {0}, {1} clientes&amp;quot;&lt;/span&gt;, cProv.Key, cProv.Count()));&lt;br /&gt;&lt;br /&gt;                &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt;(var cliente &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; cProv)&lt;br /&gt;                    Console.WriteLine(cliente.ToString());&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            Console.ReadKey();&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var cProv &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; groupByProv)&lt;span style="color:#008000;"&gt;//cProv es del tipo IEnumerable&amp;lt;IGrouping&amp;lt;int, Cliente&amp;gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;Provincia {0} &amp;quot;&lt;/span&gt;, cProv.Key));&lt;br /&gt;&lt;br /&gt;                IEnumerable&amp;lt;IGrouping&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;, Cliente&amp;gt;&amp;gt; groupByTipo = cProv.GroupBy(cliente =&amp;gt; cliente.Tipo);&lt;br /&gt;&lt;br /&gt;                &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var cTipo &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; groupByTipo)&lt;br /&gt;                {&lt;br /&gt;                    Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;\tTipo {0} \n&amp;quot;&lt;/span&gt;, cTipo.Key));&lt;br /&gt;&lt;br /&gt;                    &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var cliente &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; cTipo)&lt;br /&gt;                        Console.WriteLine(cliente.ToString());&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            Console.ReadKey();&lt;br /&gt;            Console.Clear();&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#008000;"&gt;//volvemos a agrupar&lt;/span&gt;&lt;br /&gt;            var groupByInfo = list.GroupBy(&lt;br /&gt;                cliente =&amp;gt; cliente.IdProvincia, &lt;span style="color:#008000;"&gt;//seguimos con el agrupamiento por provinicia&lt;/span&gt;&lt;br /&gt;                (provincia, clientes) =&amp;gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#008000;"&gt;//retornamos un tipo an&amp;oacute;nimo&lt;/span&gt;&lt;br /&gt;                    {&lt;br /&gt;                        &lt;span style="color:#008000;"&gt;//con info sobre el agrupamiento&lt;/span&gt;&lt;br /&gt;                        Key = provincia,&lt;br /&gt;                        Count = clientes.Count(),&lt;br /&gt;                        Min = clientes.Min(c =&amp;gt; c.VolumenNegocio),&lt;br /&gt;                        Max = clientes.Max(c =&amp;gt; c.VolumenNegocio),&lt;br /&gt;                        Avg = clientes.Average(c =&amp;gt; c.VolumenNegocio)&lt;br /&gt;                    });&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#008000;"&gt;//mostramos los resultados&lt;/span&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var res &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; groupByInfo)&lt;br /&gt;                Console.WriteLine(&lt;br /&gt;                    &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;Provinicia:{0}\n\tCount:{1}\n\tMin Volumen:{2}\n\tMax Volumen:{3}\n\tAvg:{4}&amp;quot;&lt;/span&gt;&lt;br /&gt;                                  , res.Key, res.Count, res.Min, res.Max, res.Avg));&lt;br /&gt;&lt;br /&gt;            Console.ReadKey();&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Cliente&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; IdProvincia { get; set; }&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; Tipo { get; set; }&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Nombre { get; set; }&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;decimal&lt;/span&gt; VolumenNegocio { get; set; }&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; ToString()&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;\t\t-&amp;gt; Cliente: {0} - Provincia:{1} - Tipo: {2} - Vol.:{3}e\n&amp;quot;&lt;/span&gt;,&lt;br /&gt;                                     Nombre, IdProvincia, Tipo, VolumenNegocio);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=159217" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Visual+C_2300_/default.aspx">Visual C#</category></item><item><title>Nokia lleva a los tribunales al iPhone por violación de hasta 10 patentes</title><link>http://geeks.ms/blogs/jmtorres/archive/2009/10/23/nokia-lleva-a-los-tribunales-al-iphone-por-violaci-243-n-de-hasta-10-patentes.aspx</link><pubDate>Fri, 23 Oct 2009 07:05:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:158701</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=158701</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2009/10/23/nokia-lleva-a-los-tribunales-al-iphone-por-violaci-243-n-de-hasta-10-patentes.aspx#comments</comments><description>&lt;p&gt;&lt;img src="http://choyano.files.wordpress.com/2009/07/boxeo.jpg" style="max-width:550px;border:0;float:right;" width="164" border="0" height="155" alt="" /&gt;Y es que el 22 de octubre no s&amp;oacute;lo fue noticia el &lt;a target="_blank" href="http://muycomputer.com/Actualidad/Noticias/Hoy-es-el-dia-de-Windows-7/_wE9ERk2XxDAsg8-UgXzEcY0xbSft0FA7BRh7dMyun61UXcimTuuuhsLgMdoFn831"&gt;&lt;b&gt;lanzamiento mundial de Windows 7&lt;/b&gt;&lt;/a&gt;. &lt;b&gt;Nokia&lt;/b&gt;, por su parte, &lt;a target="_blank" href="http://www.ft.com/cms/s/0/99a2c2ea-bf1c-11de-a696-00144feab49a.html"&gt;denunci&amp;oacute; ante los tribunales de EEUU&lt;/a&gt; a &lt;b&gt;Apple &lt;/b&gt;por violar &lt;span style="text-decoration:underline;"&gt;hasta 10 patentes&lt;/span&gt; que incorpora su tel&amp;eacute;fono m&amp;oacute;vil iPhone. &lt;/p&gt;
&lt;p&gt;Por todos es sabido del liderazgo de Nokia en el mercado mundial de telefonia m&amp;oacute;vil, d&amp;oacute;nde practicamente &lt;b&gt;4 de cada 10 dispositivos&lt;/b&gt; vendidos en el mundo salen de la factoria finlandesa. Lo que probablemente no est&amp;eacute; en la luz publica es que Nokia, quien ha llegado a invertir hasta 40 Billones de &amp;euro; en I+D, posee muchas de las patentes en telefonia m&amp;oacute;vil qui&amp;eacute;n comparte con hasta 40 empresas del todo el mundo bajo contratos de colaboraci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Con todas excepto con &lt;b&gt;Apple&lt;/b&gt; (supuestamente). Por lo visto los de Cupertino (California) han incorporado caracter&amp;iacute;sticas al su dispositivo m&amp;oacute;vil al modo de Duty Free.&amp;nbsp; Encriptaci&amp;oacute;n, comunicaciones inhalambricas, seguridad o reconocimiento de voz son algunas de las patentes que (supuestamente) Apple ha violado. &lt;/p&gt;
&lt;p&gt;Tambien cabe decir que Nokia ha presentado su primer semestre del a&amp;ntilde;o con datos negativos despues de m&amp;aacute;s de una decada. Esta bajada se debe al mercado que ha conseguido tanto por el iPhone como su Marketplace y algunos expertos/analistas en mercados tecnologicos apunta a &amp;eacute;sta como la causa principal de esta demanda. &lt;/p&gt;
&lt;p&gt;De todas formas, el caso no se ejecutar&amp;aacute; hasta el 2011. A ver que pasar&amp;aacute;....&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=158701" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Noticias/default.aspx">Noticias</category></item><item><title>Microsoft Sync Framework 2.0 (Novedades de la nueva versión y adopción por SharePoint 2010 y Windows 7)</title><link>http://geeks.ms/blogs/jmtorres/archive/2009/10/20/microsoft-sync-framework-2-0-novedades-de-la-nueva-versi-243-n-y-adopci-243-n-por-sharepoint-2010-y-windows-7.aspx</link><pubDate>Mon, 19 Oct 2009 22:26:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:158408</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=158408</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2009/10/20/microsoft-sync-framework-2-0-novedades-de-la-nueva-versi-243-n-y-adopci-243-n-por-sharepoint-2010-y-windows-7.aspx#comments</comments><description>&lt;p align="justify"&gt;Se acaba de &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=89adbb1e-53ff-41b5-ba17-8e43a2e66254&amp;amp;displaylang=en" target="_blank"&gt;liberar la versi&amp;oacute;n 2.0 de Microsoft Sync Framework&lt;/a&gt;. Esta esperad&amp;iacute;sima nueva versi&amp;oacute;n de Sync Framework adem&amp;aacute;s de aportar nuevas caracter&amp;iacute;sticas y mejorar (seg&amp;uacute;n dicen, habr&amp;aacute; que probarlo) en cuanto a rendimiento, tambi&amp;eacute;n es noticia por la &lt;a href="http://blogs.msdn.com/sync/archive/2009/10/19/sharepoint-2010-now-integrates-microsoft-sync-framework.aspx" target="_blank"&gt;adopci&amp;oacute;n por parte de Windows 7 y Microsoft Office/SharePoint 2010&lt;/a&gt;.&lt;/p&gt;
&lt;p align="justify"&gt;Respecto a &lt;b&gt;Windows 7&lt;/b&gt;, &lt;b&gt;MS Sync Framework 2.0&lt;/b&gt; ser&amp;aacute; la plataforma de sincronizaci&amp;oacute;n utilizada por &lt;b&gt;&lt;a href="http://www.microsoft.com/whdc/device/DeviceExperience/default.mspx" target="_blank"&gt;Device Stage&lt;/a&gt;&lt;/b&gt;, nueva caracter&amp;iacute;stica del sistema operativo que pretende ser el punto de conexi&amp;oacute;n con los dispositivos m&amp;oacute;biles. De modo que la sincronizaci&amp;oacute;n de tareas, contactos y dem&amp;aacute;s items se sincronizaran con cualquier or&amp;iacute;genes de datos.&lt;/p&gt;
&lt;p align="justify"&gt;Por lo que respecta a SharePoint 2010, Sync Framework 2.0 jugar&amp;aacute; un papel importante en cuanto a la sincronizaci&amp;oacute;n de &lt;b&gt;Office Workspace &lt;/b&gt;(Groove) y SharePoint. Adem&amp;aacute;s, el propio servidor de SharePoint 2010 expondr&amp;aacute; parte de las API de Sync Framework 2.0 para poder crear proveedores personalizados para integrar datos al propio SharePoint.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;b&gt;Sync Framework&lt;/b&gt; ofrece mejoras sustanciales respecto a la versi&amp;oacute;n anterior:&lt;/p&gt;
&lt;h2&gt;Core Components&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;Incorpora el filtrado flexible en el que se permite de forma din&amp;aacute;mica el filtro de un conjunto de datos mediante una especie de negociaci&amp;oacute;n entre proveedores durante la sincronizaci&amp;oacute;n. &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Nuevos tipos y propiedades:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tipos implementados por los proveedores:
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.ifiltertrackingprovider%28SQL.105%29.aspx"&gt;IFilterTrackingProvider&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.isyncfilter%28SQL.105%29.aspx"&gt;ISyncFilter&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.ifilteredreplicanotifyingchangeappliertarget%28SQL.105%29.aspx"&gt;IFilteredReplicaNotifyingChangeApplierTarget&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.ifiltertrackingnotifyingchangeappliertarget%28SQL.105%29.aspx"&gt;IFilterTrackingNotifyingChangeApplierTarget&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tipos implementados por Sync Framework:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.customfilterinfo%28SQL.105%29.aspx"&gt;CustomFilterInfo&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.combinedfilterinfo%28SQL.105%29.aspx"&gt;CombinedFilterInfo&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.filterkeymap%28SQL.105%29.aspx"&gt;FilterKeyMap&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Se ha mejorado el manejador de conflictos. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Se ha a&amp;ntilde;adido una API para la conversi&amp;oacute;n de tipos de datos entre or&amp;iacute;genes de forma que se pueden utilizar diferentes tipos de datos de una columna en tabla del proveedor remoto y otro tipo de datos para proveedor local.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Los nuevos tipos y propiedades de la API son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.syncdataconverter%28SQL.105%29.aspx"&gt;SyncDataConverter&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.syncorchestrator.localdataconverter%28SQL.105%29.aspx"&gt;LocalDataConverter&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.synchronization.syncorchestrator.remotedataconverter%28SQL.105%29.aspx"&gt;RemoteDataConverter&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Se incluye el servicio de aplicaci&amp;oacute;n de cambios (Change Application Service).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ahora Sync Framework permite la traza de cualquier componente durante la sincronizaci&amp;oacute;n gener&amp;aacute;ndose archivos .tmf para poder ser estudiados posteriormente.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 align="justify"&gt;Sync Services for ADO.NET &lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Ahora ya s&amp;iacute; (al fin) Sync Services for ADO.NET ofrece un proveedor de datos para SQL Server Express, adem&amp;aacute;s de los ya existentes SQL Server y SQL Server Compact. Para todos ellos con sus correspondientes adaptadores con lo que pr&amp;aacute;cticamente no requeriremos escribir ning&amp;uacute;n comando de consulta o modificaci&amp;oacute;n.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Nueva API la sincronizaci&amp;oacute;n de datos en batch, resolviendo los dif&amp;iacute;ciles escenarios (en ocasiones irresolubles) que comportaba la utilizaci&amp;oacute;n de batching en la versi&amp;oacute;n 1.0. Adem&amp;aacute;s se ha optimizado de forma que podemos configurar el espacio m&amp;aacute;ximo que un conjunto de cambios puede ocupar en memoria lo cual optimizar&amp;aacute;, y mucho, el rendimiento sobretodo en las inicializaciones de una sincronizaci&amp;oacute;n. Esta caracter&amp;iacute;stica ser&amp;aacute; muy bien recibida por la comunidad .NET Compact Framework cuando aparezca la siguiente versi&amp;oacute;n para dispositivo m&amp;oacute;viles.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Habilita las tareas de mantenimiento para por ejemplo limpiar los metadatos.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Dos opciones de inicializaci&amp;oacute;n de datos: inicializaci&amp;oacute;n&amp;nbsp; por sincronizaci&amp;oacute;n normal (de una base de datos ya inicializada) o bien inicializaci&amp;oacute;n instant&amp;aacute;nea de una base de datos SQL Server Compact 3.5.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=158408" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Microsoft+Sync+Framework/default.aspx">Microsoft Sync Framework</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Sync+Services+for+ADO.NET/default.aspx">Sync Services for ADO.NET</category></item><item><title>[OT] Tatuajes geeks</title><link>http://geeks.ms/blogs/jmtorres/archive/2009/10/13/ot-tatuajes-geeks.aspx</link><pubDate>Tue, 13 Oct 2009 21:57:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:158042</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=158042</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2009/10/13/ot-tatuajes-geeks.aspx#comments</comments><description>&lt;p&gt;Impresionante documento &lt;span style="text-decoration:line-through;"&gt;tr&amp;aacute;gico&lt;/span&gt; gr&amp;aacute;fico el que os traigo. En este mismo portal de geeks.ms se mostr&amp;oacute; no hace mucho una imagen de un tatuaje realmente curioso.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_789E586D.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_617FB164.png" width="230" border="0" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Pues por lo visto hay alguien que no se ha conformado &amp;uacute;nicamente con dos tag:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_36E3D087.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_48CFC87A.png" width="223" border="0" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Incluso alguna ha hecho su propia interpretaci&amp;oacute;n:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_0AA687FC.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_320D2E99.png" width="244" border="0" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Pero no solo de HTML vive el geek. Ah&amp;iacute; va un poquito de C:&lt;/p&gt;
&lt;table width="400" border="0" cellpadding="2" cellspacing="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_7FE5DE4E.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_2E1F1862.png" width="244" border="0" height="130" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_63D45DBC.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_62ABFC78.png" width="244" border="0" height="184" /&gt;&lt;/a&gt; &lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Y un &amp;ldquo;Hola Mundo!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_45762EA1.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_73535B8C.png" width="244" border="0" height="137" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt; &lt;code&gt;   &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Tambi&amp;eacute;n hay lugar para los binarios:&lt;/p&gt;
&lt;table width="400" border="0" cellpadding="2" cellspacing="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_544D37EE.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_447D7D1D.png" width="244" border="0" height="151" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_2C2A6302.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_25C340DA.png" width="184" border="0" height="244" /&gt;&lt;/a&gt; &lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Y un poco de c&amp;oacute;digo encriptado:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_41A45005.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_21E55070.png" width="244" border="0" height="152" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Lo que tampoco pod&amp;iacute;a faltar son los Fan Boys, empezando por los &lt;i&gt;Linuxeros&lt;/i&gt;:&lt;/p&gt;
&lt;table width="400" border="0" cellpadding="2" cellspacing="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_4551CF08.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_10A14D00.png" width="184" border="0" height="244" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_0DABE84D.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_08895F04.png" width="244" border="0" height="184" /&gt;&lt;/a&gt; &lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Pasando por los Appleros.&lt;/p&gt;
&lt;table width="400" border="0" cellpadding="2" cellspacing="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_7925D727.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_001563E0.png" width="244" border="0" height="206" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_02FAA2C6.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_1CAE8D5B.png" width="244" border="0" height="215" /&gt;&lt;/a&gt; &lt;/td&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_2A512396.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_26EF8BEE.png" width="170" border="0" height="244" /&gt;&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Googleros&amp;hellip;&lt;/p&gt;
&lt;table width="400" border="0" cellpadding="2" cellspacing="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_6A771743.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_65C0C0EF.png" width="244" border="0" height="161" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_176BB878.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_075C281A.png" width="244" border="0" height="184" /&gt;&lt;/a&gt; &lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Yahooeros&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_637350BF.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_7FC092DF.png" width="244" border="0" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Y por supuesto de los Microsofteros&lt;/p&gt;
&lt;table width="400" border="0" cellpadding="2" cellspacing="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_071C528D.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_43747B9D.png" width="244" border="0" height="184" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_78BD8E02.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_4B88559A.png" width="244" border="0" height="184" /&gt;&lt;/a&gt; &lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Otros mas de principios, orgullosos de lo que son:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_1C75F3F6.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_7CF37795.png" width="244" border="0" height="187" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Los visionarios:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_0DAAFC77.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_56DD7BA5.png" width="244" border="0" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Los inconformista:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_6EB43CFE.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_5E489F78.png" width="244" border="0" height="131" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Bloggeros:&lt;/p&gt;
&lt;table width="400" border="0" cellpadding="2" cellspacing="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_1B1D214B.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_78D4EFF7.png" width="244" border="0" height="184" /&gt;&lt;/a&gt; &lt;/td&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_1FDF896D.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_0C4203FF.png" width="244" border="0" height="164" /&gt;&lt;/a&gt; &lt;/td&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_288F461F.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_549C1D43.png" width="244" border="0" height="157" /&gt;&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Tambi&amp;eacute;n tienen cabida &amp;ldquo;los del hierro&amp;rdquo; (hardware)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_6AA288D5.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_51F29FEB.png" width="244" border="0" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Y el mas de lo mas. Los aut&amp;eacute;nticos geeks. Los que viven este mundillo como ninguno y sin duda uno de mis favoritos&amp;hellip; los que se tat&amp;uacute;an la &lt;b&gt;Pantalla Azul de la Muerte&lt;/b&gt; en el brazo!!!! Que Grande!!!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_74F2EB8E.png"&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_160295D1.png" width="315" border="0" height="344" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En f&amp;iacute;n, ah&amp;iacute; queda el tema. &lt;/p&gt;
&lt;p&gt;Salud!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=158042" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Geeks/default.aspx">Geeks</category></item><item><title>Del Modelo de Error Humano en las organizaciones TIC a los papanatas con corbata</title><link>http://geeks.ms/blogs/jmtorres/archive/2009/10/08/del-modelo-de-error-humano-en-las-organizaciones-tic-a-los-papanatas-con-corbata.aspx</link><pubDate>Thu, 08 Oct 2009 21:23:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:157669</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>14</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=157669</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2009/10/08/del-modelo-de-error-humano-en-las-organizaciones-tic-a-los-papanatas-con-corbata.aspx#comments</comments><description>&lt;p align="justify"&gt;&amp;nbsp;La industria aeron&amp;aacute;utica invierte cada a&amp;ntilde;o una gran suma de dinero en una de las &amp;aacute;reas m&amp;aacute;s importantes, la seguridad. Pese a los fundamentos matem&amp;aacute;ticos y f&amp;iacute;sicos en los que se basa la ingenier&amp;iacute;a aeron&amp;aacute;utica, as&amp;iacute; como en otros campos de la ingenier&amp;iacute;a, los errores y los encadenamientos de actos de fortuitos suceden, lo que provocan grandes desastres casi siempre humanas.&lt;/p&gt;
&lt;p align="justify"&gt;Componentes electr&amp;oacute;nicos, mec&amp;aacute;nicos, computacionales, hidr&amp;aacute;ulicos, una aeronave es un conjunto de dispositivos dise&amp;ntilde;ados al mil&amp;iacute;metro dentro de una estructura f&amp;iacute;sica cuya finalidad no es &amp;uacute;nicamente la de volar, sino hacerlo de la forma m&amp;aacute;s segura. Muchos de estos componentes y dispositivos, por no decir todos, requieren de un constante plan de mantenimiento para prevenir anomal&amp;iacute;as. Pese a ello, dichos componentes fallan y ante cualquier situaci&amp;oacute;n de fallida una aeronave puede seguir volando. El caso m&amp;aacute;s conocido es el de los motores a reacci&amp;oacute;n. Cualquier aeronave puede seguir volando si en pleno vuelo uno de los reactores deja de funcionar. &lt;/p&gt;
&lt;p align="justify"&gt;Pese a la alta fiabilidad de sus componentes, ocurren cat&amp;aacute;strofes a&amp;eacute;reas d&amp;oacute;nde intervienen varios factores y de los cuales, adem&amp;aacute;s como piedra angular, la mayor&amp;iacute;a tienen como origen el factor humano. En realidad y a grosso modo se distinguen los siguientes factores:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Factores humanos a M&amp;aacute;s del 50%&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Relacionados con el piloto&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Otros&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Factores meteorol&amp;oacute;gicos&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Factores mec&amp;aacute;nicos&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Otros factores&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p align="justify"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/clip_5F00_image002_5F00_3698577D.jpg"&gt;&lt;img border="0" align="left" width="149" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/clip_5F00_image002_5F00_thumb_5F00_6DFE68AB.jpg" hspace="12" alt="clip_image002" height="144" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;margin-left:0px;margin-right:0px;border-right-width:0px;" title="clip_image002" /&gt;&lt;/a&gt;M&amp;aacute;s all&amp;aacute; del dato puramente estad&amp;iacute;stico, lo que destaca es que m&amp;aacute;s de la mitad de factores tienen un origen directamente humano. Los propios sistemas de equipamiento de la aeronave est&amp;aacute;n dise&amp;ntilde;ados para actuar y corregir dichos errores. Por ejemplo, los sistemas &lt;a href="http://es.wikipedia.org/wiki/Traffic_alert_and_Collision_Avoidance_System"&gt;TCAS&lt;/a&gt; (&lt;i&gt;Traffic alert and Collision Avoidance System&lt;/i&gt;) de las aeronaves son dispositivos que detectan, con antelaci&amp;oacute;n, peligro de colisi&amp;oacute;n con otra aeronave en circulaci&amp;oacute;n equipada con TCAS. El TCAS no &amp;uacute;nicamente alerta sino que tambi&amp;eacute;n propone una soluci&amp;oacute;n &amp;quot;negociada&amp;quot; con la otra aeronave (m&amp;aacute;s concretamente con su TCAS) de forma que mientras a una aeronave le indicar&amp;aacute; que ascienda a la otra le indicara que descienda, evitando as&amp;iacute; la colisi&amp;oacute;n. Por tanto estar&amp;iacute;amos hablando de un sistema de defensa de errores provenientes de la persona, bien de los controladores a&amp;eacute;reos o bien de los propios pilotos, por ejemplo.&lt;/p&gt;
&lt;p align="justify"&gt;En aeronavegaci&amp;oacute;n, todas las aeronaves en con rumbo entre 000 y 179 tienen una altitud o Nivel de Vuelo impar (FL330, FL350, FL370) y las aeronaves con rumbo entre 180-359 tienen un Nivel de Vuelo par (FL340, FL360, etc.). B&amp;aacute;sicamente y hablando en llano, nunca dos aeronaves chocaran &amp;quot;de frente&amp;quot; mientras estas se mantienen en altitud de crucero adecuado. &lt;/p&gt;
&lt;p align="justify"&gt;En base a esta regla b&amp;aacute;sica de aeronavegabilidad, las colisiones cuando el avi&amp;oacute;n est&amp;aacute; en altitud de crucero son sencillamente imposibles. Sin embargo durante esta fase (Crucero) es com&amp;uacute;n el cambio del Nivel de Vuelo aument&amp;aacute;ndose o disminuy&amp;eacute;ndose seg&amp;uacute;n las condiciones meteorol&amp;oacute;gicas o t&amp;eacute;cnicas (ahorro de combustible) as&amp;iacute; como por razones ajenas e indicadas por el Control de zona (ATC) y es ah&amp;iacute; d&amp;oacute;nde empiezan a haber los primeros riesgos, riesgos que se multiplican cuanto m&amp;aacute;s cerca est&amp;aacute;n de la fase de despegue o aproximaci&amp;oacute;n al aeropuerto de destino, debido al tr&amp;aacute;ficos y a las variables de entorno.&lt;img border="0" width="244" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/clip_5F00_image004_5F00_thumb_5F00_3ECC7D14.jpg" hspace="12" alt="clip_image004" height="202" style="border-top-width:0px;display:block;border-left-width:0px;float:none;border-bottom-width:0px;margin-left:auto;margin-right:auto;border-right-width:0px;" title="clip_image004" /&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Si nos lo ponemos a pensar parece incr&amp;eacute;dulo que dos aviones comerciales choquen a m&amp;aacute;s de 12.000 metros de altura en la fase de crucero y m&amp;aacute;s con componentes como el &lt;strong&gt;TCAS&lt;/strong&gt; &amp;iquest;verdad?, pues desgraciadamente se han producido colisiones de aeronaves a una altitud de 36.000 pies (FL360).&lt;/p&gt;
&lt;h1&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/clip_5F00_image004_5F00_5683B47A.jpg"&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;h1&gt;El Modelo de Error Humano o Swiss Cheese Model&lt;/h1&gt;
&lt;p align="justify"&gt;El modelo de error humano o &lt;strong&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Human_error_model"&gt;Swiss Cheese Model&lt;/a&gt;&lt;/strong&gt; fue acu&amp;ntilde;ado por primera vez por el brit&amp;aacute;nico &lt;strong&gt;James T. Reason&lt;/strong&gt;, qui&amp;eacute;n es conocido cari&amp;ntilde;osamente como &lt;em&gt;Swiss Cheese Man&lt;/em&gt;. Este modelo es utilizado en el an&amp;aacute;lisis de riesgo de los sistemas humanos y tambi&amp;eacute;n es conocido como el &lt;strong&gt;Efecto de Actos Acumulativos&lt;/strong&gt; o el &lt;strong&gt;Modelo de Reason&lt;/strong&gt;.&lt;/p&gt;
&lt;p align="justify"&gt;El Modelo de Error Humano parte de las premisas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Los humanos no somos infalibles&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Los errores son esperables&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p align="justify"&gt;Es decir un error es una consecuencia de un acto preliminar (factores sistem&amp;aacute;ticos) no como un acontecimiento causal. En este modelo se representan las debilidades humanas como &lt;strong&gt;los agujeros de las lonchas&lt;/strong&gt; del queso de gruyere catalogadas en cuatro niveles de errores:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Influencias organizacionales &lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Control de riesgos&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Condiciones previas a actos inseguros&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Los actos inseguros en s&amp;iacute;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p align="justify"&gt;De esta forma, en el modelo se dibuja un &lt;strong&gt;escudo defensivo representadas por lonchas&lt;/strong&gt; y cuyo objetivo no es el de desvelar qui&amp;eacute;n se equivoc&amp;oacute; sino c&amp;oacute;mo y por que las defensas fallaron. &lt;/p&gt;
&lt;p align="justify"&gt;El uso metaf&amp;oacute;rico del queso de gruyere no &amp;uacute;nicamente responde a la idea de las lonchas y sus agujeros y su representaci&amp;oacute;n, pues en dicho modelo los agujeros o debilidades humanas cambian, entre loncha y loncha, de forma, tama&amp;ntilde;o y posici&amp;oacute;n y responden a la subjetividad de dichas debilidades. Gracias a esto se pueden prevenir &amp;ldquo;trayectorias lineales accidentales&amp;rdquo; debido a que se puede detectar una debilidad com&amp;uacute;n en todas las defensas. La representaci&amp;oacute;n esquem&amp;aacute;tica equivaldr&amp;iacute;a a que de todas las lonchas de queso representando una capa de seguridad, todas tienen un punto com&amp;uacute;n de debilidad por el que un acto casual puede ocurrir sin que haya ni una sola capa de seguridad que pueda evitarlo. Esto responde a errores o actos lineales. &lt;/p&gt;
&lt;p align="justify"&gt;El caso es que en un accidente intervienen diferentes factores y pese a que este modelo est&amp;aacute; ampliamente aceptado (es de origen psicol&amp;oacute;gico), en muchos campos no &amp;uacute;nicamente de la ingenier&amp;iacute;a sino tambi&amp;eacute;n de la medicina, los accidentes ocurren y cuando eso sucede tenemos la obligaci&amp;oacute;n de averiguar los factores que han fallado y han convergido en un desastre.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/clip_5F00_image00212_5F00_3119C10C.jpg"&gt;&lt;img border="0" width="244" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/clip_5F00_image00212_5F00_thumb_5F00_2E245C59.jpg" alt="clip_image002[12]" height="153" style="border-top-width:0px;display:block;border-left-width:0px;float:none;border-bottom-width:0px;margin-left:auto;margin-right:auto;border-right-width:0px;" title="clip_image002[12]" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;Sistemas inform&amp;aacute;ticos&lt;/h1&gt;
&lt;p align="justify"&gt;La propia organizaci&amp;oacute;n es la encargada de planificar y ejecutar sus propios sistemas de defensa y en la industria de la inform&amp;aacute;tica, de la misma forma que en otras industrias, dicha organizaci&amp;oacute;n se sustenta en perfiles de mayor a menor responsabilidad. Ninguno de estos perfiles est&amp;aacute;n exentos de responsabilidad y todos y cada uno de ellos forman una parte importante de los mecanismos de defensa. &lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/clip_5F00_image009_5F00_6CA9A9FF.jpg"&gt;&lt;img border="0" align="left" width="244" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/clip_5F00_image009_5F00_thumb_5F00_7D41A4ED.jpg" hspace="12" alt="clip_image009" height="184" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;margin-left:0px;margin-right:0px;border-right-width:0px;" title="clip_image009" /&gt;&lt;/a&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;Es signo de fracaso las acusaciones de culpa&lt;/span&gt;&lt;/strong&gt; por parte de los perfiles de m&amp;aacute;s alta responsabilidad hacia los que est&amp;aacute;n en la base del organigrama funcional de la organizaci&amp;oacute;n. &lt;strong&gt;Son intolerables las tendencias a interpretar los actos de modo que confirmen las preconcepciones&lt;/strong&gt; por parte de los perfiles de m&amp;aacute;s alta responsabilidad dado que en la mayor&amp;iacute;a de los casos no son m&amp;aacute;s intentos de exculpaci&amp;oacute;n. &lt;strong&gt;No debemos recordar nuestras propias decisiones&lt;/strong&gt; como mejor de lo que realmente fueron y sobreestimarlas por encima del contexto de organizaci&amp;oacute;n as&amp;iacute; como evitar el &lt;b&gt;Efecto Foco&lt;/b&gt;, es decir desviar la predicci&amp;oacute;n de resultados. En definitiva sesgar la informaci&amp;oacute;n o los actos en base a prejuicios personales.&lt;/p&gt;
&lt;p align="justify"&gt;Contextualizando el Modelo de Error Humano en el &amp;aacute;mbito inform&amp;aacute;tico, un error o falla es el resultado de la superposici&amp;oacute;n de debilidades de los recursos humanos de una organizaci&amp;oacute;n m&amp;aacute;s las de la propia organizaci&amp;oacute;n.&lt;/p&gt;
&lt;p align="justify"&gt;Como recursos humanos existen una multitud de categor&amp;iacute;as profesionales que abarcan desde los m&amp;aacute;s experimentados (Arquitectos, Jefes de proyecto, Directores IT) a los reci&amp;eacute;n licenciados/graduados (programadores/analistas junior, operadores). &lt;strong&gt;Todos y cada uno de ellos deben saber cu&amp;aacute;les son sus limitaciones y responsabilidades&lt;/strong&gt; y &amp;eacute;stas deben ser tenidas en cuentas por las personas inmediatamente superior en el eslab&amp;oacute;n del organigrama organizativo y as&amp;iacute; sucesivamente. Cualquier acto producido que derive en una fallida debe ser contextualizado en base a si fue una equivocaci&amp;oacute;n (descuido, una distracci&amp;oacute;n, una desconcentraci&amp;oacute;n, un error al seguir las reglas), un riesgo o un dolo. &lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/clip_5F00_image011_5F00_22CB224F.jpg"&gt;&lt;img border="0" align="right" width="244" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/clip_5F00_image011_5F00_thumb_5F00_4BF2BA8D.jpg" hspace="12" alt="clip_image011" height="179" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;margin-left:0px;margin-right:0px;border-right-width:0px;" title="clip_image011" /&gt;&lt;/a&gt;&lt;strong&gt;Las fallas de organizaci&amp;oacute;n son aquellas cuyo origen las encontramos en el eslab&amp;oacute;n m&amp;aacute;s alto del organigrama corporativo&lt;/strong&gt; y la no actuaci&amp;oacute;n y prevenci&amp;oacute;n de estas fallas se propagan hacia los recursos inmediatamente inferiores del organigrama. &lt;strong&gt;Uno de los errores m&amp;aacute;s graves que se cometen es el de la persuasi&amp;oacute;n de recursos de nivel m&amp;aacute;s bajo&lt;/strong&gt; quedando impunes los de m&amp;aacute;s alto nivel. Un error producido en un programador tiene su origen en los eslabones m&amp;aacute;s altos de la organizaci&amp;oacute;n. Todo esfuerzo dirigido al reconducir o castigar un recurso de bajo nivel bajo el pretexto de soluci&amp;oacute;n sin haber hecho lo propio desde un nivel m&amp;aacute;s elevado, sencillamente ser&amp;aacute; en vano. &lt;/p&gt;
&lt;p align="justify"&gt;Los or&amp;iacute;genes de este tipo de fallas organizacionales se encuentran en el &lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;liderazgo&lt;/span&gt;&lt;/strong&gt;. Se entiende como liderazgo como el conjunto de cualidades que definen el comportamiento de una persona y que intervienen positivamente en el ambiente laboral de un colectivo. Respeta y ser&amp;aacute;s respetado.&lt;/p&gt;
&lt;p align="justify"&gt;Por otro lado, y siguiendo el hilo de fallas organizacionales, es importante crear una estructura jer&amp;aacute;rquica y equilibrada de mandos intermedios. Pese a que la experiencia es un grado, el &amp;quot;&lt;em&gt;&amp;eacute;l lleva m&amp;aacute;s tiempo que t&amp;uacute;&lt;/em&gt;&amp;quot; es pretexto err&amp;oacute;neo (&lt;em&gt;sesgo&lt;/em&gt;). La selecci&amp;oacute;n y formaci&amp;oacute;n del personal as&amp;iacute; como la comunicaci&amp;oacute;n del mismo es uno de los procedimientos que menos importancia se les da, m&amp;aacute;s son indirectamente improductivas y costosas. Por otra parte la calidad y el dise&amp;ntilde;o de equipos as&amp;iacute; como las presiones operativas y/o comerciales de la propia organizaci&amp;oacute;n con los clientes derivan en muchos casos, como factor de fallida de origen organizacional.&lt;/p&gt;
&lt;h1&gt;En busca del &amp;ldquo;TCAS&amp;rdquo; inform&amp;aacute;tico&lt;/h1&gt;
&lt;p align="justify"&gt;Existen multitudes de mecanismos l&amp;oacute;gicos y f&amp;iacute;sicos que debemos tener presente en todos los campos de las tecnolog&amp;iacute;as de la informaci&amp;oacute;n y comunicaci&amp;oacute;n. En caso del TCAS expuesto en la entradilla de este post tiene una interpretaci&amp;oacute;n libre dentro de nuestro campo. Cualquier componente l&amp;oacute;gico puede ayudarnos a evitar all&amp;iacute; donde las debilidades humanas no pueden alcanzar pero tambi&amp;eacute;n existen doctrinas dentro de la gesti&amp;oacute;n de proyectos que contemplan nuestras limitaciones y las cuales TODAS se basan en la idea de equipo y perfiles y que &lt;strong&gt;abarcan y responde al termino &lt;span style="text-decoration:underline;"&gt;CALIDAD&lt;/span&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;h1&gt;Mi Opini&amp;oacute;n&lt;strong&gt;&lt;/strong&gt;&lt;/h1&gt;
&lt;p align="justify"&gt;Me preocupa especialmente &lt;strong&gt;la fabricaci&amp;oacute;n de ata&amp;uacute;des profesionales&lt;/strong&gt; que algunos responsables de alto nivel llevan a cabo con sus subordinados debido a la&lt;strong&gt; falta de motivaci&amp;oacute;n y de formaci&amp;oacute;n&lt;/strong&gt;. Esto deriva en una muerte lenta de la carrera profesional de los trabajadores que muchas veces olvidan la atenci&amp;oacute;n que&amp;nbsp; (especialmente en un campo d&amp;oacute;nde tan r&amp;aacute;pidamente evolucionan las tecnolog&amp;iacute;as como lo es en el campo de la inform&amp;aacute;tica) el propio futuro profesional de un individuo requiere. B&amp;aacute;sicamente existen tres puntos en los que un empleado presta especial importancia por este orden:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Las pretensiones econ&amp;oacute;micas &lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;El ambiente de trabajo. Disfrutar con lo que se hace.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;Su carrera profesional. Es decir la evoluci&amp;oacute;n personal dentro de su profesi&amp;oacute;n.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p align="justify"&gt;&lt;strong&gt;Las descompensaci&amp;oacute;n exagerada de algunos de estos tres puntos&lt;/strong&gt; (especialmente los dos &amp;uacute;ltimos) ser&amp;aacute; la &lt;strong&gt;sentencia a muerte&lt;/strong&gt; (de su carrera profesional se entiende) de un empleado lo cual ser&amp;aacute; catastr&amp;oacute;fico, primero para el propio empleado y segundo para la propia organizaci&amp;oacute;n.&lt;/p&gt;
&lt;p align="justify"&gt;Pero, &amp;iquest;Qu&amp;eacute; pasa con esos tipos de amplia experiencia que bajo la corbata dirigen y planifican la vida profesional de todos sus empleados?&lt;/p&gt;
&lt;p align="justify"&gt;En primer lugar, &lt;strong&gt;jam&amp;aacute;s sentir&amp;eacute; m&amp;aacute;s respeto por un compa&amp;ntilde;ero uniformado, por el simple hecho de serlo,&lt;/strong&gt; que por otro cuya apariencia, sin ser violenta, &lt;strong&gt;est&amp;eacute; fuera del estereotipo empresarial o social&lt;/strong&gt;, est&amp;eacute; por encima o no de m&amp;iacute;. El &lt;strong&gt;respecto se gana con la confianza y la confianza se gana con oportunidades&lt;/strong&gt;. En el momento en que un profesional empieza a tener mayores responsabilidades y mayor gente a su cargo autom&amp;aacute;ticamente se otorga un &lt;strong&gt;rango de superioridad&lt;/strong&gt; y poseedor de la verdad absoluta. Lo que dice &amp;eacute;l es lo correcto, porque lo dice &amp;eacute;l y por que la propia organizaci&amp;oacute;n as&amp;iacute; permite ejercerlo. No hay lugar a discusi&amp;oacute;n, &lt;strong&gt;su raz&amp;oacute;n &lt;/strong&gt;as&amp;iacute; como su responsabilidad, &lt;strong&gt;son superiores&lt;/strong&gt; a los de los dem&amp;aacute;s pero sin embargo (y curiosamente) &lt;strong&gt;es inversamente proporcional a sus excusas en caso de errores&lt;/strong&gt;. El &lt;em&gt;marr&amp;oacute;n&lt;/em&gt; se lo come el &amp;uacute;ltimo y la verdad es que no se me ocurre nada m&amp;aacute;s cobarde y ruin. &lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;Del que piensa y act&amp;uacute;a as&amp;iacute;, no le deber&amp;eacute; jam&amp;aacute;s ning&amp;uacute;n respeto.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Asumir las responsabilidades, defender a capa y espada a sus subordinados, &lt;strong&gt;confiar y respetar&lt;/strong&gt; y recibir lo mismo, otorgar oportunidades y ayudar a descubrir sus debilidades y virtudes. Todo esto es trabajo humano, no productivo directamente pero que forja colectivos &amp;ldquo;indestructibles&amp;rdquo;, &lt;strong&gt;camarader&amp;iacute;as de profesionales excelentes&lt;/strong&gt;. El hoy por ti y ma&amp;ntilde;ana por m&amp;iacute;. El &amp;ldquo;yo cubro tus espaldas&amp;rdquo;. El evitar el af&amp;aacute;n de protagonismo. Todo ello deriva en un &lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;EQUIPO&lt;/span&gt;&lt;/strong&gt;. Un &lt;strong&gt;EQUIPO con may&amp;uacute;sculas&lt;/strong&gt; pues se otorgan palabrer&amp;iacute;as de este tipo a colectivos que ni siquiera llegan a ser meros colegas profesionales sobre los que por encima suyo no hay m&amp;aacute;s que un &lt;strong&gt;f&amp;oacute;sil profesional que oculta sus fracasos con su protagonismo inoportuno.&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Si no se cumplen los requisitos humanos y &amp;eacute;ticos es imposible construir cualquier modelo de defensa. Sencillamente todo lo que toque dicha organizaci&amp;oacute;n estar&amp;aacute; sentenciado a muerte y seguramente se llevar&amp;aacute; por delante a alguien (en el mejor de los casos).&lt;/p&gt;
&lt;p align="justify"&gt;&amp;nbsp;&lt;strong&gt;&amp;iexcl;Muerte a la hipocres&amp;iacute;a! &amp;iexcl;Viva el sacrificio!&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=157669" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Opini_26002300_243_3B00_n/default.aspx">Opini&amp;#243;n</category></item><item><title>¡Más de 200 asistentes registrados en el Code Camp Tarragona 2009!</title><link>http://geeks.ms/blogs/jmtorres/archive/2009/10/07/161-m-225-s-de-200-asistentes-registrados-en-el-code-camp-tarragona-2009.aspx</link><pubDate>Tue, 06 Oct 2009 22:24:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:157494</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=157494</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2009/10/07/161-m-225-s-de-200-asistentes-registrados-en-el-code-camp-tarragona-2009.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/logo500_5F00_6A04BA08.png"&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/sticker_5F00_28F578FD.png"&gt;&lt;img border="0" src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/sticker_5F00_28F578FD.png" style="border:0;float:left;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pues si, por encima de nuestras estimaciones iniciales, el &lt;strong&gt;Code Camp Tarragona 2009&lt;/strong&gt; se postula como uno de los eventos de comunidad m&amp;aacute;s importantes del a&amp;ntilde;o 2009. M&amp;aacute;s de &lt;a href="http://www.codecamp.es/Sesiones.aspx"&gt;30 sesiones&lt;/a&gt; y &lt;a href="http://www.codecamp.es/Speakers.aspx"&gt;30 speakers&lt;/a&gt; y con &lt;a href="http://www.codecamp.es/Sponsors.aspx"&gt;9 patrocinadores y 3 colaboraciones&lt;/a&gt; el &lt;strong&gt;Code Camp Tarragon 2009&lt;/strong&gt; tiene todos los ingrendientes para ser todo un referente. &lt;/p&gt;
&lt;p&gt;No hay escusas. Asistentes de Madrid, Sevilla, Galicia, Bilbao,&amp;nbsp;Valencia, Malaga, Albacete,,, pr&amp;aacute;cticamente desde todos los rincones de Espa&amp;ntilde;a van a estar con nosotros. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/logo500_5F00_6A04BA08.png"&gt;&lt;/a&gt;Un fin de semana en un Hotel de 4 estrellas en las espectaculares playas de&amp;nbsp;La Pineda con los mayores expertos de .NET y de MONO de todo el pa&amp;iacute;s a nuestra disposici&amp;oacute;n. &amp;iquest;Que m&amp;aacute;s podemos pedir?&lt;/p&gt;
&lt;p&gt;&amp;iexcl;An&amp;iacute;mate y haznos compa&amp;ntilde;ia!&lt;/p&gt;
&lt;p&gt;&lt;img border="0" src="http://wwwdelivery.superstock.com/WI/223/1439/PreviewComp/SuperStock_1439R-97087.jpg" style="max-width:550px;border:0;" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;M&amp;aacute;s info: &lt;a href="http://www.codecamp.es"&gt;www.codecamp.es&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/logo500_5F00_6A04BA08.png"&gt;&lt;img border="0" src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/logo500_5F00_6A04BA08.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=157494" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Comunidad/default.aspx">Comunidad</category></item><item><title>Listado de recursos de desarrollo para Windows Mobile 6.5</title><link>http://geeks.ms/blogs/jmtorres/archive/2009/10/05/listado-de-recursos-de-desarrollo-para-windows-mobile-6-5.aspx</link><pubDate>Mon, 05 Oct 2009 20:52:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:157443</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=157443</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2009/10/05/listado-de-recursos-de-desarrollo-para-windows-mobile-6-5.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;A continuaci&amp;oacute;n detallo un conjunto de recursos para Windows Mobile 6.X/6.5:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;table border="1" width="763" cellpadding="0" cellspacing="0" style="border-right:medium none;border-top:medium none;border-left:medium none;border-bottom:medium none;border-collapse:collapse;mso-border-top-alt:solid #4f81bd 1.0pt;mso-border-top-themecolor:accent1;mso-border-bottom-alt:solid #4f81bd 1.0pt;mso-border-bottom-themecolor:accent1;mso-yfti-tbllook:1056;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" class="MsoTableLightShadingAccent1"&gt;
&lt;thead&gt;
&lt;tr style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="border-right:medium none;padding-right:5.4pt;border-top:#4f81bd 1pt solid;padding-left:5.4pt;padding-bottom:0cm;border-left:medium none;width:108.05pt;padding-top:0cm;border-bottom:#4f81bd 1pt solid;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Titulo&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="border-right:medium none;padding-right:5.4pt;border-top:#4f81bd 1pt solid;padding-left:5.4pt;padding-bottom:0cm;border-left:medium none;width:107.35pt;padding-top:0cm;border-bottom:#4f81bd 1pt solid;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Tipo&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="border-right:medium none;padding-right:5.4pt;border-top:#4f81bd 1pt solid;padding-left:5.4pt;padding-bottom:0cm;border-left:medium none;width:249.05pt;padding-top:0cm;border-bottom:#4f81bd 1pt solid;mso-border-top-themecolor:accent1;mso-border-bottom-themecolor:accent1;"&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Descripci&amp;oacute;n&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style="height:40.45pt;mso-yfti-irow:0;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:108.05pt;padding-top:0cm;height:40.45pt;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee373423.aspx"&gt;Programming for Windows Mobile 6.5&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:107.35pt;padding-top:0cm;height:40.45pt;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Art&amp;iacute;culo&lt;/span&gt; &lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:249.05pt;padding-top:0cm;height:40.45pt;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;" lang="EN-US"&gt;Presenta todos los recursos Online para Windows Mobile 6.5&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:1;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:108.05pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd938878.aspx"&gt;Developing Web Applications for Internet Explorer Mobile 6 on Windows Mobile 6.5&lt;/a&gt;&lt;/span&gt;&lt;span class="MsoHyperlink"&gt;&lt;span lang="EN-US"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:107.35pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Art&amp;iacute;culo&lt;/span&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;/span&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:249.05pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;" lang="EN-US"&gt;Como sacar el m&amp;aacute;ximo provecho a las nuevas caracter&amp;iacute;sticas del navegador Internet Explorer Mobile de Windows Mobile 6.5.&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:2;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:108.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd721906.aspx"&gt;Developing Widgets for Windows Mobile 6.5&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:107.35pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Art&amp;iacute;culo&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:249.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;" lang="EN-US"&gt;Desarrollar Widgets para Windows Mobile 6.5.&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:3;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:108.05pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd938890.aspx"&gt;Creating Location-Aware Applications for Windows Mobile Devices&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:107.35pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Art&amp;iacute;culo&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:249.05pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;" lang="EN-US"&gt;Desarrollo de aplicaciones basadas en los Servicios Basados en Localizaci&amp;oacute;n para Windows Mobile 6.x.&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:4;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:108.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd630622.aspx"&gt;Creating a Compelling UI for Windows Mobile and the Microsoft .NET Compact Framework&lt;/a&gt;&lt;/span&gt;&lt;span class="MsoHyperlink"&gt;&lt;span lang="EN-US"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:107.35pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Art&amp;iacute;culo &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:249.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;" lang="EN-US"&gt;Aprende a utilizar las API&amp;rsquo;s de la plataforma &lt;/span&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;" lang="EN-US"&gt;Windows Mobile&amp;reg; para aumentar la experiencia de usuario.&lt;/span&gt;&lt;span style="font-size:8.5pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;" lang="EN-US"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:5;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:108.05pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd630621.aspx"&gt;Selecting a Windows Mobile API - .NET Compact Framework and Win32&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:107.35pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Art&amp;iacute;culo &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:249.05pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;" lang="EN-US"&gt;Este art&amp;iacute;culo habla acerca de Microsoft&amp;reg; Win32&amp;reg; API y las APIs de Microsoft .NET Compact Framework (NETCF) para Windows Mobile&amp;reg; 6 y posterior.&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:6;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:108.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd721907.aspx"&gt;Getting Started with Building Windows Mobile Solutions with Visual Studio and Windows Mobile 6 SDK&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:107.35pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Art&amp;iacute;culo &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:249.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;" lang="EN-US"&gt;Como empezar en el desarrollo de aplicaciones para Windows Mobile&amp;reg; utilizando las mismas herramientas que entornos Desktop con Microsoft&amp;reg; Visual Studio&amp;reg; 2008, y espec&amp;iacute;ficamente para Microsoft .NET Compact Framework 3.5. Tambi&amp;eacute;n describe como utilizar las herramientas contenidas en el Windows Mobile SDK. &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:7;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:108.05pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd938877.aspx"&gt;Optimizing Query and DML Performance with SQL Server Compact Edition 3.5 and SqlCeResultSet&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:107.35pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Art&amp;iacute;culo &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:249.05pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;" lang="EN-US"&gt;Comparaci&amp;oacute;n en la inserci&amp;oacute;n y manipulaci&amp;oacute;n de filas utilizando Microsoft&amp;reg; SQL Server&amp;reg; Compact Edition 3.5 SP1, con un especial enfoque para el usuario acerca de c&amp;oacute;mo utilizar los objetos &lt;strong&gt;&lt;span style="font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-theme-font:minor-bidi;"&gt;SqlCeResultSet&lt;/span&gt;&lt;/strong&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:8;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:108.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd938879.aspx"&gt;Programming Microsoft Synchronization Services for ADO.NET (Devices)&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:107.35pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Art&amp;iacute;culo &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:249.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;" lang="EN-US"&gt;Una de las caracter&amp;iacute;sticas m&amp;aacute;s importantes de Microsoft&amp;reg; SQL Server&amp;reg; Compact Edition 3.5 SP1 es el soporte a Microsoft Synchronization Services for ADO.NET. Esta tecnolog&amp;iacute;a de sincronizaci&amp;oacute;n permite la sincronizaci&amp;oacute;n de diferentes or&amp;iacute;genes de datos para entornos dos, N capas y arquitecturas orientadas a Servicios.&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:9;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:108.05pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee355030.aspx"&gt;Porting the Amplitude Application from the iPhone to a Windows Mobile Device &amp;ndash; a Case Study&lt;/a&gt;&lt;/span&gt;&lt;span class="MsoHyperlink"&gt;&lt;span lang="EN-US"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:107.35pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Art&amp;iacute;culo &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:249.05pt;padding-top:0cm;"&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;" lang="EN-US"&gt;Case de estudio documentado de portaci&amp;oacute;n de aplicaci&amp;oacute;n iPhone a dispositivo Windows Mobile 6.5. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:10;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:108.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://windowsteamblog.com/blogs/windowsphone/archive/2009/07/26/windows-mobile-application-verifier.aspx"&gt;Application Verifier&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:107.35pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Blog post &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:249.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;" lang="EN-US"&gt;Detalles acerca de los pasos necesarios para la certificaci&amp;oacute;n de una aplicaci&amp;oacute;n al nuevo Marketplace.&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:11;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:108.05pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://windowsteamblog.com/blogs/windowsphone/pages/just-say-no-to-gapi-what-you-need-to-know-about-allkeys-and-input-management.aspx"&gt;GAPI Deprecation&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:107.35pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Blog post &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:249.05pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;" lang="EN-US"&gt;El Games API (GAPI) est&amp;aacute; obsoleto y este post habla de alternativas. &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:12;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:108.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://mobile.codeplex.com/"&gt;patterns &amp;amp; practices: Mobile Application Blocks - Community Release (was solution factory)&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:107.35pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Codigo&lt;/span&gt; &lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:249.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;" lang="EN-US"&gt;Permite a los desarrolladores desarrollar aplicaciones mobile basadsa en VS2008, .NET CF 3.5 y WM6.1. Basado en el block de Mobile Client Software Factory v1, July 2006 e incluye mejoras realizadas por Microsoft Dynamics Mobile PU. &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:13;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:108.05pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee220920.aspx"&gt;Using Gestures in Windows Mobile 6.5&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:107.35pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Documentaci&amp;oacute;n&lt;/span&gt; &lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:249.05pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8.5pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;" lang="EN-US"&gt;Documentaci&amp;oacute;n para la nueva API de Windows Mobile para el reconocimiento de trazas, Gesture API de Windows Mobile 6.5. &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:64.75pt;mso-yfti-irow:14;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:108.05pt;padding-top:0cm;height:64.75pt;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=06111A3A-A651-4745-88EF-3D48091A390B&amp;amp;displaylang=en"&gt;Windows Mobile 6 Professional and Standard Software Development Kits Refresh&lt;/a&gt;&lt;/span&gt;&lt;span class="MsoHyperlink"&gt;&lt;span lang="EN-US"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:107.35pt;padding-top:0cm;height:64.75pt;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Descarga&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:249.05pt;padding-top:0cm;height:64.75pt;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;" lang="EN-US"&gt;Requisito para Windows Mobile 6.5 Developer Toolkit (DTK)&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="height:59.8pt;mso-yfti-irow:15;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:108.05pt;padding-top:0cm;height:59.8pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=20686a1d-97a8-4f80-bc6a-ae010e085a6e"&gt;Windows Mobile 6.5 Developer Tool Kit&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:107.35pt;padding-top:0cm;height:59.8pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Descarga&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:249.05pt;padding-top:0cm;height:59.8pt;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;" lang="EN-US"&gt;Windows Mobile 6.5 Developer Tool Kit (documentaci&amp;oacute;n, emuladores,&amp;hellip;).&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:16;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:108.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://msdn.microsoft.com/en-us/windowsmobile/bb264329.aspx"&gt;6.5 Developer Resource Kit: (External Order Page)&lt;/a&gt;&lt;/span&gt;&lt;span class="MsoHyperlink"&gt;&lt;span lang="EN-US"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:107.35pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;DVD &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:249.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:17;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:108.05pt;padding-top:0cm;"&gt;&amp;nbsp;&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:107.35pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;FAQ &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:249.05pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;" lang="EN-US"&gt;FAQ de Marketplace &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:18;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:108.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://msdn.microsoft.com/en-us/windowsmobile/bb495180.aspx"&gt;&amp;lsquo;How Do I&amp;rsquo; videos&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:107.35pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Videos&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:249.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:19;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:108.05pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://msdn.microsoft.com/en-us/rampup/dd807370.aspx"&gt;Ramp Up, Windows Mobile 6&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:107.35pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Webcasts &amp;amp; Hands on labs&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:249.05pt;padding-top:0cm;"&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;" lang="EN-US"&gt;Programa RampUp para desarrollo con Windows Mobile 6.x&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:20;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:108.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://www.microsoft.com/events/series/msdnmobility.aspx?tab=webcasts"&gt;Windows Mobile Webcasts&lt;/a&gt;&lt;/span&gt;&lt;span class="MsoHyperlink"&gt;&lt;span lang="EN-US"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:107.35pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Webcasts &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:249.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;" lang="EN-US"&gt;Dos webcast espec&amp;iacute;ficos para el nuevo API de Gesture.&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:21;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:108.05pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://fluid.codeplex.com/"&gt;Fluid - Windows Mobile 6.x Touch Controls&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:107.35pt;padding-top:0cm;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Codigo &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;padding-bottom:0cm;width:249.05pt;padding-top:0cm;"&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;" lang="EN-US"&gt;Libreria para .NET 2.0 para Windows Mobile 6.0/6.1 con controles Touch. &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="mso-yfti-irow:22;page-break-inside:avoid;"&gt;
&lt;td width="172" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:108.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=428e4c3d-64ad-4a3d-85d2-e711abc87f04"&gt;Windows Mobile Line of Business Solution Accelerator 2008&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="170" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:107.35pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="color:#365f91;mso-themecolor:accent1;mso-themeshade:191;" lang="EN-US"&gt;Descarga&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="419" valign="top" style="padding-right:5.4pt;padding-left:5.4pt;background:#d3dfee;padding-bottom:0cm;width:249.05pt;padding-top:0cm;mso-background-themecolor:accent1;mso-background-themetint:63;"&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;" lang="EN-US"&gt;Windows Mobile Line of Business Solution Accelerator es un ejemplo de aplicaci&amp;oacute;n Windows Mobile que muestra el uso de diferentes tecnologias (WCF, Sync Services, multi idioma, etc.) en una misma aplicaci&amp;oacute;n.&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=157443" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category></item><item><title>[SyncComm] Nueva versión 0.95 en Codeplex</title><link>http://geeks.ms/blogs/jmtorres/archive/2009/09/04/synccomm-nueva-versi-243-n-0-95-en-codeplex.aspx</link><pubDate>Fri, 04 Sep 2009 21:35:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:155289</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=155289</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2009/09/04/synccomm-nueva-versi-243-n-0-95-en-codeplex.aspx#comments</comments><description>&lt;p&gt;Con un poco de retraso, pues tenia pensado publicar esta versi&amp;oacute;n a principios de agosto, acabo de publicar la &lt;b&gt;&lt;a href="http://synccomm.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30495" target="_blank"&gt;nueva versi&amp;oacute;n&lt;/a&gt; (0.95)&lt;/b&gt; de &lt;a href="http://geeks.ms/blogs/jmtorres/archive/2009/06/22/componentes-wcf-de-comunicaci-243-n-para-sync-services-for-ado-net-for-devices.aspx" target="_blank"&gt;SyncComm&lt;/a&gt;. Como novedades:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nueva gesti&amp;oacute;n de excepciones&lt;/li&gt;
&lt;li&gt;Corregidos algunos BUGs&lt;/li&gt;
&lt;li&gt;Mas flexibilidad en el uso de las propiedades de los enlaces para &lt;b&gt;HttpBinding &lt;/b&gt;y &lt;b&gt;CompressedBinding&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;Modificados los namespace&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Nueva gesti&amp;oacute;n de excepciones&lt;/h2&gt;
&lt;p align="justify"&gt;&lt;b&gt;SyncComm&lt;/b&gt; aporta una forma de propagaci&amp;oacute;n de excepciones en el proceso de sincronizaci&amp;oacute;n mediante &lt;b&gt;Sync Services for ADO.NET &lt;/b&gt;y el proveedor remoto de sincronizaci&amp;oacute;n expuesto en un servicio &lt;b&gt;WCF&lt;/b&gt;. B&amp;aacute;sicamente, el proxy generado por la herramienta de generaci&amp;oacute;n &lt;b&gt;netcfsvcutil.exe&lt;/b&gt; y que se utiliz&amp;oacute;, con algunas modificaciones para llevar a cabo las sincronizaciones, en las versiones iniciales, no procesaba las excepciones o mensajes &lt;b&gt;&lt;i&gt;fault&lt;/i&gt;&lt;/b&gt; propagados por el servicio WCF. Siguiendo la &lt;b&gt;&lt;a href="http://wcfguidanceformobile.codeplex.com/" target="_blank"&gt;Guia WCF para desarrolladores Mobile&lt;/a&gt;&lt;/b&gt;, publicada tambi&amp;eacute;n en &lt;b&gt;codeplex&lt;/b&gt;, mi primer acercamiento fue el de utilizar el proyecto &lt;b&gt;Mobile.ServiceModelEx&lt;/b&gt; expuesto por los autores, el cual solucionaba en gran medida toda la gesti&amp;oacute;n de excepciones entre el servicio WCF y el terminal m&amp;oacute;vil. Sin embargo, &amp;uacute;nicamente era v&amp;aacute;lido para enlaces cuya vers&amp;oacute;n de mensaje fuera &lt;b&gt;MessageVersion.Soap11,&lt;/b&gt; o mejor dicho, la implementaci&amp;oacute;n para otras versiones de mensaje no est&amp;aacute; implementada. El problema es que &lt;b&gt;SyncComm &lt;/b&gt;utilitza un enlace con compresi&amp;oacute;n, mediante &lt;b&gt;GZip encoder&lt;/b&gt;, y cuya versi&amp;oacute;n de mensaje SOAP es &lt;b&gt;MessageVersion.Soap12WSAddressing10&lt;/b&gt;. Despu&amp;eacute;s de algunos intentos de comunicaci&amp;oacute;n con los autores, todos sin &amp;eacute;xito, decid&amp;iacute; implementar dicha caracter&amp;iacute;sticas para ambas versiones de mensajes SOAP y pese a que no est&amp;aacute; tan avanzada como &lt;b&gt;Mobile.ServiceModelEx&lt;/b&gt;, lo cierto es que cubre los requisitos necesario para la propagaci&amp;oacute;n eficiente de cualquier tipo de anomal&amp;iacute;a durante el proceso de sincronizaci&amp;oacute;n y la posterior captura y proceso desde el cliente.&lt;/p&gt;
&lt;p&gt;Ahora seriamos capaces de propagar mensajes de error desde el servicio WCF de la siguiente forma:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (SqlException sqlex)&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;     Guid id = Guid.NewGuid();&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//display detailed exception information on console&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;     Notification.Invoke(DateTime.Now, &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format (&lt;span style="color:#006080;"&gt;&amp;quot;Exception {0}: {1}&amp;quot;&lt;/span&gt;, id.ToString(), sqlex.Message));&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//throw and exception for being catch by client&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; FaultException&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;(sqlex.Message, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; FaultReason(&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;                     &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; FaultReasonText(&lt;span style="color:#006080;"&gt;&amp;quot;SQL Server is not available. Please try later.&amp;quot;&lt;/span&gt;)),&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;         FaultCode.CreateSenderFaultCode(id.ToString(), &lt;span style="color:#006080;"&gt;&amp;quot;urn:synccomm.com/2009/07/ISyncService&amp;quot;&lt;/span&gt;));&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt; }&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (Exception e)&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt;     Guid id = Guid.NewGuid();&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum19"&gt;  19:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum20"&gt;  20:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//display detailed exception information on console&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum21"&gt;  21:&lt;/span&gt;     Notification.Invoke(DateTime.Now, &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum22"&gt;  22:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format (&lt;span style="color:#006080;"&gt;&amp;quot;Exception {0}: {1}&amp;quot;&lt;/span&gt;,id.ToString(),e.Message));&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum23"&gt;  23:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum24"&gt;  24:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; FaultException&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;(e.Message, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; FaultReason(&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum25"&gt;  25:&lt;/span&gt;                     &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; FaultReasonText(&lt;span style="color:#006080;"&gt;&amp;quot;SyncService unavailable. Contact SyncService support.&amp;quot;&lt;/span&gt;)),&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum26"&gt;  26:&lt;/span&gt;         FaultCode.CreateSenderFaultCode(id.ToString(), &lt;span style="color:#006080;"&gt;&amp;quot;urn:synccomm.com/2009/07/ISyncService&amp;quot;&lt;/span&gt;));&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum27"&gt;  27:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum28"&gt;  28:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Capturarlos desde la aplicaci&amp;oacute;n &lt;b&gt;.NET Compact Framework &lt;/b&gt;como exepci&amp;oacute;n del tipo &lt;b&gt;CFFaultSyncException,&lt;/b&gt; dejando los tipos &lt;b&gt;CommunicationException&lt;/b&gt; y &lt;b&gt;Exception&lt;/b&gt;, para excepciones relativas a la comunicaci&amp;oacute;n y otros tipos de excepciones, respectivamente.&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (CFFaultSyncException faultEx)&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;     Cursor.Current = Cursors.Default;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;     MessageBox.Show(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;FaultCode: {0}\r\nFaultReason: {1}\r\nHasDetail: {2}&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;         faultEx.FaultCode, faultEx.FaultMessage, faultEx.HasDetail));&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt; }&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (CommunicationException communicationException )&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//is the emulator cradled? does it reach SyncService endpoint?&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;     MessageBox.Show(communicationException.Message);&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt; }&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (Exception e)&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//something is not configured properly&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt;     MessageBox.Show(e.Message);&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//HResult -2146233087 maybe database must be reinitialize&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum19"&gt;  19:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum20"&gt;  20:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;De forma que podemos mostrar un mensaje &lt;b&gt;m&amp;aacute;s amigable&lt;/b&gt; por pantalla mientras registramos el error t&amp;eacute;cnico (opcional) para su posterior estudio. Adem&amp;aacute;s, todas las excepciones (representadas por la clase &lt;b&gt;CFFaulSyncException&lt;/b&gt;) tienen un identificador &amp;uacute;nico (&lt;b&gt;System.Guid&lt;/b&gt;) lo cual permite registrar dicha excepci&amp;oacute;n tanto en el servidor como en el cliente:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/ServerExceptionConsole.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/ServerExceptionConsole.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Si dese&amp;aacute;is informaci&amp;oacute;n m&amp;aacute;s detallada &lt;a href="http://perishabledata.blogspot.com/2009/09/synccomm-095-exception-handling.html" target="_blank"&gt;aqu&amp;iacute;&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Corregidos algunos Bug&lt;/h2&gt;
&lt;p&gt;Como toda nueva versi&amp;oacute;n, se han corregido varios Bugs, tanto registrados desde el site del proyecto como encontrados durante el proceso de desarrollo. El m&amp;aacute;s significativo es el encontrado en los scripts.sql de generaci&amp;oacute;n del esquema de seguimiento de modificaciones para bases de datos que utilizan mecanismos de seguimiento personalizados.&lt;/p&gt;
&lt;h2&gt;Mas flexibilidad en el uso de las propiedades de los enlaces para &lt;b&gt;HttpBinding &lt;/b&gt;y &lt;b&gt;CompressedBinding&lt;/b&gt;.&lt;/h2&gt;
&lt;p&gt;Una de las peticiones de algunos desarrolladores fue la posiblidad de incrementar el tama&amp;ntilde;o m&amp;aacute;ximo del mensaje, el cual se realiza a trav&amp;eacute;s de una de las propiedades del enlace. Como tal, se han creado dos m&amp;eacute;todos en&amp;nbsp; &lt;b&gt;ClientBase.cs&lt;/b&gt; los cuales gestionan todas las propiedades relativas los enlaces de la comunicaci&amp;oacute;n con WCF. En el siguiente ejemplo podemos ver uno de ellos. B&amp;aacute;sicamente se agrupa en un mismo m&amp;eacute;todo la forma en la que se va crear el enlace al canal de comunicaci&amp;oacute;n expuesto por WCF, de forma que la simple modificaci&amp;oacute;n de las propiedades como &lt;b&gt;MaxReceiveMessageSize&lt;/b&gt; para el enlace de compresi&amp;oacute;n se concentran en un &amp;uacute;nico m&amp;eacute;todo. Lo mismo sucede para el enalce b&amp;aacute;sico mediante &lt;b&gt;HttpBinding&lt;/b&gt;.&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//NOTE:&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//set compressed endpoint binding custom properties here&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; System.ServiceModel.Channels.Binding CreateCompressionBinding()&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;// Create a CustomBinding&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;     var customBinding = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CustomBinding();&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;// Create a compression binding element&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;     var compressionBindingElmnt = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CompressionMessageEncodingBindingElement();&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;// ..and add to the custom binding&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;     customBinding.Elements.Add(compressionBindingElmnt);&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;     &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;// Create an HttpTransportBindingElement and add that as well&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;     var httpBindingElement = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; HttpTransportBindingElement();&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//TODO&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//Set here desired values. Take care to match such values &lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//in app.config in SyncComm host project&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum19"&gt;  19:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//max buffer size&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum20"&gt;  20:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//httpBindingElement.MaxBufferSize = int.MaxValue;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum21"&gt;  21:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//max received message size&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum22"&gt;  22:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//httpBindingElement.MaxReceivedMessageSize = long.MaxValue;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum23"&gt;  23:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//max buffer pool size&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum24"&gt;  24:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//httpBindingElement.MaxBufferPoolSize = long.MaxValue;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum25"&gt;  25:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum26"&gt;  26:&lt;/span&gt;     customBinding.Elements.Add(httpBindingElement);&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum27"&gt;  27:&lt;/span&gt;             &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum28"&gt;  28:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; customBinding;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum29"&gt;  29:&lt;/span&gt;             &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum30"&gt;  30:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Por consiguiente y debido a que en versiones anteriores estos objetos se instanciaban desde la aplicaci&amp;oacute;n .NET CF Windows Form(&lt;b&gt;AppMobileSync&lt;/b&gt;) y ahora han pasado al la librer&amp;iacute;a (tambi&amp;eacute;n .NET CF) &lt;b&gt;SyncComm.Proxy.dll &lt;/b&gt;se ha aprovechado para que la instanacia del objecto &lt;b&gt;SyncComm.Proxy.ServiceClient &lt;/b&gt;sea mas sencilla desde &lt;b&gt;AppMobileSync&lt;/b&gt;. Ahora &amp;uacute;nicamente debemos indicar la direcci&amp;oacute;n del &lt;b&gt;EndPoint&lt;/b&gt; y su respectivo &amp;ldquo;&lt;i&gt;tipo de enlace&lt;/i&gt;&amp;rdquo;. Dicho &amp;ldquo;tipo de enlace&amp;rdquo; se representa mediante el enumerador:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; SyncComm.Proxy&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;/// Specify constants defining which endpoint binding to use&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;enum&lt;/span&gt; BindingType&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;     {&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;/// Use basic endpoint binding&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;         Basic,&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;/// Use compressed endpoint binding&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;         Compressed&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;     }&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Y por lo tanto la instancia de un objeto &lt;b&gt;SyncComm.Proxy&lt;/b&gt;.&lt;b&gt;ServiceClient &lt;/b&gt;ser&amp;aacute; tan sencillo como:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//NOTE: For compressed endpoint binding use this&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; var endPoint = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; EndpointAddress(&lt;span style="color:#006080;"&gt;&amp;quot;http://10.0.2.15:9999/SyncService/GZip&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; var s = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ServiceClient(endPoint, BindingType.Compressed);&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//NOTE: For basic endpoint use this&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt; var endPoint = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; EndpointAddress(&lt;span style="color:#006080;"&gt;&amp;quot;http://10.0.2.15:9999/SyncService/Basic&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt; var s = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ServiceClient(endPoint, BindingType.Basic);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;En lugar de como se hac&amp;iacute;a en versiones anteriore:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Create a CustomBinding&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; var customBinding = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CustomBinding();&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Create a compression binding element&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt; var compressionBindingElmnt = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CompressionMessageEncodingBindingElement();&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// ..and add to the custom binding&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt; customBinding.Elements.Add(compressionBindingElmnt);&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Create an HttpTransportBindingElement and add that as well&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt; var httpBindingElement =&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;                     &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; HttpTransportBindingElement();&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt; customBinding.Elements.Add(httpBindingElement);&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Set endpoint&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt; var endPoint = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; EndpointAddress(&lt;span style="color:#006080;"&gt;&amp;quot;http://10.0.2.15:9999/SyncService/GZip&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#006080;"&gt;://10.0.2.15:9999/SyncService/GZip&amp;quot;&lt;/span&gt;);&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt; &lt;span style="color:#cc6633;"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt; &lt;span style="color:#008000;"&gt;// Create the WCF proxy using the custom binding&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt; var s = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ServiceClient(customBinding,endPoint);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Modificados los namespace&lt;/h2&gt;
&lt;p&gt;Por &amp;uacute;ltimo, se han modificado todos los namespace de los contratos WCF que antes eran inexistente. Ahora todos pasan a ser &lt;i&gt;&lt;b&gt;urn:synccomm/07/2009.&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=155289" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Sync+Services+for+ADO.NET/default.aspx">Sync Services for ADO.NET</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/.NET+Compact+Framework/default.aspx">.NET Compact Framework</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/CodePlex/default.aspx">CodePlex</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/SyncComm/default.aspx">SyncComm</category></item><item><title>Dispositivo Windows Mobile 6.5 a partir del 6 de octubre</title><link>http://geeks.ms/blogs/jmtorres/archive/2009/09/01/dispositivo-windows-mobile-6-5-a-partir-del-6-de-octubre.aspx</link><pubDate>Tue, 01 Sep 2009 14:12:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:155083</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=155083</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2009/09/01/dispositivo-windows-mobile-6-5-a-partir-del-6-de-octubre.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://windowsteamblog.com/blogs/windowsphone/default.aspx"&gt;&lt;img src="http://img.phonescoop.com/img/n/3976_a77204ebe30b6f68a5524141728f5d24.jpg" style="max-width:550px;border:0;float:right;" border="0" height="92" width="90" alt="" /&gt;Ya es oficial&lt;/a&gt;. Apartir del &lt;b&gt;6 de octubre&lt;/b&gt; empezaran a ver la luz la nueva &amp;quot;saga&amp;quot; de dispositivos &lt;b&gt;Windows Mobile 6.5&lt;/b&gt;. &lt;/p&gt;
&lt;p&gt;Se trata de la nueva versi&amp;oacute;n &lt;a href="https://www.microsoft.com/presspass/press/2009/feb09/02-16MWCPR.mspx"&gt;anunciada&lt;/a&gt; en el pasado &lt;b&gt;Mobie World Conference &lt;/b&gt;del pasado mes de febrero que tuvo lugar en Barcelona, junto a la nueva propuesta de Microsoft para el mercado de aplicaciones, Microsoft Marketplace, el cual &lt;a href="http://geeks.ms/blogs/jagallego/archive/2009/05/14/abierto-el-registro-de-desarrolladores-para-marketplace.aspx"&gt;ya se encuentra abierto&lt;/a&gt; a registros de nuevas aplicaciones.&lt;/p&gt;
&lt;p&gt;Por lo que a Espa&amp;ntilde;a y Latino Am&amp;eacute;rica respecta, las operadoras de telefon&amp;iacute;a m&amp;oacute;vil que ofrecer&amp;aacute;n estos nuevos dispositivos ser&amp;aacute;n &lt;b&gt;Orange&lt;/b&gt; y &lt;b&gt;Vodafone&lt;/b&gt; en Espa&amp;ntilde;a y &lt;b&gt;TIM Brasil&lt;/b&gt; as&amp;iacute; como fabricantes como&lt;b&gt; HTC, LG Electronics, Samsung, Acer, Toshiba y Sony Ericsson&lt;/b&gt; los cuales lanzaran nuevas versiones de sus ya conocidos dispositivos como el Touch Diamond 2, Touch Pro 2, Omnia, etc.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=155083" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category></item><item><title>¡¡¡Participa en el CodeCamp Tarragona 2009!!!</title><link>http://geeks.ms/blogs/jmtorres/archive/2009/07/02/161-161-161-participa-en-el-codecamp-tarragona-2009.aspx</link><pubDate>Thu, 02 Jul 2009 13:56:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:151673</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=151673</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2009/07/02/161-161-161-participa-en-el-codecamp-tarragona-2009.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/logo500_5F00_6A04BA08.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;margin-left:0px;border-top:0px;margin-right:0px;border-right:0px;" title="=logo500" alt="=logo500" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/logo500_5F00_thumb_5F00_5D73BA94.png" align="left" border="0" height="212" width="244" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Miembros y coordinadores de los grupos de usuarios &lt;a href="http://www.secondnug.com" target="_blank"&gt;Second NUG&lt;/a&gt;, &lt;a href="http://www.spainnet.org" target="_blank"&gt;Spain.NET&lt;/a&gt;, &lt;a href="http://lonetcamp.com" target="_blank"&gt;LoNetCamp&lt;/a&gt;, &lt;a href="http://andorradotnet.com" target="_blank"&gt;Andorra.NET&lt;/a&gt;, &lt;a href="http://www.bcndev.net" target="_blank"&gt;BCNDEV.NET&lt;/a&gt; y &lt;a href="http://www.catdotnet.org" target="_blank"&gt;CatDotNet&lt;/a&gt; hemos unido nuestras fuerzas en la organizaci&amp;oacute;n conjunta de un codecamp que se llevar&amp;aacute; a cabo &lt;b&gt;los dias 17 y 18 de octubre en Vila-Seca, Tarragona. &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Con m&amp;aacute;s de tres meses de trabajo a nuestras espaldas, y con la colaboraci&amp;oacute;n de &lt;b&gt;Microsoft Ib&amp;eacute;rica&lt;/b&gt;, vamos a llevar a cabo dos d&amp;iacute;as de charlas did&amp;aacute;cticas siguiendo el manifiesto codecamp: sesiones hechas por la comunidad hacia la comunidad.&lt;/p&gt;
&lt;p&gt;Como novedad, &lt;b&gt;CodeCamp Tarragona 2009 &lt;/b&gt;incluir&amp;aacute; un track espec&amp;iacute;fico de &lt;b&gt;&lt;a href="http://www.mono-project.com/Main_Page"&gt;MONO&lt;/a&gt;&lt;/b&gt; con lo que durante el fin de semanas podremos intercambiar opinones y experiencias entre las comunidades &lt;b&gt;MSDN&lt;/b&gt; y &lt;b&gt;MONO&lt;/b&gt; de toda Espa&amp;ntilde;a sobre la tecnolog&amp;iacute;a &lt;b&gt;.NET&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Si est&amp;aacute;is interesados:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si quer&amp;eacute;is saber mas, echadle un vistazo a la p&amp;aacute;gina &lt;a href="http://www.codecamp.es" target="_blank"&gt;Web oficial del codecamp&lt;/a&gt;. Inscr&amp;iacute;bete en el &lt;a href="http://spreadsheets.google.com/viewform?formkey=cnRJNEV3bjhKSlJTeUE1TURNWFpCcnc6MA.."&gt;Pre-Registro&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Para colaborar, proponer sesiones o dejar vuestras opiones hacedlo desde el &lt;a href="http://groups.google.com/group/codecamp-tarragona-2009" target="_blank"&gt;Foro Oficial&lt;/a&gt;, que hemos habilitado para tal fin.&lt;/li&gt;
&lt;li&gt;Tambi&amp;eacute;n pod&amp;eacute;is encontrarnos en &lt;a href="http://www.facebook.com/home.php#/group.php?gid=126170585358&amp;amp;ref=share" target="_blank"&gt;Facebook&lt;/a&gt; o seguirnos por &lt;a href="http://twitter.com/codecamp_es" target="_blank"&gt;Twitter&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Seguiremos informando!!!&lt;a href="http://www.codecamp.es"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="sticker" alt="sticker" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/sticker_5F00_28F578FD.png" border="0" height="69" width="116" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=151673" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Comunidad/default.aspx">Comunidad</category></item><item><title>[SyncComm] Componentes WCF de comunicación para Sync Services for ADO.NET for devices</title><link>http://geeks.ms/blogs/jmtorres/archive/2009/06/22/componentes-wcf-de-comunicaci-243-n-para-sync-services-for-ado-net-for-devices.aspx</link><pubDate>Mon, 22 Jun 2009 21:55:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:150320</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=150320</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2009/06/22/componentes-wcf-de-comunicaci-243-n-para-sync-services-for-ado-net-for-devices.aspx#comments</comments><description>&lt;p&gt;&lt;img src="http://blogs.msdn.com/photos/sync/images/8587511/original.aspx" style="display:inline;margin-left:0px;margin-right:0px;" align="right" height="248" width="174" alt="" /&gt;Dentro de los requisitos que debemos tener en cuenta en el desarrollo de soluciones de sincronizaci&amp;oacute;n de datos para plataformas &lt;b&gt;Windows Mobile&lt;/b&gt; utilizando los servicios&amp;nbsp; &lt;b&gt;Sync Services for ADO.NET 1.0 SP1&lt;/b&gt; se encuentra la comunicaci&amp;oacute;n entre el propio dispositivo m&amp;oacute;vil,&amp;nbsp; donde albergamos tanto el agente de sincronizaci&amp;oacute;n como el proveedor de sincronizaci&amp;oacute;n local, y el servidor d&amp;oacute;nde reside el proveedor de sincronizaci&amp;oacute;n remoto el cual exponemos a trav&amp;eacute;s de un &lt;b&gt;servicio Web &lt;/b&gt;o &lt;b&gt;WCF.&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Para el uso de&lt;b&gt; WCF&lt;/b&gt; en &lt;b&gt;.NET Compact Framework&lt;/b&gt;, el equipo de desarrollo de&lt;b&gt; &lt;a target="_blank" href="http://blogs.msdn.com/sync/"&gt;Microsoft Sync Framework&lt;/a&gt;&lt;/b&gt; public&amp;oacute; en su&lt;b&gt; blog&lt;/b&gt; &lt;a target="_blank" href="http://blogs.msdn.com/sync/archive/2008/07/14/using-wcf-for-communcation-in-a-mobile-sync-application.aspx"&gt;unos trucos para la configuraci&amp;oacute;n de este tipo de aplicaciones&lt;/a&gt;. En dicho post se describen los puntos que se han de seguir para la correcta exposici&amp;oacute;n de un proveedor remoto en &lt;b&gt;WCF&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;A partir de esa idea, empec&amp;eacute; a desarrollar unas librer&amp;iacute;as de forma que pudieran ser reutilizadas y sirvieran, a su vez, como punto de partida para todos aqu&amp;eacute;llos interesados en este tipo de aplicaciones. Dichas librer&amp;iacute;as se encuentran bajo el proyecto &lt;b&gt;SyncComm&lt;/b&gt; y pueden ser descargadas, c&amp;oacute;digo abierto, desde &lt;b&gt;CodePlex&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;SyncComm&lt;/b&gt; es un proyecto que cuenta adem&amp;aacute;s con la colaboraci&amp;oacute;n de &lt;b&gt;&lt;a target="_blank" href="http://wmugperu.org/blogs/cfong/default.aspx"&gt;Cesar Fong&lt;/a&gt;&lt;/b&gt; y el cual pretende ser un punto de partida, como dije anteriormente, para el desarrollo de soluciones de sincronizaci&amp;oacute;n para dispositivos m&amp;oacute;viles. Este proyecto viene acompa&amp;ntilde;ado de una aplicaci&amp;oacute;n muy b&amp;aacute;sica de ejemplo y por el momento &lt;b&gt;SyncComm&lt;/b&gt; est&amp;aacute; en fase Beta, esperando poder aportar otras caracter&amp;iacute;sticas interesantes como la seguridad o la gesti&amp;oacute;n de excepciones, entre otras. Seguiremos informando. ;-))&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;a href="http://synccomm.codeplex.com/"&gt;SyncComm&lt;/a&gt; [&lt;a href="http://synccomm.codeplex.com"&gt;http://synccomm.codeplex.com&lt;/a&gt;]&lt;/h1&gt;
&lt;h3&gt;Purposes&lt;/h3&gt;
&lt;p&gt;SyncComm is intended to be used as starter point with Sync Services for ADO.NET 1.0 for devices. SyncComm shows how to implement the WCF communication layer based on Microsoft Sync Framework team&amp;#39;s tips. See: &lt;a href="http://blogs.msdn.com/sync/archive/2008/07/14/using-wcf-for-communcation-in-a-mobile-sync-application.aspx"&gt;http://blogs.msdn.com/sync/archive/2008/07/14/using-wcf-for-communcation-in-a-mobile-sync-application.aspx&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Technologies&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=75FEF59F-1B5E-49BC-A21A-9EF4F34DE6FC&amp;amp;displaylang=en"&gt;Sync Services for ADO.NET 1.0 for devices (SP1)&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx"&gt;Windows Communication Foundation&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/Downloads/details.aspx?familyid=06111A3A-A651-4745-88EF-3D48091A390B&amp;amp;displaylang=en"&gt;Windows Mobile 5.0/6.x SDK&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/default.aspx"&gt;SQL Server 2005/2008&lt;/a&gt;. Also you can use &lt;a href="http://www.microsoft.com/downloadS/details.aspx?familyid=B5D1B8C3-FDA5-4508-B0D0-1311D670E336&amp;amp;displaylang=es"&gt;SQL Server 2008 Express with Advanced Services&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=FCE9ABBF-F807-45D6-A457-AB5615001C8F&amp;amp;displaylang=en"&gt;SQL Server Compact 3.5 SP1 for Windows Mobile&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Related Resources &lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Documentation 
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/sync/archive/2008/07/14/using-wcf-for-communcation-in-a-mobile-sync-application.aspx"&gt;Using WCF for Communications in a Mobile Sync Application by Sync Framework team&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://mobileworld.appamundi.com/blogs/andywigley/archive/2008/12/08/building-a-sync-services-for-ado-net-solution-for-mobile-devices.aspx"&gt;Building a Sync Services for ADO.NET Solution for Mobile Devices&lt;/a&gt; by Andy Wigley &lt;/li&gt;
&lt;li&gt;&lt;a href="http://mobileworld.appamundi.com/blogs/andywigley/archive/2009/04/27/sync-services-implementing-batching-to-reduce-data-transfer-volumes.aspx"&gt;Sync Services: Implementing Batching to Reduce Data Transfer Volumes&lt;/a&gt; by Andy Wigley &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/maagniho"&gt;GZip message encoding for WCF applications written using .Net Compact Framework&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;In order to make using of compression encoders for WCF&amp;rsquo;s Endpoint it will be necessary to download: 
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=108652"&gt;*Microsoft.Samples.Indigo.GzipEncoder* project&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;b&gt;GZipEncoder project&lt;/b&gt; --&amp;gt; You will find this project at &lt;b&gt;&amp;lt;InstallationPath&amp;gt;\WCF\Extensibility\MessageEncoder\Compression\CS\GZipEncoder&lt;/b&gt; after executing &lt;a href="http://go.microsoft.com/fwlink/?LinkId=87352"&gt;WCF_WF_Samples.exe.&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;SyncComm: Projects descriptions&lt;/h3&gt;
&lt;p&gt;Basically, SyncComm has two projects for both client (WCF Service Proxy) and server (WCF Service) sides. Moreover, a Service Host Console for hosting WCF Service, DbServerSyncProvider demo project and Windows Forms application for Windows Mobile 5.0 is provided (it also works over Windows Mobile 6.0, Windows Mobile 6.1 and Windows Mobile 6.5). &lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=synccomm&amp;amp;DownloadId=71229" alt="SyncComm.png" title="SyncComm.png" /&gt; &lt;br /&gt;&lt;i&gt;Image1.- SyncComm architecture&lt;/i&gt;&lt;/p&gt;
&lt;h4&gt;SyncComm projects&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;SyncComm.Services&lt;/b&gt;: contains the WCF Service definition (ISyncService) needed for any solution based on n-tier Sync Services for ADO.NET. This project may be used for your own project by adapting remote provider application class to your database schema and requirements. (See Customizing SyncComm components for your own project below) &lt;/li&gt;
&lt;li&gt;&lt;b&gt;SyncComm.Services.Host&lt;/b&gt;: hosts WFC Service into basic Console application. It could be replaced by either IIS, WinForms app, Windows Service or WAS. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;SyncApp.RemoteProvider&lt;/b&gt;: This project contains the remote sync provider class for SQL Server database sample as well as AppRemoteProvider helper class that simplify DBRemoteProvider extended class. However, the purpose of this class is to get familiarized with this kind of solution. Is strongly recommended you use your own approach according to Microsoft guidelines you would find on Sync Service for ADO.NET 1.0 SP1 library. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;i&gt;GZipEncoder&lt;/i&gt;&lt;/b&gt;: &lt;b&gt;Optional&lt;/b&gt;. Not provided within SyncComm. Necessary for WCF Compression. See Related Resources above. &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;SyncApp projects&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;SyncComm.Mobile&lt;/b&gt;: This class library (targeted on Windows Mobile 5.0 SDK) contains WCF Service proxy class. It could be used in others projects as is, without additional modifications whether no changes are applied on SyncComm.Service.ISyncService service contract. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;AppMobileSync&lt;/b&gt;: This Windows Form Application consumes the WCF Service through such proxy exposed in SyncComm.Mobile. This application demonstrates how to hand a couple of sync tables in bidirectional and uploadonly modes. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;i&gt;Microsoft.Samples.Indigo.GzipEncoder&lt;/i&gt;&lt;/b&gt;: &lt;b&gt;Optional&lt;/b&gt;. Not provided within SyncComm. Necessary for WCF Compression. See Related Resources above &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Database&lt;/h4&gt;
&lt;p&gt;Database schema used in this project is based on script you would find in &lt;a href="http://msdn.microsoft.com/en-us/library/bb726041.aspx"&gt;Microsoft Sync Framework &amp;ldquo;How to&amp;rsquo;s&amp;rdquo; library&amp;rsquo;s topics&lt;/a&gt;. It only contains a couple of tables for demonstrating bidirectional and uploadonly sync modes. &lt;br /&gt;Note that three database four files are provided within SyncApp.RemoteProvider project. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;database schema.sql&lt;/b&gt;: Creates a database named &lt;span style="text-decoration:underline;"&gt;wcfSyncSamplesDb&lt;/span&gt;, and a couple of tables named &lt;span style="text-decoration:underline;"&gt;Sales.Customer&lt;/span&gt; and &lt;span style="text-decoration:underline;"&gt;Sales.CustomerContact&lt;/span&gt;. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;enablingChangeTracking.sql&lt;/b&gt;: These scripts enable &lt;span style="text-decoration:underline;"&gt;Change Tracking&lt;/span&gt; for wcfSyncSamplesDB database and for Sales.Customer and Sales.CustomerContact with default 2 days retention. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;enablingCustomTracking.sql&lt;/b&gt;: Configures both tables in order to provide a &lt;span style="text-decoration:underline;"&gt;custom change tracking&lt;/span&gt; for non SQL Server 2008 data providers. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;testData.sql&lt;/b&gt;: Populates Sales.Customer and Sales.CustomerContact tables. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;a name="settingup"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Setting up solution&lt;/h3&gt;
&lt;p&gt;For getting started the solution you may follow next steps. &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create database and database objects. Execute database file scripts in the following order. &lt;ol&gt;
&lt;li&gt;Execute database schema.sql for creating database and objects. &lt;/li&gt;
&lt;li&gt;Execute either enablingChangeTracking.sql or enablingCustomTracking.sql depending on what change tracking type your application will run at. &lt;ol&gt;
&lt;li&gt;enablingChangeTracking.sql for SQL Server 2008. &lt;/li&gt;
&lt;li&gt;enablingCustomTracking.sql for others. &lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Populate Sales.Customer after change tracking is enabled by executing testData.sql. &lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Change database connection string on &lt;b&gt;SyncApp.RemoteProvider -&amp;gt; Settings.settings&lt;/b&gt;. (See Image 2) &lt;/li&gt;
&lt;li&gt;Set your local IP/host name in app.config file from SyncComm.Service.Host project. (See &lt;a href="http://synccomm.codeplex.com/Wiki/View.aspx?title=Home&amp;amp;ANCHOR#code1"&gt;Code 1&lt;/a&gt;) &lt;/li&gt;
&lt;li&gt;If you wish to use Compression make sure both client and server related GZipEncoder project are referenced. &lt;/li&gt;
&lt;li&gt;Set ISyncServices base endpoint address up in AppMobileSync project. (See &lt;a href="http://synccomm.codeplex.com/Wiki/View.aspx?title=Home&amp;amp;ANCHOR#code2"&gt;Code 2&lt;/a&gt; Method SyncNow in Form1.cs) &lt;/li&gt;
&lt;li&gt;Recall to cradle your emulator/device and make sure it reaches endpoint address from IEMobile. Configure your Windows Firewall appropriately for enabling incoming calls for specified port. (Default port 9999). This also could be useful &lt;a href="http://msdn.microsoft.com/en-us/library/ms733768.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms733768.aspx&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Execute both SyncComm.Service.Host and AppMobileSync apps. (See Image 4) &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=synccomm&amp;amp;DownloadId=68850" alt="ProjProperties.png" title="ProjProperties.png" /&gt; &lt;br /&gt;&lt;i&gt;Image 2.- Database Connection String&lt;/i&gt; &lt;br /&gt;&lt;a name="code1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;      &amp;lt;service behaviorConfiguration=&amp;quot;ISyncServiceBehavior&amp;quot; name=&amp;quot;SyncComm.Service.SyncService&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;endpoint address=&amp;quot;Basic&amp;quot; binding=&amp;quot;basicHttpBinding&amp;quot; name=&amp;quot;BasicEndPoint&amp;quot;&lt;br /&gt;          contract=&amp;quot;SyncComm.Service.ISyncService&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;endpoint&lt;br /&gt;          address =&amp;quot;/GZip&amp;quot;&lt;br /&gt;          binding=&amp;quot;customBinding&amp;quot;&lt;br /&gt;          bindingConfiguration=&amp;quot;BufferedHttpSampleServer&amp;quot;&lt;br /&gt;          bindingName=&amp;quot;BufferedHttpSampleServer&amp;quot;&lt;br /&gt;          contract=&amp;quot;SyncComm.Service.ISyncService&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;host&amp;gt;&lt;br /&gt;          &amp;lt;baseAddresses&amp;gt;&lt;br /&gt;            &amp;lt;!-- Set here Service Host name/IP --&amp;gt;&lt;br /&gt;            &amp;lt;add baseAddress=&amp;quot;http://10.0.2.15:9999/SyncService&amp;quot; /&amp;gt;&lt;br /&gt;          &amp;lt;/baseAddresses&amp;gt;&lt;br /&gt;        &amp;lt;/host&amp;gt;&lt;br /&gt;      &amp;lt;/service&amp;gt;&lt;br /&gt;    &amp;lt;/services&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;i&gt;Code 1.- app.config file from &lt;b&gt;SyncComm.Service.Host&lt;/b&gt; project.&lt;/i&gt; &lt;br /&gt;&lt;a name="code2"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;// Create a CustomBinding&lt;br /&gt;var customBinding = new CustomBinding();&lt;br /&gt;// Create a compression binding element&lt;br /&gt;var compressionBindingElmnt = new CompressionMessageEncodingBindingElement();&lt;br /&gt;// ..and add to the custom binding&lt;br /&gt;customBinding.Elements.Add(compressionBindingElmnt);&lt;br /&gt;&lt;br /&gt;// Create an HttpTransportBindingElement and add that as well&lt;br /&gt;var httpBindingElement =&lt;br /&gt;     new HttpTransportBindingElement();&lt;br /&gt;customBinding.Elements.Add(httpBindingElement);&lt;br /&gt;// Set WCF Service hosted name/IP endpoint *here*&lt;br /&gt;var endPoint = new EndpointAddress(&amp;quot;http://10.0.2.15:9999/SyncService/GZip&amp;quot;);&lt;/pre&gt;
&lt;p&gt;&lt;i&gt;Code 2.- Method SyncNow in &lt;b&gt;Form1.cs&lt;/b&gt;&lt;/i&gt; &lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=synccomm&amp;amp;DownloadId=71223" alt="ServiceHost.jpg" title="ServiceHost.jpg" /&gt; &lt;br /&gt;&lt;i&gt;Image 4.- Service Host Console Application&lt;/i&gt;&lt;/p&gt;
&lt;h3&gt;Customizing SyncComm components for your own project&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Configure your database appropriately. Take a look at the following link for further information. &lt;a href="http://tracking%20changes%20in%20the%20server%20database/"&gt;http://msdn.microsoft.com/en-us/library/bb726006.aspx&lt;/a&gt; &lt;b&gt;&lt;i&gt;NOTE: Modify &lt;span style="text-decoration:underline;"&gt;usp&lt;/span&gt;GetNewBatchAnchor&lt;/i&gt; Stored Procedure for validating CHANGE_TRACKING_MIN_VALID_VERSION for your own tables._&lt;/b&gt; &lt;/li&gt;
&lt;li&gt;Create your own Remote Sync Provider class (DBRemoteProvider). Keep in mind sync modes you would need to use for each table. You may use AppRemoteProvider class but is strongly recommended using custom Stored Procedures instead of sentences generated by SyncAdapterBuilder class. &lt;/li&gt;
&lt;li&gt;Host SyncService on well-known IP address and pass it on SyncClient class constructor, in the client side. You may use other Service Host platform instead of console app provided by this sample. &lt;/li&gt;
&lt;li&gt;If you need to configure binding behavior take in care WCF limitations for .NET Compact Framework. &lt;/li&gt;
&lt;li&gt;Refer SyncComm.Mobile.dll assembly from your .NET CF application. Configure SyncAgent at your own discretion but don&amp;#39;t forget to set up the tables with the sync modes you configured on server side before. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;br /&gt;&lt;span style="text-decoration:underline;"&gt;&lt;i&gt;&lt;b&gt;IMPORTANT: This sample is provided &amp;quot;as is&amp;quot;, without warranty of any kind, express or implied. Suggestions, comments or whatever are welcomed at Discussion Pane&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=150320" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Sync+Services+for+ADO.NET/default.aspx">Sync Services for ADO.NET</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/.NET+Compact+Framework/default.aspx">.NET Compact Framework</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/CodePlex/default.aspx">CodePlex</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/WCF/default.aspx">WCF</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/SyncComm/default.aspx">SyncComm</category></item><item><title>Must Have Tools para Windows Mobile</title><link>http://geeks.ms/blogs/jmtorres/archive/2009/06/11/must-have-tools-para-windows-mobile.aspx</link><pubDate>Thu, 11 Jun 2009 19:49:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:150369</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=150369</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2009/06/11/must-have-tools-para-windows-mobile.aspx#comments</comments><description>&lt;p&gt;&lt;span class="Normal"&gt;&lt;a href="http://wmugperu.org/blogs/cfong"&gt;Cesar Fong&lt;/a&gt;
est&amp;aacute; recopilando un conjunto de herramientas indispensables para el
desarrollo de aplicaciones para Windows Mobile. Sin duda un excelente
recurso, &lt;strong&gt;&amp;iexcl;&amp;iexcl;Gracias C&amp;eacute;sar!!&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://wmugperu.org/blogs/cfong/archive/2009/06/11/La-lista-del-Windows-Mobile-Developer.aspx"&gt;La lista del Windows Mobile Developer&lt;/a&gt; &lt;/strong&gt;                                        
&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=150369" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/.NET+Compact+Framework/default.aspx">.NET Compact Framework</category></item></channel></rss>